diff --git a/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.backups.postgresql.cnpg.io.g.cs b/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.backups.postgresql.cnpg.io.g.cs
new file mode 100644
index 0000000..b019595
--- /dev/null
+++ b/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.backups.postgresql.cnpg.io.g.cs
@@ -0,0 +1,652 @@
+#nullable enable
+using k8s;
+using k8s.Models;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
+
+namespace KubernetesCRDModelGen.Models.postgresql.cnpg.io;
+/// A Backup resource is a request for a PostgreSQL backup by the user.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+[KubernetesEntity(Group = KubeGroup, Kind = KubeKind, ApiVersion = KubeApiVersion, PluralName = KubePluralName)]
+public partial class V1BackupList : IKubernetesObject, IItems
+{
+ public const string KubeApiVersion = "v1";
+ public const string KubeKind = "BackupList";
+ public const string KubeGroup = "postgresql.cnpg.io";
+ public const string KubePluralName = "backups";
+ /// APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ [JsonPropertyName("apiVersion")]
+ public string ApiVersion { get; set; } = "postgresql.cnpg.io/v1";
+
+ /// Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ [JsonPropertyName("kind")]
+ public string Kind { get; set; } = "BackupList";
+
+ /// ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
+ [JsonPropertyName("metadata")]
+ public V1ListMeta? Metadata { get; set; }
+
+ /// List of V1Backup objects.
+ [JsonPropertyName("items")]
+ public IList? Items { get; set; }
+}
+
+/// The cluster to backup
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupSpecCluster
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// The backup method to be used, possible options are `barmanObjectStore`,
+/// `volumeSnapshot` or `plugin`. Defaults to: `barmanObjectStore`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1BackupSpecMethodEnum
+{
+ [EnumMember(Value = "barmanObjectStore"), JsonStringEnumMemberName("barmanObjectStore")]
+ BarmanObjectStore,
+ [EnumMember(Value = "volumeSnapshot"), JsonStringEnumMemberName("volumeSnapshot")]
+ VolumeSnapshot,
+ [EnumMember(Value = "plugin"), JsonStringEnumMemberName("plugin")]
+ Plugin
+}
+
+///
+/// Configuration parameters to control the online/hot backup with volume snapshots
+/// Overrides the default settings specified in the cluster '.backup.volumeSnapshot.onlineConfiguration' stanza
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupSpecOnlineConfiguration
+{
+ ///
+ /// Control whether the I/O workload for the backup initial checkpoint will
+ /// be limited, according to the `checkpoint_completion_target` setting on
+ /// the PostgreSQL server. If set to true, an immediate checkpoint will be
+ /// used, meaning PostgreSQL will complete the checkpoint as soon as
+ /// possible. `false` by default.
+ ///
+ [JsonPropertyName("immediateCheckpoint")]
+ public bool? ImmediateCheckpoint { get; set; }
+
+ ///
+ /// If false, the function will return immediately after the backup is completed,
+ /// without waiting for WAL to be archived.
+ /// This behavior is only useful with backup software that independently monitors WAL archiving.
+ /// Otherwise, WAL required to make the backup consistent might be missing and make the backup useless.
+ /// By default, or when this parameter is true, pg_backup_stop will wait for WAL to be archived when archiving is
+ /// enabled.
+ /// On a standby, this means that it will wait only when archive_mode = always.
+ /// If write activity on the primary is low, it may be useful to run pg_switch_wal on the primary in order to trigger
+ /// an immediate segment switch.
+ ///
+ [JsonPropertyName("waitForArchive")]
+ public bool? WaitForArchive { get; set; }
+}
+
+/// Configuration parameters passed to the plugin managing this backup
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupSpecPluginConfiguration
+{
+ /// Name is the name of the plugin managing this backup
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Parameters are the configuration parameters passed to the backup
+ /// plugin for this backup
+ ///
+ [JsonPropertyName("parameters")]
+ public IDictionary? Parameters { get; set; }
+}
+
+///
+/// The policy to decide which instance should perform this backup. If empty,
+/// it defaults to `cluster.spec.backup.target`.
+/// Available options are empty string, `primary` and `prefer-standby`.
+/// `primary` to have backups run always on primary instances,
+/// `prefer-standby` to have backups run preferably on the most updated
+/// standby, if available.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1BackupSpecTargetEnum
+{
+ [EnumMember(Value = "primary"), JsonStringEnumMemberName("primary")]
+ Primary,
+ [EnumMember(Value = "prefer-standby"), JsonStringEnumMemberName("prefer-standby")]
+ PreferStandby
+}
+
+///
+/// Specification of the desired behavior of the backup.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupSpec
+{
+ /// The cluster to backup
+ [JsonPropertyName("cluster")]
+ public required V1BackupSpecCluster Cluster { get; set; }
+
+ ///
+ /// The backup method to be used, possible options are `barmanObjectStore`,
+ /// `volumeSnapshot` or `plugin`. Defaults to: `barmanObjectStore`.
+ ///
+ [JsonPropertyName("method")]
+ public V1BackupSpecMethodEnum? Method { get; set; }
+
+ ///
+ /// Whether the default type of backup with volume snapshots is
+ /// online/hot (`true`, default) or offline/cold (`false`)
+ /// Overrides the default setting specified in the cluster field '.spec.backup.volumeSnapshot.online'
+ ///
+ [JsonPropertyName("online")]
+ public bool? Online { get; set; }
+
+ ///
+ /// Configuration parameters to control the online/hot backup with volume snapshots
+ /// Overrides the default settings specified in the cluster '.backup.volumeSnapshot.onlineConfiguration' stanza
+ ///
+ [JsonPropertyName("onlineConfiguration")]
+ public V1BackupSpecOnlineConfiguration? OnlineConfiguration { get; set; }
+
+ /// Configuration parameters passed to the plugin managing this backup
+ [JsonPropertyName("pluginConfiguration")]
+ public V1BackupSpecPluginConfiguration? PluginConfiguration { get; set; }
+
+ ///
+ /// The policy to decide which instance should perform this backup. If empty,
+ /// it defaults to `cluster.spec.backup.target`.
+ /// Available options are empty string, `primary` and `prefer-standby`.
+ /// `primary` to have backups run always on primary instances,
+ /// `prefer-standby` to have backups run preferably on the most updated
+ /// standby, if available.
+ ///
+ [JsonPropertyName("target")]
+ public V1BackupSpecTargetEnum? Target { get; set; }
+}
+
+/// The connection string to be used
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusAzureCredentialsConnectionString
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The storage account where to upload data
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusAzureCredentialsStorageAccount
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// The storage account key to be used in conjunction
+/// with the storage account name
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusAzureCredentialsStorageKey
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// A shared-access-signature to be used in conjunction with
+/// the storage account name
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusAzureCredentialsStorageSasToken
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to Azure Blob Storage
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusAzureCredentials
+{
+ /// The connection string to be used
+ [JsonPropertyName("connectionString")]
+ public V1BackupStatusAzureCredentialsConnectionString? ConnectionString { get; set; }
+
+ /// Use the Azure AD based authentication without providing explicitly the keys.
+ [JsonPropertyName("inheritFromAzureAD")]
+ public bool? InheritFromAzureAD { get; set; }
+
+ /// The storage account where to upload data
+ [JsonPropertyName("storageAccount")]
+ public V1BackupStatusAzureCredentialsStorageAccount? StorageAccount { get; set; }
+
+ ///
+ /// The storage account key to be used in conjunction
+ /// with the storage account name
+ ///
+ [JsonPropertyName("storageKey")]
+ public V1BackupStatusAzureCredentialsStorageKey? StorageKey { get; set; }
+
+ ///
+ /// A shared-access-signature to be used in conjunction with
+ /// the storage account name
+ ///
+ [JsonPropertyName("storageSasToken")]
+ public V1BackupStatusAzureCredentialsStorageSasToken? StorageSasToken { get; set; }
+
+ ///
+ /// Use the default Azure authentication flow, which includes DefaultAzureCredential.
+ /// This allows authentication using environment variables and managed identities.
+ ///
+ [JsonPropertyName("useDefaultAzureCredentials")]
+ public bool? UseDefaultAzureCredentials { get; set; }
+}
+
+///
+/// EndpointCA store the CA bundle of the barman endpoint.
+/// Useful when using self-signed certificates to avoid
+/// errors with certificate issuer and barman-cloud-wal-archive.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusEndpointCA
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The secret containing the Google Cloud Storage JSON file with the credentials
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusGoogleCredentialsApplicationCredentials
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to Google Cloud Storage
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusGoogleCredentials
+{
+ /// The secret containing the Google Cloud Storage JSON file with the credentials
+ [JsonPropertyName("applicationCredentials")]
+ public V1BackupStatusGoogleCredentialsApplicationCredentials? ApplicationCredentials { get; set; }
+
+ ///
+ /// If set to true, will presume that it's running inside a GKE environment,
+ /// default to false.
+ ///
+ [JsonPropertyName("gkeEnvironment")]
+ public bool? GkeEnvironment { get; set; }
+}
+
+/// Information to identify the instance where the backup has been taken from
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusInstanceID
+{
+ /// The container ID
+ [JsonPropertyName("ContainerID")]
+ public string? ContainerID { get; set; }
+
+ /// The pod name
+ [JsonPropertyName("podName")]
+ public string? PodName { get; set; }
+
+ ///
+ /// The instance manager session ID. This is a unique identifier generated at instance manager
+ /// startup and changes on every restart (including container reboots). Used to detect if
+ /// the instance manager was restarted during long-running operations like backups, which
+ /// would terminate any running backup process.
+ ///
+ [JsonPropertyName("sessionID")]
+ public string? SessionID { get; set; }
+}
+
+/// The reference to the access key id
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusS3CredentialsAccessKeyId
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The reference to the secret containing the region name
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusS3CredentialsRegion
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The reference to the secret access key
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusS3CredentialsSecretAccessKey
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The references to the session key
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusS3CredentialsSessionToken
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to S3
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusS3Credentials
+{
+ /// The reference to the access key id
+ [JsonPropertyName("accessKeyId")]
+ public V1BackupStatusS3CredentialsAccessKeyId? AccessKeyId { get; set; }
+
+ /// Use the role based authentication without providing explicitly the keys.
+ [JsonPropertyName("inheritFromIAMRole")]
+ public bool? InheritFromIAMRole { get; set; }
+
+ /// The reference to the secret containing the region name
+ [JsonPropertyName("region")]
+ public V1BackupStatusS3CredentialsRegion? Region { get; set; }
+
+ /// The reference to the secret access key
+ [JsonPropertyName("secretAccessKey")]
+ public V1BackupStatusS3CredentialsSecretAccessKey? SecretAccessKey { get; set; }
+
+ /// The references to the session key
+ [JsonPropertyName("sessionToken")]
+ public V1BackupStatusS3CredentialsSessionToken? SessionToken { get; set; }
+}
+
+/// BackupSnapshotElementStatus is a volume snapshot that is part of a volume snapshot method backup
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusSnapshotBackupStatusElements
+{
+ /// Name is the snapshot resource name
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// TablespaceName is the name of the snapshotted tablespace. Only set
+ /// when type is PG_TABLESPACE
+ ///
+ [JsonPropertyName("tablespaceName")]
+ public string? TablespaceName { get; set; }
+
+ /// Type is tho role of the snapshot in the cluster, such as PG_DATA, PG_WAL and PG_TABLESPACE
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+/// Status of the volumeSnapshot backup
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatusSnapshotBackupStatus
+{
+ /// The elements list, populated with the gathered volume snapshots
+ [JsonPropertyName("elements")]
+ public IList? Elements { get; set; }
+}
+
+///
+/// Most recently observed status of the backup. This data may not be up to
+/// date. Populated by the system. Read-only.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1BackupStatus
+{
+ /// The credentials to use to upload data to Azure Blob Storage
+ [JsonPropertyName("azureCredentials")]
+ public V1BackupStatusAzureCredentials? AzureCredentials { get; set; }
+
+ /// The ID of the Barman backup
+ [JsonPropertyName("backupId")]
+ public string? BackupId { get; set; }
+
+ /// Backup label file content as returned by Postgres in case of online (hot) backups
+ [JsonPropertyName("backupLabelFile")]
+ public byte[]? BackupLabelFile { get; set; }
+
+ /// The Name of the Barman backup
+ [JsonPropertyName("backupName")]
+ public string? BackupName { get; set; }
+
+ /// The starting xlog
+ [JsonPropertyName("beginLSN")]
+ public string? BeginLSN { get; set; }
+
+ /// The starting WAL
+ [JsonPropertyName("beginWal")]
+ public string? BeginWal { get; set; }
+
+ /// The backup command output in case of error
+ [JsonPropertyName("commandError")]
+ public string? CommandError { get; set; }
+
+ /// Unused. Retained for compatibility with old versions.
+ [JsonPropertyName("commandOutput")]
+ public string? CommandOutput { get; set; }
+
+ ///
+ /// The path where to store the backup (i.e. s3://bucket/path/to/folder)
+ /// this path, with different destination folders, will be used for WALs
+ /// and for data. This may not be populated in case of errors.
+ ///
+ [JsonPropertyName("destinationPath")]
+ public string? DestinationPath { get; set; }
+
+ /// Encryption method required to S3 API
+ [JsonPropertyName("encryption")]
+ public string? Encryption { get; set; }
+
+ /// The ending xlog
+ [JsonPropertyName("endLSN")]
+ public string? EndLSN { get; set; }
+
+ /// The ending WAL
+ [JsonPropertyName("endWal")]
+ public string? EndWal { get; set; }
+
+ ///
+ /// EndpointCA store the CA bundle of the barman endpoint.
+ /// Useful when using self-signed certificates to avoid
+ /// errors with certificate issuer and barman-cloud-wal-archive.
+ ///
+ [JsonPropertyName("endpointCA")]
+ public V1BackupStatusEndpointCA? EndpointCA { get; set; }
+
+ ///
+ /// Endpoint to be used to upload data to the cloud,
+ /// overriding the automatic endpoint discovery
+ ///
+ [JsonPropertyName("endpointURL")]
+ public string? EndpointURL { get; set; }
+
+ /// The detected error
+ [JsonPropertyName("error")]
+ public string? Error { get; set; }
+
+ /// The credentials to use to upload data to Google Cloud Storage
+ [JsonPropertyName("googleCredentials")]
+ public V1BackupStatusGoogleCredentials? GoogleCredentials { get; set; }
+
+ /// Information to identify the instance where the backup has been taken from
+ [JsonPropertyName("instanceID")]
+ public V1BackupStatusInstanceID? InstanceID { get; set; }
+
+ ///
+ /// The PostgreSQL major version that was running when the
+ /// backup was taken.
+ ///
+ [JsonPropertyName("majorVersion")]
+ public int? MajorVersion { get; set; }
+
+ /// The backup method being used
+ [JsonPropertyName("method")]
+ public string? Method { get; set; }
+
+ /// Whether the backup was online/hot (`true`) or offline/cold (`false`)
+ [JsonPropertyName("online")]
+ public bool? Online { get; set; }
+
+ /// The last backup status
+ [JsonPropertyName("phase")]
+ public string? Phase { get; set; }
+
+ /// A map containing the plugin metadata
+ [JsonPropertyName("pluginMetadata")]
+ public IDictionary? PluginMetadata { get; set; }
+
+ /// When the backup process was started by the operator
+ [JsonPropertyName("reconciliationStartedAt")]
+ public DateTime? ReconciliationStartedAt { get; set; }
+
+ /// When the reconciliation was terminated by the operator (either successfully or not)
+ [JsonPropertyName("reconciliationTerminatedAt")]
+ public DateTime? ReconciliationTerminatedAt { get; set; }
+
+ /// The credentials to use to upload data to S3
+ [JsonPropertyName("s3Credentials")]
+ public V1BackupStatusS3Credentials? S3Credentials { get; set; }
+
+ ///
+ /// The server name on S3, the cluster name is used if this
+ /// parameter is omitted
+ ///
+ [JsonPropertyName("serverName")]
+ public string? ServerName { get; set; }
+
+ /// Status of the volumeSnapshot backup
+ [JsonPropertyName("snapshotBackupStatus")]
+ public V1BackupStatusSnapshotBackupStatus? SnapshotBackupStatus { get; set; }
+
+ /// When the backup execution was started by the backup tool
+ [JsonPropertyName("startedAt")]
+ public DateTime? StartedAt { get; set; }
+
+ /// When the backup execution was terminated by the backup tool
+ [JsonPropertyName("stoppedAt")]
+ public DateTime? StoppedAt { get; set; }
+
+ /// Tablespace map file content as returned by Postgres in case of online (hot) backups
+ [JsonPropertyName("tablespaceMapFile")]
+ public byte[]? TablespaceMapFile { get; set; }
+}
+
+/// A Backup resource is a request for a PostgreSQL backup by the user.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+[KubernetesEntity(Group = KubeGroup, Kind = KubeKind, ApiVersion = KubeApiVersion, PluralName = KubePluralName)]
+public partial class V1Backup : IKubernetesObject, ISpec, IStatus
+{
+ public const string KubeApiVersion = "v1";
+ public const string KubeKind = "Backup";
+ public const string KubeGroup = "postgresql.cnpg.io";
+ public const string KubePluralName = "backups";
+ /// APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ [JsonPropertyName("apiVersion")]
+ public string ApiVersion { get; set; } = "postgresql.cnpg.io/v1";
+
+ /// Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ [JsonPropertyName("kind")]
+ public string Kind { get; set; } = "Backup";
+
+ /// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ [JsonPropertyName("metadata")]
+ public V1ObjectMeta Metadata { get; set; }
+
+ ///
+ /// Specification of the desired behavior of the backup.
+ /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ ///
+ [JsonPropertyName("spec")]
+ public required V1BackupSpec Spec { get; set; }
+
+ ///
+ /// Most recently observed status of the backup. This data may not be up to
+ /// date. Populated by the system. Read-only.
+ /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ ///
+ [JsonPropertyName("status")]
+ public V1BackupStatus? Status { get; set; }
+}
\ No newline at end of file
diff --git a/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.clusterimagecatalogs.postgresql.cnpg.io.g.cs b/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.clusterimagecatalogs.postgresql.cnpg.io.g.cs
new file mode 100644
index 0000000..7ca3353
--- /dev/null
+++ b/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.clusterimagecatalogs.postgresql.cnpg.io.g.cs
@@ -0,0 +1,206 @@
+#nullable enable
+using k8s;
+using k8s.Models;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
+
+namespace KubernetesCRDModelGen.Models.postgresql.cnpg.io;
+/// ClusterImageCatalog is the Schema for the clusterimagecatalogs API
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+[KubernetesEntity(Group = KubeGroup, Kind = KubeKind, ApiVersion = KubeApiVersion, PluralName = KubePluralName)]
+public partial class V1ClusterImageCatalogList : IKubernetesObject, IItems
+{
+ public const string KubeApiVersion = "v1";
+ public const string KubeKind = "ClusterImageCatalogList";
+ public const string KubeGroup = "postgresql.cnpg.io";
+ public const string KubePluralName = "clusterimagecatalogs";
+ /// APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ [JsonPropertyName("apiVersion")]
+ public string ApiVersion { get; set; } = "postgresql.cnpg.io/v1";
+
+ /// Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ [JsonPropertyName("kind")]
+ public string Kind { get; set; } = "ClusterImageCatalogList";
+
+ /// ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
+ [JsonPropertyName("metadata")]
+ public V1ListMeta? Metadata { get; set; }
+
+ /// List of V1ClusterImageCatalog objects.
+ [JsonPropertyName("items")]
+ public IList? Items { get; set; }
+}
+
+///
+/// ExtensionEnvVar defines an environment variable for a specific extension
+/// image volume.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterImageCatalogSpecImagesExtensionsEnv
+{
+ ///
+ /// Name of the environment variable to be injected into the
+ /// PostgreSQL process.
+ ///
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Value of the environment variable. CloudNativePG performs a direct
+ /// replacement of this value, with support for placeholder expansion.
+ /// The ${`image_root`} placeholder resolves to the absolute mount path
+ /// of the extension's volume (e.g., `/extensions/my-extension`). This
+ /// is particularly useful for allowing applications or libraries to
+ /// locate specific directories within the mounted image.
+ /// Unrecognized placeholders are rejected. To include a literal ${...}
+ /// in the value, escape it as $${...}.
+ ///
+ [JsonPropertyName("value")]
+ public required string Value { get; set; }
+}
+
+/// The image containing the extension.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterImageCatalogSpecImagesExtensionsImage
+{
+ ///
+ /// Policy for pulling OCI objects. Possible values are:
+ /// Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails.
+ /// Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present.
+ /// IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails.
+ /// Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
+ ///
+ [JsonPropertyName("pullPolicy")]
+ public string? PullPolicy { get; set; }
+
+ ///
+ /// Required: Image or artifact reference to be used.
+ /// Behaves in the same way as pod.spec.containers[*].image.
+ /// Pull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets.
+ /// More info: https://kubernetes.io/docs/concepts/containers/images
+ /// This field is optional to allow higher level config management to default or override
+ /// container images in workload controllers like Deployments and StatefulSets.
+ ///
+ [JsonPropertyName("reference")]
+ public string? Reference { get; set; }
+}
+
+///
+/// ExtensionConfiguration is the configuration used to add
+/// PostgreSQL extensions to the Cluster.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterImageCatalogSpecImagesExtensions
+{
+ ///
+ /// A list of directories within the image to be appended to the
+ /// PostgreSQL process's `PATH` environment variable.
+ ///
+ [JsonPropertyName("bin_path")]
+ public IList? BinPath { get; set; }
+
+ ///
+ /// The list of directories inside the image which should be added to dynamic_library_path.
+ /// If not defined, defaults to "/lib".
+ ///
+ [JsonPropertyName("dynamic_library_path")]
+ public IList? DynamicLibraryPath { get; set; }
+
+ ///
+ /// Env is a list of custom environment variables to be set in the
+ /// PostgreSQL process for this extension. It is the responsibility of the
+ /// cluster administrator to ensure the variables are correct for the
+ /// specific extension. Note that changes to these variables require
+ /// a manual cluster restart to take effect.
+ ///
+ [JsonPropertyName("env")]
+ public IList? Env { get; set; }
+
+ ///
+ /// The list of directories inside the image which should be added to extension_control_path.
+ /// If not defined, defaults to "/share".
+ ///
+ [JsonPropertyName("extension_control_path")]
+ public IList? ExtensionControlPath { get; set; }
+
+ /// The image containing the extension.
+ [JsonPropertyName("image")]
+ public V1ClusterImageCatalogSpecImagesExtensionsImage? Image { get; set; }
+
+ /// The list of directories inside the image which should be added to ld_library_path.
+ [JsonPropertyName("ld_library_path")]
+ public IList? LdLibraryPath { get; set; }
+
+ /// The name of the extension, required
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// CatalogImage defines the image and major version
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterImageCatalogSpecImages
+{
+ /// The configuration of the extensions to be added
+ [JsonPropertyName("extensions")]
+ public IList? Extensions { get; set; }
+
+ /// The image reference
+ [JsonPropertyName("image")]
+ public required string Image { get; set; }
+
+ /// The PostgreSQL major version of the image. Must be unique within the catalog.
+ [JsonPropertyName("major")]
+ public required int Major { get; set; }
+}
+
+///
+/// Specification of the desired behavior of the ClusterImageCatalog.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterImageCatalogSpec
+{
+ /// List of CatalogImages available in the catalog
+ [JsonPropertyName("images")]
+ public required IList Images { get; set; }
+}
+
+/// ClusterImageCatalog is the Schema for the clusterimagecatalogs API
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+[KubernetesEntity(Group = KubeGroup, Kind = KubeKind, ApiVersion = KubeApiVersion, PluralName = KubePluralName)]
+public partial class V1ClusterImageCatalog : IKubernetesObject, ISpec
+{
+ public const string KubeApiVersion = "v1";
+ public const string KubeKind = "ClusterImageCatalog";
+ public const string KubeGroup = "postgresql.cnpg.io";
+ public const string KubePluralName = "clusterimagecatalogs";
+ /// APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ [JsonPropertyName("apiVersion")]
+ public string ApiVersion { get; set; } = "postgresql.cnpg.io/v1";
+
+ /// Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ [JsonPropertyName("kind")]
+ public string Kind { get; set; } = "ClusterImageCatalog";
+
+ /// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ [JsonPropertyName("metadata")]
+ public V1ObjectMeta Metadata { get; set; }
+
+ ///
+ /// Specification of the desired behavior of the ClusterImageCatalog.
+ /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ ///
+ [JsonPropertyName("spec")]
+ public required V1ClusterImageCatalogSpec Spec { get; set; }
+}
\ No newline at end of file
diff --git a/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.clusters.postgresql.cnpg.io.g.cs b/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.clusters.postgresql.cnpg.io.g.cs
new file mode 100644
index 0000000..51ac3b8
--- /dev/null
+++ b/Generated/KubernetesCRDModelGen.SourceGenerator/KubernetesCRDModelGen.SourceGenerator.SourceGenerator/v1.clusters.postgresql.cnpg.io.g.cs
@@ -0,0 +1,9683 @@
+#nullable enable
+using k8s;
+using k8s.Models;
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
+
+namespace KubernetesCRDModelGen.Models.postgresql.cnpg.io;
+///
+/// Cluster defines the API schema for a highly available PostgreSQL database cluster
+/// managed by CloudNativePG.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+[KubernetesEntity(Group = KubeGroup, Kind = KubeKind, ApiVersion = KubeApiVersion, PluralName = KubePluralName)]
+public partial class V1ClusterList : IKubernetesObject, IItems
+{
+ public const string KubeApiVersion = "v1";
+ public const string KubeKind = "ClusterList";
+ public const string KubeGroup = "postgresql.cnpg.io";
+ public const string KubePluralName = "clusters";
+ /// APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ [JsonPropertyName("apiVersion")]
+ public string ApiVersion { get; set; } = "postgresql.cnpg.io/v1";
+
+ /// Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ [JsonPropertyName("kind")]
+ public string Kind { get; set; } = "ClusterList";
+
+ /// ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
+ [JsonPropertyName("metadata")]
+ public V1ListMeta? Metadata { get; set; }
+
+ /// List of V1Cluster objects.
+ [JsonPropertyName("items")]
+ public IList? Items { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over a set of resources, in this case pods.
+/// If it's null, this PodAffinityTerm matches with no Pods.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over the set of namespaces that the term applies to.
+/// The term is applied to the union of the namespaces selected by this field
+/// and the ones listed in the namespaces field.
+/// null selector and null or empty namespaces list means "this pod's namespace".
+/// An empty selector ({}) matches all namespaces.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+/// Required. A pod affinity term, associated with the corresponding weight.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm
+{
+ ///
+ /// A label query over a set of resources, in this case pods.
+ /// If it's null, this PodAffinityTerm matches with no Pods.
+ ///
+ [JsonPropertyName("labelSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector? LabelSelector { get; set; }
+
+ ///
+ /// MatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
+ /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("matchLabelKeys")]
+ public IList? MatchLabelKeys { get; set; }
+
+ ///
+ /// MismatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
+ /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("mismatchLabelKeys")]
+ public IList? MismatchLabelKeys { get; set; }
+
+ ///
+ /// A label query over the set of namespaces that the term applies to.
+ /// The term is applied to the union of the namespaces selected by this field
+ /// and the ones listed in the namespaces field.
+ /// null selector and null or empty namespaces list means "this pod's namespace".
+ /// An empty selector ({}) matches all namespaces.
+ ///
+ [JsonPropertyName("namespaceSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector? NamespaceSelector { get; set; }
+
+ ///
+ /// namespaces specifies a static list of namespace names that the term applies to.
+ /// The term is applied to the union of the namespaces listed in this field
+ /// and the ones selected by namespaceSelector.
+ /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ ///
+ [JsonPropertyName("namespaces")]
+ public IList? Namespaces { get; set; }
+
+ ///
+ /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ /// whose value of the label with key topologyKey matches that of any node on which any of the
+ /// selected pods is running.
+ /// Empty topologyKey is not allowed.
+ ///
+ [JsonPropertyName("topologyKey")]
+ public required string TopologyKey { get; set; }
+}
+
+/// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecution
+{
+ /// Required. A pod affinity term, associated with the corresponding weight.
+ [JsonPropertyName("podAffinityTerm")]
+ public required V1ClusterSpecAffinityAdditionalPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm PodAffinityTerm { get; set; }
+
+ ///
+ /// weight associated with matching the corresponding podAffinityTerm,
+ /// in the range 1-100.
+ ///
+ [JsonPropertyName("weight")]
+ public required int Weight { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over a set of resources, in this case pods.
+/// If it's null, this PodAffinityTerm matches with no Pods.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over the set of namespaces that the term applies to.
+/// The term is applied to the union of the namespaces selected by this field
+/// and the ones listed in the namespaces field.
+/// null selector and null or empty namespaces list means "this pod's namespace".
+/// An empty selector ({}) matches all namespaces.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// Defines a set of pods (namely those matching the labelSelector
+/// relative to the given namespace(s)) that this pod should be
+/// co-located (affinity) or not co-located (anti-affinity) with,
+/// where co-located is defined as running on a node whose value of
+/// the label with key <topologyKey> matches that of any node on which
+/// a pod of the set of pods is running
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecution
+{
+ ///
+ /// A label query over a set of resources, in this case pods.
+ /// If it's null, this PodAffinityTerm matches with no Pods.
+ ///
+ [JsonPropertyName("labelSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector? LabelSelector { get; set; }
+
+ ///
+ /// MatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
+ /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("matchLabelKeys")]
+ public IList? MatchLabelKeys { get; set; }
+
+ ///
+ /// MismatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
+ /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("mismatchLabelKeys")]
+ public IList? MismatchLabelKeys { get; set; }
+
+ ///
+ /// A label query over the set of namespaces that the term applies to.
+ /// The term is applied to the union of the namespaces selected by this field
+ /// and the ones listed in the namespaces field.
+ /// null selector and null or empty namespaces list means "this pod's namespace".
+ /// An empty selector ({}) matches all namespaces.
+ ///
+ [JsonPropertyName("namespaceSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector? NamespaceSelector { get; set; }
+
+ ///
+ /// namespaces specifies a static list of namespace names that the term applies to.
+ /// The term is applied to the union of the namespaces listed in this field
+ /// and the ones selected by namespaceSelector.
+ /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ ///
+ [JsonPropertyName("namespaces")]
+ public IList? Namespaces { get; set; }
+
+ ///
+ /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ /// whose value of the label with key topologyKey matches that of any node on which any of the
+ /// selected pods is running.
+ /// Empty topologyKey is not allowed.
+ ///
+ [JsonPropertyName("topologyKey")]
+ public required string TopologyKey { get; set; }
+}
+
+/// AdditionalPodAffinity allows to specify pod affinity terms to be passed to all the cluster's pods.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAffinity
+{
+ ///
+ /// The scheduler will prefer to schedule pods to nodes that satisfy
+ /// the affinity expressions specified by this field, but it may choose
+ /// a node that violates one or more of the expressions. The node that is
+ /// most preferred is the one with the greatest sum of weights, i.e.
+ /// for each node that meets all of the scheduling requirements (resource
+ /// request, requiredDuringScheduling affinity expressions, etc.),
+ /// compute a sum by iterating through the elements of this field and adding
+ /// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
+ /// node(s) with the highest sum are the most preferred.
+ ///
+ [JsonPropertyName("preferredDuringSchedulingIgnoredDuringExecution")]
+ public IList? PreferredDuringSchedulingIgnoredDuringExecution { get; set; }
+
+ ///
+ /// If the affinity requirements specified by this field are not met at
+ /// scheduling time, the pod will not be scheduled onto the node.
+ /// If the affinity requirements specified by this field cease to be met
+ /// at some point during pod execution (e.g. due to a pod label update), the
+ /// system may or may not try to eventually evict the pod from its node.
+ /// When there are multiple elements, the lists of nodes corresponding to each
+ /// podAffinityTerm are intersected, i.e. all terms must be satisfied.
+ ///
+ [JsonPropertyName("requiredDuringSchedulingIgnoredDuringExecution")]
+ public IList? RequiredDuringSchedulingIgnoredDuringExecution { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over a set of resources, in this case pods.
+/// If it's null, this PodAffinityTerm matches with no Pods.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over the set of namespaces that the term applies to.
+/// The term is applied to the union of the namespaces selected by this field
+/// and the ones listed in the namespaces field.
+/// null selector and null or empty namespaces list means "this pod's namespace".
+/// An empty selector ({}) matches all namespaces.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+/// Required. A pod affinity term, associated with the corresponding weight.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm
+{
+ ///
+ /// A label query over a set of resources, in this case pods.
+ /// If it's null, this PodAffinityTerm matches with no Pods.
+ ///
+ [JsonPropertyName("labelSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector? LabelSelector { get; set; }
+
+ ///
+ /// MatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
+ /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("matchLabelKeys")]
+ public IList? MatchLabelKeys { get; set; }
+
+ ///
+ /// MismatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
+ /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("mismatchLabelKeys")]
+ public IList? MismatchLabelKeys { get; set; }
+
+ ///
+ /// A label query over the set of namespaces that the term applies to.
+ /// The term is applied to the union of the namespaces selected by this field
+ /// and the ones listed in the namespaces field.
+ /// null selector and null or empty namespaces list means "this pod's namespace".
+ /// An empty selector ({}) matches all namespaces.
+ ///
+ [JsonPropertyName("namespaceSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector? NamespaceSelector { get; set; }
+
+ ///
+ /// namespaces specifies a static list of namespace names that the term applies to.
+ /// The term is applied to the union of the namespaces listed in this field
+ /// and the ones selected by namespaceSelector.
+ /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ ///
+ [JsonPropertyName("namespaces")]
+ public IList? Namespaces { get; set; }
+
+ ///
+ /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ /// whose value of the label with key topologyKey matches that of any node on which any of the
+ /// selected pods is running.
+ /// Empty topologyKey is not allowed.
+ ///
+ [JsonPropertyName("topologyKey")]
+ public required string TopologyKey { get; set; }
+}
+
+/// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution
+{
+ /// Required. A pod affinity term, associated with the corresponding weight.
+ [JsonPropertyName("podAffinityTerm")]
+ public required V1ClusterSpecAffinityAdditionalPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm PodAffinityTerm { get; set; }
+
+ ///
+ /// weight associated with matching the corresponding podAffinityTerm,
+ /// in the range 1-100.
+ ///
+ [JsonPropertyName("weight")]
+ public required int Weight { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over a set of resources, in this case pods.
+/// If it's null, this PodAffinityTerm matches with no Pods.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A label query over the set of namespaces that the term applies to.
+/// The term is applied to the union of the namespaces selected by this field
+/// and the ones listed in the namespaces field.
+/// null selector and null or empty namespaces list means "this pod's namespace".
+/// An empty selector ({}) matches all namespaces.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// Defines a set of pods (namely those matching the labelSelector
+/// relative to the given namespace(s)) that this pod should be
+/// co-located (affinity) or not co-located (anti-affinity) with,
+/// where co-located is defined as running on a node whose value of
+/// the label with key <topologyKey> matches that of any node on which
+/// a pod of the set of pods is running
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution
+{
+ ///
+ /// A label query over a set of resources, in this case pods.
+ /// If it's null, this PodAffinityTerm matches with no Pods.
+ ///
+ [JsonPropertyName("labelSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector? LabelSelector { get; set; }
+
+ ///
+ /// MatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
+ /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("matchLabelKeys")]
+ public IList? MatchLabelKeys { get; set; }
+
+ ///
+ /// MismatchLabelKeys is a set of pod label keys to select which pods will
+ /// be taken into consideration. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
+ /// to select the group of existing pods which pods will be taken into consideration
+ /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
+ /// pod labels will be ignored. The default value is empty.
+ /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
+ /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
+ ///
+ [JsonPropertyName("mismatchLabelKeys")]
+ public IList? MismatchLabelKeys { get; set; }
+
+ ///
+ /// A label query over the set of namespaces that the term applies to.
+ /// The term is applied to the union of the namespaces selected by this field
+ /// and the ones listed in the namespaces field.
+ /// null selector and null or empty namespaces list means "this pod's namespace".
+ /// An empty selector ({}) matches all namespaces.
+ ///
+ [JsonPropertyName("namespaceSelector")]
+ public V1ClusterSpecAffinityAdditionalPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector? NamespaceSelector { get; set; }
+
+ ///
+ /// namespaces specifies a static list of namespace names that the term applies to.
+ /// The term is applied to the union of the namespaces listed in this field
+ /// and the ones selected by namespaceSelector.
+ /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
+ ///
+ [JsonPropertyName("namespaces")]
+ public IList? Namespaces { get; set; }
+
+ ///
+ /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
+ /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
+ /// whose value of the label with key topologyKey matches that of any node on which any of the
+ /// selected pods is running.
+ /// Empty topologyKey is not allowed.
+ ///
+ [JsonPropertyName("topologyKey")]
+ public required string TopologyKey { get; set; }
+}
+
+///
+/// AdditionalPodAntiAffinity allows to specify pod anti-affinity terms to be added to the ones generated
+/// by the operator if EnablePodAntiAffinity is set to true (default) or to be used exclusively if set to false.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityAdditionalPodAntiAffinity
+{
+ ///
+ /// The scheduler will prefer to schedule pods to nodes that satisfy
+ /// the anti-affinity expressions specified by this field, but it may choose
+ /// a node that violates one or more of the expressions. The node that is
+ /// most preferred is the one with the greatest sum of weights, i.e.
+ /// for each node that meets all of the scheduling requirements (resource
+ /// request, requiredDuringScheduling anti-affinity expressions, etc.),
+ /// compute a sum by iterating through the elements of this field and subtracting
+ /// "weight" from the sum if the node has pods which matches the corresponding podAffinityTerm; the
+ /// node(s) with the highest sum are the most preferred.
+ ///
+ [JsonPropertyName("preferredDuringSchedulingIgnoredDuringExecution")]
+ public IList? PreferredDuringSchedulingIgnoredDuringExecution { get; set; }
+
+ ///
+ /// If the anti-affinity requirements specified by this field are not met at
+ /// scheduling time, the pod will not be scheduled onto the node.
+ /// If the anti-affinity requirements specified by this field cease to be met
+ /// at some point during pod execution (e.g. due to a pod label update), the
+ /// system may or may not try to eventually evict the pod from its node.
+ /// When there are multiple elements, the lists of nodes corresponding to each
+ /// podAffinityTerm are intersected, i.e. all terms must be satisfied.
+ ///
+ [JsonPropertyName("requiredDuringSchedulingIgnoredDuringExecution")]
+ public IList? RequiredDuringSchedulingIgnoredDuringExecution { get; set; }
+}
+
+///
+/// A node selector requirement is a selector that contains values, a key, and an operator
+/// that relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions
+{
+ /// The label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// An array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. If the operator is Gt or Lt, the values
+ /// array must have a single element, which will be interpreted as an integer.
+ /// This array is replaced during a strategic merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A node selector requirement is a selector that contains values, a key, and an operator
+/// that relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields
+{
+ /// The label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// An array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. If the operator is Gt or Lt, the values
+ /// array must have a single element, which will be interpreted as an integer.
+ /// This array is replaced during a strategic merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+/// A node selector term, associated with the corresponding weight.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference
+{
+ /// A list of node selector requirements by node's labels.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ /// A list of node selector requirements by node's fields.
+ [JsonPropertyName("matchFields")]
+ public IList? MatchFields { get; set; }
+}
+
+///
+/// An empty preferred scheduling term matches all objects with implicit weight 0
+/// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution
+{
+ /// A node selector term, associated with the corresponding weight.
+ [JsonPropertyName("preference")]
+ public required V1ClusterSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference Preference { get; set; }
+
+ /// Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
+ [JsonPropertyName("weight")]
+ public required int Weight { get; set; }
+}
+
+///
+/// A node selector requirement is a selector that contains values, a key, and an operator
+/// that relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions
+{
+ /// The label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// An array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. If the operator is Gt or Lt, the values
+ /// array must have a single element, which will be interpreted as an integer.
+ /// This array is replaced during a strategic merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A node selector requirement is a selector that contains values, a key, and an operator
+/// that relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields
+{
+ /// The label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// An array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. If the operator is Gt or Lt, the values
+ /// array must have a single element, which will be interpreted as an integer.
+ /// This array is replaced during a strategic merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// A null or empty node selector term matches no objects. The requirements of
+/// them are ANDed.
+/// The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms
+{
+ /// A list of node selector requirements by node's labels.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ /// A list of node selector requirements by node's fields.
+ [JsonPropertyName("matchFields")]
+ public IList? MatchFields { get; set; }
+}
+
+///
+/// If the affinity requirements specified by this field are not met at
+/// scheduling time, the pod will not be scheduled onto the node.
+/// If the affinity requirements specified by this field cease to be met
+/// at some point during pod execution (e.g. due to an update), the system
+/// may or may not try to eventually evict the pod from its node.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution
+{
+ /// Required. A list of node selector terms. The terms are ORed.
+ [JsonPropertyName("nodeSelectorTerms")]
+ public required IList NodeSelectorTerms { get; set; }
+}
+
+///
+/// NodeAffinity describes node affinity scheduling rules for the pod.
+/// More info: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityNodeAffinity
+{
+ ///
+ /// The scheduler will prefer to schedule pods to nodes that satisfy
+ /// the affinity expressions specified by this field, but it may choose
+ /// a node that violates one or more of the expressions. The node that is
+ /// most preferred is the one with the greatest sum of weights, i.e.
+ /// for each node that meets all of the scheduling requirements (resource
+ /// request, requiredDuringScheduling affinity expressions, etc.),
+ /// compute a sum by iterating through the elements of this field and adding
+ /// "weight" to the sum if the node matches the corresponding matchExpressions; the
+ /// node(s) with the highest sum are the most preferred.
+ ///
+ [JsonPropertyName("preferredDuringSchedulingIgnoredDuringExecution")]
+ public IList? PreferredDuringSchedulingIgnoredDuringExecution { get; set; }
+
+ ///
+ /// If the affinity requirements specified by this field are not met at
+ /// scheduling time, the pod will not be scheduled onto the node.
+ /// If the affinity requirements specified by this field cease to be met
+ /// at some point during pod execution (e.g. due to an update), the system
+ /// may or may not try to eventually evict the pod from its node.
+ ///
+ [JsonPropertyName("requiredDuringSchedulingIgnoredDuringExecution")]
+ public V1ClusterSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution? RequiredDuringSchedulingIgnoredDuringExecution { get; set; }
+}
+
+///
+/// The pod this Toleration is attached to tolerates any taint that matches
+/// the triple <key,value,effect> using the matching operator <operator>.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinityTolerations
+{
+ ///
+ /// Effect indicates the taint effect to match. Empty means match all taint effects.
+ /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
+ ///
+ [JsonPropertyName("effect")]
+ public string? Effect { get; set; }
+
+ ///
+ /// Key is the taint key that the toleration applies to. Empty means match all taint keys.
+ /// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
+ ///
+ [JsonPropertyName("key")]
+ public string? Key { get; set; }
+
+ ///
+ /// Operator represents a key's relationship to the value.
+ /// Valid operators are Exists, Equal, Lt, and Gt. Defaults to Equal.
+ /// Exists is equivalent to wildcard for value, so that a pod can
+ /// tolerate all taints of a particular category.
+ /// Lt and Gt perform numeric comparisons (requires feature gate TaintTolerationComparisonOperators).
+ ///
+ [JsonPropertyName("operator")]
+ public string? Operator { get; set; }
+
+ ///
+ /// TolerationSeconds represents the period of time the toleration (which must be
+ /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
+ /// it is not set, which means tolerate the taint forever (do not evict). Zero and
+ /// negative values will be treated as 0 (evict immediately) by the system.
+ ///
+ [JsonPropertyName("tolerationSeconds")]
+ public long? TolerationSeconds { get; set; }
+
+ ///
+ /// Value is the taint value the toleration matches to.
+ /// If the operator is Exists, the value should be empty, otherwise just a regular string.
+ ///
+ [JsonPropertyName("value")]
+ public string? Value { get; set; }
+}
+
+/// Affinity/Anti-affinity rules for Pods
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecAffinity
+{
+ /// AdditionalPodAffinity allows to specify pod affinity terms to be passed to all the cluster's pods.
+ [JsonPropertyName("additionalPodAffinity")]
+ public V1ClusterSpecAffinityAdditionalPodAffinity? AdditionalPodAffinity { get; set; }
+
+ ///
+ /// AdditionalPodAntiAffinity allows to specify pod anti-affinity terms to be added to the ones generated
+ /// by the operator if EnablePodAntiAffinity is set to true (default) or to be used exclusively if set to false.
+ ///
+ [JsonPropertyName("additionalPodAntiAffinity")]
+ public V1ClusterSpecAffinityAdditionalPodAntiAffinity? AdditionalPodAntiAffinity { get; set; }
+
+ ///
+ /// Activates anti-affinity for the pods. The operator will define pods
+ /// anti-affinity unless this field is explicitly set to false
+ ///
+ [JsonPropertyName("enablePodAntiAffinity")]
+ public bool? EnablePodAntiAffinity { get; set; }
+
+ ///
+ /// NodeAffinity describes node affinity scheduling rules for the pod.
+ /// More info: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity
+ ///
+ [JsonPropertyName("nodeAffinity")]
+ public V1ClusterSpecAffinityNodeAffinity? NodeAffinity { get; set; }
+
+ ///
+ /// NodeSelector is map of key-value pairs used to define the nodes on which
+ /// the pods can run.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+ ///
+ [JsonPropertyName("nodeSelector")]
+ public IDictionary? NodeSelector { get; set; }
+
+ ///
+ /// PodAntiAffinityType allows the user to decide whether pod anti-affinity between cluster instance has to be
+ /// considered a strong requirement during scheduling or not. Allowed values are: "preferred" (default if empty) or
+ /// "required". Setting it to "required", could lead to instances remaining pending until new kubernetes nodes are
+ /// added if all the existing nodes don't match the required pod anti-affinity rule.
+ /// More info:
+ /// https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity
+ ///
+ [JsonPropertyName("podAntiAffinityType")]
+ public string? PodAntiAffinityType { get; set; }
+
+ ///
+ /// Tolerations is a list of Tolerations that should be set for all the pods, in order to allow them to run
+ /// on tainted nodes.
+ /// More info: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
+ ///
+ [JsonPropertyName("tolerations")]
+ public IList? Tolerations { get; set; }
+
+ ///
+ /// TopologyKey to use for anti-affinity configuration. See k8s documentation
+ /// for more info on that
+ ///
+ [JsonPropertyName("topologyKey")]
+ public string? TopologyKey { get; set; }
+}
+
+/// The connection string to be used
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsConnectionString
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The storage account where to upload data
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsStorageAccount
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// The storage account key to be used in conjunction
+/// with the storage account name
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsStorageKey
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// A shared-access-signature to be used in conjunction with
+/// the storage account name
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsStorageSasToken
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to Azure Blob Storage
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreAzureCredentials
+{
+ /// The connection string to be used
+ [JsonPropertyName("connectionString")]
+ public V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsConnectionString? ConnectionString { get; set; }
+
+ /// Use the Azure AD based authentication without providing explicitly the keys.
+ [JsonPropertyName("inheritFromAzureAD")]
+ public bool? InheritFromAzureAD { get; set; }
+
+ /// The storage account where to upload data
+ [JsonPropertyName("storageAccount")]
+ public V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsStorageAccount? StorageAccount { get; set; }
+
+ ///
+ /// The storage account key to be used in conjunction
+ /// with the storage account name
+ ///
+ [JsonPropertyName("storageKey")]
+ public V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsStorageKey? StorageKey { get; set; }
+
+ ///
+ /// A shared-access-signature to be used in conjunction with
+ /// the storage account name
+ ///
+ [JsonPropertyName("storageSasToken")]
+ public V1ClusterSpecBackupBarmanObjectStoreAzureCredentialsStorageSasToken? StorageSasToken { get; set; }
+
+ ///
+ /// Use the default Azure authentication flow, which includes DefaultAzureCredential.
+ /// This allows authentication using environment variables and managed identities.
+ ///
+ [JsonPropertyName("useDefaultAzureCredentials")]
+ public bool? UseDefaultAzureCredentials { get; set; }
+}
+
+///
+/// Compress a backup file (a tar file per tablespace) while streaming it
+/// to the object store. Available options are empty string (no
+/// compression, default), `gzip`, `bzip2`, and `snappy`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBackupBarmanObjectStoreDataCompressionEnum
+{
+ [EnumMember(Value = "bzip2"), JsonStringEnumMemberName("bzip2")]
+ Bzip2,
+ [EnumMember(Value = "gzip"), JsonStringEnumMemberName("gzip")]
+ Gzip,
+ [EnumMember(Value = "snappy"), JsonStringEnumMemberName("snappy")]
+ Snappy
+}
+
+///
+/// Whenever to force the encryption of files (if the bucket is
+/// not already configured for that).
+/// Allowed options are empty string (use the bucket policy, default),
+/// `AES256` and `aws:kms`
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBackupBarmanObjectStoreDataEncryptionEnum
+{
+ [EnumMember(Value = "AES256"), JsonStringEnumMemberName("AES256")]
+ AES256,
+ [EnumMember(Value = "aws:kms"), JsonStringEnumMemberName("aws:kms")]
+ AwsKms
+}
+
+///
+/// The configuration to be used to backup the data files
+/// When not defined, base backups files will be stored uncompressed and may
+/// be unencrypted in the object store, according to the bucket default
+/// policy.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreData
+{
+ ///
+ /// AdditionalCommandArgs represents additional arguments that can be appended
+ /// to the 'barman-cloud-backup' command-line invocation. These arguments
+ /// provide flexibility to customize the backup process further according to
+ /// specific requirements or configurations.
+ ///
+ /// Example:
+ /// In a scenario where specialized backup options are required, such as setting
+ /// a specific timeout or defining custom behavior, users can use this field
+ /// to specify additional command arguments.
+ ///
+ /// Note:
+ /// It's essential to ensure that the provided arguments are valid and supported
+ /// by the 'barman-cloud-backup' command, to avoid potential errors or unintended
+ /// behavior during execution.
+ ///
+ [JsonPropertyName("additionalCommandArgs")]
+ public IList? AdditionalCommandArgs { get; set; }
+
+ ///
+ /// Compress a backup file (a tar file per tablespace) while streaming it
+ /// to the object store. Available options are empty string (no
+ /// compression, default), `gzip`, `bzip2`, and `snappy`.
+ ///
+ [JsonPropertyName("compression")]
+ public V1ClusterSpecBackupBarmanObjectStoreDataCompressionEnum? Compression { get; set; }
+
+ ///
+ /// Whenever to force the encryption of files (if the bucket is
+ /// not already configured for that).
+ /// Allowed options are empty string (use the bucket policy, default),
+ /// `AES256` and `aws:kms`
+ ///
+ [JsonPropertyName("encryption")]
+ public V1ClusterSpecBackupBarmanObjectStoreDataEncryptionEnum? Encryption { get; set; }
+
+ ///
+ /// Control whether the I/O workload for the backup initial checkpoint will
+ /// be limited, according to the `checkpoint_completion_target` setting on
+ /// the PostgreSQL server. If set to true, an immediate checkpoint will be
+ /// used, meaning PostgreSQL will complete the checkpoint as soon as
+ /// possible. `false` by default.
+ ///
+ [JsonPropertyName("immediateCheckpoint")]
+ public bool? ImmediateCheckpoint { get; set; }
+
+ ///
+ /// The number of parallel jobs to be used to upload the backup, defaults
+ /// to 2
+ ///
+ [JsonPropertyName("jobs")]
+ public int? Jobs { get; set; }
+}
+
+///
+/// EndpointCA store the CA bundle of the barman endpoint.
+/// Useful when using self-signed certificates to avoid
+/// errors with certificate issuer and barman-cloud-wal-archive
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreEndpointCA
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The secret containing the Google Cloud Storage JSON file with the credentials
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreGoogleCredentialsApplicationCredentials
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to Google Cloud Storage
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreGoogleCredentials
+{
+ /// The secret containing the Google Cloud Storage JSON file with the credentials
+ [JsonPropertyName("applicationCredentials")]
+ public V1ClusterSpecBackupBarmanObjectStoreGoogleCredentialsApplicationCredentials? ApplicationCredentials { get; set; }
+
+ ///
+ /// If set to true, will presume that it's running inside a GKE environment,
+ /// default to false.
+ ///
+ [JsonPropertyName("gkeEnvironment")]
+ public bool? GkeEnvironment { get; set; }
+}
+
+/// The reference to the access key id
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreS3CredentialsAccessKeyId
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The reference to the secret containing the region name
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreS3CredentialsRegion
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The reference to the secret access key
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreS3CredentialsSecretAccessKey
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The references to the session key
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreS3CredentialsSessionToken
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to S3
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreS3Credentials
+{
+ /// The reference to the access key id
+ [JsonPropertyName("accessKeyId")]
+ public V1ClusterSpecBackupBarmanObjectStoreS3CredentialsAccessKeyId? AccessKeyId { get; set; }
+
+ /// Use the role based authentication without providing explicitly the keys.
+ [JsonPropertyName("inheritFromIAMRole")]
+ public bool? InheritFromIAMRole { get; set; }
+
+ /// The reference to the secret containing the region name
+ [JsonPropertyName("region")]
+ public V1ClusterSpecBackupBarmanObjectStoreS3CredentialsRegion? Region { get; set; }
+
+ /// The reference to the secret access key
+ [JsonPropertyName("secretAccessKey")]
+ public V1ClusterSpecBackupBarmanObjectStoreS3CredentialsSecretAccessKey? SecretAccessKey { get; set; }
+
+ /// The references to the session key
+ [JsonPropertyName("sessionToken")]
+ public V1ClusterSpecBackupBarmanObjectStoreS3CredentialsSessionToken? SessionToken { get; set; }
+}
+
+///
+/// Compress a WAL file before sending it to the object store. Available
+/// options are empty string (no compression, default), `gzip`, `bzip2`,
+/// `lz4`, `snappy`, `xz`, and `zstd`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBackupBarmanObjectStoreWalCompressionEnum
+{
+ [EnumMember(Value = "bzip2"), JsonStringEnumMemberName("bzip2")]
+ Bzip2,
+ [EnumMember(Value = "gzip"), JsonStringEnumMemberName("gzip")]
+ Gzip,
+ [EnumMember(Value = "lz4"), JsonStringEnumMemberName("lz4")]
+ Lz4,
+ [EnumMember(Value = "snappy"), JsonStringEnumMemberName("snappy")]
+ Snappy,
+ [EnumMember(Value = "xz"), JsonStringEnumMemberName("xz")]
+ Xz,
+ [EnumMember(Value = "zstd"), JsonStringEnumMemberName("zstd")]
+ Zstd
+}
+
+///
+/// Whenever to force the encryption of files (if the bucket is
+/// not already configured for that).
+/// Allowed options are empty string (use the bucket policy, default),
+/// `AES256` and `aws:kms`
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBackupBarmanObjectStoreWalEncryptionEnum
+{
+ [EnumMember(Value = "AES256"), JsonStringEnumMemberName("AES256")]
+ AES256,
+ [EnumMember(Value = "aws:kms"), JsonStringEnumMemberName("aws:kms")]
+ AwsKms
+}
+
+///
+/// The configuration for the backup of the WAL stream.
+/// When not defined, WAL files will be stored uncompressed and may be
+/// unencrypted in the object store, according to the bucket default policy.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStoreWal
+{
+ ///
+ /// Additional arguments that can be appended to the 'barman-cloud-wal-archive'
+ /// command-line invocation. These arguments provide flexibility to customize
+ /// the WAL archive process further, according to specific requirements or configurations.
+ ///
+ /// Example:
+ /// In a scenario where specialized backup options are required, such as setting
+ /// a specific timeout or defining custom behavior, users can use this field
+ /// to specify additional command arguments.
+ ///
+ /// Note:
+ /// It's essential to ensure that the provided arguments are valid and supported
+ /// by the 'barman-cloud-wal-archive' command, to avoid potential errors or unintended
+ /// behavior during execution.
+ ///
+ [JsonPropertyName("archiveAdditionalCommandArgs")]
+ public IList? ArchiveAdditionalCommandArgs { get; set; }
+
+ ///
+ /// Compress a WAL file before sending it to the object store. Available
+ /// options are empty string (no compression, default), `gzip`, `bzip2`,
+ /// `lz4`, `snappy`, `xz`, and `zstd`.
+ ///
+ [JsonPropertyName("compression")]
+ public V1ClusterSpecBackupBarmanObjectStoreWalCompressionEnum? Compression { get; set; }
+
+ ///
+ /// Whenever to force the encryption of files (if the bucket is
+ /// not already configured for that).
+ /// Allowed options are empty string (use the bucket policy, default),
+ /// `AES256` and `aws:kms`
+ ///
+ [JsonPropertyName("encryption")]
+ public V1ClusterSpecBackupBarmanObjectStoreWalEncryptionEnum? Encryption { get; set; }
+
+ ///
+ /// Number of WAL files to be either archived in parallel (when the
+ /// PostgreSQL instance is archiving to a backup object store) or
+ /// restored in parallel (when a PostgreSQL standby is fetching WAL
+ /// files from a recovery object store). If not specified, WAL files
+ /// will be processed one at a time. It accepts a positive integer as a
+ /// value - with 1 being the minimum accepted value.
+ ///
+ [JsonPropertyName("maxParallel")]
+ public int? MaxParallel { get; set; }
+
+ ///
+ /// Additional arguments that can be appended to the 'barman-cloud-wal-restore'
+ /// command-line invocation. These arguments provide flexibility to customize
+ /// the WAL restore process further, according to specific requirements or configurations.
+ ///
+ /// Example:
+ /// In a scenario where specialized backup options are required, such as setting
+ /// a specific timeout or defining custom behavior, users can use this field
+ /// to specify additional command arguments.
+ ///
+ /// Note:
+ /// It's essential to ensure that the provided arguments are valid and supported
+ /// by the 'barman-cloud-wal-restore' command, to avoid potential errors or unintended
+ /// behavior during execution.
+ ///
+ [JsonPropertyName("restoreAdditionalCommandArgs")]
+ public IList? RestoreAdditionalCommandArgs { get; set; }
+}
+
+/// The configuration for the barman-cloud tool suite
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupBarmanObjectStore
+{
+ /// The credentials to use to upload data to Azure Blob Storage
+ [JsonPropertyName("azureCredentials")]
+ public V1ClusterSpecBackupBarmanObjectStoreAzureCredentials? AzureCredentials { get; set; }
+
+ ///
+ /// The configuration to be used to backup the data files
+ /// When not defined, base backups files will be stored uncompressed and may
+ /// be unencrypted in the object store, according to the bucket default
+ /// policy.
+ ///
+ [JsonPropertyName("data")]
+ public V1ClusterSpecBackupBarmanObjectStoreData? Data { get; set; }
+
+ ///
+ /// The path where to store the backup (i.e. s3://bucket/path/to/folder)
+ /// this path, with different destination folders, will be used for WALs
+ /// and for data
+ ///
+ [JsonPropertyName("destinationPath")]
+ public required string DestinationPath { get; set; }
+
+ ///
+ /// EndpointCA store the CA bundle of the barman endpoint.
+ /// Useful when using self-signed certificates to avoid
+ /// errors with certificate issuer and barman-cloud-wal-archive
+ ///
+ [JsonPropertyName("endpointCA")]
+ public V1ClusterSpecBackupBarmanObjectStoreEndpointCA? EndpointCA { get; set; }
+
+ ///
+ /// Endpoint to be used to upload data to the cloud,
+ /// overriding the automatic endpoint discovery
+ ///
+ [JsonPropertyName("endpointURL")]
+ public string? EndpointURL { get; set; }
+
+ /// The credentials to use to upload data to Google Cloud Storage
+ [JsonPropertyName("googleCredentials")]
+ public V1ClusterSpecBackupBarmanObjectStoreGoogleCredentials? GoogleCredentials { get; set; }
+
+ ///
+ /// HistoryTags is a list of key value pairs that will be passed to the
+ /// Barman --history-tags option.
+ ///
+ [JsonPropertyName("historyTags")]
+ public IDictionary? HistoryTags { get; set; }
+
+ /// The credentials to use to upload data to S3
+ [JsonPropertyName("s3Credentials")]
+ public V1ClusterSpecBackupBarmanObjectStoreS3Credentials? S3Credentials { get; set; }
+
+ ///
+ /// The server name on S3, the cluster name is used if this
+ /// parameter is omitted
+ ///
+ [JsonPropertyName("serverName")]
+ public string? ServerName { get; set; }
+
+ ///
+ /// Tags is a list of key value pairs that will be passed to the
+ /// Barman --tags option.
+ ///
+ [JsonPropertyName("tags")]
+ public IDictionary? Tags { get; set; }
+
+ ///
+ /// The configuration for the backup of the WAL stream.
+ /// When not defined, WAL files will be stored uncompressed and may be
+ /// unencrypted in the object store, according to the bucket default policy.
+ ///
+ [JsonPropertyName("wal")]
+ public V1ClusterSpecBackupBarmanObjectStoreWal? Wal { get; set; }
+}
+
+///
+/// The policy to decide which instance should perform backups. Available
+/// options are empty string, which will default to `prefer-standby` policy,
+/// `primary` to have backups run always on primary instances, `prefer-standby`
+/// to have backups run preferably on the most updated standby, if available.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBackupTargetEnum
+{
+ [EnumMember(Value = "primary"), JsonStringEnumMemberName("primary")]
+ Primary,
+ [EnumMember(Value = "prefer-standby"), JsonStringEnumMemberName("prefer-standby")]
+ PreferStandby
+}
+
+/// Configuration parameters to control the online/hot backup with volume snapshots
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupVolumeSnapshotOnlineConfiguration
+{
+ ///
+ /// Control whether the I/O workload for the backup initial checkpoint will
+ /// be limited, according to the `checkpoint_completion_target` setting on
+ /// the PostgreSQL server. If set to true, an immediate checkpoint will be
+ /// used, meaning PostgreSQL will complete the checkpoint as soon as
+ /// possible. `false` by default.
+ ///
+ [JsonPropertyName("immediateCheckpoint")]
+ public bool? ImmediateCheckpoint { get; set; }
+
+ ///
+ /// If false, the function will return immediately after the backup is completed,
+ /// without waiting for WAL to be archived.
+ /// This behavior is only useful with backup software that independently monitors WAL archiving.
+ /// Otherwise, WAL required to make the backup consistent might be missing and make the backup useless.
+ /// By default, or when this parameter is true, pg_backup_stop will wait for WAL to be archived when archiving is
+ /// enabled.
+ /// On a standby, this means that it will wait only when archive_mode = always.
+ /// If write activity on the primary is low, it may be useful to run pg_switch_wal on the primary in order to trigger
+ /// an immediate segment switch.
+ ///
+ [JsonPropertyName("waitForArchive")]
+ public bool? WaitForArchive { get; set; }
+}
+
+/// SnapshotOwnerReference indicates the type of owner reference the snapshot should have
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBackupVolumeSnapshotSnapshotOwnerReferenceEnum
+{
+ [EnumMember(Value = "none"), JsonStringEnumMemberName("none")]
+ None,
+ [EnumMember(Value = "cluster"), JsonStringEnumMemberName("cluster")]
+ Cluster,
+ [EnumMember(Value = "backup"), JsonStringEnumMemberName("backup")]
+ Backup
+}
+
+/// VolumeSnapshot provides the configuration for the execution of volume snapshot backups.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackupVolumeSnapshot
+{
+ /// Annotations key-value pairs that will be added to .metadata.annotations snapshot resources.
+ [JsonPropertyName("annotations")]
+ public IDictionary? Annotations { get; set; }
+
+ ///
+ /// ClassName specifies the Snapshot Class to be used for PG_DATA PersistentVolumeClaim.
+ /// It is the default class for the other types if no specific class is present
+ ///
+ [JsonPropertyName("className")]
+ public string? ClassName { get; set; }
+
+ /// Labels are key-value pairs that will be added to .metadata.labels snapshot resources.
+ [JsonPropertyName("labels")]
+ public IDictionary? Labels { get; set; }
+
+ ///
+ /// Whether the default type of backup with volume snapshots is
+ /// online/hot (`true`, default) or offline/cold (`false`)
+ ///
+ [JsonPropertyName("online")]
+ public bool? Online { get; set; }
+
+ /// Configuration parameters to control the online/hot backup with volume snapshots
+ [JsonPropertyName("onlineConfiguration")]
+ public V1ClusterSpecBackupVolumeSnapshotOnlineConfiguration? OnlineConfiguration { get; set; }
+
+ /// SnapshotOwnerReference indicates the type of owner reference the snapshot should have
+ [JsonPropertyName("snapshotOwnerReference")]
+ public V1ClusterSpecBackupVolumeSnapshotSnapshotOwnerReferenceEnum? SnapshotOwnerReference { get; set; }
+
+ ///
+ /// TablespaceClassName specifies the Snapshot Class to be used for the tablespaces.
+ /// defaults to the PGDATA Snapshot Class, if set
+ ///
+ [JsonPropertyName("tablespaceClassName")]
+ public IDictionary? TablespaceClassName { get; set; }
+
+ /// WalClassName specifies the Snapshot Class to be used for the PG_WAL PersistentVolumeClaim.
+ [JsonPropertyName("walClassName")]
+ public string? WalClassName { get; set; }
+}
+
+/// The configuration to be used for backups
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBackup
+{
+ /// The configuration for the barman-cloud tool suite
+ [JsonPropertyName("barmanObjectStore")]
+ public V1ClusterSpecBackupBarmanObjectStore? BarmanObjectStore { get; set; }
+
+ ///
+ /// RetentionPolicy is the retention policy to be used for backups
+ /// and WALs (i.e. '60d'). The retention policy is expressed in the form
+ /// of `XXu` where `XX` is a positive integer and `u` is in `[dwm]` -
+ /// days, weeks, months.
+ /// It's currently only applicable when using the BarmanObjectStore method.
+ ///
+ [JsonPropertyName("retentionPolicy")]
+ public string? RetentionPolicy { get; set; }
+
+ ///
+ /// The policy to decide which instance should perform backups. Available
+ /// options are empty string, which will default to `prefer-standby` policy,
+ /// `primary` to have backups run always on primary instances, `prefer-standby`
+ /// to have backups run preferably on the most updated standby, if available.
+ ///
+ [JsonPropertyName("target")]
+ public V1ClusterSpecBackupTargetEnum? Target { get; set; }
+
+ /// VolumeSnapshot provides the configuration for the execution of volume snapshot backups.
+ [JsonPropertyName("volumeSnapshot")]
+ public V1ClusterSpecBackupVolumeSnapshot? VolumeSnapshot { get; set; }
+}
+
+/// The source of the import
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbImportSource
+{
+ /// The name of the externalCluster used for import
+ [JsonPropertyName("externalCluster")]
+ public required string ExternalCluster { get; set; }
+}
+
+/// The import type. Can be `microservice` or `monolith`.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecBootstrapInitdbImportTypeEnum
+{
+ [EnumMember(Value = "microservice"), JsonStringEnumMemberName("microservice")]
+ Microservice,
+ [EnumMember(Value = "monolith"), JsonStringEnumMemberName("monolith")]
+ Monolith
+}
+
+///
+/// Bootstraps the new cluster by importing data from an existing PostgreSQL
+/// instance using logical backup (`pg_dump` and `pg_restore`)
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbImport
+{
+ /// The databases to import
+ [JsonPropertyName("databases")]
+ public required IList Databases { get; set; }
+
+ ///
+ /// List of custom options to pass to the `pg_dump` command.
+ ///
+ /// IMPORTANT: Use with caution. The operator does not validate these options,
+ /// and certain flags may interfere with its intended functionality or design.
+ /// You are responsible for ensuring that the provided options are compatible
+ /// with your environment and desired behavior.
+ ///
+ [JsonPropertyName("pgDumpExtraOptions")]
+ public IList? PgDumpExtraOptions { get; set; }
+
+ ///
+ /// Custom options to pass to the `pg_restore` command during the `data`
+ /// section. This setting overrides the generic `pgRestoreExtraOptions` value.
+ ///
+ /// IMPORTANT: Use with caution. The operator does not validate these options,
+ /// and certain flags may interfere with its intended functionality or design.
+ /// You are responsible for ensuring that the provided options are compatible
+ /// with your environment and desired behavior.
+ ///
+ [JsonPropertyName("pgRestoreDataOptions")]
+ public IList? PgRestoreDataOptions { get; set; }
+
+ ///
+ /// List of custom options to pass to the `pg_restore` command.
+ ///
+ /// IMPORTANT: Use with caution. The operator does not validate these options,
+ /// and certain flags may interfere with its intended functionality or design.
+ /// You are responsible for ensuring that the provided options are compatible
+ /// with your environment and desired behavior.
+ ///
+ [JsonPropertyName("pgRestoreExtraOptions")]
+ public IList? PgRestoreExtraOptions { get; set; }
+
+ ///
+ /// Custom options to pass to the `pg_restore` command during the `post-data`
+ /// section. This setting overrides the generic `pgRestoreExtraOptions` value.
+ ///
+ /// IMPORTANT: Use with caution. The operator does not validate these options,
+ /// and certain flags may interfere with its intended functionality or design.
+ /// You are responsible for ensuring that the provided options are compatible
+ /// with your environment and desired behavior.
+ ///
+ [JsonPropertyName("pgRestorePostdataOptions")]
+ public IList? PgRestorePostdataOptions { get; set; }
+
+ ///
+ /// Custom options to pass to the `pg_restore` command during the `pre-data`
+ /// section. This setting overrides the generic `pgRestoreExtraOptions` value.
+ ///
+ /// IMPORTANT: Use with caution. The operator does not validate these options,
+ /// and certain flags may interfere with its intended functionality or design.
+ /// You are responsible for ensuring that the provided options are compatible
+ /// with your environment and desired behavior.
+ ///
+ [JsonPropertyName("pgRestorePredataOptions")]
+ public IList? PgRestorePredataOptions { get; set; }
+
+ ///
+ /// List of SQL queries to be executed as a superuser in the application
+ /// database right after is imported - to be used with extreme care
+ /// (by default empty). Only available in microservice type.
+ ///
+ [JsonPropertyName("postImportApplicationSQL")]
+ public IList? PostImportApplicationSQL { get; set; }
+
+ /// The roles to import
+ [JsonPropertyName("roles")]
+ public IList? Roles { get; set; }
+
+ ///
+ /// When set to true, only the `pre-data` and `post-data` sections of
+ /// `pg_restore` are invoked, avoiding data import. Default: `false`.
+ ///
+ [JsonPropertyName("schemaOnly")]
+ public bool? SchemaOnly { get; set; }
+
+ /// The source of the import
+ [JsonPropertyName("source")]
+ public required V1ClusterSpecBootstrapInitdbImportSource Source { get; set; }
+
+ /// The import type. Can be `microservice` or `monolith`.
+ [JsonPropertyName("type")]
+ public required V1ClusterSpecBootstrapInitdbImportTypeEnum Type { get; set; }
+}
+
+///
+/// ConfigMapKeySelector contains enough information to let you locate
+/// the key of a ConfigMap
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitApplicationSQLRefsConfigMapRefs
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// SecretKeySelector contains enough information to let you locate
+/// the key of a Secret
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitApplicationSQLRefsSecretRefs
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// List of references to ConfigMaps or Secrets containing SQL files
+/// to be executed as a superuser in the application database right after
+/// the cluster has been created. The references are processed in a specific order:
+/// first, all Secrets are processed, followed by all ConfigMaps.
+/// Within each group, the processing order follows the sequence specified
+/// in their respective arrays.
+/// (by default empty)
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitApplicationSQLRefs
+{
+ /// ConfigMapRefs holds a list of references to ConfigMaps
+ [JsonPropertyName("configMapRefs")]
+ public IList? ConfigMapRefs { get; set; }
+
+ /// SecretRefs holds a list of references to Secrets
+ [JsonPropertyName("secretRefs")]
+ public IList? SecretRefs { get; set; }
+}
+
+///
+/// ConfigMapKeySelector contains enough information to let you locate
+/// the key of a ConfigMap
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitSQLRefsConfigMapRefs
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// SecretKeySelector contains enough information to let you locate
+/// the key of a Secret
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitSQLRefsSecretRefs
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// List of references to ConfigMaps or Secrets containing SQL files
+/// to be executed as a superuser in the `postgres` database right after
+/// the cluster has been created. The references are processed in a specific order:
+/// first, all Secrets are processed, followed by all ConfigMaps.
+/// Within each group, the processing order follows the sequence specified
+/// in their respective arrays.
+/// (by default empty)
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitSQLRefs
+{
+ /// ConfigMapRefs holds a list of references to ConfigMaps
+ [JsonPropertyName("configMapRefs")]
+ public IList? ConfigMapRefs { get; set; }
+
+ /// SecretRefs holds a list of references to Secrets
+ [JsonPropertyName("secretRefs")]
+ public IList? SecretRefs { get; set; }
+}
+
+///
+/// ConfigMapKeySelector contains enough information to let you locate
+/// the key of a ConfigMap
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitTemplateSQLRefsConfigMapRefs
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// SecretKeySelector contains enough information to let you locate
+/// the key of a Secret
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitTemplateSQLRefsSecretRefs
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// List of references to ConfigMaps or Secrets containing SQL files
+/// to be executed as a superuser in the `template1` database right after
+/// the cluster has been created. The references are processed in a specific order:
+/// first, all Secrets are processed, followed by all ConfigMaps.
+/// Within each group, the processing order follows the sequence specified
+/// in their respective arrays.
+/// (by default empty)
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbPostInitTemplateSQLRefs
+{
+ /// ConfigMapRefs holds a list of references to ConfigMaps
+ [JsonPropertyName("configMapRefs")]
+ public IList? ConfigMapRefs { get; set; }
+
+ /// SecretRefs holds a list of references to Secrets
+ [JsonPropertyName("secretRefs")]
+ public IList? SecretRefs { get; set; }
+}
+
+///
+/// Name of the secret containing the initial credentials for the
+/// owner of the user database. If empty a new secret will be
+/// created from scratch
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdbSecret
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// Bootstrap the cluster via initdb
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapInitdb
+{
+ ///
+ /// Specifies the locale name when the builtin provider is used.
+ /// This option requires `localeProvider` to be set to `builtin`.
+ /// Available from PostgreSQL 17.
+ ///
+ [JsonPropertyName("builtinLocale")]
+ public string? BuiltinLocale { get; set; }
+
+ ///
+ /// Whether the `-k` option should be passed to initdb,
+ /// enabling checksums on data pages (default: `false`)
+ ///
+ [JsonPropertyName("dataChecksums")]
+ public bool? DataChecksums { get; set; }
+
+ /// Name of the database used by the application. Default: `app`.
+ [JsonPropertyName("database")]
+ public string? Database { get; set; }
+
+ /// The value to be passed as option `--encoding` for initdb (default:`UTF8`)
+ [JsonPropertyName("encoding")]
+ public string? Encoding { get; set; }
+
+ ///
+ /// Specifies the ICU locale when the ICU provider is used.
+ /// This option requires `localeProvider` to be set to `icu`.
+ /// Available from PostgreSQL 15.
+ ///
+ [JsonPropertyName("icuLocale")]
+ public string? IcuLocale { get; set; }
+
+ ///
+ /// Specifies additional collation rules to customize the behavior of the default collation.
+ /// This option requires `localeProvider` to be set to `icu`.
+ /// Available from PostgreSQL 16.
+ ///
+ [JsonPropertyName("icuRules")]
+ public string? IcuRules { get; set; }
+
+ ///
+ /// Bootstraps the new cluster by importing data from an existing PostgreSQL
+ /// instance using logical backup (`pg_dump` and `pg_restore`)
+ ///
+ [JsonPropertyName("import")]
+ public V1ClusterSpecBootstrapInitdbImport? Import { get; set; }
+
+ /// Sets the default collation order and character classification in the new database.
+ [JsonPropertyName("locale")]
+ public string? Locale { get; set; }
+
+ /// The value to be passed as option `--lc-ctype` for initdb (default:`C`)
+ [JsonPropertyName("localeCType")]
+ public string? LocaleCType { get; set; }
+
+ /// The value to be passed as option `--lc-collate` for initdb (default:`C`)
+ [JsonPropertyName("localeCollate")]
+ public string? LocaleCollate { get; set; }
+
+ ///
+ /// This option sets the locale provider for databases created in the new cluster.
+ /// Available from PostgreSQL 16.
+ ///
+ [JsonPropertyName("localeProvider")]
+ public string? LocaleProvider { get; set; }
+
+ ///
+ /// The list of options that must be passed to initdb when creating the cluster.
+ ///
+ /// Deprecated: This could lead to inconsistent configurations,
+ /// please use the explicit provided parameters instead.
+ /// If defined, explicit values will be ignored.
+ ///
+ [JsonPropertyName("options")]
+ public IList? Options { get; set; }
+
+ ///
+ /// Name of the owner of the database in the instance to be used
+ /// by applications. Defaults to the value of the `database` key.
+ ///
+ [JsonPropertyName("owner")]
+ public string? Owner { get; set; }
+
+ ///
+ /// List of SQL queries to be executed as a superuser in the application
+ /// database right after the cluster has been created - to be used with extreme care
+ /// (by default empty)
+ ///
+ [JsonPropertyName("postInitApplicationSQL")]
+ public IList? PostInitApplicationSQL { get; set; }
+
+ ///
+ /// List of references to ConfigMaps or Secrets containing SQL files
+ /// to be executed as a superuser in the application database right after
+ /// the cluster has been created. The references are processed in a specific order:
+ /// first, all Secrets are processed, followed by all ConfigMaps.
+ /// Within each group, the processing order follows the sequence specified
+ /// in their respective arrays.
+ /// (by default empty)
+ ///
+ [JsonPropertyName("postInitApplicationSQLRefs")]
+ public V1ClusterSpecBootstrapInitdbPostInitApplicationSQLRefs? PostInitApplicationSQLRefs { get; set; }
+
+ ///
+ /// List of SQL queries to be executed as a superuser in the `postgres`
+ /// database right after the cluster has been created - to be used with extreme care
+ /// (by default empty)
+ ///
+ [JsonPropertyName("postInitSQL")]
+ public IList? PostInitSQL { get; set; }
+
+ ///
+ /// List of references to ConfigMaps or Secrets containing SQL files
+ /// to be executed as a superuser in the `postgres` database right after
+ /// the cluster has been created. The references are processed in a specific order:
+ /// first, all Secrets are processed, followed by all ConfigMaps.
+ /// Within each group, the processing order follows the sequence specified
+ /// in their respective arrays.
+ /// (by default empty)
+ ///
+ [JsonPropertyName("postInitSQLRefs")]
+ public V1ClusterSpecBootstrapInitdbPostInitSQLRefs? PostInitSQLRefs { get; set; }
+
+ ///
+ /// List of SQL queries to be executed as a superuser in the `template1`
+ /// database right after the cluster has been created - to be used with extreme care
+ /// (by default empty)
+ ///
+ [JsonPropertyName("postInitTemplateSQL")]
+ public IList? PostInitTemplateSQL { get; set; }
+
+ ///
+ /// List of references to ConfigMaps or Secrets containing SQL files
+ /// to be executed as a superuser in the `template1` database right after
+ /// the cluster has been created. The references are processed in a specific order:
+ /// first, all Secrets are processed, followed by all ConfigMaps.
+ /// Within each group, the processing order follows the sequence specified
+ /// in their respective arrays.
+ /// (by default empty)
+ ///
+ [JsonPropertyName("postInitTemplateSQLRefs")]
+ public V1ClusterSpecBootstrapInitdbPostInitTemplateSQLRefs? PostInitTemplateSQLRefs { get; set; }
+
+ ///
+ /// Name of the secret containing the initial credentials for the
+ /// owner of the user database. If empty a new secret will be
+ /// created from scratch
+ ///
+ [JsonPropertyName("secret")]
+ public V1ClusterSpecBootstrapInitdbSecret? Secret { get; set; }
+
+ ///
+ /// The value in megabytes (1 to 1024) to be passed to the `--wal-segsize`
+ /// option for initdb (default: empty, resulting in PostgreSQL default: 16MB)
+ ///
+ [JsonPropertyName("walSegmentSize")]
+ public int? WalSegmentSize { get; set; }
+}
+
+///
+/// Name of the secret containing the initial credentials for the
+/// owner of the user database. If empty a new secret will be
+/// created from scratch
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapPgBasebackupSecret
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// Bootstrap the cluster taking a physical backup of another compatible
+/// PostgreSQL instance
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapPgBasebackup
+{
+ /// Name of the database used by the application. Default: `app`.
+ [JsonPropertyName("database")]
+ public string? Database { get; set; }
+
+ ///
+ /// Name of the owner of the database in the instance to be used
+ /// by applications. Defaults to the value of the `database` key.
+ ///
+ [JsonPropertyName("owner")]
+ public string? Owner { get; set; }
+
+ ///
+ /// Name of the secret containing the initial credentials for the
+ /// owner of the user database. If empty a new secret will be
+ /// created from scratch
+ ///
+ [JsonPropertyName("secret")]
+ public V1ClusterSpecBootstrapPgBasebackupSecret? Secret { get; set; }
+
+ /// The name of the server of which we need to take a physical backup
+ [JsonPropertyName("source")]
+ public required string Source { get; set; }
+}
+
+///
+/// EndpointCA store the CA bundle of the barman endpoint.
+/// Useful when using self-signed certificates to avoid
+/// errors with certificate issuer and barman-cloud-wal-archive.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryBackupEndpointCA
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// The backup object containing the physical base backup from which to
+/// initiate the recovery procedure.
+/// Mutually exclusive with `source` and `volumeSnapshots`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryBackup
+{
+ ///
+ /// EndpointCA store the CA bundle of the barman endpoint.
+ /// Useful when using self-signed certificates to avoid
+ /// errors with certificate issuer and barman-cloud-wal-archive.
+ ///
+ [JsonPropertyName("endpointCA")]
+ public V1ClusterSpecBootstrapRecoveryBackupEndpointCA? EndpointCA { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// By default, the recovery process applies all the available
+/// WAL files in the archive (full recovery). However, you can also
+/// end the recovery as soon as a consistent state is reached or
+/// recover to a point-in-time (PITR) by specifying a `RecoveryTarget` object,
+/// as expected by PostgreSQL (i.e., timestamp, transaction Id, LSN, ...).
+/// More info: https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryRecoveryTarget
+{
+ ///
+ /// The ID of the backup from which to start the recovery process.
+ /// If empty (default) the operator will automatically detect the backup
+ /// based on targetTime or targetLSN if specified. Otherwise use the
+ /// latest available backup in chronological order.
+ ///
+ [JsonPropertyName("backupID")]
+ public string? BackupID { get; set; }
+
+ ///
+ /// Set the target to be exclusive. If omitted, defaults to false, so that
+ /// in Postgres, `recovery_target_inclusive` will be true
+ ///
+ [JsonPropertyName("exclusive")]
+ public bool? Exclusive { get; set; }
+
+ /// End recovery as soon as a consistent state is reached
+ [JsonPropertyName("targetImmediate")]
+ public bool? TargetImmediate { get; set; }
+
+ /// The target LSN (Log Sequence Number)
+ [JsonPropertyName("targetLSN")]
+ public string? TargetLSN { get; set; }
+
+ ///
+ /// The target name (to be previously created
+ /// with `pg_create_restore_point`)
+ ///
+ [JsonPropertyName("targetName")]
+ public string? TargetName { get; set; }
+
+ /// The target timeline ("latest" or a positive integer)
+ [JsonPropertyName("targetTLI")]
+ public string? TargetTLI { get; set; }
+
+ ///
+ /// The target time as a timestamp in RFC3339 format or PostgreSQL timestamp format.
+ /// Timestamps without an explicit timezone are interpreted as UTC.
+ ///
+ [JsonPropertyName("targetTime")]
+ public string? TargetTime { get; set; }
+
+ /// The target transaction ID
+ [JsonPropertyName("targetXID")]
+ public string? TargetXID { get; set; }
+}
+
+///
+/// Name of the secret containing the initial credentials for the
+/// owner of the user database. If empty a new secret will be
+/// created from scratch
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoverySecret
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// Configuration of the storage of the instances
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryVolumeSnapshotsStorage
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// TypedLocalObjectReference contains enough information to let you locate the
+/// typed referenced object inside the same namespace.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryVolumeSnapshotsTablespaceStorage
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// Configuration of the storage for PostgreSQL WAL (Write-Ahead Log)
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryVolumeSnapshotsWalStorage
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// The static PVC data source(s) from which to initiate the
+/// recovery procedure. Currently supporting `VolumeSnapshot`
+/// and `PersistentVolumeClaim` resources that map an existing
+/// PVC group, compatible with CloudNativePG, and taken with
+/// a cold backup copy on a fenced Postgres instance (limitation
+/// which will be removed in the future when online backup
+/// will be implemented).
+/// Mutually exclusive with `backup`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecoveryVolumeSnapshots
+{
+ /// Configuration of the storage of the instances
+ [JsonPropertyName("storage")]
+ public required V1ClusterSpecBootstrapRecoveryVolumeSnapshotsStorage Storage { get; set; }
+
+ /// Configuration of the storage for PostgreSQL tablespaces
+ [JsonPropertyName("tablespaceStorage")]
+ public IDictionary? TablespaceStorage { get; set; }
+
+ /// Configuration of the storage for PostgreSQL WAL (Write-Ahead Log)
+ [JsonPropertyName("walStorage")]
+ public V1ClusterSpecBootstrapRecoveryVolumeSnapshotsWalStorage? WalStorage { get; set; }
+}
+
+/// Bootstrap the cluster from a backup
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrapRecovery
+{
+ ///
+ /// The backup object containing the physical base backup from which to
+ /// initiate the recovery procedure.
+ /// Mutually exclusive with `source` and `volumeSnapshots`.
+ ///
+ [JsonPropertyName("backup")]
+ public V1ClusterSpecBootstrapRecoveryBackup? Backup { get; set; }
+
+ /// Name of the database used by the application. Default: `app`.
+ [JsonPropertyName("database")]
+ public string? Database { get; set; }
+
+ ///
+ /// Name of the owner of the database in the instance to be used
+ /// by applications. Defaults to the value of the `database` key.
+ ///
+ [JsonPropertyName("owner")]
+ public string? Owner { get; set; }
+
+ ///
+ /// By default, the recovery process applies all the available
+ /// WAL files in the archive (full recovery). However, you can also
+ /// end the recovery as soon as a consistent state is reached or
+ /// recover to a point-in-time (PITR) by specifying a `RecoveryTarget` object,
+ /// as expected by PostgreSQL (i.e., timestamp, transaction Id, LSN, ...).
+ /// More info: https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET
+ ///
+ [JsonPropertyName("recoveryTarget")]
+ public V1ClusterSpecBootstrapRecoveryRecoveryTarget? RecoveryTarget { get; set; }
+
+ ///
+ /// Name of the secret containing the initial credentials for the
+ /// owner of the user database. If empty a new secret will be
+ /// created from scratch
+ ///
+ [JsonPropertyName("secret")]
+ public V1ClusterSpecBootstrapRecoverySecret? Secret { get; set; }
+
+ ///
+ /// The external cluster whose backup we will restore. This is also
+ /// used as the name of the folder under which the backup is stored,
+ /// so it must be set to the name of the source cluster
+ /// Mutually exclusive with `backup`.
+ ///
+ [JsonPropertyName("source")]
+ public string? Source { get; set; }
+
+ ///
+ /// The static PVC data source(s) from which to initiate the
+ /// recovery procedure. Currently supporting `VolumeSnapshot`
+ /// and `PersistentVolumeClaim` resources that map an existing
+ /// PVC group, compatible with CloudNativePG, and taken with
+ /// a cold backup copy on a fenced Postgres instance (limitation
+ /// which will be removed in the future when online backup
+ /// will be implemented).
+ /// Mutually exclusive with `backup`.
+ ///
+ [JsonPropertyName("volumeSnapshots")]
+ public V1ClusterSpecBootstrapRecoveryVolumeSnapshots? VolumeSnapshots { get; set; }
+}
+
+/// Instructions to bootstrap this cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecBootstrap
+{
+ /// Bootstrap the cluster via initdb
+ [JsonPropertyName("initdb")]
+ public V1ClusterSpecBootstrapInitdb? Initdb { get; set; }
+
+ ///
+ /// Bootstrap the cluster taking a physical backup of another compatible
+ /// PostgreSQL instance
+ ///
+ [JsonPropertyName("pg_basebackup")]
+ public V1ClusterSpecBootstrapPgBasebackup? PgBasebackup { get; set; }
+
+ /// Bootstrap the cluster from a backup
+ [JsonPropertyName("recovery")]
+ public V1ClusterSpecBootstrapRecovery? Recovery { get; set; }
+}
+
+/// The configuration for the CA and related certificates
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecCertificates
+{
+ ///
+ /// The secret containing the Client CA certificate. If not defined, a new secret will be created
+ /// with a self-signed CA and will be used to generate all the client certificates.<br />
+ /// <br />
+ /// Contains:<br />
+ /// <br />
+ /// - `ca.crt`: CA that should be used to validate the client certificates,
+ /// used as `ssl_ca_file` of all the instances.<br />
+ /// - `ca.key`: key used to generate client certificates, if ReplicationTLSSecret is provided,
+ /// this can be omitted.<br />
+ ///
+ [JsonPropertyName("clientCASecret")]
+ public string? ClientCASecret { get; set; }
+
+ ///
+ /// The secret of type kubernetes.io/tls containing the client certificate to authenticate as
+ /// the `streaming_replica` user.
+ /// If not defined, ClientCASecret must provide also `ca.key`, and a new secret will be
+ /// created using the provided CA.
+ ///
+ [JsonPropertyName("replicationTLSSecret")]
+ public string? ReplicationTLSSecret { get; set; }
+
+ /// The list of the server alternative DNS names to be added to the generated server TLS certificates, when required.
+ [JsonPropertyName("serverAltDNSNames")]
+ public IList? ServerAltDNSNames { get; set; }
+
+ ///
+ /// The secret containing the Server CA certificate. If not defined, a new secret will be created
+ /// with a self-signed CA and will be used to generate the TLS certificate ServerTLSSecret.<br />
+ /// <br />
+ /// Contains:<br />
+ /// <br />
+ /// - `ca.crt`: CA that should be used to validate the server certificate,
+ /// used as `sslrootcert` in client connection strings.<br />
+ /// - `ca.key`: key used to generate Server SSL certs, if ServerTLSSecret is provided,
+ /// this can be omitted.<br />
+ ///
+ [JsonPropertyName("serverCASecret")]
+ public string? ServerCASecret { get; set; }
+
+ ///
+ /// The secret of type kubernetes.io/tls containing the server TLS certificate and key that will be set as
+ /// `ssl_cert_file` and `ssl_key_file` so that clients can connect to postgres securely.
+ /// If not defined, ServerCASecret must provide also `ca.key` and a new secret will be
+ /// created using the provided CA.
+ ///
+ [JsonPropertyName("serverTLSSecret")]
+ public string? ServerTLSSecret { get; set; }
+}
+
+/// Selects a key of a ConfigMap.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvValueFromConfigMapKeyRef
+{
+ /// The key to select.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the ConfigMap or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+///
+/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels[' <KEY> ']`, `metadata.annotations[' <KEY> ']`,
+/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvValueFromFieldRef
+{
+ /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ [JsonPropertyName("apiVersion")]
+ public string? ApiVersion { get; set; }
+
+ /// Path of the field to select in the specified API version.
+ [JsonPropertyName("fieldPath")]
+ public required string FieldPath { get; set; }
+}
+
+///
+/// FileKeyRef selects a key of the env file.
+/// Requires the EnvFiles feature gate to be enabled.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvValueFromFileKeyRef
+{
+ ///
+ /// The key within the env file. An invalid key will prevent the pod from starting.
+ /// The keys defined within a source may consist of any printable ASCII characters except '='.
+ /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
+ ///
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Specify whether the file or its key must be defined. If the file or key
+ /// does not exist, then the env var is not published.
+ /// If optional is set to true and the specified key does not exist,
+ /// the environment variable will not be set in the Pod's containers.
+ ///
+ /// If optional is set to false and the specified key does not exist,
+ /// an error will be returned during Pod creation.
+ ///
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+
+ ///
+ /// The path within the volume from which to select the file.
+ /// Must be relative and may not contain the '..' path or start with '..'.
+ ///
+ [JsonPropertyName("path")]
+ public required string Path { get; set; }
+
+ /// The name of the volume mount containing the env file.
+ [JsonPropertyName("volumeName")]
+ public required string VolumeName { get; set; }
+}
+
+///
+/// Selects a resource of the container: only resources limits and requests
+/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvValueFromResourceFieldRef
+{
+ /// Container name: required for volumes, optional for env vars
+ [JsonPropertyName("containerName")]
+ public string? ContainerName { get; set; }
+
+ /// Specifies the output format of the exposed resources, defaults to "1"
+ [JsonPropertyName("divisor")]
+ public IntOrString? Divisor { get; set; }
+
+ /// Required: resource to select
+ [JsonPropertyName("resource")]
+ public required string Resource { get; set; }
+}
+
+/// Selects a key of a secret in the pod's namespace
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvValueFromSecretKeyRef
+{
+ /// The key of the secret to select from. Must be a valid secret key.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+/// Source for the environment variable's value. Cannot be used if value is not empty.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvValueFrom
+{
+ /// Selects a key of a ConfigMap.
+ [JsonPropertyName("configMapKeyRef")]
+ public V1ClusterSpecEnvValueFromConfigMapKeyRef? ConfigMapKeyRef { get; set; }
+
+ ///
+ /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels[' <KEY> ']`, `metadata.annotations[' <KEY> ']`,
+ /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ ///
+ [JsonPropertyName("fieldRef")]
+ public V1ClusterSpecEnvValueFromFieldRef? FieldRef { get; set; }
+
+ ///
+ /// FileKeyRef selects a key of the env file.
+ /// Requires the EnvFiles feature gate to be enabled.
+ ///
+ [JsonPropertyName("fileKeyRef")]
+ public V1ClusterSpecEnvValueFromFileKeyRef? FileKeyRef { get; set; }
+
+ ///
+ /// Selects a resource of the container: only resources limits and requests
+ /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ ///
+ [JsonPropertyName("resourceFieldRef")]
+ public V1ClusterSpecEnvValueFromResourceFieldRef? ResourceFieldRef { get; set; }
+
+ /// Selects a key of a secret in the pod's namespace
+ [JsonPropertyName("secretKeyRef")]
+ public V1ClusterSpecEnvValueFromSecretKeyRef? SecretKeyRef { get; set; }
+}
+
+/// EnvVar represents an environment variable present in a Container.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnv
+{
+ ///
+ /// Name of the environment variable.
+ /// May consist of any printable ASCII characters except '='.
+ ///
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Variable references $(VAR_NAME) are expanded
+ /// using the previously defined environment variables in the container and
+ /// any service environment variables. If a variable cannot be resolved,
+ /// the reference in the input string will be unchanged. Double $$ are reduced
+ /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
+ /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
+ /// Escaped references will never be expanded, regardless of whether the variable
+ /// exists or not.
+ /// Defaults to " ".
+ ///
+ [JsonPropertyName("value")]
+ public string? Value { get; set; }
+
+ /// Source for the environment variable's value. Cannot be used if value is not empty.
+ [JsonPropertyName("valueFrom")]
+ public V1ClusterSpecEnvValueFrom? ValueFrom { get; set; }
+}
+
+/// The ConfigMap to select from
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvFromConfigMapRef
+{
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the ConfigMap must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+/// The Secret to select from
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvFromSecretRef
+{
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+/// EnvFromSource represents the source of a set of ConfigMaps or Secrets
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEnvFrom
+{
+ /// The ConfigMap to select from
+ [JsonPropertyName("configMapRef")]
+ public V1ClusterSpecEnvFromConfigMapRef? ConfigMapRef { get; set; }
+
+ ///
+ /// Optional text to prepend to the name of each environment variable.
+ /// May consist of any printable ASCII characters except '='.
+ ///
+ [JsonPropertyName("prefix")]
+ public string? Prefix { get; set; }
+
+ /// The Secret to select from
+ [JsonPropertyName("secretRef")]
+ public V1ClusterSpecEnvFromSecretRef? SecretRef { get; set; }
+}
+
+///
+/// May contain labels and annotations that will be copied into the PVC
+/// when creating it. No other fields are allowed and will be rejected during
+/// validation.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateMetadata
+{
+}
+
+///
+/// dataSource field can be used to specify either:
+/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+/// * An existing PVC (PersistentVolumeClaim)
+/// If the provisioner or an external controller can support the specified data source,
+/// it will create a new volume based on the contents of the specified data source.
+/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+/// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecDataSource
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+/// volume is desired. This may be any object from a non-empty API group (non
+/// core object) or a PersistentVolumeClaim object.
+/// When this field is specified, volume binding will only succeed if the type of
+/// the specified object matches some installed volume populator or dynamic
+/// provisioner.
+/// This field will replace the functionality of the dataSource field and as such
+/// if both fields are non-empty, they must have the same value. For backwards
+/// compatibility, when namespace isn't specified in dataSourceRef,
+/// both fields (dataSource and dataSourceRef) will be set to the same
+/// value automatically if one of them is empty and the other is non-empty.
+/// When namespace is specified in dataSourceRef,
+/// dataSource isn't set to the same value and must be empty.
+/// There are three important differences between dataSource and dataSourceRef:
+/// * While dataSource only allows two specific types of objects, dataSourceRef
+/// allows any non-core object, as well as PersistentVolumeClaim objects.
+/// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+/// preserves all values, and generates an error if a disallowed value is
+/// specified.
+/// * While dataSource only allows local objects, dataSourceRef allows objects
+/// in any namespaces.
+/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecDataSourceRef
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Namespace is the namespace of resource being referenced
+ /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+ /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("namespace")]
+ public string? Namespace { get; set; }
+}
+
+///
+/// resources represents the minimum resources the volume should have.
+/// Users are allowed to specify resource requirements
+/// that are lower than previous value but must still be higher than capacity recorded in the
+/// status field of the claim.
+/// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecResources
+{
+ ///
+ /// Limits describes the maximum amount of compute resources allowed.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("limits")]
+ public IDictionary? Limits { get; set; }
+
+ ///
+ /// Requests describes the minimum amount of compute resources required.
+ /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ /// otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("requests")]
+ public IDictionary? Requests { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+/// selector is a label query over volumes to consider for binding.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// The specification for the PersistentVolumeClaim. The entire content is
+/// copied unchanged into the PVC that gets created from this
+/// template. The same fields as in a PersistentVolumeClaim
+/// are also valid here.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpec
+{
+ ///
+ /// accessModes contains the desired access modes the volume should have.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ ///
+ [JsonPropertyName("accessModes")]
+ public IList? AccessModes { get; set; }
+
+ ///
+ /// dataSource field can be used to specify either:
+ /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+ /// * An existing PVC (PersistentVolumeClaim)
+ /// If the provisioner or an external controller can support the specified data source,
+ /// it will create a new volume based on the contents of the specified data source.
+ /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+ /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+ /// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+ ///
+ [JsonPropertyName("dataSource")]
+ public V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecDataSource? DataSource { get; set; }
+
+ ///
+ /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+ /// volume is desired. This may be any object from a non-empty API group (non
+ /// core object) or a PersistentVolumeClaim object.
+ /// When this field is specified, volume binding will only succeed if the type of
+ /// the specified object matches some installed volume populator or dynamic
+ /// provisioner.
+ /// This field will replace the functionality of the dataSource field and as such
+ /// if both fields are non-empty, they must have the same value. For backwards
+ /// compatibility, when namespace isn't specified in dataSourceRef,
+ /// both fields (dataSource and dataSourceRef) will be set to the same
+ /// value automatically if one of them is empty and the other is non-empty.
+ /// When namespace is specified in dataSourceRef,
+ /// dataSource isn't set to the same value and must be empty.
+ /// There are three important differences between dataSource and dataSourceRef:
+ /// * While dataSource only allows two specific types of objects, dataSourceRef
+ /// allows any non-core object, as well as PersistentVolumeClaim objects.
+ /// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+ /// preserves all values, and generates an error if a disallowed value is
+ /// specified.
+ /// * While dataSource only allows local objects, dataSourceRef allows objects
+ /// in any namespaces.
+ /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+ /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("dataSourceRef")]
+ public V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecDataSourceRef? DataSourceRef { get; set; }
+
+ ///
+ /// resources represents the minimum resources the volume should have.
+ /// Users are allowed to specify resource requirements
+ /// that are lower than previous value but must still be higher than capacity recorded in the
+ /// status field of the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+ ///
+ [JsonPropertyName("resources")]
+ public V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecResources? Resources { get; set; }
+
+ /// selector is a label query over volumes to consider for binding.
+ [JsonPropertyName("selector")]
+ public V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpecSelector? Selector { get; set; }
+
+ ///
+ /// storageClassName is the name of the StorageClass required by the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+ ///
+ [JsonPropertyName("storageClassName")]
+ public string? StorageClassName { get; set; }
+
+ ///
+ /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+ /// If specified, the CSI driver will create or update the volume with the attributes defined
+ /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+ /// it can be changed after the claim is created. An empty string or nil value indicates that no
+ /// VolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state,
+ /// this field can be reset to its previous value (including nil) to cancel the modification.
+ /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+ /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+ /// exists.
+ /// More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
+ ///
+ [JsonPropertyName("volumeAttributesClassName")]
+ public string? VolumeAttributesClassName { get; set; }
+
+ ///
+ /// volumeMode defines what type of volume is required by the claim.
+ /// Value of Filesystem is implied when not included in claim spec.
+ ///
+ [JsonPropertyName("volumeMode")]
+ public string? VolumeMode { get; set; }
+
+ /// volumeName is the binding reference to the PersistentVolume backing this claim.
+ [JsonPropertyName("volumeName")]
+ public string? VolumeName { get; set; }
+}
+
+///
+/// Will be used to create a stand-alone PVC to provision the volume.
+/// The pod in which this EphemeralVolumeSource is embedded will be the
+/// owner of the PVC, i.e. the PVC will be deleted together with the
+/// pod. The name of the PVC will be `<pod name>-<volume name>` where
+/// `<volume name>` is the name from the `PodSpec.Volumes` array
+/// entry. Pod validation will reject the pod if the concatenated name
+/// is not valid for a PVC (for example, too long).
+///
+/// An existing PVC with that name that is not owned by the pod
+/// will *not* be used for the pod to avoid using an unrelated
+/// volume by mistake. Starting the pod is then blocked until
+/// the unrelated PVC is removed. If such a pre-created PVC is
+/// meant to be used by the pod, the PVC has to updated with an
+/// owner reference to the pod once the pod exists. Normally
+/// this should not be necessary, but it may be useful when
+/// manually reconstructing a broken cluster.
+///
+/// This field is read-only and no changes will be made by Kubernetes
+/// to the PVC after it has been created.
+///
+/// Required, must not be nil.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplate
+{
+ ///
+ /// May contain labels and annotations that will be copied into the PVC
+ /// when creating it. No other fields are allowed and will be rejected during
+ /// validation.
+ ///
+ [JsonPropertyName("metadata")]
+ public V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateMetadata? Metadata { get; set; }
+
+ ///
+ /// The specification for the PersistentVolumeClaim. The entire content is
+ /// copied unchanged into the PVC that gets created from this
+ /// template. The same fields as in a PersistentVolumeClaim
+ /// are also valid here.
+ ///
+ [JsonPropertyName("spec")]
+ public required V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplateSpec Spec { get; set; }
+}
+
+/// EphemeralVolumeSource allows the user to configure the source of ephemeral volumes.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumeSource
+{
+ ///
+ /// Will be used to create a stand-alone PVC to provision the volume.
+ /// The pod in which this EphemeralVolumeSource is embedded will be the
+ /// owner of the PVC, i.e. the PVC will be deleted together with the
+ /// pod. The name of the PVC will be `<pod name>-<volume name>` where
+ /// `<volume name>` is the name from the `PodSpec.Volumes` array
+ /// entry. Pod validation will reject the pod if the concatenated name
+ /// is not valid for a PVC (for example, too long).
+ ///
+ /// An existing PVC with that name that is not owned by the pod
+ /// will *not* be used for the pod to avoid using an unrelated
+ /// volume by mistake. Starting the pod is then blocked until
+ /// the unrelated PVC is removed. If such a pre-created PVC is
+ /// meant to be used by the pod, the PVC has to updated with an
+ /// owner reference to the pod once the pod exists. Normally
+ /// this should not be necessary, but it may be useful when
+ /// manually reconstructing a broken cluster.
+ ///
+ /// This field is read-only and no changes will be made by Kubernetes
+ /// to the PVC after it has been created.
+ ///
+ /// Required, must not be nil.
+ ///
+ [JsonPropertyName("volumeClaimTemplate")]
+ public V1ClusterSpecEphemeralVolumeSourceVolumeClaimTemplate? VolumeClaimTemplate { get; set; }
+}
+
+///
+/// EphemeralVolumesSizeLimit allows the user to set the limits for the ephemeral
+/// volumes
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecEphemeralVolumesSizeLimit
+{
+ /// Shm is the size limit of the shared memory volume
+ [JsonPropertyName("shm")]
+ public IntOrString? Shm { get; set; }
+
+ /// TemporaryData is the size limit of the temporary data volume
+ [JsonPropertyName("temporaryData")]
+ public IntOrString? TemporaryData { get; set; }
+}
+
+/// The connection string to be used
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsConnectionString
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The storage account where to upload data
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsStorageAccount
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// The storage account key to be used in conjunction
+/// with the storage account name
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsStorageKey
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// A shared-access-signature to be used in conjunction with
+/// the storage account name
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsStorageSasToken
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to Azure Blob Storage
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentials
+{
+ /// The connection string to be used
+ [JsonPropertyName("connectionString")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsConnectionString? ConnectionString { get; set; }
+
+ /// Use the Azure AD based authentication without providing explicitly the keys.
+ [JsonPropertyName("inheritFromAzureAD")]
+ public bool? InheritFromAzureAD { get; set; }
+
+ /// The storage account where to upload data
+ [JsonPropertyName("storageAccount")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsStorageAccount? StorageAccount { get; set; }
+
+ ///
+ /// The storage account key to be used in conjunction
+ /// with the storage account name
+ ///
+ [JsonPropertyName("storageKey")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsStorageKey? StorageKey { get; set; }
+
+ ///
+ /// A shared-access-signature to be used in conjunction with
+ /// the storage account name
+ ///
+ [JsonPropertyName("storageSasToken")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentialsStorageSasToken? StorageSasToken { get; set; }
+
+ ///
+ /// Use the default Azure authentication flow, which includes DefaultAzureCredential.
+ /// This allows authentication using environment variables and managed identities.
+ ///
+ [JsonPropertyName("useDefaultAzureCredentials")]
+ public bool? UseDefaultAzureCredentials { get; set; }
+}
+
+///
+/// Compress a backup file (a tar file per tablespace) while streaming it
+/// to the object store. Available options are empty string (no
+/// compression, default), `gzip`, `bzip2`, and `snappy`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecExternalClustersBarmanObjectStoreDataCompressionEnum
+{
+ [EnumMember(Value = "bzip2"), JsonStringEnumMemberName("bzip2")]
+ Bzip2,
+ [EnumMember(Value = "gzip"), JsonStringEnumMemberName("gzip")]
+ Gzip,
+ [EnumMember(Value = "snappy"), JsonStringEnumMemberName("snappy")]
+ Snappy
+}
+
+///
+/// Whenever to force the encryption of files (if the bucket is
+/// not already configured for that).
+/// Allowed options are empty string (use the bucket policy, default),
+/// `AES256` and `aws:kms`
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecExternalClustersBarmanObjectStoreDataEncryptionEnum
+{
+ [EnumMember(Value = "AES256"), JsonStringEnumMemberName("AES256")]
+ AES256,
+ [EnumMember(Value = "aws:kms"), JsonStringEnumMemberName("aws:kms")]
+ AwsKms
+}
+
+///
+/// The configuration to be used to backup the data files
+/// When not defined, base backups files will be stored uncompressed and may
+/// be unencrypted in the object store, according to the bucket default
+/// policy.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreData
+{
+ ///
+ /// AdditionalCommandArgs represents additional arguments that can be appended
+ /// to the 'barman-cloud-backup' command-line invocation. These arguments
+ /// provide flexibility to customize the backup process further according to
+ /// specific requirements or configurations.
+ ///
+ /// Example:
+ /// In a scenario where specialized backup options are required, such as setting
+ /// a specific timeout or defining custom behavior, users can use this field
+ /// to specify additional command arguments.
+ ///
+ /// Note:
+ /// It's essential to ensure that the provided arguments are valid and supported
+ /// by the 'barman-cloud-backup' command, to avoid potential errors or unintended
+ /// behavior during execution.
+ ///
+ [JsonPropertyName("additionalCommandArgs")]
+ public IList? AdditionalCommandArgs { get; set; }
+
+ ///
+ /// Compress a backup file (a tar file per tablespace) while streaming it
+ /// to the object store. Available options are empty string (no
+ /// compression, default), `gzip`, `bzip2`, and `snappy`.
+ ///
+ [JsonPropertyName("compression")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreDataCompressionEnum? Compression { get; set; }
+
+ ///
+ /// Whenever to force the encryption of files (if the bucket is
+ /// not already configured for that).
+ /// Allowed options are empty string (use the bucket policy, default),
+ /// `AES256` and `aws:kms`
+ ///
+ [JsonPropertyName("encryption")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreDataEncryptionEnum? Encryption { get; set; }
+
+ ///
+ /// Control whether the I/O workload for the backup initial checkpoint will
+ /// be limited, according to the `checkpoint_completion_target` setting on
+ /// the PostgreSQL server. If set to true, an immediate checkpoint will be
+ /// used, meaning PostgreSQL will complete the checkpoint as soon as
+ /// possible. `false` by default.
+ ///
+ [JsonPropertyName("immediateCheckpoint")]
+ public bool? ImmediateCheckpoint { get; set; }
+
+ ///
+ /// The number of parallel jobs to be used to upload the backup, defaults
+ /// to 2
+ ///
+ [JsonPropertyName("jobs")]
+ public int? Jobs { get; set; }
+}
+
+///
+/// EndpointCA store the CA bundle of the barman endpoint.
+/// Useful when using self-signed certificates to avoid
+/// errors with certificate issuer and barman-cloud-wal-archive
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreEndpointCA
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The secret containing the Google Cloud Storage JSON file with the credentials
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreGoogleCredentialsApplicationCredentials
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to Google Cloud Storage
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreGoogleCredentials
+{
+ /// The secret containing the Google Cloud Storage JSON file with the credentials
+ [JsonPropertyName("applicationCredentials")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreGoogleCredentialsApplicationCredentials? ApplicationCredentials { get; set; }
+
+ ///
+ /// If set to true, will presume that it's running inside a GKE environment,
+ /// default to false.
+ ///
+ [JsonPropertyName("gkeEnvironment")]
+ public bool? GkeEnvironment { get; set; }
+}
+
+/// The reference to the access key id
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsAccessKeyId
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The reference to the secret containing the region name
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsRegion
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The reference to the secret access key
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsSecretAccessKey
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The references to the session key
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsSessionToken
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// The credentials to use to upload data to S3
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreS3Credentials
+{
+ /// The reference to the access key id
+ [JsonPropertyName("accessKeyId")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsAccessKeyId? AccessKeyId { get; set; }
+
+ /// Use the role based authentication without providing explicitly the keys.
+ [JsonPropertyName("inheritFromIAMRole")]
+ public bool? InheritFromIAMRole { get; set; }
+
+ /// The reference to the secret containing the region name
+ [JsonPropertyName("region")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsRegion? Region { get; set; }
+
+ /// The reference to the secret access key
+ [JsonPropertyName("secretAccessKey")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsSecretAccessKey? SecretAccessKey { get; set; }
+
+ /// The references to the session key
+ [JsonPropertyName("sessionToken")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreS3CredentialsSessionToken? SessionToken { get; set; }
+}
+
+///
+/// Compress a WAL file before sending it to the object store. Available
+/// options are empty string (no compression, default), `gzip`, `bzip2`,
+/// `lz4`, `snappy`, `xz`, and `zstd`.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecExternalClustersBarmanObjectStoreWalCompressionEnum
+{
+ [EnumMember(Value = "bzip2"), JsonStringEnumMemberName("bzip2")]
+ Bzip2,
+ [EnumMember(Value = "gzip"), JsonStringEnumMemberName("gzip")]
+ Gzip,
+ [EnumMember(Value = "lz4"), JsonStringEnumMemberName("lz4")]
+ Lz4,
+ [EnumMember(Value = "snappy"), JsonStringEnumMemberName("snappy")]
+ Snappy,
+ [EnumMember(Value = "xz"), JsonStringEnumMemberName("xz")]
+ Xz,
+ [EnumMember(Value = "zstd"), JsonStringEnumMemberName("zstd")]
+ Zstd
+}
+
+///
+/// Whenever to force the encryption of files (if the bucket is
+/// not already configured for that).
+/// Allowed options are empty string (use the bucket policy, default),
+/// `AES256` and `aws:kms`
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecExternalClustersBarmanObjectStoreWalEncryptionEnum
+{
+ [EnumMember(Value = "AES256"), JsonStringEnumMemberName("AES256")]
+ AES256,
+ [EnumMember(Value = "aws:kms"), JsonStringEnumMemberName("aws:kms")]
+ AwsKms
+}
+
+///
+/// The configuration for the backup of the WAL stream.
+/// When not defined, WAL files will be stored uncompressed and may be
+/// unencrypted in the object store, according to the bucket default policy.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStoreWal
+{
+ ///
+ /// Additional arguments that can be appended to the 'barman-cloud-wal-archive'
+ /// command-line invocation. These arguments provide flexibility to customize
+ /// the WAL archive process further, according to specific requirements or configurations.
+ ///
+ /// Example:
+ /// In a scenario where specialized backup options are required, such as setting
+ /// a specific timeout or defining custom behavior, users can use this field
+ /// to specify additional command arguments.
+ ///
+ /// Note:
+ /// It's essential to ensure that the provided arguments are valid and supported
+ /// by the 'barman-cloud-wal-archive' command, to avoid potential errors or unintended
+ /// behavior during execution.
+ ///
+ [JsonPropertyName("archiveAdditionalCommandArgs")]
+ public IList? ArchiveAdditionalCommandArgs { get; set; }
+
+ ///
+ /// Compress a WAL file before sending it to the object store. Available
+ /// options are empty string (no compression, default), `gzip`, `bzip2`,
+ /// `lz4`, `snappy`, `xz`, and `zstd`.
+ ///
+ [JsonPropertyName("compression")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreWalCompressionEnum? Compression { get; set; }
+
+ ///
+ /// Whenever to force the encryption of files (if the bucket is
+ /// not already configured for that).
+ /// Allowed options are empty string (use the bucket policy, default),
+ /// `AES256` and `aws:kms`
+ ///
+ [JsonPropertyName("encryption")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreWalEncryptionEnum? Encryption { get; set; }
+
+ ///
+ /// Number of WAL files to be either archived in parallel (when the
+ /// PostgreSQL instance is archiving to a backup object store) or
+ /// restored in parallel (when a PostgreSQL standby is fetching WAL
+ /// files from a recovery object store). If not specified, WAL files
+ /// will be processed one at a time. It accepts a positive integer as a
+ /// value - with 1 being the minimum accepted value.
+ ///
+ [JsonPropertyName("maxParallel")]
+ public int? MaxParallel { get; set; }
+
+ ///
+ /// Additional arguments that can be appended to the 'barman-cloud-wal-restore'
+ /// command-line invocation. These arguments provide flexibility to customize
+ /// the WAL restore process further, according to specific requirements or configurations.
+ ///
+ /// Example:
+ /// In a scenario where specialized backup options are required, such as setting
+ /// a specific timeout or defining custom behavior, users can use this field
+ /// to specify additional command arguments.
+ ///
+ /// Note:
+ /// It's essential to ensure that the provided arguments are valid and supported
+ /// by the 'barman-cloud-wal-restore' command, to avoid potential errors or unintended
+ /// behavior during execution.
+ ///
+ [JsonPropertyName("restoreAdditionalCommandArgs")]
+ public IList? RestoreAdditionalCommandArgs { get; set; }
+}
+
+/// The configuration for the barman-cloud tool suite
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersBarmanObjectStore
+{
+ /// The credentials to use to upload data to Azure Blob Storage
+ [JsonPropertyName("azureCredentials")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreAzureCredentials? AzureCredentials { get; set; }
+
+ ///
+ /// The configuration to be used to backup the data files
+ /// When not defined, base backups files will be stored uncompressed and may
+ /// be unencrypted in the object store, according to the bucket default
+ /// policy.
+ ///
+ [JsonPropertyName("data")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreData? Data { get; set; }
+
+ ///
+ /// The path where to store the backup (i.e. s3://bucket/path/to/folder)
+ /// this path, with different destination folders, will be used for WALs
+ /// and for data
+ ///
+ [JsonPropertyName("destinationPath")]
+ public required string DestinationPath { get; set; }
+
+ ///
+ /// EndpointCA store the CA bundle of the barman endpoint.
+ /// Useful when using self-signed certificates to avoid
+ /// errors with certificate issuer and barman-cloud-wal-archive
+ ///
+ [JsonPropertyName("endpointCA")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreEndpointCA? EndpointCA { get; set; }
+
+ ///
+ /// Endpoint to be used to upload data to the cloud,
+ /// overriding the automatic endpoint discovery
+ ///
+ [JsonPropertyName("endpointURL")]
+ public string? EndpointURL { get; set; }
+
+ /// The credentials to use to upload data to Google Cloud Storage
+ [JsonPropertyName("googleCredentials")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreGoogleCredentials? GoogleCredentials { get; set; }
+
+ ///
+ /// HistoryTags is a list of key value pairs that will be passed to the
+ /// Barman --history-tags option.
+ ///
+ [JsonPropertyName("historyTags")]
+ public IDictionary? HistoryTags { get; set; }
+
+ /// The credentials to use to upload data to S3
+ [JsonPropertyName("s3Credentials")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreS3Credentials? S3Credentials { get; set; }
+
+ ///
+ /// The server name on S3, the cluster name is used if this
+ /// parameter is omitted
+ ///
+ [JsonPropertyName("serverName")]
+ public string? ServerName { get; set; }
+
+ ///
+ /// Tags is a list of key value pairs that will be passed to the
+ /// Barman --tags option.
+ ///
+ [JsonPropertyName("tags")]
+ public IDictionary? Tags { get; set; }
+
+ ///
+ /// The configuration for the backup of the WAL stream.
+ /// When not defined, WAL files will be stored uncompressed and may be
+ /// unencrypted in the object store, according to the bucket default policy.
+ ///
+ [JsonPropertyName("wal")]
+ public V1ClusterSpecExternalClustersBarmanObjectStoreWal? Wal { get; set; }
+}
+
+///
+/// The reference to the password to be used to connect to the server.
+/// If a password is provided, CloudNativePG creates a PostgreSQL
+/// passfile at `/controller/external/NAME/pass` (where "NAME" is the
+/// cluster's name). This passfile is automatically referenced in the
+/// connection string when establishing a connection to the remote
+/// PostgreSQL server from the current PostgreSQL `Cluster`. This ensures
+/// secure and efficient password management for external clusters.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersPassword
+{
+ /// The key of the secret to select from. Must be a valid secret key.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+///
+/// The configuration of the plugin that is taking care
+/// of WAL archiving and backups for this external cluster
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersPlugin
+{
+ /// Enabled is true if this plugin will be used
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+
+ ///
+ /// Marks the plugin as the WAL archiver. At most one plugin can be
+ /// designated as a WAL archiver. This cannot be enabled if the
+ /// `.spec.backup.barmanObjectStore` configuration is present.
+ ///
+ [JsonPropertyName("isWALArchiver")]
+ public bool? IsWALArchiver { get; set; }
+
+ /// Name is the plugin name
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ /// Parameters is the configuration of the plugin
+ [JsonPropertyName("parameters")]
+ public IDictionary? Parameters { get; set; }
+}
+
+///
+/// The reference to an SSL certificate to be used to connect to this
+/// instance
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersSslCert
+{
+ /// The key of the secret to select from. Must be a valid secret key.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+///
+/// The reference to an SSL private key to be used to connect to this
+/// instance
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersSslKey
+{
+ /// The key of the secret to select from. Must be a valid secret key.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+///
+/// The reference to an SSL CA public key to be used to connect to this
+/// instance
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClustersSslRootCert
+{
+ /// The key of the secret to select from. Must be a valid secret key.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+///
+/// ExternalCluster represents the connection parameters to an
+/// external cluster which is used in the other sections of the configuration
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecExternalClusters
+{
+ /// The configuration for the barman-cloud tool suite
+ [JsonPropertyName("barmanObjectStore")]
+ public V1ClusterSpecExternalClustersBarmanObjectStore? BarmanObjectStore { get; set; }
+
+ /// The list of connection parameters, such as dbname, host, username, etc
+ [JsonPropertyName("connectionParameters")]
+ public IDictionary? ConnectionParameters { get; set; }
+
+ /// The server name, required
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// The reference to the password to be used to connect to the server.
+ /// If a password is provided, CloudNativePG creates a PostgreSQL
+ /// passfile at `/controller/external/NAME/pass` (where "NAME" is the
+ /// cluster's name). This passfile is automatically referenced in the
+ /// connection string when establishing a connection to the remote
+ /// PostgreSQL server from the current PostgreSQL `Cluster`. This ensures
+ /// secure and efficient password management for external clusters.
+ ///
+ [JsonPropertyName("password")]
+ public V1ClusterSpecExternalClustersPassword? Password { get; set; }
+
+ ///
+ /// The configuration of the plugin that is taking care
+ /// of WAL archiving and backups for this external cluster
+ ///
+ [JsonPropertyName("plugin")]
+ public V1ClusterSpecExternalClustersPlugin? Plugin { get; set; }
+
+ ///
+ /// The reference to an SSL certificate to be used to connect to this
+ /// instance
+ ///
+ [JsonPropertyName("sslCert")]
+ public V1ClusterSpecExternalClustersSslCert? SslCert { get; set; }
+
+ ///
+ /// The reference to an SSL private key to be used to connect to this
+ /// instance
+ ///
+ [JsonPropertyName("sslKey")]
+ public V1ClusterSpecExternalClustersSslKey? SslKey { get; set; }
+
+ ///
+ /// The reference to an SSL CA public key to be used to connect to this
+ /// instance
+ ///
+ [JsonPropertyName("sslRootCert")]
+ public V1ClusterSpecExternalClustersSslRootCert? SslRootCert { get; set; }
+}
+
+/// Defines the major PostgreSQL version we want to use within an ImageCatalog
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecImageCatalogRef
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// The major version of PostgreSQL we want to use from the ImageCatalog
+ [JsonPropertyName("major")]
+ public required int Major { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// LocalObjectReference contains enough information to let you locate a
+/// local object with a known type inside the same namespace
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecImagePullSecrets
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// Metadata that will be inherited by all objects related to the Cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecInheritedMetadata
+{
+ [JsonPropertyName("annotations")]
+ public IDictionary? Annotations { get; set; }
+
+ [JsonPropertyName("labels")]
+ public IDictionary? Labels { get; set; }
+}
+
+/// The instances' log level, one of the following values: error, warning, info (default), debug, trace
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecLogLevelEnum
+{
+ [EnumMember(Value = "error"), JsonStringEnumMemberName("error")]
+ Error,
+ [EnumMember(Value = "warning"), JsonStringEnumMemberName("warning")]
+ Warning,
+ [EnumMember(Value = "info"), JsonStringEnumMemberName("info")]
+ Info,
+ [EnumMember(Value = "debug"), JsonStringEnumMemberName("debug")]
+ Debug,
+ [EnumMember(Value = "trace"), JsonStringEnumMemberName("trace")]
+ Trace
+}
+
+/// Ensure the role is `present` or `absent` - defaults to "present"
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecManagedRolesEnsureEnum
+{
+ [EnumMember(Value = "present"), JsonStringEnumMemberName("present")]
+ Present,
+ [EnumMember(Value = "absent"), JsonStringEnumMemberName("absent")]
+ Absent
+}
+
+///
+/// Secret containing the password of the role (if present)
+/// If null, the password will be ignored unless DisablePassword is set
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedRolesPasswordSecret
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// RoleConfiguration is the representation, in Kubernetes, of a PostgreSQL role
+/// with the additional field Ensure specifying whether to ensure the presence or
+/// absence of the role in the database
+///
+/// The defaults of the CREATE ROLE command are applied
+/// Reference: https://www.postgresql.org/docs/current/sql-createrole.html
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedRoles
+{
+ ///
+ /// Whether a role bypasses every row-level security (RLS) policy.
+ /// Default is `false`.
+ ///
+ [JsonPropertyName("bypassrls")]
+ public bool? Bypassrls { get; set; }
+
+ /// Description of the role
+ [JsonPropertyName("comment")]
+ public string? Comment { get; set; }
+
+ ///
+ /// If the role can log in, this specifies how many concurrent
+ /// connections the role can make. `-1` (the default) means no limit.
+ ///
+ [JsonPropertyName("connectionLimit")]
+ public long? ConnectionLimit { get; set; }
+
+ ///
+ /// When set to `true`, the role being defined will be allowed to create
+ /// new databases. Specifying `false` (default) will deny a role the
+ /// ability to create databases.
+ ///
+ [JsonPropertyName("createdb")]
+ public bool? Createdb { get; set; }
+
+ ///
+ /// Whether the role will be permitted to create, alter, drop, comment
+ /// on, change the security label for, and grant or revoke membership in
+ /// other roles. Default is `false`.
+ ///
+ [JsonPropertyName("createrole")]
+ public bool? Createrole { get; set; }
+
+ /// DisablePassword indicates that a role's password should be set to NULL in Postgres
+ [JsonPropertyName("disablePassword")]
+ public bool? DisablePassword { get; set; }
+
+ /// Ensure the role is `present` or `absent` - defaults to "present"
+ [JsonPropertyName("ensure")]
+ public V1ClusterSpecManagedRolesEnsureEnum? Ensure { get; set; }
+
+ ///
+ /// List of one or more existing roles to which this role will be
+ /// immediately added as a new member. Default empty.
+ ///
+ [JsonPropertyName("inRoles")]
+ public IList? InRoles { get; set; }
+
+ ///
+ /// Whether a role "inherits" the privileges of roles it is a member of.
+ /// Defaults is `true`.
+ ///
+ [JsonPropertyName("inherit")]
+ public bool? Inherit { get; set; }
+
+ ///
+ /// Whether the role is allowed to log in. A role having the `login`
+ /// attribute can be thought of as a user. Roles without this attribute
+ /// are useful for managing database privileges, but are not users in
+ /// the usual sense of the word. Default is `false`.
+ ///
+ [JsonPropertyName("login")]
+ public bool? Login { get; set; }
+
+ /// Name of the role
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Secret containing the password of the role (if present)
+ /// If null, the password will be ignored unless DisablePassword is set
+ ///
+ [JsonPropertyName("passwordSecret")]
+ public V1ClusterSpecManagedRolesPasswordSecret? PasswordSecret { get; set; }
+
+ ///
+ /// Whether a role is a replication role. A role must have this
+ /// attribute (or be a superuser) in order to be able to connect to the
+ /// server in replication mode (physical or logical replication) and in
+ /// order to be able to create or drop replication slots. A role having
+ /// the `replication` attribute is a very highly privileged role, and
+ /// should only be used on roles actually used for replication. Default
+ /// is `false`.
+ ///
+ [JsonPropertyName("replication")]
+ public bool? Replication { get; set; }
+
+ ///
+ /// Whether the role is a `superuser` who can override all access
+ /// restrictions within the database - superuser status is dangerous and
+ /// should be used only when really needed. You must yourself be a
+ /// superuser to create a new superuser. Defaults is `false`.
+ ///
+ [JsonPropertyName("superuser")]
+ public bool? Superuser { get; set; }
+
+ ///
+ /// Date and time after which the role's password is no longer valid.
+ /// When omitted, the password will never expire (default).
+ ///
+ [JsonPropertyName("validUntil")]
+ public DateTime? ValidUntil { get; set; }
+}
+
+///
+/// SelectorType specifies the type of selectors that the service will have.
+/// Valid values are "rw", "r", and "ro", representing read-write, read, and read-only services.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecManagedServicesAdditionalSelectorTypeEnum
+{
+ [EnumMember(Value = "rw"), JsonStringEnumMemberName("rw")]
+ Rw,
+ [EnumMember(Value = "r"), JsonStringEnumMemberName("r")]
+ R,
+ [EnumMember(Value = "ro"), JsonStringEnumMemberName("ro")]
+ Ro
+}
+
+///
+/// Standard object's metadata.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditionalServiceTemplateMetadata
+{
+ ///
+ /// Annotations is an unstructured key value map stored with a resource that may be
+ /// set by external tools to store and retrieve arbitrary metadata. They are not
+ /// queryable and should be preserved when modifying objects.
+ /// More info: http://kubernetes.io/docs/user-guide/annotations
+ ///
+ [JsonPropertyName("annotations")]
+ public IDictionary? Annotations { get; set; }
+
+ ///
+ /// Map of string keys and values that can be used to organize and categorize
+ /// (scope and select) objects. May match selectors of replication controllers
+ /// and services.
+ /// More info: http://kubernetes.io/docs/user-guide/labels
+ ///
+ [JsonPropertyName("labels")]
+ public IDictionary? Labels { get; set; }
+
+ /// The name of the resource. Only supported for certain types
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+}
+
+/// ServicePort contains information on service's port.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditionalServiceTemplateSpecPorts
+{
+ ///
+ /// The application protocol for this port.
+ /// This is used as a hint for implementations to offer richer behavior for protocols that they understand.
+ /// This field follows standard Kubernetes label syntax.
+ /// Valid values are either:
+ ///
+ /// * Un-prefixed protocol names - reserved for IANA standard service names (as per
+ /// RFC-6335 and https://www.iana.org/assignments/service-names).
+ ///
+ /// * Kubernetes-defined prefixed names:
+ /// * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior-
+ /// * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455
+ /// * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455
+ ///
+ /// * Other protocols should use implementation-defined prefixed names such as
+ /// mycompany.com/my-custom-protocol.
+ ///
+ [JsonPropertyName("appProtocol")]
+ public string? AppProtocol { get; set; }
+
+ ///
+ /// The name of this port within the service. This must be a DNS_LABEL.
+ /// All ports within a ServiceSpec must have unique names. When considering
+ /// the endpoints for a Service, this must match the 'name' field in the
+ /// EndpointPort.
+ /// Optional if only one ServicePort is defined on this service.
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// The port on each node on which this service is exposed when type is
+ /// NodePort or LoadBalancer. Usually assigned by the system. If a value is
+ /// specified, in-range, and not in use it will be used, otherwise the
+ /// operation will fail. If not specified, a port will be allocated if this
+ /// Service requires one. If this field is specified when creating a
+ /// Service which does not need it, creation will fail. This field will be
+ /// wiped when updating a Service to no longer need it (e.g. changing type
+ /// from NodePort to ClusterIP).
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
+ ///
+ [JsonPropertyName("nodePort")]
+ public int? NodePort { get; set; }
+
+ /// The port that will be exposed by this service.
+ [JsonPropertyName("port")]
+ public required int Port { get; set; }
+
+ ///
+ /// The IP protocol for this port. Supports "TCP", "UDP", and "SCTP".
+ /// Default is TCP.
+ ///
+ [JsonPropertyName("protocol")]
+ public string? Protocol { get; set; }
+
+ ///
+ /// Number or name of the port to access on the pods targeted by the service.
+ /// Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
+ /// If this is a string, it will be looked up as a named port in the
+ /// target Pod's container ports. If this is not specified, the value
+ /// of the 'port' field is used (an identity map).
+ /// This field is ignored for services with clusterIP=None, and should be
+ /// omitted or set equal to the 'port' field.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
+ ///
+ [JsonPropertyName("targetPort")]
+ public IntOrString? TargetPort { get; set; }
+}
+
+/// clientIP contains the configurations of Client IP based session affinity.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditionalServiceTemplateSpecSessionAffinityConfigClientIP
+{
+ ///
+ /// timeoutSeconds specifies the seconds of ClientIP type session sticky time.
+ /// The value must be >0 & & <=86400(for 1 day) if ServiceAffinity == "ClientIP".
+ /// Default value is 10800(for 3 hours).
+ ///
+ [JsonPropertyName("timeoutSeconds")]
+ public int? TimeoutSeconds { get; set; }
+}
+
+/// sessionAffinityConfig contains the configurations of session affinity.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditionalServiceTemplateSpecSessionAffinityConfig
+{
+ /// clientIP contains the configurations of Client IP based session affinity.
+ [JsonPropertyName("clientIP")]
+ public V1ClusterSpecManagedServicesAdditionalServiceTemplateSpecSessionAffinityConfigClientIP? ClientIP { get; set; }
+}
+
+///
+/// Specification of the desired behavior of the service.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditionalServiceTemplateSpec
+{
+ ///
+ /// allocateLoadBalancerNodePorts defines if NodePorts will be automatically
+ /// allocated for services with type LoadBalancer. Default is "true". It
+ /// may be set to "false" if the cluster load-balancer does not rely on
+ /// NodePorts. If the caller requests specific NodePorts (by specifying a
+ /// value), those requests will be respected, regardless of this field.
+ /// This field may only be set for services with type LoadBalancer and will
+ /// be cleared if the type is changed to any other type.
+ ///
+ [JsonPropertyName("allocateLoadBalancerNodePorts")]
+ public bool? AllocateLoadBalancerNodePorts { get; set; }
+
+ ///
+ /// clusterIP is the IP address of the service and is usually assigned
+ /// randomly. If an address is specified manually, is in-range (as per
+ /// system configuration), and is not in use, it will be allocated to the
+ /// service; otherwise creation of the service will fail. This field may not
+ /// be changed through updates unless the type field is also being changed
+ /// to ExternalName (which requires this field to be blank) or the type
+ /// field is being changed from ExternalName (in which case this field may
+ /// optionally be specified, as describe above). Valid values are "None",
+ /// empty string (" "), or a valid IP address. Setting this to "None" makes a
+ /// "headless service" (no virtual IP), which is useful when direct endpoint
+ /// connections are preferred and proxying is not required. Only applies to
+ /// types ClusterIP, NodePort, and LoadBalancer. If this field is specified
+ /// when creating a Service of type ExternalName, creation will fail. This
+ /// field will be wiped when updating a Service to type ExternalName.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
+ ///
+ [JsonPropertyName("clusterIP")]
+ public string? ClusterIP { get; set; }
+
+ ///
+ /// ClusterIPs is a list of IP addresses assigned to this service, and are
+ /// usually assigned randomly. If an address is specified manually, is
+ /// in-range (as per system configuration), and is not in use, it will be
+ /// allocated to the service; otherwise creation of the service will fail.
+ /// This field may not be changed through updates unless the type field is
+ /// also being changed to ExternalName (which requires this field to be
+ /// empty) or the type field is being changed from ExternalName (in which
+ /// case this field may optionally be specified, as describe above). Valid
+ /// values are "None", empty string (" "), or a valid IP address. Setting
+ /// this to "None" makes a "headless service" (no virtual IP), which is
+ /// useful when direct endpoint connections are preferred and proxying is
+ /// not required. Only applies to types ClusterIP, NodePort, and
+ /// LoadBalancer. If this field is specified when creating a Service of type
+ /// ExternalName, creation will fail. This field will be wiped when updating
+ /// a Service to type ExternalName. If this field is not specified, it will
+ /// be initialized from the clusterIP field. If this field is specified,
+ /// clients must ensure that clusterIPs[0] and clusterIP have the same
+ /// value.
+ ///
+ /// This field may hold a maximum of two entries (dual-stack IPs, in either order).
+ /// These IPs must correspond to the values of the ipFamilies field. Both
+ /// clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
+ ///
+ [JsonPropertyName("clusterIPs")]
+ public IList? ClusterIPs { get; set; }
+
+ ///
+ /// externalIPs is a list of IP addresses for which nodes in the cluster
+ /// will also accept traffic for this service. These IPs are not managed by
+ /// Kubernetes. The user is responsible for ensuring that traffic arrives
+ /// at a node with this IP. A common example is external load-balancers
+ /// that are not part of the Kubernetes system.
+ ///
+ [JsonPropertyName("externalIPs")]
+ public IList? ExternalIPs { get; set; }
+
+ ///
+ /// externalName is the external reference that discovery mechanisms will
+ /// return as an alias for this service (e.g. a DNS CNAME record). No
+ /// proxying will be involved. Must be a lowercase RFC-1123 hostname
+ /// (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName".
+ ///
+ [JsonPropertyName("externalName")]
+ public string? ExternalName { get; set; }
+
+ ///
+ /// externalTrafficPolicy describes how nodes distribute service traffic they
+ /// receive on one of the Service's "externally-facing" addresses (NodePorts,
+ /// ExternalIPs, and LoadBalancer IPs). If set to "Local", the proxy will configure
+ /// the service in a way that assumes that external load balancers will take care
+ /// of balancing the service traffic between nodes, and so each node will deliver
+ /// traffic only to the node-local endpoints of the service, without masquerading
+ /// the client source IP. (Traffic mistakenly sent to a node with no endpoints will
+ /// be dropped.) The default value, "Cluster", uses the standard behavior of
+ /// routing to all endpoints evenly (possibly modified by topology and other
+ /// features). Note that traffic sent to an External IP or LoadBalancer IP from
+ /// within the cluster will always get "Cluster" semantics, but clients sending to
+ /// a NodePort from within the cluster may need to take traffic policy into account
+ /// when picking a node.
+ ///
+ [JsonPropertyName("externalTrafficPolicy")]
+ public string? ExternalTrafficPolicy { get; set; }
+
+ ///
+ /// healthCheckNodePort specifies the healthcheck nodePort for the service.
+ /// This only applies when type is set to LoadBalancer and
+ /// externalTrafficPolicy is set to Local. If a value is specified, is
+ /// in-range, and is not in use, it will be used. If not specified, a value
+ /// will be automatically allocated. External systems (e.g. load-balancers)
+ /// can use this port to determine if a given node holds endpoints for this
+ /// service or not. If this field is specified when creating a Service
+ /// which does not need it, creation will fail. This field will be wiped
+ /// when updating a Service to no longer need it (e.g. changing type).
+ /// This field cannot be updated once set.
+ ///
+ [JsonPropertyName("healthCheckNodePort")]
+ public int? HealthCheckNodePort { get; set; }
+
+ ///
+ /// InternalTrafficPolicy describes how nodes distribute service traffic they
+ /// receive on the ClusterIP. If set to "Local", the proxy will assume that pods
+ /// only want to talk to endpoints of the service on the same node as the pod,
+ /// dropping the traffic if there are no local endpoints. The default value,
+ /// "Cluster", uses the standard behavior of routing to all endpoints evenly
+ /// (possibly modified by topology and other features).
+ ///
+ [JsonPropertyName("internalTrafficPolicy")]
+ public string? InternalTrafficPolicy { get; set; }
+
+ ///
+ /// IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this
+ /// service. This field is usually assigned automatically based on cluster
+ /// configuration and the ipFamilyPolicy field. If this field is specified
+ /// manually, the requested family is available in the cluster,
+ /// and ipFamilyPolicy allows it, it will be used; otherwise creation of
+ /// the service will fail. This field is conditionally mutable: it allows
+ /// for adding or removing a secondary IP family, but it does not allow
+ /// changing the primary IP family of the Service. Valid values are "IPv4"
+ /// and "IPv6". This field only applies to Services of types ClusterIP,
+ /// NodePort, and LoadBalancer, and does apply to "headless" services.
+ /// This field will be wiped when updating a Service to type ExternalName.
+ ///
+ /// This field may hold a maximum of two entries (dual-stack families, in
+ /// either order). These families must correspond to the values of the
+ /// clusterIPs field, if specified. Both clusterIPs and ipFamilies are
+ /// governed by the ipFamilyPolicy field.
+ ///
+ [JsonPropertyName("ipFamilies")]
+ public IList? IpFamilies { get; set; }
+
+ ///
+ /// IPFamilyPolicy represents the dual-stack-ness requested or required by
+ /// this Service. If there is no value provided, then this field will be set
+ /// to SingleStack. Services can be "SingleStack" (a single IP family),
+ /// "PreferDualStack" (two IP families on dual-stack configured clusters or
+ /// a single IP family on single-stack clusters), or "RequireDualStack"
+ /// (two IP families on dual-stack configured clusters, otherwise fail). The
+ /// ipFamilies and clusterIPs fields depend on the value of this field. This
+ /// field will be wiped when updating a service to type ExternalName.
+ ///
+ [JsonPropertyName("ipFamilyPolicy")]
+ public string? IpFamilyPolicy { get; set; }
+
+ ///
+ /// loadBalancerClass is the class of the load balancer implementation this Service belongs to.
+ /// If specified, the value of this field must be a label-style identifier, with an optional prefix,
+ /// e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users.
+ /// This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load
+ /// balancer implementation is used, today this is typically done through the cloud provider integration,
+ /// but should apply for any default implementation. If set, it is assumed that a load balancer
+ /// implementation is watching for Services with a matching class. Any default load balancer
+ /// implementation (e.g. cloud providers) should ignore Services that set this field.
+ /// This field can only be set when creating or updating a Service to type 'LoadBalancer'.
+ /// Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type.
+ ///
+ [JsonPropertyName("loadBalancerClass")]
+ public string? LoadBalancerClass { get; set; }
+
+ ///
+ /// Only applies to Service Type: LoadBalancer.
+ /// This feature depends on whether the underlying cloud-provider supports specifying
+ /// the loadBalancerIP when a load balancer is created.
+ /// This field will be ignored if the cloud-provider does not support the feature.
+ /// Deprecated: This field was under-specified and its meaning varies across implementations.
+ /// Using it is non-portable and it may not support dual-stack.
+ /// Users are encouraged to use implementation-specific annotations when available.
+ ///
+ [JsonPropertyName("loadBalancerIP")]
+ public string? LoadBalancerIP { get; set; }
+
+ ///
+ /// If specified and supported by the platform, this will restrict traffic through the cloud-provider
+ /// load-balancer will be restricted to the specified client IPs. This field will be ignored if the
+ /// cloud-provider does not support the feature."
+ /// More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
+ ///
+ [JsonPropertyName("loadBalancerSourceRanges")]
+ public IList? LoadBalancerSourceRanges { get; set; }
+
+ ///
+ /// The list of ports that are exposed by this service.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
+ ///
+ [JsonPropertyName("ports")]
+ public IList? Ports { get; set; }
+
+ ///
+ /// publishNotReadyAddresses indicates that any agent which deals with endpoints for this
+ /// Service should disregard any indications of ready/not-ready.
+ /// The primary use case for setting this field is for a StatefulSet's Headless Service to
+ /// propagate SRV DNS records for its Pods for the purpose of peer discovery.
+ /// The Kubernetes controllers that generate Endpoints and EndpointSlice resources for
+ /// Services interpret this to mean that all endpoints are considered "ready" even if the
+ /// Pods themselves are not. Agents which consume only Kubernetes generated endpoints
+ /// through the Endpoints or EndpointSlice resources can safely assume this behavior.
+ ///
+ [JsonPropertyName("publishNotReadyAddresses")]
+ public bool? PublishNotReadyAddresses { get; set; }
+
+ ///
+ /// Route service traffic to pods with label keys and values matching this
+ /// selector. If empty or not present, the service is assumed to have an
+ /// external process managing its endpoints, which Kubernetes will not
+ /// modify. Only applies to types ClusterIP, NodePort, and LoadBalancer.
+ /// Ignored if type is ExternalName.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/
+ ///
+ [JsonPropertyName("selector")]
+ public IDictionary? Selector { get; set; }
+
+ ///
+ /// Supports "ClientIP" and "None". Used to maintain session affinity.
+ /// Enable client IP based session affinity.
+ /// Must be ClientIP or None.
+ /// Defaults to None.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
+ ///
+ [JsonPropertyName("sessionAffinity")]
+ public string? SessionAffinity { get; set; }
+
+ /// sessionAffinityConfig contains the configurations of session affinity.
+ [JsonPropertyName("sessionAffinityConfig")]
+ public V1ClusterSpecManagedServicesAdditionalServiceTemplateSpecSessionAffinityConfig? SessionAffinityConfig { get; set; }
+
+ ///
+ /// TrafficDistribution offers a way to express preferences for how traffic
+ /// is distributed to Service endpoints. Implementations can use this field
+ /// as a hint, but are not required to guarantee strict adherence. If the
+ /// field is not set, the implementation will apply its default routing
+ /// strategy. If set to "PreferClose", implementations should prioritize
+ /// endpoints that are in the same zone.
+ ///
+ [JsonPropertyName("trafficDistribution")]
+ public string? TrafficDistribution { get; set; }
+
+ ///
+ /// type determines how the Service is exposed. Defaults to ClusterIP. Valid
+ /// options are ExternalName, ClusterIP, NodePort, and LoadBalancer.
+ /// "ClusterIP" allocates a cluster-internal IP address for load-balancing
+ /// to endpoints. Endpoints are determined by the selector or if that is not
+ /// specified, by manual construction of an Endpoints object or
+ /// EndpointSlice objects. If clusterIP is "None", no virtual IP is
+ /// allocated and the endpoints are published as a set of endpoints rather
+ /// than a virtual IP.
+ /// "NodePort" builds on ClusterIP and allocates a port on every node which
+ /// routes to the same endpoints as the clusterIP.
+ /// "LoadBalancer" builds on NodePort and creates an external load-balancer
+ /// (if supported in the current cloud) which routes to the same endpoints
+ /// as the clusterIP.
+ /// "ExternalName" aliases this service to the specified externalName.
+ /// Several other fields do not apply to ExternalName services.
+ /// More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
+ ///
+ [JsonPropertyName("type")]
+ public string? Type { get; set; }
+}
+
+/// ServiceTemplate is the template specification for the service.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditionalServiceTemplate
+{
+ ///
+ /// Standard object's metadata.
+ /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ ///
+ [JsonPropertyName("metadata")]
+ public V1ClusterSpecManagedServicesAdditionalServiceTemplateMetadata? Metadata { get; set; }
+
+ ///
+ /// Specification of the desired behavior of the service.
+ /// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+ ///
+ [JsonPropertyName("spec")]
+ public V1ClusterSpecManagedServicesAdditionalServiceTemplateSpec? Spec { get; set; }
+}
+
+/// UpdateStrategy describes how the service differences should be reconciled
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecManagedServicesAdditionalUpdateStrategyEnum
+{
+ [EnumMember(Value = "patch"), JsonStringEnumMemberName("patch")]
+ Patch,
+ [EnumMember(Value = "replace"), JsonStringEnumMemberName("replace")]
+ Replace
+}
+
+///
+/// ManagedService represents a specific service managed by the cluster.
+/// It includes the type of service and its associated template specification.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServicesAdditional
+{
+ ///
+ /// SelectorType specifies the type of selectors that the service will have.
+ /// Valid values are "rw", "r", and "ro", representing read-write, read, and read-only services.
+ ///
+ [JsonPropertyName("selectorType")]
+ public required V1ClusterSpecManagedServicesAdditionalSelectorTypeEnum SelectorType { get; set; }
+
+ /// ServiceTemplate is the template specification for the service.
+ [JsonPropertyName("serviceTemplate")]
+ public required V1ClusterSpecManagedServicesAdditionalServiceTemplate ServiceTemplate { get; set; }
+
+ /// UpdateStrategy describes how the service differences should be reconciled
+ [JsonPropertyName("updateStrategy")]
+ public V1ClusterSpecManagedServicesAdditionalUpdateStrategyEnum? UpdateStrategy { get; set; }
+}
+
+///
+/// ServiceSelectorType describes a valid value for generating the service selectors.
+/// It indicates which type of service the selector applies to, such as read-write, read, or read-only
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecManagedServicesDisabledDefaultServicesEnum
+{
+ [EnumMember(Value = "rw"), JsonStringEnumMemberName("rw")]
+ Rw,
+ [EnumMember(Value = "r"), JsonStringEnumMemberName("r")]
+ R,
+ [EnumMember(Value = "ro"), JsonStringEnumMemberName("ro")]
+ Ro
+}
+
+/// Services roles managed by the `Cluster`
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManagedServices
+{
+ /// Additional is a list of additional managed services specified by the user.
+ [JsonPropertyName("additional")]
+ public IList? Additional { get; set; }
+
+ ///
+ /// DisabledDefaultServices is a list of service types that are disabled by default.
+ /// Valid values are "r", and "ro", representing read, and read-only services.
+ ///
+ [JsonPropertyName("disabledDefaultServices")]
+ public IList? DisabledDefaultServices { get; set; }
+}
+
+/// The configuration that is used by the portions of PostgreSQL that are managed by the instance manager
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecManaged
+{
+ /// Database roles managed by the `Cluster`
+ [JsonPropertyName("roles")]
+ public IList? Roles { get; set; }
+
+ /// Services roles managed by the `Cluster`
+ [JsonPropertyName("services")]
+ public V1ClusterSpecManagedServices? Services { get; set; }
+}
+
+///
+/// ConfigMapKeySelector contains enough information to let you locate
+/// the key of a ConfigMap
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecMonitoringCustomQueriesConfigMap
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// SecretKeySelector contains enough information to let you locate
+/// the key of a Secret
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecMonitoringCustomQueriesSecret
+{
+ /// The key to select
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// action to perform based on the regex matching.
+///
+/// `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0.
+/// `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0.
+///
+/// Default: "Replace"
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecMonitoringPodMonitorMetricRelabelingsActionEnum
+{
+ [EnumMember(Value = "replace"), JsonStringEnumMemberName("replace")]
+ Replace,
+ [EnumMember(Value = "Replace"), JsonStringEnumMemberName("Replace")]
+ Replace1,
+ [EnumMember(Value = "keep"), JsonStringEnumMemberName("keep")]
+ Keep,
+ [EnumMember(Value = "Keep"), JsonStringEnumMemberName("Keep")]
+ Keep1,
+ [EnumMember(Value = "drop"), JsonStringEnumMemberName("drop")]
+ Drop,
+ [EnumMember(Value = "Drop"), JsonStringEnumMemberName("Drop")]
+ Drop1,
+ [EnumMember(Value = "hashmod"), JsonStringEnumMemberName("hashmod")]
+ Hashmod,
+ [EnumMember(Value = "HashMod"), JsonStringEnumMemberName("HashMod")]
+ HashMod,
+ [EnumMember(Value = "labelmap"), JsonStringEnumMemberName("labelmap")]
+ Labelmap,
+ [EnumMember(Value = "LabelMap"), JsonStringEnumMemberName("LabelMap")]
+ LabelMap,
+ [EnumMember(Value = "labeldrop"), JsonStringEnumMemberName("labeldrop")]
+ Labeldrop,
+ [EnumMember(Value = "LabelDrop"), JsonStringEnumMemberName("LabelDrop")]
+ LabelDrop,
+ [EnumMember(Value = "labelkeep"), JsonStringEnumMemberName("labelkeep")]
+ Labelkeep,
+ [EnumMember(Value = "LabelKeep"), JsonStringEnumMemberName("LabelKeep")]
+ LabelKeep,
+ [EnumMember(Value = "lowercase"), JsonStringEnumMemberName("lowercase")]
+ Lowercase,
+ [EnumMember(Value = "Lowercase"), JsonStringEnumMemberName("Lowercase")]
+ Lowercase1,
+ [EnumMember(Value = "uppercase"), JsonStringEnumMemberName("uppercase")]
+ Uppercase,
+ [EnumMember(Value = "Uppercase"), JsonStringEnumMemberName("Uppercase")]
+ Uppercase1,
+ [EnumMember(Value = "keepequal"), JsonStringEnumMemberName("keepequal")]
+ Keepequal,
+ [EnumMember(Value = "KeepEqual"), JsonStringEnumMemberName("KeepEqual")]
+ KeepEqual,
+ [EnumMember(Value = "dropequal"), JsonStringEnumMemberName("dropequal")]
+ Dropequal,
+ [EnumMember(Value = "DropEqual"), JsonStringEnumMemberName("DropEqual")]
+ DropEqual
+}
+
+///
+/// RelabelConfig allows dynamic rewriting of the label set for targets, alerts,
+/// scraped samples and remote write samples.
+///
+/// More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecMonitoringPodMonitorMetricRelabelings
+{
+ ///
+ /// action to perform based on the regex matching.
+ ///
+ /// `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0.
+ /// `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0.
+ ///
+ /// Default: "Replace"
+ ///
+ [JsonPropertyName("action")]
+ public V1ClusterSpecMonitoringPodMonitorMetricRelabelingsActionEnum? Action { get; set; }
+
+ ///
+ /// modulus to take of the hash of the source label values.
+ ///
+ /// Only applicable when the action is `HashMod`.
+ ///
+ [JsonPropertyName("modulus")]
+ public long? Modulus { get; set; }
+
+ /// regex defines the regular expression against which the extracted value is matched.
+ [JsonPropertyName("regex")]
+ public string? Regex { get; set; }
+
+ ///
+ /// replacement value against which a Replace action is performed if the
+ /// regular expression matches.
+ ///
+ /// Regex capture groups are available.
+ ///
+ [JsonPropertyName("replacement")]
+ public string? Replacement { get; set; }
+
+ /// separator defines the string between concatenated SourceLabels.
+ [JsonPropertyName("separator")]
+ public string? Separator { get; set; }
+
+ ///
+ /// sourceLabels defines the source labels select values from existing labels. Their content is
+ /// concatenated using the configured Separator and matched against the
+ /// configured regular expression.
+ ///
+ [JsonPropertyName("sourceLabels")]
+ public IList? SourceLabels { get; set; }
+
+ ///
+ /// targetLabel defines the label to which the resulting string is written in a replacement.
+ ///
+ /// It is mandatory for `Replace`, `HashMod`, `Lowercase`, `Uppercase`,
+ /// `KeepEqual` and `DropEqual` actions.
+ ///
+ /// Regex capture groups are available.
+ ///
+ [JsonPropertyName("targetLabel")]
+ public string? TargetLabel { get; set; }
+}
+
+///
+/// action to perform based on the regex matching.
+///
+/// `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0.
+/// `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0.
+///
+/// Default: "Replace"
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecMonitoringPodMonitorRelabelingsActionEnum
+{
+ [EnumMember(Value = "replace"), JsonStringEnumMemberName("replace")]
+ Replace,
+ [EnumMember(Value = "Replace"), JsonStringEnumMemberName("Replace")]
+ Replace1,
+ [EnumMember(Value = "keep"), JsonStringEnumMemberName("keep")]
+ Keep,
+ [EnumMember(Value = "Keep"), JsonStringEnumMemberName("Keep")]
+ Keep1,
+ [EnumMember(Value = "drop"), JsonStringEnumMemberName("drop")]
+ Drop,
+ [EnumMember(Value = "Drop"), JsonStringEnumMemberName("Drop")]
+ Drop1,
+ [EnumMember(Value = "hashmod"), JsonStringEnumMemberName("hashmod")]
+ Hashmod,
+ [EnumMember(Value = "HashMod"), JsonStringEnumMemberName("HashMod")]
+ HashMod,
+ [EnumMember(Value = "labelmap"), JsonStringEnumMemberName("labelmap")]
+ Labelmap,
+ [EnumMember(Value = "LabelMap"), JsonStringEnumMemberName("LabelMap")]
+ LabelMap,
+ [EnumMember(Value = "labeldrop"), JsonStringEnumMemberName("labeldrop")]
+ Labeldrop,
+ [EnumMember(Value = "LabelDrop"), JsonStringEnumMemberName("LabelDrop")]
+ LabelDrop,
+ [EnumMember(Value = "labelkeep"), JsonStringEnumMemberName("labelkeep")]
+ Labelkeep,
+ [EnumMember(Value = "LabelKeep"), JsonStringEnumMemberName("LabelKeep")]
+ LabelKeep,
+ [EnumMember(Value = "lowercase"), JsonStringEnumMemberName("lowercase")]
+ Lowercase,
+ [EnumMember(Value = "Lowercase"), JsonStringEnumMemberName("Lowercase")]
+ Lowercase1,
+ [EnumMember(Value = "uppercase"), JsonStringEnumMemberName("uppercase")]
+ Uppercase,
+ [EnumMember(Value = "Uppercase"), JsonStringEnumMemberName("Uppercase")]
+ Uppercase1,
+ [EnumMember(Value = "keepequal"), JsonStringEnumMemberName("keepequal")]
+ Keepequal,
+ [EnumMember(Value = "KeepEqual"), JsonStringEnumMemberName("KeepEqual")]
+ KeepEqual,
+ [EnumMember(Value = "dropequal"), JsonStringEnumMemberName("dropequal")]
+ Dropequal,
+ [EnumMember(Value = "DropEqual"), JsonStringEnumMemberName("DropEqual")]
+ DropEqual
+}
+
+///
+/// RelabelConfig allows dynamic rewriting of the label set for targets, alerts,
+/// scraped samples and remote write samples.
+///
+/// More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecMonitoringPodMonitorRelabelings
+{
+ ///
+ /// action to perform based on the regex matching.
+ ///
+ /// `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0.
+ /// `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0.
+ ///
+ /// Default: "Replace"
+ ///
+ [JsonPropertyName("action")]
+ public V1ClusterSpecMonitoringPodMonitorRelabelingsActionEnum? Action { get; set; }
+
+ ///
+ /// modulus to take of the hash of the source label values.
+ ///
+ /// Only applicable when the action is `HashMod`.
+ ///
+ [JsonPropertyName("modulus")]
+ public long? Modulus { get; set; }
+
+ /// regex defines the regular expression against which the extracted value is matched.
+ [JsonPropertyName("regex")]
+ public string? Regex { get; set; }
+
+ ///
+ /// replacement value against which a Replace action is performed if the
+ /// regular expression matches.
+ ///
+ /// Regex capture groups are available.
+ ///
+ [JsonPropertyName("replacement")]
+ public string? Replacement { get; set; }
+
+ /// separator defines the string between concatenated SourceLabels.
+ [JsonPropertyName("separator")]
+ public string? Separator { get; set; }
+
+ ///
+ /// sourceLabels defines the source labels select values from existing labels. Their content is
+ /// concatenated using the configured Separator and matched against the
+ /// configured regular expression.
+ ///
+ [JsonPropertyName("sourceLabels")]
+ public IList? SourceLabels { get; set; }
+
+ ///
+ /// targetLabel defines the label to which the resulting string is written in a replacement.
+ ///
+ /// It is mandatory for `Replace`, `HashMod`, `Lowercase`, `Uppercase`,
+ /// `KeepEqual` and `DropEqual` actions.
+ ///
+ /// Regex capture groups are available.
+ ///
+ [JsonPropertyName("targetLabel")]
+ public string? TargetLabel { get; set; }
+}
+
+///
+/// Configure TLS communication for the metrics endpoint.
+/// Changing tls.enabled option will force a rollout of all instances.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecMonitoringTls
+{
+ ///
+ /// Enable TLS for the monitoring endpoint.
+ /// Changing this option will force a rollout of all instances.
+ ///
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+}
+
+/// The configuration of the monitoring infrastructure of this cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecMonitoring
+{
+ /// The list of config maps containing the custom queries
+ [JsonPropertyName("customQueriesConfigMap")]
+ public IList? CustomQueriesConfigMap { get; set; }
+
+ /// The list of secrets containing the custom queries
+ [JsonPropertyName("customQueriesSecret")]
+ public IList? CustomQueriesSecret { get; set; }
+
+ ///
+ /// Whether the default queries should be injected.
+ /// Set it to `true` if you don't want to inject default queries into the cluster.
+ /// Default: false.
+ ///
+ [JsonPropertyName("disableDefaultQueries")]
+ public bool? DisableDefaultQueries { get; set; }
+
+ ///
+ /// Enable or disable the `PodMonitor`
+ ///
+ /// Deprecated: This feature will be removed in an upcoming release. If
+ /// you need this functionality, you can create a PodMonitor manually.
+ ///
+ [JsonPropertyName("enablePodMonitor")]
+ public bool? EnablePodMonitor { get; set; }
+
+ ///
+ /// The interval during which metrics computed from queries are considered current.
+ /// Once it is exceeded, a new scrape will trigger a rerun
+ /// of the queries.
+ /// If not set, defaults to 30 seconds, in line with Prometheus scraping defaults.
+ /// Setting this to zero disables the caching mechanism and can cause heavy load on the PostgreSQL server.
+ ///
+ [JsonPropertyName("metricsQueriesTTL")]
+ public string? MetricsQueriesTTL { get; set; }
+
+ ///
+ /// The list of metric relabelings for the `PodMonitor`. Applied to samples before ingestion.
+ ///
+ /// Deprecated: This feature will be removed in an upcoming release. If
+ /// you need this functionality, you can create a PodMonitor manually.
+ ///
+ [JsonPropertyName("podMonitorMetricRelabelings")]
+ public IList? PodMonitorMetricRelabelings { get; set; }
+
+ ///
+ /// The list of relabelings for the `PodMonitor`. Applied to samples before scraping.
+ ///
+ /// Deprecated: This feature will be removed in an upcoming release. If
+ /// you need this functionality, you can create a PodMonitor manually.
+ ///
+ [JsonPropertyName("podMonitorRelabelings")]
+ public IList? PodMonitorRelabelings { get; set; }
+
+ ///
+ /// Configure TLS communication for the metrics endpoint.
+ /// Changing tls.enabled option will force a rollout of all instances.
+ ///
+ [JsonPropertyName("tls")]
+ public V1ClusterSpecMonitoringTls? Tls { get; set; }
+}
+
+/// Define a maintenance window for the Kubernetes nodes
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecNodeMaintenanceWindow
+{
+ /// Is there a node maintenance activity in progress?
+ [JsonPropertyName("inProgress")]
+ public bool? InProgress { get; set; }
+
+ ///
+ /// Reuse the existing PVC (wait for the node to come
+ /// up again) or not (recreate it elsewhere - when `instances` >1)
+ ///
+ [JsonPropertyName("reusePVC")]
+ public bool? ReusePVC { get; set; }
+}
+
+///
+/// PluginConfiguration specifies a plugin that need to be loaded for this
+/// cluster to be reconciled
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPlugins
+{
+ /// Enabled is true if this plugin will be used
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+
+ ///
+ /// Marks the plugin as the WAL archiver. At most one plugin can be
+ /// designated as a WAL archiver. This cannot be enabled if the
+ /// `.spec.backup.barmanObjectStore` configuration is present.
+ ///
+ [JsonPropertyName("isWALArchiver")]
+ public bool? IsWALArchiver { get; set; }
+
+ /// Name is the plugin name
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ /// Parameters is the configuration of the plugin
+ [JsonPropertyName("parameters")]
+ public IDictionary? Parameters { get; set; }
+}
+
+///
+/// appArmorProfile is the AppArmor options to use by the containers in this pod.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSecurityContextAppArmorProfile
+{
+ ///
+ /// localhostProfile indicates a profile loaded on the node that should be used.
+ /// The profile must be preconfigured on the node to work.
+ /// Must match the loaded name of the profile.
+ /// Must be set if and only if type is "Localhost".
+ ///
+ [JsonPropertyName("localhostProfile")]
+ public string? LocalhostProfile { get; set; }
+
+ ///
+ /// type indicates which kind of AppArmor profile will be applied.
+ /// Valid options are:
+ /// Localhost - a profile pre-loaded on the node.
+ /// RuntimeDefault - the container runtime's default profile.
+ /// Unconfined - no AppArmor enforcement.
+ ///
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+///
+/// The SELinux context to be applied to all containers.
+/// If unspecified, the container runtime will allocate a random SELinux context for each
+/// container. May also be set in SecurityContext. If set in
+/// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
+/// takes precedence for that container.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSecurityContextSeLinuxOptions
+{
+ /// Level is SELinux level label that applies to the container.
+ [JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ /// Role is a SELinux role label that applies to the container.
+ [JsonPropertyName("role")]
+ public string? Role { get; set; }
+
+ /// Type is a SELinux type label that applies to the container.
+ [JsonPropertyName("type")]
+ public string? Type { get; set; }
+
+ /// User is a SELinux user label that applies to the container.
+ [JsonPropertyName("user")]
+ public string? User { get; set; }
+}
+
+///
+/// The seccomp options to use by the containers in this pod.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSecurityContextSeccompProfile
+{
+ ///
+ /// localhostProfile indicates a profile defined in a file on the node should be used.
+ /// The profile must be preconfigured on the node to work.
+ /// Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ /// Must be set if type is "Localhost". Must NOT be set for any other type.
+ ///
+ [JsonPropertyName("localhostProfile")]
+ public string? LocalhostProfile { get; set; }
+
+ ///
+ /// type indicates which kind of seccomp profile will be applied.
+ /// Valid options are:
+ ///
+ /// Localhost - a profile defined in a file on the node should be used.
+ /// RuntimeDefault - the container runtime default profile should be used.
+ /// Unconfined - no profile should be applied.
+ ///
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+/// Sysctl defines a kernel parameter to be set
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSecurityContextSysctls
+{
+ /// Name of a property to set
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ /// Value of a property to set
+ [JsonPropertyName("value")]
+ public required string Value { get; set; }
+}
+
+///
+/// The Windows specific settings applied to all containers.
+/// If unspecified, the options within a container's SecurityContext will be used.
+/// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+/// Note that this field cannot be set when spec.os.name is linux.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSecurityContextWindowsOptions
+{
+ ///
+ /// GMSACredentialSpec is where the GMSA admission webhook
+ /// (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
+ /// GMSA credential spec named by the GMSACredentialSpecName field.
+ ///
+ [JsonPropertyName("gmsaCredentialSpec")]
+ public string? GmsaCredentialSpec { get; set; }
+
+ /// GMSACredentialSpecName is the name of the GMSA credential spec to use.
+ [JsonPropertyName("gmsaCredentialSpecName")]
+ public string? GmsaCredentialSpecName { get; set; }
+
+ ///
+ /// HostProcess determines if a container should be run as a 'Host Process' container.
+ /// All of a Pod's containers must have the same effective HostProcess value
+ /// (it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).
+ /// In addition, if HostProcess is true then HostNetwork must also be set to true.
+ ///
+ [JsonPropertyName("hostProcess")]
+ public bool? HostProcess { get; set; }
+
+ ///
+ /// The UserName in Windows to run the entrypoint of the container process.
+ /// Defaults to the user specified in image metadata if unspecified.
+ /// May also be set in PodSecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ ///
+ [JsonPropertyName("runAsUserName")]
+ public string? RunAsUserName { get; set; }
+}
+
+///
+/// Override the PodSecurityContext applied to every Pod of the cluster.
+/// When set, this overrides the operator's default PodSecurityContext for the cluster.
+/// If omitted, the operator defaults are used.
+/// This field doesn't have any effect if SecurityContextConstraints are present.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSecurityContext
+{
+ ///
+ /// appArmorProfile is the AppArmor options to use by the containers in this pod.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("appArmorProfile")]
+ public V1ClusterSpecPodSecurityContextAppArmorProfile? AppArmorProfile { get; set; }
+
+ ///
+ /// A special supplemental group that applies to all containers in a pod.
+ /// Some volume types allow the Kubelet to change the ownership of that volume
+ /// to be owned by the pod:
+ ///
+ /// 1. The owning GID will be the FSGroup
+ /// 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
+ /// 3. The permission bits are OR'd with rw-rw----
+ ///
+ /// If unset, the Kubelet will not modify the ownership and permissions of any volume.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("fsGroup")]
+ public long? FsGroup { get; set; }
+
+ ///
+ /// fsGroupChangePolicy defines behavior of changing ownership and permission of the volume
+ /// before being exposed inside Pod. This field will only apply to
+ /// volume types which support fsGroup based ownership(and permissions).
+ /// It will have no effect on ephemeral volume types such as: secret, configmaps
+ /// and emptydir.
+ /// Valid values are "OnRootMismatch" and "Always". If not specified, "Always" is used.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("fsGroupChangePolicy")]
+ public string? FsGroupChangePolicy { get; set; }
+
+ ///
+ /// The GID to run the entrypoint of the container process.
+ /// Uses runtime default if unset.
+ /// May also be set in SecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence
+ /// for that container.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("runAsGroup")]
+ public long? RunAsGroup { get; set; }
+
+ ///
+ /// Indicates that the container must run as a non-root user.
+ /// If true, the Kubelet will validate the image at runtime to ensure that it
+ /// does not run as UID 0 (root) and fail to start the container if it does.
+ /// If unset or false, no such validation will be performed.
+ /// May also be set in SecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ ///
+ [JsonPropertyName("runAsNonRoot")]
+ public bool? RunAsNonRoot { get; set; }
+
+ ///
+ /// The UID to run the entrypoint of the container process.
+ /// Defaults to user specified in image metadata if unspecified.
+ /// May also be set in SecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence
+ /// for that container.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("runAsUser")]
+ public long? RunAsUser { get; set; }
+
+ ///
+ /// seLinuxChangePolicy defines how the container's SELinux label is applied to all volumes used by the Pod.
+ /// It has no effect on nodes that do not support SELinux or to volumes does not support SELinux.
+ /// Valid values are "MountOption" and "Recursive".
+ ///
+ /// "Recursive" means relabeling of all files on all Pod volumes by the container runtime.
+ /// This may be slow for large volumes, but allows mixing privileged and unprivileged Pods sharing the same volume on the same node.
+ ///
+ /// "MountOption" mounts all eligible Pod volumes with `-o context` mount option.
+ /// This requires all Pods that share the same volume to use the same SELinux label.
+ /// It is not possible to share the same volume among privileged and unprivileged Pods.
+ /// Eligible volumes are in-tree FibreChannel and iSCSI volumes, and all CSI volumes
+ /// whose CSI driver announces SELinux support by setting spec.seLinuxMount: true in their
+ /// CSIDriver instance. Other volumes are always re-labelled recursively.
+ /// "MountOption" value is allowed only when SELinuxMount feature gate is enabled.
+ ///
+ /// If not specified and SELinuxMount feature gate is enabled, "MountOption" is used.
+ /// If not specified and SELinuxMount feature gate is disabled, "MountOption" is used for ReadWriteOncePod volumes
+ /// and "Recursive" for all other volumes.
+ ///
+ /// This field affects only Pods that have SELinux label set, either in PodSecurityContext or in SecurityContext of all containers.
+ ///
+ /// All Pods that use the same volume should use the same seLinuxChangePolicy, otherwise some pods can get stuck in ContainerCreating state.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("seLinuxChangePolicy")]
+ public string? SeLinuxChangePolicy { get; set; }
+
+ ///
+ /// The SELinux context to be applied to all containers.
+ /// If unspecified, the container runtime will allocate a random SELinux context for each
+ /// container. May also be set in SecurityContext. If set in
+ /// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
+ /// takes precedence for that container.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("seLinuxOptions")]
+ public V1ClusterSpecPodSecurityContextSeLinuxOptions? SeLinuxOptions { get; set; }
+
+ ///
+ /// The seccomp options to use by the containers in this pod.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("seccompProfile")]
+ public V1ClusterSpecPodSecurityContextSeccompProfile? SeccompProfile { get; set; }
+
+ ///
+ /// A list of groups applied to the first process run in each container, in
+ /// addition to the container's primary GID and fsGroup (if specified). If
+ /// the SupplementalGroupsPolicy feature is enabled, the
+ /// supplementalGroupsPolicy field determines whether these are in addition
+ /// to or instead of any group memberships defined in the container image.
+ /// If unspecified, no additional groups are added, though group memberships
+ /// defined in the container image may still be used, depending on the
+ /// supplementalGroupsPolicy field.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("supplementalGroups")]
+ public IList? SupplementalGroups { get; set; }
+
+ ///
+ /// Defines how supplemental groups of the first container processes are calculated.
+ /// Valid values are "Merge" and "Strict". If not specified, "Merge" is used.
+ /// (Alpha) Using the field requires the SupplementalGroupsPolicy feature gate to be enabled
+ /// and the container runtime must implement support for this feature.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("supplementalGroupsPolicy")]
+ public string? SupplementalGroupsPolicy { get; set; }
+
+ ///
+ /// Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
+ /// sysctls (by the container runtime) might fail to launch.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("sysctls")]
+ public IList? Sysctls { get; set; }
+
+ ///
+ /// The Windows specific settings applied to all containers.
+ /// If unspecified, the options within a container's SecurityContext will be used.
+ /// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+ /// Note that this field cannot be set when spec.os.name is linux.
+ ///
+ [JsonPropertyName("windowsOptions")]
+ public V1ClusterSpecPodSecurityContextWindowsOptions? WindowsOptions { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSelectorRefsSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// Selector is a label selector that identifies the pods whose IPs
+/// should be resolved. Only pods in the Cluster's namespace are considered.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSelectorRefsSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// PodSelectorRef defines a named pod label selector for use in pg_hba rules.
+/// Pods matching the selector in the Cluster's namespace will have their IPs
+/// resolved and made available for pg_hba address expansion via the
+/// `${podselector:NAME}` syntax.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPodSelectorRefs
+{
+ ///
+ /// Name is the identifier used to reference this selector in pg_hba rules
+ /// via the ${podselector:NAME} syntax in the address field.
+ ///
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Selector is a label selector that identifies the pods whose IPs
+ /// should be resolved. Only pods in the Cluster's namespace are considered.
+ ///
+ [JsonPropertyName("selector")]
+ public required V1ClusterSpecPodSelectorRefsSelector Selector { get; set; }
+}
+
+///
+/// ExtensionEnvVar defines an environment variable for a specific extension
+/// image volume.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlExtensionsEnv
+{
+ ///
+ /// Name of the environment variable to be injected into the
+ /// PostgreSQL process.
+ ///
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Value of the environment variable. CloudNativePG performs a direct
+ /// replacement of this value, with support for placeholder expansion.
+ /// The ${`image_root`} placeholder resolves to the absolute mount path
+ /// of the extension's volume (e.g., `/extensions/my-extension`). This
+ /// is particularly useful for allowing applications or libraries to
+ /// locate specific directories within the mounted image.
+ /// Unrecognized placeholders are rejected. To include a literal ${...}
+ /// in the value, escape it as $${...}.
+ ///
+ [JsonPropertyName("value")]
+ public required string Value { get; set; }
+}
+
+/// The image containing the extension.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlExtensionsImage
+{
+ ///
+ /// Policy for pulling OCI objects. Possible values are:
+ /// Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails.
+ /// Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present.
+ /// IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails.
+ /// Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
+ ///
+ [JsonPropertyName("pullPolicy")]
+ public string? PullPolicy { get; set; }
+
+ ///
+ /// Required: Image or artifact reference to be used.
+ /// Behaves in the same way as pod.spec.containers[*].image.
+ /// Pull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets.
+ /// More info: https://kubernetes.io/docs/concepts/containers/images
+ /// This field is optional to allow higher level config management to default or override
+ /// container images in workload controllers like Deployments and StatefulSets.
+ ///
+ [JsonPropertyName("reference")]
+ public string? Reference { get; set; }
+}
+
+///
+/// ExtensionConfiguration is the configuration used to add
+/// PostgreSQL extensions to the Cluster.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlExtensions
+{
+ ///
+ /// A list of directories within the image to be appended to the
+ /// PostgreSQL process's `PATH` environment variable.
+ ///
+ [JsonPropertyName("bin_path")]
+ public IList? BinPath { get; set; }
+
+ ///
+ /// The list of directories inside the image which should be added to dynamic_library_path.
+ /// If not defined, defaults to "/lib".
+ ///
+ [JsonPropertyName("dynamic_library_path")]
+ public IList? DynamicLibraryPath { get; set; }
+
+ ///
+ /// Env is a list of custom environment variables to be set in the
+ /// PostgreSQL process for this extension. It is the responsibility of the
+ /// cluster administrator to ensure the variables are correct for the
+ /// specific extension. Note that changes to these variables require
+ /// a manual cluster restart to take effect.
+ ///
+ [JsonPropertyName("env")]
+ public IList? Env { get; set; }
+
+ ///
+ /// The list of directories inside the image which should be added to extension_control_path.
+ /// If not defined, defaults to "/share".
+ ///
+ [JsonPropertyName("extension_control_path")]
+ public IList? ExtensionControlPath { get; set; }
+
+ /// The image containing the extension.
+ [JsonPropertyName("image")]
+ public V1ClusterSpecPostgresqlExtensionsImage? Image { get; set; }
+
+ /// The list of directories inside the image which should be added to ld_library_path.
+ [JsonPropertyName("ld_library_path")]
+ public IList? LdLibraryPath { get; set; }
+
+ /// The name of the extension, required
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// Bind as authentication configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlLdapBindAsAuth
+{
+ /// Prefix for the bind authentication option
+ [JsonPropertyName("prefix")]
+ public string? Prefix { get; set; }
+
+ /// Suffix for the bind authentication option
+ [JsonPropertyName("suffix")]
+ public string? Suffix { get; set; }
+}
+
+/// Secret with the password for the user to bind to the directory
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlLdapBindSearchAuthBindPassword
+{
+ /// The key of the secret to select from. Must be a valid secret key.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// Specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+/// Bind+Search authentication configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlLdapBindSearchAuth
+{
+ /// Root DN to begin the user search
+ [JsonPropertyName("baseDN")]
+ public string? BaseDN { get; set; }
+
+ /// DN of the user to bind to the directory
+ [JsonPropertyName("bindDN")]
+ public string? BindDN { get; set; }
+
+ /// Secret with the password for the user to bind to the directory
+ [JsonPropertyName("bindPassword")]
+ public V1ClusterSpecPostgresqlLdapBindSearchAuthBindPassword? BindPassword { get; set; }
+
+ /// Attribute to match against the username
+ [JsonPropertyName("searchAttribute")]
+ public string? SearchAttribute { get; set; }
+
+ /// Search filter to use when doing the search+bind authentication
+ [JsonPropertyName("searchFilter")]
+ public string? SearchFilter { get; set; }
+}
+
+/// LDAP schema to be used, possible options are `ldap` and `ldaps`
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecPostgresqlLdapSchemeEnum
+{
+ [EnumMember(Value = "ldap"), JsonStringEnumMemberName("ldap")]
+ Ldap,
+ [EnumMember(Value = "ldaps"), JsonStringEnumMemberName("ldaps")]
+ Ldaps
+}
+
+/// Options to specify LDAP configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlLdap
+{
+ /// Bind as authentication configuration
+ [JsonPropertyName("bindAsAuth")]
+ public V1ClusterSpecPostgresqlLdapBindAsAuth? BindAsAuth { get; set; }
+
+ /// Bind+Search authentication configuration
+ [JsonPropertyName("bindSearchAuth")]
+ public V1ClusterSpecPostgresqlLdapBindSearchAuth? BindSearchAuth { get; set; }
+
+ /// LDAP server port
+ [JsonPropertyName("port")]
+ public int? Port { get; set; }
+
+ /// LDAP schema to be used, possible options are `ldap` and `ldaps`
+ [JsonPropertyName("scheme")]
+ public V1ClusterSpecPostgresqlLdapSchemeEnum? Scheme { get; set; }
+
+ /// LDAP hostname or IP address
+ [JsonPropertyName("server")]
+ public string? Server { get; set; }
+
+ /// Set to 'true' to enable LDAP over TLS. 'false' is default
+ [JsonPropertyName("tls")]
+ public bool? Tls { get; set; }
+}
+
+///
+/// Requirements to be met by sync replicas. This will affect how the "synchronous_standby_names" parameter will be
+/// set up.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlSyncReplicaElectionConstraint
+{
+ /// This flag enables the constraints for sync replicas
+ [JsonPropertyName("enabled")]
+ public required bool Enabled { get; set; }
+
+ /// A list of node labels values to extract and compare to evaluate if the pods reside in the same topology or not
+ [JsonPropertyName("nodeLabelsAntiAffinity")]
+ public IList? NodeLabelsAntiAffinity { get; set; }
+}
+
+///
+/// If set to "required", data durability is strictly enforced. Write operations
+/// with synchronous commit settings (`on`, `remote_write`, or `remote_apply`) will
+/// block if there are insufficient healthy replicas, ensuring data persistence.
+/// If set to "preferred", data durability is maintained when healthy replicas
+/// are available, but the required number of instances will adjust dynamically
+/// if replicas become unavailable. This setting relaxes strict durability enforcement
+/// to allow for operational continuity. This setting is only applicable if both
+/// `standbyNamesPre` and `standbyNamesPost` are unset (empty).
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecPostgresqlSynchronousDataDurabilityEnum
+{
+ [EnumMember(Value = "required"), JsonStringEnumMemberName("required")]
+ Required,
+ [EnumMember(Value = "preferred"), JsonStringEnumMemberName("preferred")]
+ Preferred
+}
+
+///
+/// Method to select synchronous replication standbys from the listed
+/// servers, accepting 'any' (quorum-based synchronous replication) or
+/// 'first' (priority-based synchronous replication) as values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecPostgresqlSynchronousMethodEnum
+{
+ [EnumMember(Value = "any"), JsonStringEnumMemberName("any")]
+ Any,
+ [EnumMember(Value = "first"), JsonStringEnumMemberName("first")]
+ First
+}
+
+/// Configuration of the PostgreSQL synchronous replication feature
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresqlSynchronous
+{
+ ///
+ /// If set to "required", data durability is strictly enforced. Write operations
+ /// with synchronous commit settings (`on`, `remote_write`, or `remote_apply`) will
+ /// block if there are insufficient healthy replicas, ensuring data persistence.
+ /// If set to "preferred", data durability is maintained when healthy replicas
+ /// are available, but the required number of instances will adjust dynamically
+ /// if replicas become unavailable. This setting relaxes strict durability enforcement
+ /// to allow for operational continuity. This setting is only applicable if both
+ /// `standbyNamesPre` and `standbyNamesPost` are unset (empty).
+ ///
+ [JsonPropertyName("dataDurability")]
+ public V1ClusterSpecPostgresqlSynchronousDataDurabilityEnum? DataDurability { get; set; }
+
+ ///
+ /// FailoverQuorum enables a quorum-based check before failover, improving
+ /// data durability and safety during failover events in CloudNativePG-managed
+ /// PostgreSQL clusters.
+ ///
+ [JsonPropertyName("failoverQuorum")]
+ public bool? FailoverQuorum { get; set; }
+
+ ///
+ /// Specifies the maximum number of local cluster pods that can be
+ /// automatically included in the `synchronous_standby_names` option in
+ /// PostgreSQL.
+ ///
+ [JsonPropertyName("maxStandbyNamesFromCluster")]
+ public int? MaxStandbyNamesFromCluster { get; set; }
+
+ ///
+ /// Method to select synchronous replication standbys from the listed
+ /// servers, accepting 'any' (quorum-based synchronous replication) or
+ /// 'first' (priority-based synchronous replication) as values.
+ ///
+ [JsonPropertyName("method")]
+ public required V1ClusterSpecPostgresqlSynchronousMethodEnum Method { get; set; }
+
+ ///
+ /// Specifies the number of synchronous standby servers that
+ /// transactions must wait for responses from.
+ ///
+ [JsonPropertyName("number")]
+ public required int Number { get; set; }
+
+ ///
+ /// A user-defined list of application names to be added to
+ /// `synchronous_standby_names` after local cluster pods (the order is
+ /// only useful for priority-based synchronous replication).
+ ///
+ [JsonPropertyName("standbyNamesPost")]
+ public IList? StandbyNamesPost { get; set; }
+
+ ///
+ /// A user-defined list of application names to be added to
+ /// `synchronous_standby_names` before local cluster pods (the order is
+ /// only useful for priority-based synchronous replication).
+ ///
+ [JsonPropertyName("standbyNamesPre")]
+ public IList? StandbyNamesPre { get; set; }
+}
+
+/// Configuration of the PostgreSQL server
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecPostgresql
+{
+ ///
+ /// If this parameter is true, the user will be able to invoke `ALTER SYSTEM`
+ /// on this CloudNativePG Cluster.
+ /// This should only be used for debugging and troubleshooting.
+ /// Defaults to false.
+ ///
+ [JsonPropertyName("enableAlterSystem")]
+ public bool? EnableAlterSystem { get; set; }
+
+ /// The configuration of the extensions to be added
+ [JsonPropertyName("extensions")]
+ public IList? Extensions { get; set; }
+
+ /// Options to specify LDAP configuration
+ [JsonPropertyName("ldap")]
+ public V1ClusterSpecPostgresqlLdap? Ldap { get; set; }
+
+ /// PostgreSQL configuration options (postgresql.conf)
+ [JsonPropertyName("parameters")]
+ public IDictionary? Parameters { get; set; }
+
+ ///
+ /// PostgreSQL Host Based Authentication rules (lines to be appended
+ /// to the pg_hba.conf file).
+ /// Use the ${podselector:NAME} syntax to reference a pod selector;
+ /// the rule will be expanded for each Pod IP matching that selector.
+ ///
+ [JsonPropertyName("pg_hba")]
+ public IList? PgHba { get; set; }
+
+ ///
+ /// PostgreSQL User Name Maps rules (lines to be appended
+ /// to the pg_ident.conf file)
+ ///
+ [JsonPropertyName("pg_ident")]
+ public IList? PgIdent { get; set; }
+
+ ///
+ /// Specifies the maximum number of seconds to wait when promoting an instance to primary.
+ /// Default value is 40000000, greater than one year in seconds,
+ /// big enough to simulate an infinite timeout
+ ///
+ [JsonPropertyName("promotionTimeout")]
+ public int? PromotionTimeout { get; set; }
+
+ /// Lists of shared preload libraries to add to the default ones
+ [JsonPropertyName("shared_preload_libraries")]
+ public IList? SharedPreloadLibraries { get; set; }
+
+ ///
+ /// Requirements to be met by sync replicas. This will affect how the "synchronous_standby_names" parameter will be
+ /// set up.
+ ///
+ [JsonPropertyName("syncReplicaElectionConstraint")]
+ public V1ClusterSpecPostgresqlSyncReplicaElectionConstraint? SyncReplicaElectionConstraint { get; set; }
+
+ /// Configuration of the PostgreSQL synchronous replication feature
+ [JsonPropertyName("synchronous")]
+ public V1ClusterSpecPostgresqlSynchronous? Synchronous { get; set; }
+}
+
+///
+/// Method to follow to upgrade the primary server during a rolling
+/// update procedure, after all replicas have been successfully updated:
+/// it can be with a switchover (`switchover`) or in-place (`restart` - default).
+/// Note: when using `switchover`, the operator will reject updates that change both
+/// the image name and PostgreSQL configuration parameters simultaneously to avoid
+/// configuration mismatches during the switchover process.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecPrimaryUpdateMethodEnum
+{
+ [EnumMember(Value = "switchover"), JsonStringEnumMemberName("switchover")]
+ Switchover,
+ [EnumMember(Value = "restart"), JsonStringEnumMemberName("restart")]
+ Restart
+}
+
+///
+/// Deployment strategy to follow to upgrade the primary server during a rolling
+/// update procedure, after all replicas have been successfully updated:
+/// it can be automated (`unsupervised` - default) or manual (`supervised`)
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecPrimaryUpdateStrategyEnum
+{
+ [EnumMember(Value = "unsupervised"), JsonStringEnumMemberName("unsupervised")]
+ Unsupervised,
+ [EnumMember(Value = "supervised"), JsonStringEnumMemberName("supervised")]
+ Supervised
+}
+
+///
+/// Configure the feature that extends the liveness probe for a primary
+/// instance. In addition to the basic checks, this verifies whether the
+/// primary is isolated from the Kubernetes API server and from its
+/// replicas, ensuring that it can be safely shut down if network
+/// partition or API unavailability is detected. Enabled by default.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProbesLivenessIsolationCheck
+{
+ /// Timeout in milliseconds for connections during the primary isolation check
+ [JsonPropertyName("connectionTimeout")]
+ public int? ConnectionTimeout { get; set; }
+
+ /// Whether primary isolation checking is enabled for the liveness probe
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+
+ /// Timeout in milliseconds for requests during the primary isolation check
+ [JsonPropertyName("requestTimeout")]
+ public int? RequestTimeout { get; set; }
+}
+
+/// The liveness probe configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProbesLiveness
+{
+ ///
+ /// Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ /// Defaults to 3. Minimum value is 1.
+ ///
+ [JsonPropertyName("failureThreshold")]
+ public int? FailureThreshold { get; set; }
+
+ ///
+ /// Number of seconds after the container has started before liveness probes are initiated.
+ /// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ///
+ [JsonPropertyName("initialDelaySeconds")]
+ public int? InitialDelaySeconds { get; set; }
+
+ ///
+ /// Configure the feature that extends the liveness probe for a primary
+ /// instance. In addition to the basic checks, this verifies whether the
+ /// primary is isolated from the Kubernetes API server and from its
+ /// replicas, ensuring that it can be safely shut down if network
+ /// partition or API unavailability is detected. Enabled by default.
+ ///
+ [JsonPropertyName("isolationCheck")]
+ public V1ClusterSpecProbesLivenessIsolationCheck? IsolationCheck { get; set; }
+
+ ///
+ /// How often (in seconds) to perform the probe.
+ /// Default to 10 seconds. Minimum value is 1.
+ ///
+ [JsonPropertyName("periodSeconds")]
+ public int? PeriodSeconds { get; set; }
+
+ ///
+ /// Minimum consecutive successes for the probe to be considered successful after having failed.
+ /// Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ ///
+ [JsonPropertyName("successThreshold")]
+ public int? SuccessThreshold { get; set; }
+
+ ///
+ /// Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ /// The grace period is the duration in seconds after the processes running in the pod are sent
+ /// a termination signal and the time when the processes are forcibly halted with a kill signal.
+ /// Set this value longer than the expected cleanup time for your process.
+ /// If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ /// value overrides the value provided by the pod spec.
+ /// Value must be non-negative integer. The value zero indicates stop immediately via
+ /// the kill signal (no opportunity to shut down).
+ /// This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ /// Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ ///
+ [JsonPropertyName("terminationGracePeriodSeconds")]
+ public long? TerminationGracePeriodSeconds { get; set; }
+
+ ///
+ /// Number of seconds after which the probe times out.
+ /// Defaults to 1 second. Minimum value is 1.
+ /// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ///
+ [JsonPropertyName("timeoutSeconds")]
+ public int? TimeoutSeconds { get; set; }
+}
+
+/// The probe strategy
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecProbesReadinessTypeEnum
+{
+ [EnumMember(Value = "pg_isready"), JsonStringEnumMemberName("pg_isready")]
+ PgIsready,
+ [EnumMember(Value = "streaming"), JsonStringEnumMemberName("streaming")]
+ Streaming,
+ [EnumMember(Value = "query"), JsonStringEnumMemberName("query")]
+ Query
+}
+
+/// The readiness probe configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProbesReadiness
+{
+ ///
+ /// Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ /// Defaults to 3. Minimum value is 1.
+ ///
+ [JsonPropertyName("failureThreshold")]
+ public int? FailureThreshold { get; set; }
+
+ ///
+ /// Number of seconds after the container has started before liveness probes are initiated.
+ /// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ///
+ [JsonPropertyName("initialDelaySeconds")]
+ public int? InitialDelaySeconds { get; set; }
+
+ /// Lag limit. Used only for `streaming` strategy
+ [JsonPropertyName("maximumLag")]
+ public IntOrString? MaximumLag { get; set; }
+
+ ///
+ /// How often (in seconds) to perform the probe.
+ /// Default to 10 seconds. Minimum value is 1.
+ ///
+ [JsonPropertyName("periodSeconds")]
+ public int? PeriodSeconds { get; set; }
+
+ ///
+ /// Minimum consecutive successes for the probe to be considered successful after having failed.
+ /// Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ ///
+ [JsonPropertyName("successThreshold")]
+ public int? SuccessThreshold { get; set; }
+
+ ///
+ /// Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ /// The grace period is the duration in seconds after the processes running in the pod are sent
+ /// a termination signal and the time when the processes are forcibly halted with a kill signal.
+ /// Set this value longer than the expected cleanup time for your process.
+ /// If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ /// value overrides the value provided by the pod spec.
+ /// Value must be non-negative integer. The value zero indicates stop immediately via
+ /// the kill signal (no opportunity to shut down).
+ /// This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ /// Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ ///
+ [JsonPropertyName("terminationGracePeriodSeconds")]
+ public long? TerminationGracePeriodSeconds { get; set; }
+
+ ///
+ /// Number of seconds after which the probe times out.
+ /// Defaults to 1 second. Minimum value is 1.
+ /// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ///
+ [JsonPropertyName("timeoutSeconds")]
+ public int? TimeoutSeconds { get; set; }
+
+ /// The probe strategy
+ [JsonPropertyName("type")]
+ public V1ClusterSpecProbesReadinessTypeEnum? Type { get; set; }
+}
+
+/// The probe strategy
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterSpecProbesStartupTypeEnum
+{
+ [EnumMember(Value = "pg_isready"), JsonStringEnumMemberName("pg_isready")]
+ PgIsready,
+ [EnumMember(Value = "streaming"), JsonStringEnumMemberName("streaming")]
+ Streaming,
+ [EnumMember(Value = "query"), JsonStringEnumMemberName("query")]
+ Query
+}
+
+/// The startup probe configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProbesStartup
+{
+ ///
+ /// Minimum consecutive failures for the probe to be considered failed after having succeeded.
+ /// Defaults to 3. Minimum value is 1.
+ ///
+ [JsonPropertyName("failureThreshold")]
+ public int? FailureThreshold { get; set; }
+
+ ///
+ /// Number of seconds after the container has started before liveness probes are initiated.
+ /// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ///
+ [JsonPropertyName("initialDelaySeconds")]
+ public int? InitialDelaySeconds { get; set; }
+
+ /// Lag limit. Used only for `streaming` strategy
+ [JsonPropertyName("maximumLag")]
+ public IntOrString? MaximumLag { get; set; }
+
+ ///
+ /// How often (in seconds) to perform the probe.
+ /// Default to 10 seconds. Minimum value is 1.
+ ///
+ [JsonPropertyName("periodSeconds")]
+ public int? PeriodSeconds { get; set; }
+
+ ///
+ /// Minimum consecutive successes for the probe to be considered successful after having failed.
+ /// Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
+ ///
+ [JsonPropertyName("successThreshold")]
+ public int? SuccessThreshold { get; set; }
+
+ ///
+ /// Optional duration in seconds the pod needs to terminate gracefully upon probe failure.
+ /// The grace period is the duration in seconds after the processes running in the pod are sent
+ /// a termination signal and the time when the processes are forcibly halted with a kill signal.
+ /// Set this value longer than the expected cleanup time for your process.
+ /// If this value is nil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this
+ /// value overrides the value provided by the pod spec.
+ /// Value must be non-negative integer. The value zero indicates stop immediately via
+ /// the kill signal (no opportunity to shut down).
+ /// This is a beta field and requires enabling ProbeTerminationGracePeriod feature gate.
+ /// Minimum value is 1. spec.terminationGracePeriodSeconds is used if unset.
+ ///
+ [JsonPropertyName("terminationGracePeriodSeconds")]
+ public long? TerminationGracePeriodSeconds { get; set; }
+
+ ///
+ /// Number of seconds after which the probe times out.
+ /// Defaults to 1 second. Minimum value is 1.
+ /// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ///
+ [JsonPropertyName("timeoutSeconds")]
+ public int? TimeoutSeconds { get; set; }
+
+ /// The probe strategy
+ [JsonPropertyName("type")]
+ public V1ClusterSpecProbesStartupTypeEnum? Type { get; set; }
+}
+
+///
+/// The configuration of the probes to be injected
+/// in the PostgreSQL Pods.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProbes
+{
+ /// The liveness probe configuration
+ [JsonPropertyName("liveness")]
+ public V1ClusterSpecProbesLiveness? Liveness { get; set; }
+
+ /// The readiness probe configuration
+ [JsonPropertyName("readiness")]
+ public V1ClusterSpecProbesReadiness? Readiness { get; set; }
+
+ /// The startup probe configuration
+ [JsonPropertyName("startup")]
+ public V1ClusterSpecProbesStartup? Startup { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesClusterTrustBundleLabelSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// Select all ClusterTrustBundles that match this label selector. Only has
+/// effect if signerName is set. Mutually-exclusive with name. If unset,
+/// interpreted as "match nothing". If set but empty, interpreted as "match
+/// everything".
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesClusterTrustBundleLabelSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+///
+/// ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+/// of ClusterTrustBundle objects in an auto-updating file.
+///
+/// Alpha, gated by the ClusterTrustBundleProjection feature gate.
+///
+/// ClusterTrustBundle objects can either be selected by name, or by the
+/// combination of signer name and a label selector.
+///
+/// Kubelet performs aggressive normalization of the PEM contents written
+/// into the pod filesystem. Esoteric PEM features such as inter-block
+/// comments and block headers are stripped. Certificates are deduplicated.
+/// The ordering of certificates within the file is arbitrary, and Kubelet
+/// may change the order over time.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesClusterTrustBundle
+{
+ ///
+ /// Select all ClusterTrustBundles that match this label selector. Only has
+ /// effect if signerName is set. Mutually-exclusive with name. If unset,
+ /// interpreted as "match nothing". If set but empty, interpreted as "match
+ /// everything".
+ ///
+ [JsonPropertyName("labelSelector")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesClusterTrustBundleLabelSelector? LabelSelector { get; set; }
+
+ ///
+ /// Select a single ClusterTrustBundle by object name. Mutually-exclusive
+ /// with signerName and labelSelector.
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+ /// aren't available. If using name, then the named ClusterTrustBundle is
+ /// allowed not to exist. If using signerName, then the combination of
+ /// signerName and labelSelector is allowed to match zero
+ /// ClusterTrustBundles.
+ ///
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+
+ /// Relative path from the volume root to write the bundle.
+ [JsonPropertyName("path")]
+ public required string Path { get; set; }
+
+ ///
+ /// Select all ClusterTrustBundles that match this signer name.
+ /// Mutually-exclusive with name. The contents of all selected
+ /// ClusterTrustBundles will be unified and deduplicated.
+ ///
+ [JsonPropertyName("signerName")]
+ public string? SignerName { get; set; }
+}
+
+/// Maps a string key to a path within a volume.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesConfigMapItems
+{
+ /// key is the key to project.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// mode is Optional: mode bits used to set permissions on this file.
+ /// Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ /// YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ /// If not specified, the volume defaultMode will be used.
+ /// This might be in conflict with other options that affect the file
+ /// mode, like fsGroup, and the result can be other mode bits set.
+ ///
+ [JsonPropertyName("mode")]
+ public int? Mode { get; set; }
+
+ ///
+ /// path is the relative path of the file to map the key to.
+ /// May not be an absolute path.
+ /// May not contain the path element '..'.
+ /// May not start with the string '..'.
+ ///
+ [JsonPropertyName("path")]
+ public required string Path { get; set; }
+}
+
+/// configMap information about the configMap data to project
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesConfigMap
+{
+ ///
+ /// items if unspecified, each key-value pair in the Data field of the referenced
+ /// ConfigMap will be projected into the volume as a file whose name is the
+ /// key and content is the value. If specified, the listed keys will be
+ /// projected into the specified paths, and unlisted keys will not be
+ /// present. If a key is specified which is not present in the ConfigMap,
+ /// the volume setup will error unless it is marked optional. Paths must be
+ /// relative and may not contain the '..' path or start with '..'.
+ ///
+ [JsonPropertyName("items")]
+ public IList? Items { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// optional specify whether the ConfigMap or its keys must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+/// Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPIItemsFieldRef
+{
+ /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ [JsonPropertyName("apiVersion")]
+ public string? ApiVersion { get; set; }
+
+ /// Path of the field to select in the specified API version.
+ [JsonPropertyName("fieldPath")]
+ public required string FieldPath { get; set; }
+}
+
+///
+/// Selects a resource of the container: only resources limits and requests
+/// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPIItemsResourceFieldRef
+{
+ /// Container name: required for volumes, optional for env vars
+ [JsonPropertyName("containerName")]
+ public string? ContainerName { get; set; }
+
+ /// Specifies the output format of the exposed resources, defaults to "1"
+ [JsonPropertyName("divisor")]
+ public IntOrString? Divisor { get; set; }
+
+ /// Required: resource to select
+ [JsonPropertyName("resource")]
+ public required string Resource { get; set; }
+}
+
+/// DownwardAPIVolumeFile represents information to create the file containing the pod field
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPIItems
+{
+ /// Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported.
+ [JsonPropertyName("fieldRef")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPIItemsFieldRef? FieldRef { get; set; }
+
+ ///
+ /// Optional: mode bits used to set permissions on this file, must be an octal value
+ /// between 0000 and 0777 or a decimal value between 0 and 511.
+ /// YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ /// If not specified, the volume defaultMode will be used.
+ /// This might be in conflict with other options that affect the file
+ /// mode, like fsGroup, and the result can be other mode bits set.
+ ///
+ [JsonPropertyName("mode")]
+ public int? Mode { get; set; }
+
+ /// Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'
+ [JsonPropertyName("path")]
+ public required string Path { get; set; }
+
+ ///
+ /// Selects a resource of the container: only resources limits and requests
+ /// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
+ ///
+ [JsonPropertyName("resourceFieldRef")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPIItemsResourceFieldRef? ResourceFieldRef { get; set; }
+}
+
+/// downwardAPI information about the downwardAPI data to project
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPI
+{
+ /// Items is a list of DownwardAPIVolume file
+ [JsonPropertyName("items")]
+ public IList? Items { get; set; }
+}
+
+///
+/// Projects an auto-rotating credential bundle (private key and certificate
+/// chain) that the pod can use either as a TLS client or server.
+///
+/// Kubelet generates a private key and uses it to send a
+/// PodCertificateRequest to the named signer. Once the signer approves the
+/// request and issues a certificate chain, Kubelet writes the key and
+/// certificate chain to the pod filesystem. The pod does not start until
+/// certificates have been issued for each podCertificate projected volume
+/// source in its spec.
+///
+/// Kubelet will begin trying to rotate the certificate at the time indicated
+/// by the signer using the PodCertificateRequest.Status.BeginRefreshAt
+/// timestamp.
+///
+/// Kubelet can write a single file, indicated by the credentialBundlePath
+/// field, or separate files, indicated by the keyPath and
+/// certificateChainPath fields.
+///
+/// The credential bundle is a single file in PEM format. The first PEM
+/// entry is the private key (in PKCS#8 format), and the remaining PEM
+/// entries are the certificate chain issued by the signer (typically,
+/// signers will return their certificate chain in leaf-to-root order).
+///
+/// Prefer using the credential bundle format, since your application code
+/// can read it atomically. If you use keyPath and certificateChainPath,
+/// your application must make two separate file reads. If these coincide
+/// with a certificate rotation, it is possible that the private key and leaf
+/// certificate you read may not correspond to each other. Your application
+/// will need to check for this condition, and re-read until they are
+/// consistent.
+///
+/// The named signer controls chooses the format of the certificate it
+/// issues; consult the signer implementation's documentation to learn how to
+/// use the certificates it issues.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesPodCertificate
+{
+ ///
+ /// Write the certificate chain at this path in the projected volume.
+ ///
+ /// Most applications should use credentialBundlePath. When using keyPath
+ /// and certificateChainPath, your application needs to check that the key
+ /// and leaf certificate are consistent, because it is possible to read the
+ /// files mid-rotation.
+ ///
+ [JsonPropertyName("certificateChainPath")]
+ public string? CertificateChainPath { get; set; }
+
+ ///
+ /// Write the credential bundle at this path in the projected volume.
+ ///
+ /// The credential bundle is a single file that contains multiple PEM blocks.
+ /// The first PEM block is a PRIVATE KEY block, containing a PKCS#8 private
+ /// key.
+ ///
+ /// The remaining blocks are CERTIFICATE blocks, containing the issued
+ /// certificate chain from the signer (leaf and any intermediates).
+ ///
+ /// Using credentialBundlePath lets your Pod's application code make a single
+ /// atomic read that retrieves a consistent key and certificate chain. If you
+ /// project them to separate files, your application code will need to
+ /// additionally check that the leaf certificate was issued to the key.
+ ///
+ [JsonPropertyName("credentialBundlePath")]
+ public string? CredentialBundlePath { get; set; }
+
+ ///
+ /// Write the key at this path in the projected volume.
+ ///
+ /// Most applications should use credentialBundlePath. When using keyPath
+ /// and certificateChainPath, your application needs to check that the key
+ /// and leaf certificate are consistent, because it is possible to read the
+ /// files mid-rotation.
+ ///
+ [JsonPropertyName("keyPath")]
+ public string? KeyPath { get; set; }
+
+ ///
+ /// The type of keypair Kubelet will generate for the pod.
+ ///
+ /// Valid values are "RSA3072", "RSA4096", "ECDSAP256", "ECDSAP384",
+ /// "ECDSAP521", and "ED25519".
+ ///
+ [JsonPropertyName("keyType")]
+ public required string KeyType { get; set; }
+
+ ///
+ /// maxExpirationSeconds is the maximum lifetime permitted for the
+ /// certificate.
+ ///
+ /// Kubelet copies this value verbatim into the PodCertificateRequests it
+ /// generates for this projection.
+ ///
+ /// If omitted, kube-apiserver will set it to 86400(24 hours). kube-apiserver
+ /// will reject values shorter than 3600 (1 hour). The maximum allowable
+ /// value is 7862400 (91 days).
+ ///
+ /// The signer implementation is then free to issue a certificate with any
+ /// lifetime *shorter* than MaxExpirationSeconds, but no shorter than 3600
+ /// seconds (1 hour). This constraint is enforced by kube-apiserver.
+ /// `kubernetes.io` signers will never issue certificates with a lifetime
+ /// longer than 24 hours.
+ ///
+ [JsonPropertyName("maxExpirationSeconds")]
+ public int? MaxExpirationSeconds { get; set; }
+
+ /// Kubelet's generated CSRs will be addressed to this signer.
+ [JsonPropertyName("signerName")]
+ public required string SignerName { get; set; }
+
+ ///
+ /// userAnnotations allow pod authors to pass additional information to
+ /// the signer implementation. Kubernetes does not restrict or validate this
+ /// metadata in any way.
+ ///
+ /// These values are copied verbatim into the `spec.unverifiedUserAnnotations` field of
+ /// the PodCertificateRequest objects that Kubelet creates.
+ ///
+ /// Entries are subject to the same validation as object metadata annotations,
+ /// with the addition that all keys must be domain-prefixed. No restrictions
+ /// are placed on values, except an overall size limitation on the entire field.
+ ///
+ /// Signers should document the keys and values they support. Signers should
+ /// deny requests that contain keys they do not recognize.
+ ///
+ [JsonPropertyName("userAnnotations")]
+ public IDictionary? UserAnnotations { get; set; }
+}
+
+/// Maps a string key to a path within a volume.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesSecretItems
+{
+ /// key is the key to project.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// mode is Optional: mode bits used to set permissions on this file.
+ /// Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ /// YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ /// If not specified, the volume defaultMode will be used.
+ /// This might be in conflict with other options that affect the file
+ /// mode, like fsGroup, and the result can be other mode bits set.
+ ///
+ [JsonPropertyName("mode")]
+ public int? Mode { get; set; }
+
+ ///
+ /// path is the relative path of the file to map the key to.
+ /// May not be an absolute path.
+ /// May not contain the path element '..'.
+ /// May not start with the string '..'.
+ ///
+ [JsonPropertyName("path")]
+ public required string Path { get; set; }
+}
+
+/// secret information about the secret data to project
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesSecret
+{
+ ///
+ /// items if unspecified, each key-value pair in the Data field of the referenced
+ /// Secret will be projected into the volume as a file whose name is the
+ /// key and content is the value. If specified, the listed keys will be
+ /// projected into the specified paths, and unlisted keys will not be
+ /// present. If a key is specified which is not present in the Secret,
+ /// the volume setup will error unless it is marked optional. Paths must be
+ /// relative and may not contain the '..' path or start with '..'.
+ ///
+ [JsonPropertyName("items")]
+ public IList? Items { get; set; }
+
+ ///
+ /// Name of the referent.
+ /// This field is effectively required, but due to backwards compatibility is
+ /// allowed to be empty. Instances of this type with an empty value here are
+ /// almost certainly wrong.
+ /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ ///
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ /// optional field specify whether the Secret or its key must be defined
+ [JsonPropertyName("optional")]
+ public bool? Optional { get; set; }
+}
+
+/// serviceAccountToken is information about the serviceAccountToken data to project
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSourcesServiceAccountToken
+{
+ ///
+ /// audience is the intended audience of the token. A recipient of a token
+ /// must identify itself with an identifier specified in the audience of the
+ /// token, and otherwise should reject the token. The audience defaults to the
+ /// identifier of the apiserver.
+ ///
+ [JsonPropertyName("audience")]
+ public string? Audience { get; set; }
+
+ ///
+ /// expirationSeconds is the requested duration of validity of the service
+ /// account token. As the token approaches expiration, the kubelet volume
+ /// plugin will proactively rotate the service account token. The kubelet will
+ /// start trying to rotate the token if the token is older than 80 percent of
+ /// its time to live or if the token is older than 24 hours.Defaults to 1 hour
+ /// and must be at least 10 minutes.
+ ///
+ [JsonPropertyName("expirationSeconds")]
+ public long? ExpirationSeconds { get; set; }
+
+ ///
+ /// path is the path relative to the mount point of the file to project the
+ /// token into.
+ ///
+ [JsonPropertyName("path")]
+ public required string Path { get; set; }
+}
+
+///
+/// Projection that may be projected along with other supported volume types.
+/// Exactly one of these fields must be set.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplateSources
+{
+ ///
+ /// ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+ /// of ClusterTrustBundle objects in an auto-updating file.
+ ///
+ /// Alpha, gated by the ClusterTrustBundleProjection feature gate.
+ ///
+ /// ClusterTrustBundle objects can either be selected by name, or by the
+ /// combination of signer name and a label selector.
+ ///
+ /// Kubelet performs aggressive normalization of the PEM contents written
+ /// into the pod filesystem. Esoteric PEM features such as inter-block
+ /// comments and block headers are stripped. Certificates are deduplicated.
+ /// The ordering of certificates within the file is arbitrary, and Kubelet
+ /// may change the order over time.
+ ///
+ [JsonPropertyName("clusterTrustBundle")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesClusterTrustBundle? ClusterTrustBundle { get; set; }
+
+ /// configMap information about the configMap data to project
+ [JsonPropertyName("configMap")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesConfigMap? ConfigMap { get; set; }
+
+ /// downwardAPI information about the downwardAPI data to project
+ [JsonPropertyName("downwardAPI")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesDownwardAPI? DownwardAPI { get; set; }
+
+ ///
+ /// Projects an auto-rotating credential bundle (private key and certificate
+ /// chain) that the pod can use either as a TLS client or server.
+ ///
+ /// Kubelet generates a private key and uses it to send a
+ /// PodCertificateRequest to the named signer. Once the signer approves the
+ /// request and issues a certificate chain, Kubelet writes the key and
+ /// certificate chain to the pod filesystem. The pod does not start until
+ /// certificates have been issued for each podCertificate projected volume
+ /// source in its spec.
+ ///
+ /// Kubelet will begin trying to rotate the certificate at the time indicated
+ /// by the signer using the PodCertificateRequest.Status.BeginRefreshAt
+ /// timestamp.
+ ///
+ /// Kubelet can write a single file, indicated by the credentialBundlePath
+ /// field, or separate files, indicated by the keyPath and
+ /// certificateChainPath fields.
+ ///
+ /// The credential bundle is a single file in PEM format. The first PEM
+ /// entry is the private key (in PKCS#8 format), and the remaining PEM
+ /// entries are the certificate chain issued by the signer (typically,
+ /// signers will return their certificate chain in leaf-to-root order).
+ ///
+ /// Prefer using the credential bundle format, since your application code
+ /// can read it atomically. If you use keyPath and certificateChainPath,
+ /// your application must make two separate file reads. If these coincide
+ /// with a certificate rotation, it is possible that the private key and leaf
+ /// certificate you read may not correspond to each other. Your application
+ /// will need to check for this condition, and re-read until they are
+ /// consistent.
+ ///
+ /// The named signer controls chooses the format of the certificate it
+ /// issues; consult the signer implementation's documentation to learn how to
+ /// use the certificates it issues.
+ ///
+ [JsonPropertyName("podCertificate")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesPodCertificate? PodCertificate { get; set; }
+
+ /// secret information about the secret data to project
+ [JsonPropertyName("secret")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesSecret? Secret { get; set; }
+
+ /// serviceAccountToken is information about the serviceAccountToken data to project
+ [JsonPropertyName("serviceAccountToken")]
+ public V1ClusterSpecProjectedVolumeTemplateSourcesServiceAccountToken? ServiceAccountToken { get; set; }
+}
+
+///
+/// Template to be used to define projected volumes, projected volumes will be mounted
+/// under `/projected` base folder
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecProjectedVolumeTemplate
+{
+ ///
+ /// defaultMode are the mode bits used to set permissions on created files by default.
+ /// Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
+ /// YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
+ /// Directories within the path are not affected by this setting.
+ /// This might be in conflict with other options that affect the file
+ /// mode, like fsGroup, and the result can be other mode bits set.
+ ///
+ [JsonPropertyName("defaultMode")]
+ public int? DefaultMode { get; set; }
+
+ ///
+ /// sources is the list of volume projections. Each entry in this list
+ /// handles one source.
+ ///
+ [JsonPropertyName("sources")]
+ public IList? Sources { get; set; }
+}
+
+/// Replica cluster configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecReplica
+{
+ ///
+ /// If replica mode is enabled, this cluster will be a replica of an
+ /// existing cluster. Replica cluster can be created from a recovery
+ /// object store or via streaming through pg_basebackup.
+ /// Refer to the Replica clusters page of the documentation for more information.
+ ///
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+
+ ///
+ /// When replica mode is enabled, this parameter allows you to replay
+ /// transactions only when the system time is at least the configured
+ /// time past the commit time. This provides an opportunity to correct
+ /// data loss errors. Note that when this parameter is set, a promotion
+ /// token cannot be used.
+ ///
+ [JsonPropertyName("minApplyDelay")]
+ public string? MinApplyDelay { get; set; }
+
+ ///
+ /// Primary defines which Cluster is defined to be the primary in the distributed PostgreSQL cluster, based on the
+ /// topology specified in externalClusters
+ ///
+ [JsonPropertyName("primary")]
+ public string? Primary { get; set; }
+
+ ///
+ /// A demotion token generated by an external cluster used to
+ /// check if the promotion requirements are met.
+ ///
+ [JsonPropertyName("promotionToken")]
+ public string? PromotionToken { get; set; }
+
+ ///
+ /// Self defines the name of this cluster. It is used to determine if this is a primary
+ /// or a replica cluster, comparing it with `primary`
+ ///
+ [JsonPropertyName("self")]
+ public string? Self { get; set; }
+
+ /// The name of the external cluster which is the replication origin
+ [JsonPropertyName("source")]
+ public required string Source { get; set; }
+}
+
+/// Replication slots for high availability configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecReplicationSlotsHighAvailability
+{
+ ///
+ /// If enabled (default), the operator will automatically manage replication slots
+ /// on the primary instance and use them in streaming replication
+ /// connections with all the standby instances that are part of the HA
+ /// cluster. If disabled, the operator will not take advantage
+ /// of replication slots in streaming connections with the replicas.
+ /// This feature also controls replication slots in replica cluster,
+ /// from the designated primary to its cascading replicas.
+ ///
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+
+ ///
+ /// Prefix for replication slots managed by the operator for HA.
+ /// It may only contain lower case letters, numbers, and the underscore character.
+ /// This can only be set at creation time. By default set to `_cnpg_`.
+ ///
+ [JsonPropertyName("slotPrefix")]
+ public string? SlotPrefix { get; set; }
+
+ ///
+ /// When enabled, the operator automatically manages synchronization of logical
+ /// decoding (replication) slots across high-availability clusters.
+ ///
+ /// Requires one of the following conditions:
+ /// - PostgreSQL version 17 or later
+ /// - PostgreSQL version < 17 with pg_failover_slots extension enabled
+ ///
+ [JsonPropertyName("synchronizeLogicalDecoding")]
+ public bool? SynchronizeLogicalDecoding { get; set; }
+}
+
+/// Configures the synchronization of the user defined physical replication slots
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecReplicationSlotsSynchronizeReplicas
+{
+ /// When set to true, every replication slot that is on the primary is synchronized on each standby
+ [JsonPropertyName("enabled")]
+ public bool? Enabled { get; set; }
+
+ /// List of regular expression patterns to match the names of replication slots to be excluded (by default empty)
+ [JsonPropertyName("excludePatterns")]
+ public IList? ExcludePatterns { get; set; }
+}
+
+/// Replication slots management configuration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecReplicationSlots
+{
+ /// Replication slots for high availability configuration
+ [JsonPropertyName("highAvailability")]
+ public V1ClusterSpecReplicationSlotsHighAvailability? HighAvailability { get; set; }
+
+ /// Configures the synchronization of the user defined physical replication slots
+ [JsonPropertyName("synchronizeReplicas")]
+ public V1ClusterSpecReplicationSlotsSynchronizeReplicas? SynchronizeReplicas { get; set; }
+
+ ///
+ /// Standby will update the status of the local replication slots
+ /// every `updateInterval` seconds (default 30).
+ ///
+ [JsonPropertyName("updateInterval")]
+ public int? UpdateInterval { get; set; }
+}
+
+/// ResourceClaim references one entry in PodSpec.ResourceClaims.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecResourcesClaims
+{
+ ///
+ /// Name must match the name of one entry in pod.spec.resourceClaims of
+ /// the Pod where this field is used. It makes that resource available
+ /// inside a container.
+ ///
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Request is the name chosen for a request in the referenced claim.
+ /// If empty, everything from the claim is made available, otherwise
+ /// only the result of this request.
+ ///
+ [JsonPropertyName("request")]
+ public string? Request { get; set; }
+}
+
+///
+/// Resources requirements of every generated Pod. Please refer to
+/// https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+/// for more information.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecResources
+{
+ ///
+ /// Claims lists the names of resources, defined in spec.resourceClaims,
+ /// that are used by this container.
+ ///
+ /// This field depends on the
+ /// DynamicResourceAllocation feature gate.
+ ///
+ /// This field is immutable. It can only be set for containers.
+ ///
+ [JsonPropertyName("claims")]
+ public IList? Claims { get; set; }
+
+ ///
+ /// Limits describes the maximum amount of compute resources allowed.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("limits")]
+ public IDictionary? Limits { get; set; }
+
+ ///
+ /// Requests describes the minimum amount of compute resources required.
+ /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ /// otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("requests")]
+ public IDictionary? Requests { get; set; }
+}
+
+///
+/// The SeccompProfile applied to every Pod and Container.
+/// Defaults to: `RuntimeDefault`
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSeccompProfile
+{
+ ///
+ /// localhostProfile indicates a profile defined in a file on the node should be used.
+ /// The profile must be preconfigured on the node to work.
+ /// Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ /// Must be set if type is "Localhost". Must NOT be set for any other type.
+ ///
+ [JsonPropertyName("localhostProfile")]
+ public string? LocalhostProfile { get; set; }
+
+ ///
+ /// type indicates which kind of seccomp profile will be applied.
+ /// Valid options are:
+ ///
+ /// Localhost - a profile defined in a file on the node should be used.
+ /// RuntimeDefault - the container runtime default profile should be used.
+ /// Unconfined - no profile should be applied.
+ ///
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+///
+/// appArmorProfile is the AppArmor options to use by this container. If set, this profile
+/// overrides the pod's appArmorProfile.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSecurityContextAppArmorProfile
+{
+ ///
+ /// localhostProfile indicates a profile loaded on the node that should be used.
+ /// The profile must be preconfigured on the node to work.
+ /// Must match the loaded name of the profile.
+ /// Must be set if and only if type is "Localhost".
+ ///
+ [JsonPropertyName("localhostProfile")]
+ public string? LocalhostProfile { get; set; }
+
+ ///
+ /// type indicates which kind of AppArmor profile will be applied.
+ /// Valid options are:
+ /// Localhost - a profile pre-loaded on the node.
+ /// RuntimeDefault - the container runtime's default profile.
+ /// Unconfined - no AppArmor enforcement.
+ ///
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+///
+/// The capabilities to add/drop when running containers.
+/// Defaults to the default set of capabilities granted by the container runtime.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSecurityContextCapabilities
+{
+ /// Added capabilities
+ [JsonPropertyName("add")]
+ public IList? Add { get; set; }
+
+ /// Removed capabilities
+ [JsonPropertyName("drop")]
+ public IList? Drop { get; set; }
+}
+
+///
+/// The SELinux context to be applied to the container.
+/// If unspecified, the container runtime will allocate a random SELinux context for each
+/// container. May also be set in PodSecurityContext. If set in both SecurityContext and
+/// PodSecurityContext, the value specified in SecurityContext takes precedence.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSecurityContextSeLinuxOptions
+{
+ /// Level is SELinux level label that applies to the container.
+ [JsonPropertyName("level")]
+ public string? Level { get; set; }
+
+ /// Role is a SELinux role label that applies to the container.
+ [JsonPropertyName("role")]
+ public string? Role { get; set; }
+
+ /// Type is a SELinux type label that applies to the container.
+ [JsonPropertyName("type")]
+ public string? Type { get; set; }
+
+ /// User is a SELinux user label that applies to the container.
+ [JsonPropertyName("user")]
+ public string? User { get; set; }
+}
+
+///
+/// The seccomp options to use by this container. If seccomp options are
+/// provided at both the pod & container level, the container options
+/// override the pod options.
+/// Note that this field cannot be set when spec.os.name is windows.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSecurityContextSeccompProfile
+{
+ ///
+ /// localhostProfile indicates a profile defined in a file on the node should be used.
+ /// The profile must be preconfigured on the node to work.
+ /// Must be a descending path, relative to the kubelet's configured seccomp profile location.
+ /// Must be set if type is "Localhost". Must NOT be set for any other type.
+ ///
+ [JsonPropertyName("localhostProfile")]
+ public string? LocalhostProfile { get; set; }
+
+ ///
+ /// type indicates which kind of seccomp profile will be applied.
+ /// Valid options are:
+ ///
+ /// Localhost - a profile defined in a file on the node should be used.
+ /// RuntimeDefault - the container runtime default profile should be used.
+ /// Unconfined - no profile should be applied.
+ ///
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+///
+/// The Windows specific settings applied to all containers.
+/// If unspecified, the options from the PodSecurityContext will be used.
+/// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+/// Note that this field cannot be set when spec.os.name is linux.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSecurityContextWindowsOptions
+{
+ ///
+ /// GMSACredentialSpec is where the GMSA admission webhook
+ /// (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
+ /// GMSA credential spec named by the GMSACredentialSpecName field.
+ ///
+ [JsonPropertyName("gmsaCredentialSpec")]
+ public string? GmsaCredentialSpec { get; set; }
+
+ /// GMSACredentialSpecName is the name of the GMSA credential spec to use.
+ [JsonPropertyName("gmsaCredentialSpecName")]
+ public string? GmsaCredentialSpecName { get; set; }
+
+ ///
+ /// HostProcess determines if a container should be run as a 'Host Process' container.
+ /// All of a Pod's containers must have the same effective HostProcess value
+ /// (it is not allowed to have a mix of HostProcess containers and non-HostProcess containers).
+ /// In addition, if HostProcess is true then HostNetwork must also be set to true.
+ ///
+ [JsonPropertyName("hostProcess")]
+ public bool? HostProcess { get; set; }
+
+ ///
+ /// The UserName in Windows to run the entrypoint of the container process.
+ /// Defaults to the user specified in image metadata if unspecified.
+ /// May also be set in PodSecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ ///
+ [JsonPropertyName("runAsUserName")]
+ public string? RunAsUserName { get; set; }
+}
+
+///
+/// Override the SecurityContext applied to every Container in the Pod of the cluster.
+/// When set, this overrides the operator's default Container SecurityContext.
+/// If omitted, the operator defaults are used.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSecurityContext
+{
+ ///
+ /// AllowPrivilegeEscalation controls whether a process can gain more
+ /// privileges than its parent process. This bool directly controls if
+ /// the no_new_privs flag will be set on the container process.
+ /// AllowPrivilegeEscalation is true always when the container is:
+ /// 1) run as Privileged
+ /// 2) has CAP_SYS_ADMIN
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("allowPrivilegeEscalation")]
+ public bool? AllowPrivilegeEscalation { get; set; }
+
+ ///
+ /// appArmorProfile is the AppArmor options to use by this container. If set, this profile
+ /// overrides the pod's appArmorProfile.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("appArmorProfile")]
+ public V1ClusterSpecSecurityContextAppArmorProfile? AppArmorProfile { get; set; }
+
+ ///
+ /// The capabilities to add/drop when running containers.
+ /// Defaults to the default set of capabilities granted by the container runtime.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("capabilities")]
+ public V1ClusterSpecSecurityContextCapabilities? Capabilities { get; set; }
+
+ ///
+ /// Run container in privileged mode.
+ /// Processes in privileged containers are essentially equivalent to root on the host.
+ /// Defaults to false.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("privileged")]
+ public bool? Privileged { get; set; }
+
+ ///
+ /// procMount denotes the type of proc mount to use for the containers.
+ /// The default value is Default which uses the container runtime defaults for
+ /// readonly paths and masked paths.
+ /// This requires the ProcMountType feature flag to be enabled.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("procMount")]
+ public string? ProcMount { get; set; }
+
+ ///
+ /// Whether this container has a read-only root filesystem.
+ /// Default is false.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("readOnlyRootFilesystem")]
+ public bool? ReadOnlyRootFilesystem { get; set; }
+
+ ///
+ /// The GID to run the entrypoint of the container process.
+ /// Uses runtime default if unset.
+ /// May also be set in PodSecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("runAsGroup")]
+ public long? RunAsGroup { get; set; }
+
+ ///
+ /// Indicates that the container must run as a non-root user.
+ /// If true, the Kubelet will validate the image at runtime to ensure that it
+ /// does not run as UID 0 (root) and fail to start the container if it does.
+ /// If unset or false, no such validation will be performed.
+ /// May also be set in PodSecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ ///
+ [JsonPropertyName("runAsNonRoot")]
+ public bool? RunAsNonRoot { get; set; }
+
+ ///
+ /// The UID to run the entrypoint of the container process.
+ /// Defaults to user specified in image metadata if unspecified.
+ /// May also be set in PodSecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("runAsUser")]
+ public long? RunAsUser { get; set; }
+
+ ///
+ /// The SELinux context to be applied to the container.
+ /// If unspecified, the container runtime will allocate a random SELinux context for each
+ /// container. May also be set in PodSecurityContext. If set in both SecurityContext and
+ /// PodSecurityContext, the value specified in SecurityContext takes precedence.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("seLinuxOptions")]
+ public V1ClusterSpecSecurityContextSeLinuxOptions? SeLinuxOptions { get; set; }
+
+ ///
+ /// The seccomp options to use by this container. If seccomp options are
+ /// provided at both the pod & container level, the container options
+ /// override the pod options.
+ /// Note that this field cannot be set when spec.os.name is windows.
+ ///
+ [JsonPropertyName("seccompProfile")]
+ public V1ClusterSpecSecurityContextSeccompProfile? SeccompProfile { get; set; }
+
+ ///
+ /// The Windows specific settings applied to all containers.
+ /// If unspecified, the options from the PodSecurityContext will be used.
+ /// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
+ /// Note that this field cannot be set when spec.os.name is linux.
+ ///
+ [JsonPropertyName("windowsOptions")]
+ public V1ClusterSpecSecurityContextWindowsOptions? WindowsOptions { get; set; }
+}
+
+///
+/// Metadata are the metadata to be used for the generated
+/// service account
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecServiceAccountTemplateMetadata
+{
+ ///
+ /// Annotations is an unstructured key value map stored with a resource that may be
+ /// set by external tools to store and retrieve arbitrary metadata. They are not
+ /// queryable and should be preserved when modifying objects.
+ /// More info: http://kubernetes.io/docs/user-guide/annotations
+ ///
+ [JsonPropertyName("annotations")]
+ public IDictionary? Annotations { get; set; }
+
+ ///
+ /// Map of string keys and values that can be used to organize and categorize
+ /// (scope and select) objects. May match selectors of replication controllers
+ /// and services.
+ /// More info: http://kubernetes.io/docs/user-guide/labels
+ ///
+ [JsonPropertyName("labels")]
+ public IDictionary? Labels { get; set; }
+
+ /// The name of the resource. Only supported for certain types
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+}
+
+/// Configure the generation of the service account
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecServiceAccountTemplate
+{
+ ///
+ /// Metadata are the metadata to be used for the generated
+ /// service account
+ ///
+ [JsonPropertyName("metadata")]
+ public required V1ClusterSpecServiceAccountTemplateMetadata Metadata { get; set; }
+}
+
+///
+/// dataSource field can be used to specify either:
+/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+/// * An existing PVC (PersistentVolumeClaim)
+/// If the provisioner or an external controller can support the specified data source,
+/// it will create a new volume based on the contents of the specified data source.
+/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+/// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStoragePvcTemplateDataSource
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+/// volume is desired. This may be any object from a non-empty API group (non
+/// core object) or a PersistentVolumeClaim object.
+/// When this field is specified, volume binding will only succeed if the type of
+/// the specified object matches some installed volume populator or dynamic
+/// provisioner.
+/// This field will replace the functionality of the dataSource field and as such
+/// if both fields are non-empty, they must have the same value. For backwards
+/// compatibility, when namespace isn't specified in dataSourceRef,
+/// both fields (dataSource and dataSourceRef) will be set to the same
+/// value automatically if one of them is empty and the other is non-empty.
+/// When namespace is specified in dataSourceRef,
+/// dataSource isn't set to the same value and must be empty.
+/// There are three important differences between dataSource and dataSourceRef:
+/// * While dataSource only allows two specific types of objects, dataSourceRef
+/// allows any non-core object, as well as PersistentVolumeClaim objects.
+/// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+/// preserves all values, and generates an error if a disallowed value is
+/// specified.
+/// * While dataSource only allows local objects, dataSourceRef allows objects
+/// in any namespaces.
+/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStoragePvcTemplateDataSourceRef
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Namespace is the namespace of resource being referenced
+ /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+ /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("namespace")]
+ public string? Namespace { get; set; }
+}
+
+///
+/// resources represents the minimum resources the volume should have.
+/// Users are allowed to specify resource requirements
+/// that are lower than previous value but must still be higher than capacity recorded in the
+/// status field of the claim.
+/// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStoragePvcTemplateResources
+{
+ ///
+ /// Limits describes the maximum amount of compute resources allowed.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("limits")]
+ public IDictionary? Limits { get; set; }
+
+ ///
+ /// Requests describes the minimum amount of compute resources required.
+ /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ /// otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("requests")]
+ public IDictionary? Requests { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStoragePvcTemplateSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+/// selector is a label query over volumes to consider for binding.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStoragePvcTemplateSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+/// Template to be used to generate the Persistent Volume Claim
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStoragePvcTemplate
+{
+ ///
+ /// accessModes contains the desired access modes the volume should have.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ ///
+ [JsonPropertyName("accessModes")]
+ public IList? AccessModes { get; set; }
+
+ ///
+ /// dataSource field can be used to specify either:
+ /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+ /// * An existing PVC (PersistentVolumeClaim)
+ /// If the provisioner or an external controller can support the specified data source,
+ /// it will create a new volume based on the contents of the specified data source.
+ /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+ /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+ /// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+ ///
+ [JsonPropertyName("dataSource")]
+ public V1ClusterSpecStoragePvcTemplateDataSource? DataSource { get; set; }
+
+ ///
+ /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+ /// volume is desired. This may be any object from a non-empty API group (non
+ /// core object) or a PersistentVolumeClaim object.
+ /// When this field is specified, volume binding will only succeed if the type of
+ /// the specified object matches some installed volume populator or dynamic
+ /// provisioner.
+ /// This field will replace the functionality of the dataSource field and as such
+ /// if both fields are non-empty, they must have the same value. For backwards
+ /// compatibility, when namespace isn't specified in dataSourceRef,
+ /// both fields (dataSource and dataSourceRef) will be set to the same
+ /// value automatically if one of them is empty and the other is non-empty.
+ /// When namespace is specified in dataSourceRef,
+ /// dataSource isn't set to the same value and must be empty.
+ /// There are three important differences between dataSource and dataSourceRef:
+ /// * While dataSource only allows two specific types of objects, dataSourceRef
+ /// allows any non-core object, as well as PersistentVolumeClaim objects.
+ /// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+ /// preserves all values, and generates an error if a disallowed value is
+ /// specified.
+ /// * While dataSource only allows local objects, dataSourceRef allows objects
+ /// in any namespaces.
+ /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+ /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("dataSourceRef")]
+ public V1ClusterSpecStoragePvcTemplateDataSourceRef? DataSourceRef { get; set; }
+
+ ///
+ /// resources represents the minimum resources the volume should have.
+ /// Users are allowed to specify resource requirements
+ /// that are lower than previous value but must still be higher than capacity recorded in the
+ /// status field of the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+ ///
+ [JsonPropertyName("resources")]
+ public V1ClusterSpecStoragePvcTemplateResources? Resources { get; set; }
+
+ /// selector is a label query over volumes to consider for binding.
+ [JsonPropertyName("selector")]
+ public V1ClusterSpecStoragePvcTemplateSelector? Selector { get; set; }
+
+ ///
+ /// storageClassName is the name of the StorageClass required by the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+ ///
+ [JsonPropertyName("storageClassName")]
+ public string? StorageClassName { get; set; }
+
+ ///
+ /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+ /// If specified, the CSI driver will create or update the volume with the attributes defined
+ /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+ /// it can be changed after the claim is created. An empty string or nil value indicates that no
+ /// VolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state,
+ /// this field can be reset to its previous value (including nil) to cancel the modification.
+ /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+ /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+ /// exists.
+ /// More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
+ ///
+ [JsonPropertyName("volumeAttributesClassName")]
+ public string? VolumeAttributesClassName { get; set; }
+
+ ///
+ /// volumeMode defines what type of volume is required by the claim.
+ /// Value of Filesystem is implied when not included in claim spec.
+ ///
+ [JsonPropertyName("volumeMode")]
+ public string? VolumeMode { get; set; }
+
+ /// volumeName is the binding reference to the PersistentVolume backing this claim.
+ [JsonPropertyName("volumeName")]
+ public string? VolumeName { get; set; }
+}
+
+/// Configuration of the storage of the instances
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecStorage
+{
+ /// Template to be used to generate the Persistent Volume Claim
+ [JsonPropertyName("pvcTemplate")]
+ public V1ClusterSpecStoragePvcTemplate? PvcTemplate { get; set; }
+
+ /// Resize existent PVCs, defaults to true
+ [JsonPropertyName("resizeInUseVolumes")]
+ public bool? ResizeInUseVolumes { get; set; }
+
+ ///
+ /// Size of the storage. Required if not already specified in the PVC template.
+ /// Changes to this field are automatically reapplied to the created PVCs.
+ /// Size cannot be decreased.
+ ///
+ [JsonPropertyName("size")]
+ public string? Size { get; set; }
+
+ ///
+ /// StorageClass to use for PVCs. Applied after
+ /// evaluating the PVC template, if available.
+ /// If not specified, the generated PVCs will use the
+ /// default storage class
+ ///
+ [JsonPropertyName("storageClass")]
+ public string? StorageClass { get; set; }
+}
+
+///
+/// The secret containing the superuser password. If not defined a new
+/// secret will be created with a randomly generated password
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecSuperuserSecret
+{
+ /// Name of the referent.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// Owner is the PostgreSQL user owning the tablespace
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesOwner
+{
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+}
+
+///
+/// dataSource field can be used to specify either:
+/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+/// * An existing PVC (PersistentVolumeClaim)
+/// If the provisioner or an external controller can support the specified data source,
+/// it will create a new volume based on the contents of the specified data source.
+/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+/// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStoragePvcTemplateDataSource
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+/// volume is desired. This may be any object from a non-empty API group (non
+/// core object) or a PersistentVolumeClaim object.
+/// When this field is specified, volume binding will only succeed if the type of
+/// the specified object matches some installed volume populator or dynamic
+/// provisioner.
+/// This field will replace the functionality of the dataSource field and as such
+/// if both fields are non-empty, they must have the same value. For backwards
+/// compatibility, when namespace isn't specified in dataSourceRef,
+/// both fields (dataSource and dataSourceRef) will be set to the same
+/// value automatically if one of them is empty and the other is non-empty.
+/// When namespace is specified in dataSourceRef,
+/// dataSource isn't set to the same value and must be empty.
+/// There are three important differences between dataSource and dataSourceRef:
+/// * While dataSource only allows two specific types of objects, dataSourceRef
+/// allows any non-core object, as well as PersistentVolumeClaim objects.
+/// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+/// preserves all values, and generates an error if a disallowed value is
+/// specified.
+/// * While dataSource only allows local objects, dataSourceRef allows objects
+/// in any namespaces.
+/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStoragePvcTemplateDataSourceRef
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Namespace is the namespace of resource being referenced
+ /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+ /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("namespace")]
+ public string? Namespace { get; set; }
+}
+
+///
+/// resources represents the minimum resources the volume should have.
+/// Users are allowed to specify resource requirements
+/// that are lower than previous value but must still be higher than capacity recorded in the
+/// status field of the claim.
+/// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStoragePvcTemplateResources
+{
+ ///
+ /// Limits describes the maximum amount of compute resources allowed.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("limits")]
+ public IDictionary? Limits { get; set; }
+
+ ///
+ /// Requests describes the minimum amount of compute resources required.
+ /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ /// otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("requests")]
+ public IDictionary? Requests { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStoragePvcTemplateSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+/// selector is a label query over volumes to consider for binding.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStoragePvcTemplateSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+/// Template to be used to generate the Persistent Volume Claim
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStoragePvcTemplate
+{
+ ///
+ /// accessModes contains the desired access modes the volume should have.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ ///
+ [JsonPropertyName("accessModes")]
+ public IList? AccessModes { get; set; }
+
+ ///
+ /// dataSource field can be used to specify either:
+ /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+ /// * An existing PVC (PersistentVolumeClaim)
+ /// If the provisioner or an external controller can support the specified data source,
+ /// it will create a new volume based on the contents of the specified data source.
+ /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+ /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+ /// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+ ///
+ [JsonPropertyName("dataSource")]
+ public V1ClusterSpecTablespacesStoragePvcTemplateDataSource? DataSource { get; set; }
+
+ ///
+ /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+ /// volume is desired. This may be any object from a non-empty API group (non
+ /// core object) or a PersistentVolumeClaim object.
+ /// When this field is specified, volume binding will only succeed if the type of
+ /// the specified object matches some installed volume populator or dynamic
+ /// provisioner.
+ /// This field will replace the functionality of the dataSource field and as such
+ /// if both fields are non-empty, they must have the same value. For backwards
+ /// compatibility, when namespace isn't specified in dataSourceRef,
+ /// both fields (dataSource and dataSourceRef) will be set to the same
+ /// value automatically if one of them is empty and the other is non-empty.
+ /// When namespace is specified in dataSourceRef,
+ /// dataSource isn't set to the same value and must be empty.
+ /// There are three important differences between dataSource and dataSourceRef:
+ /// * While dataSource only allows two specific types of objects, dataSourceRef
+ /// allows any non-core object, as well as PersistentVolumeClaim objects.
+ /// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+ /// preserves all values, and generates an error if a disallowed value is
+ /// specified.
+ /// * While dataSource only allows local objects, dataSourceRef allows objects
+ /// in any namespaces.
+ /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+ /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("dataSourceRef")]
+ public V1ClusterSpecTablespacesStoragePvcTemplateDataSourceRef? DataSourceRef { get; set; }
+
+ ///
+ /// resources represents the minimum resources the volume should have.
+ /// Users are allowed to specify resource requirements
+ /// that are lower than previous value but must still be higher than capacity recorded in the
+ /// status field of the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+ ///
+ [JsonPropertyName("resources")]
+ public V1ClusterSpecTablespacesStoragePvcTemplateResources? Resources { get; set; }
+
+ /// selector is a label query over volumes to consider for binding.
+ [JsonPropertyName("selector")]
+ public V1ClusterSpecTablespacesStoragePvcTemplateSelector? Selector { get; set; }
+
+ ///
+ /// storageClassName is the name of the StorageClass required by the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+ ///
+ [JsonPropertyName("storageClassName")]
+ public string? StorageClassName { get; set; }
+
+ ///
+ /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+ /// If specified, the CSI driver will create or update the volume with the attributes defined
+ /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+ /// it can be changed after the claim is created. An empty string or nil value indicates that no
+ /// VolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state,
+ /// this field can be reset to its previous value (including nil) to cancel the modification.
+ /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+ /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+ /// exists.
+ /// More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
+ ///
+ [JsonPropertyName("volumeAttributesClassName")]
+ public string? VolumeAttributesClassName { get; set; }
+
+ ///
+ /// volumeMode defines what type of volume is required by the claim.
+ /// Value of Filesystem is implied when not included in claim spec.
+ ///
+ [JsonPropertyName("volumeMode")]
+ public string? VolumeMode { get; set; }
+
+ /// volumeName is the binding reference to the PersistentVolume backing this claim.
+ [JsonPropertyName("volumeName")]
+ public string? VolumeName { get; set; }
+}
+
+/// The storage configuration for the tablespace
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespacesStorage
+{
+ /// Template to be used to generate the Persistent Volume Claim
+ [JsonPropertyName("pvcTemplate")]
+ public V1ClusterSpecTablespacesStoragePvcTemplate? PvcTemplate { get; set; }
+
+ /// Resize existent PVCs, defaults to true
+ [JsonPropertyName("resizeInUseVolumes")]
+ public bool? ResizeInUseVolumes { get; set; }
+
+ ///
+ /// Size of the storage. Required if not already specified in the PVC template.
+ /// Changes to this field are automatically reapplied to the created PVCs.
+ /// Size cannot be decreased.
+ ///
+ [JsonPropertyName("size")]
+ public string? Size { get; set; }
+
+ ///
+ /// StorageClass to use for PVCs. Applied after
+ /// evaluating the PVC template, if available.
+ /// If not specified, the generated PVCs will use the
+ /// default storage class
+ ///
+ [JsonPropertyName("storageClass")]
+ public string? StorageClass { get; set; }
+}
+
+///
+/// TablespaceConfiguration is the configuration of a tablespace, and includes
+/// the storage specification for the tablespace
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTablespaces
+{
+ /// The name of the tablespace
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ /// Owner is the PostgreSQL user owning the tablespace
+ [JsonPropertyName("owner")]
+ public V1ClusterSpecTablespacesOwner? Owner { get; set; }
+
+ /// The storage configuration for the tablespace
+ [JsonPropertyName("storage")]
+ public required V1ClusterSpecTablespacesStorage Storage { get; set; }
+
+ ///
+ /// When set to true, the tablespace will be added as a `temp_tablespaces`
+ /// entry in PostgreSQL, and will be available to automatically house temp
+ /// database objects, or other temporary files. Please refer to PostgreSQL
+ /// documentation for more information on the `temp_tablespaces` GUC.
+ ///
+ [JsonPropertyName("temporary")]
+ public bool? Temporary { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTopologySpreadConstraintsLabelSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+///
+/// LabelSelector is used to find matching pods.
+/// Pods that match this label selector are counted to determine the number of pods
+/// in their corresponding topology domain.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTopologySpreadConstraintsLabelSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+/// TopologySpreadConstraint specifies how to spread matching pods among the given topology.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecTopologySpreadConstraints
+{
+ ///
+ /// LabelSelector is used to find matching pods.
+ /// Pods that match this label selector are counted to determine the number of pods
+ /// in their corresponding topology domain.
+ ///
+ [JsonPropertyName("labelSelector")]
+ public V1ClusterSpecTopologySpreadConstraintsLabelSelector? LabelSelector { get; set; }
+
+ ///
+ /// MatchLabelKeys is a set of pod label keys to select the pods over which
+ /// spreading will be calculated. The keys are used to lookup values from the
+ /// incoming pod labels, those key-value labels are ANDed with labelSelector
+ /// to select the group of existing pods over which spreading will be calculated
+ /// for the incoming pod. The same key is forbidden to exist in both MatchLabelKeys and LabelSelector.
+ /// MatchLabelKeys cannot be set when LabelSelector isn't set.
+ /// Keys that don't exist in the incoming pod labels will
+ /// be ignored. A null or empty list means only match against labelSelector.
+ ///
+ /// This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default).
+ ///
+ [JsonPropertyName("matchLabelKeys")]
+ public IList? MatchLabelKeys { get; set; }
+
+ ///
+ /// MaxSkew describes the degree to which pods may be unevenly distributed.
+ /// When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
+ /// between the number of matching pods in the target topology and the global minimum.
+ /// The global minimum is the minimum number of matching pods in an eligible domain
+ /// or zero if the number of eligible domains is less than MinDomains.
+ /// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
+ /// labelSelector spread as 2/2/1:
+ /// In this case, the global minimum is 1.
+ /// | zone1 | zone2 | zone3 |
+ /// | P P | P P | P |
+ /// - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2;
+ /// scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2)
+ /// violate MaxSkew(1).
+ /// - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
+ /// When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
+ /// to topologies that satisfy it.
+ /// It's a required field. Default value is 1 and 0 is not allowed.
+ ///
+ [JsonPropertyName("maxSkew")]
+ public required int MaxSkew { get; set; }
+
+ ///
+ /// MinDomains indicates a minimum number of eligible domains.
+ /// When the number of eligible domains with matching topology keys is less than minDomains,
+ /// Pod Topology Spread treats "global minimum" as 0, and then the calculation of Skew is performed.
+ /// And when the number of eligible domains with matching topology keys equals or greater than minDomains,
+ /// this value has no effect on scheduling.
+ /// As a result, when the number of eligible domains is less than minDomains,
+ /// scheduler won't schedule more than maxSkew Pods to those domains.
+ /// If value is nil, the constraint behaves as if MinDomains is equal to 1.
+ /// Valid values are integers greater than 0.
+ /// When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
+ ///
+ /// For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same
+ /// labelSelector spread as 2/2/2:
+ /// | zone1 | zone2 | zone3 |
+ /// | P P | P P | P P |
+ /// The number of domains is less than 5(MinDomains), so "global minimum" is treated as 0.
+ /// In this situation, new pod with the same labelSelector cannot be scheduled,
+ /// because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones,
+ /// it will violate MaxSkew.
+ ///
+ [JsonPropertyName("minDomains")]
+ public int? MinDomains { get; set; }
+
+ ///
+ /// NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector
+ /// when calculating pod topology spread skew. Options are:
+ /// - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations.
+ /// - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.
+ ///
+ /// If this value is nil, the behavior is equivalent to the Honor policy.
+ ///
+ [JsonPropertyName("nodeAffinityPolicy")]
+ public string? NodeAffinityPolicy { get; set; }
+
+ ///
+ /// NodeTaintsPolicy indicates how we will treat node taints when calculating
+ /// pod topology spread skew. Options are:
+ /// - Honor: nodes without taints, along with tainted nodes for which the incoming pod
+ /// has a toleration, are included.
+ /// - Ignore: node taints are ignored. All nodes are included.
+ ///
+ /// If this value is nil, the behavior is equivalent to the Ignore policy.
+ ///
+ [JsonPropertyName("nodeTaintsPolicy")]
+ public string? NodeTaintsPolicy { get; set; }
+
+ ///
+ /// TopologyKey is the key of node labels. Nodes that have a label with this key
+ /// and identical values are considered to be in the same topology.
+ /// We consider each <key, value> as a "bucket", and try to put balanced number
+ /// of pods into each bucket.
+ /// We define a domain as a particular instance of a topology.
+ /// Also, we define an eligible domain as a domain whose nodes meet the requirements of
+ /// nodeAffinityPolicy and nodeTaintsPolicy.
+ /// e.g. If TopologyKey is "kubernetes.io/hostname", each Node is a domain of that topology.
+ /// And, if TopologyKey is "topology.kubernetes.io/zone", each zone is a domain of that topology.
+ /// It's a required field.
+ ///
+ [JsonPropertyName("topologyKey")]
+ public required string TopologyKey { get; set; }
+
+ ///
+ /// WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
+ /// the spread constraint.
+ /// - DoNotSchedule (default) tells the scheduler not to schedule it.
+ /// - ScheduleAnyway tells the scheduler to schedule the pod in any location,
+ /// but giving higher precedence to topologies that would help reduce the
+ /// skew.
+ /// A constraint is considered "Unsatisfiable" for an incoming pod
+ /// if and only if every possible node assignment for that pod would violate
+ /// "MaxSkew" on some topology.
+ /// For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
+ /// labelSelector spread as 3/1/1:
+ /// | zone1 | zone2 | zone3 |
+ /// | P P P | P | P |
+ /// If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
+ /// to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
+ /// MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
+ /// won't make it *more* imbalanced.
+ /// It's a required field.
+ ///
+ [JsonPropertyName("whenUnsatisfiable")]
+ public required string WhenUnsatisfiable { get; set; }
+}
+
+///
+/// dataSource field can be used to specify either:
+/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+/// * An existing PVC (PersistentVolumeClaim)
+/// If the provisioner or an external controller can support the specified data source,
+/// it will create a new volume based on the contents of the specified data source.
+/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+/// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStoragePvcTemplateDataSource
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+///
+/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+/// volume is desired. This may be any object from a non-empty API group (non
+/// core object) or a PersistentVolumeClaim object.
+/// When this field is specified, volume binding will only succeed if the type of
+/// the specified object matches some installed volume populator or dynamic
+/// provisioner.
+/// This field will replace the functionality of the dataSource field and as such
+/// if both fields are non-empty, they must have the same value. For backwards
+/// compatibility, when namespace isn't specified in dataSourceRef,
+/// both fields (dataSource and dataSourceRef) will be set to the same
+/// value automatically if one of them is empty and the other is non-empty.
+/// When namespace is specified in dataSourceRef,
+/// dataSource isn't set to the same value and must be empty.
+/// There are three important differences between dataSource and dataSourceRef:
+/// * While dataSource only allows two specific types of objects, dataSourceRef
+/// allows any non-core object, as well as PersistentVolumeClaim objects.
+/// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+/// preserves all values, and generates an error if a disallowed value is
+/// specified.
+/// * While dataSource only allows local objects, dataSourceRef allows objects
+/// in any namespaces.
+/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStoragePvcTemplateDataSourceRef
+{
+ ///
+ /// APIGroup is the group for the resource being referenced.
+ /// If APIGroup is not specified, the specified Kind must be in the core API group.
+ /// For any other third-party types, APIGroup is required.
+ ///
+ [JsonPropertyName("apiGroup")]
+ public string? ApiGroup { get; set; }
+
+ /// Kind is the type of resource being referenced
+ [JsonPropertyName("kind")]
+ public required string Kind { get; set; }
+
+ /// Name is the name of resource being referenced
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Namespace is the namespace of resource being referenced
+ /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.
+ /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("namespace")]
+ public string? Namespace { get; set; }
+}
+
+///
+/// resources represents the minimum resources the volume should have.
+/// Users are allowed to specify resource requirements
+/// that are lower than previous value but must still be higher than capacity recorded in the
+/// status field of the claim.
+/// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStoragePvcTemplateResources
+{
+ ///
+ /// Limits describes the maximum amount of compute resources allowed.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("limits")]
+ public IDictionary? Limits { get; set; }
+
+ ///
+ /// Requests describes the minimum amount of compute resources required.
+ /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
+ /// otherwise to an implementation-defined value. Requests cannot exceed Limits.
+ /// More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ ///
+ [JsonPropertyName("requests")]
+ public IDictionary? Requests { get; set; }
+}
+
+///
+/// A label selector requirement is a selector that contains values, a key, and an operator that
+/// relates the key and values.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStoragePvcTemplateSelectorMatchExpressions
+{
+ /// key is the label key that the selector applies to.
+ [JsonPropertyName("key")]
+ public required string Key { get; set; }
+
+ ///
+ /// operator represents a key's relationship to a set of values.
+ /// Valid operators are In, NotIn, Exists and DoesNotExist.
+ ///
+ [JsonPropertyName("operator")]
+ public required string Operator { get; set; }
+
+ ///
+ /// values is an array of string values. If the operator is In or NotIn,
+ /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ /// the values array must be empty. This array is replaced during a strategic
+ /// merge patch.
+ ///
+ [JsonPropertyName("values")]
+ public IList? Values { get; set; }
+}
+
+/// selector is a label query over volumes to consider for binding.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStoragePvcTemplateSelector
+{
+ /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
+ [JsonPropertyName("matchExpressions")]
+ public IList? MatchExpressions { get; set; }
+
+ ///
+ /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ /// map is equivalent to an element of matchExpressions, whose key field is "key", the
+ /// operator is "In", and the values array contains only "value". The requirements are ANDed.
+ ///
+ [JsonPropertyName("matchLabels")]
+ public IDictionary? MatchLabels { get; set; }
+}
+
+/// Template to be used to generate the Persistent Volume Claim
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStoragePvcTemplate
+{
+ ///
+ /// accessModes contains the desired access modes the volume should have.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ ///
+ [JsonPropertyName("accessModes")]
+ public IList? AccessModes { get; set; }
+
+ ///
+ /// dataSource field can be used to specify either:
+ /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
+ /// * An existing PVC (PersistentVolumeClaim)
+ /// If the provisioner or an external controller can support the specified data source,
+ /// it will create a new volume based on the contents of the specified data source.
+ /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef,
+ /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified.
+ /// If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+ ///
+ [JsonPropertyName("dataSource")]
+ public V1ClusterSpecWalStoragePvcTemplateDataSource? DataSource { get; set; }
+
+ ///
+ /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty
+ /// volume is desired. This may be any object from a non-empty API group (non
+ /// core object) or a PersistentVolumeClaim object.
+ /// When this field is specified, volume binding will only succeed if the type of
+ /// the specified object matches some installed volume populator or dynamic
+ /// provisioner.
+ /// This field will replace the functionality of the dataSource field and as such
+ /// if both fields are non-empty, they must have the same value. For backwards
+ /// compatibility, when namespace isn't specified in dataSourceRef,
+ /// both fields (dataSource and dataSourceRef) will be set to the same
+ /// value automatically if one of them is empty and the other is non-empty.
+ /// When namespace is specified in dataSourceRef,
+ /// dataSource isn't set to the same value and must be empty.
+ /// There are three important differences between dataSource and dataSourceRef:
+ /// * While dataSource only allows two specific types of objects, dataSourceRef
+ /// allows any non-core object, as well as PersistentVolumeClaim objects.
+ /// * While dataSource ignores disallowed values (dropping them), dataSourceRef
+ /// preserves all values, and generates an error if a disallowed value is
+ /// specified.
+ /// * While dataSource only allows local objects, dataSourceRef allows objects
+ /// in any namespaces.
+ /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+ /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+ ///
+ [JsonPropertyName("dataSourceRef")]
+ public V1ClusterSpecWalStoragePvcTemplateDataSourceRef? DataSourceRef { get; set; }
+
+ ///
+ /// resources represents the minimum resources the volume should have.
+ /// Users are allowed to specify resource requirements
+ /// that are lower than previous value but must still be higher than capacity recorded in the
+ /// status field of the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+ ///
+ [JsonPropertyName("resources")]
+ public V1ClusterSpecWalStoragePvcTemplateResources? Resources { get; set; }
+
+ /// selector is a label query over volumes to consider for binding.
+ [JsonPropertyName("selector")]
+ public V1ClusterSpecWalStoragePvcTemplateSelector? Selector { get; set; }
+
+ ///
+ /// storageClassName is the name of the StorageClass required by the claim.
+ /// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+ ///
+ [JsonPropertyName("storageClassName")]
+ public string? StorageClassName { get; set; }
+
+ ///
+ /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+ /// If specified, the CSI driver will create or update the volume with the attributes defined
+ /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+ /// it can be changed after the claim is created. An empty string or nil value indicates that no
+ /// VolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state,
+ /// this field can be reset to its previous value (including nil) to cancel the modification.
+ /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be
+ /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource
+ /// exists.
+ /// More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/
+ ///
+ [JsonPropertyName("volumeAttributesClassName")]
+ public string? VolumeAttributesClassName { get; set; }
+
+ ///
+ /// volumeMode defines what type of volume is required by the claim.
+ /// Value of Filesystem is implied when not included in claim spec.
+ ///
+ [JsonPropertyName("volumeMode")]
+ public string? VolumeMode { get; set; }
+
+ /// volumeName is the binding reference to the PersistentVolume backing this claim.
+ [JsonPropertyName("volumeName")]
+ public string? VolumeName { get; set; }
+}
+
+/// Configuration of the storage for PostgreSQL WAL (Write-Ahead Log)
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpecWalStorage
+{
+ /// Template to be used to generate the Persistent Volume Claim
+ [JsonPropertyName("pvcTemplate")]
+ public V1ClusterSpecWalStoragePvcTemplate? PvcTemplate { get; set; }
+
+ /// Resize existent PVCs, defaults to true
+ [JsonPropertyName("resizeInUseVolumes")]
+ public bool? ResizeInUseVolumes { get; set; }
+
+ ///
+ /// Size of the storage. Required if not already specified in the PVC template.
+ /// Changes to this field are automatically reapplied to the created PVCs.
+ /// Size cannot be decreased.
+ ///
+ [JsonPropertyName("size")]
+ public string? Size { get; set; }
+
+ ///
+ /// StorageClass to use for PVCs. Applied after
+ /// evaluating the PVC template, if available.
+ /// If not specified, the generated PVCs will use the
+ /// default storage class
+ ///
+ [JsonPropertyName("storageClass")]
+ public string? StorageClass { get; set; }
+}
+
+///
+/// Specification of the desired behavior of the cluster.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterSpec
+{
+ /// Affinity/Anti-affinity rules for Pods
+ [JsonPropertyName("affinity")]
+ public V1ClusterSpecAffinity? Affinity { get; set; }
+
+ /// The configuration to be used for backups
+ [JsonPropertyName("backup")]
+ public V1ClusterSpecBackup? Backup { get; set; }
+
+ /// Instructions to bootstrap this cluster
+ [JsonPropertyName("bootstrap")]
+ public V1ClusterSpecBootstrap? Bootstrap { get; set; }
+
+ /// The configuration for the CA and related certificates
+ [JsonPropertyName("certificates")]
+ public V1ClusterSpecCertificates? Certificates { get; set; }
+
+ /// Description of this PostgreSQL cluster
+ [JsonPropertyName("description")]
+ public string? Description { get; set; }
+
+ ///
+ /// Manage the `PodDisruptionBudget` resources within the cluster. When
+ /// configured as `true` (default setting), the pod disruption budgets
+ /// will safeguard the primary node from being terminated. Conversely,
+ /// setting it to `false` will result in the absence of any
+ /// `PodDisruptionBudget` resource, permitting the shutdown of all nodes
+ /// hosting the PostgreSQL cluster. This latter configuration is
+ /// advisable for any PostgreSQL cluster employed for
+ /// development/staging purposes.
+ ///
+ [JsonPropertyName("enablePDB")]
+ public bool? EnablePDB { get; set; }
+
+ ///
+ /// When this option is enabled, the operator will use the `SuperuserSecret`
+ /// to update the `postgres` user password (if the secret is
+ /// not present, the operator will automatically create one). When this
+ /// option is disabled, the operator will ignore the `SuperuserSecret` content, delete
+ /// it when automatically created, and then blank the password of the `postgres`
+ /// user by setting it to `NULL`. Disabled by default.
+ ///
+ [JsonPropertyName("enableSuperuserAccess")]
+ public bool? EnableSuperuserAccess { get; set; }
+
+ ///
+ /// Env follows the Env format to pass environment variables
+ /// to the pods created in the cluster
+ ///
+ [JsonPropertyName("env")]
+ public IList? Env { get; set; }
+
+ ///
+ /// EnvFrom follows the EnvFrom format to pass environment variables
+ /// sources to the pods to be used by Env
+ ///
+ [JsonPropertyName("envFrom")]
+ public IList? EnvFrom { get; set; }
+
+ /// EphemeralVolumeSource allows the user to configure the source of ephemeral volumes.
+ [JsonPropertyName("ephemeralVolumeSource")]
+ public V1ClusterSpecEphemeralVolumeSource? EphemeralVolumeSource { get; set; }
+
+ ///
+ /// EphemeralVolumesSizeLimit allows the user to set the limits for the ephemeral
+ /// volumes
+ ///
+ [JsonPropertyName("ephemeralVolumesSizeLimit")]
+ public V1ClusterSpecEphemeralVolumesSizeLimit? EphemeralVolumesSizeLimit { get; set; }
+
+ /// The list of external clusters which are used in the configuration
+ [JsonPropertyName("externalClusters")]
+ public IList? ExternalClusters { get; set; }
+
+ ///
+ /// The amount of time (in seconds) to wait before triggering a failover
+ /// after the primary PostgreSQL instance in the cluster was detected
+ /// to be unhealthy
+ ///
+ [JsonPropertyName("failoverDelay")]
+ public int? FailoverDelay { get; set; }
+
+ /// Defines the major PostgreSQL version we want to use within an ImageCatalog
+ [JsonPropertyName("imageCatalogRef")]
+ public V1ClusterSpecImageCatalogRef? ImageCatalogRef { get; set; }
+
+ ///
+ /// Name of the container image, supporting both tags (`<image>:<tag>`)
+ /// and digests for deterministic and repeatable deployments
+ /// (`<image>:<tag>@sha256:<digestValue>`)
+ ///
+ [JsonPropertyName("imageName")]
+ public string? ImageName { get; set; }
+
+ ///
+ /// Image pull policy.
+ /// One of `Always`, `Never` or `IfNotPresent`.
+ /// If not defined, it defaults to `IfNotPresent`.
+ /// Cannot be updated.
+ /// More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
+ ///
+ [JsonPropertyName("imagePullPolicy")]
+ public string? ImagePullPolicy { get; set; }
+
+ /// The list of pull secrets to be used to pull the images
+ [JsonPropertyName("imagePullSecrets")]
+ public IList? ImagePullSecrets { get; set; }
+
+ /// Metadata that will be inherited by all objects related to the Cluster
+ [JsonPropertyName("inheritedMetadata")]
+ public V1ClusterSpecInheritedMetadata? InheritedMetadata { get; set; }
+
+ /// Number of instances required in the cluster
+ [JsonPropertyName("instances")]
+ public int? Instances { get; set; }
+
+ ///
+ /// LivenessProbeTimeout is the time (in seconds) that is allowed for a PostgreSQL instance
+ /// to successfully respond to the liveness probe (default 30).
+ /// The Liveness probe failure threshold is derived from this value using the formula:
+ /// ceiling(livenessProbe / 10).
+ ///
+ [JsonPropertyName("livenessProbeTimeout")]
+ public int? LivenessProbeTimeout { get; set; }
+
+ /// The instances' log level, one of the following values: error, warning, info (default), debug, trace
+ [JsonPropertyName("logLevel")]
+ public V1ClusterSpecLogLevelEnum? LogLevel { get; set; }
+
+ /// The configuration that is used by the portions of PostgreSQL that are managed by the instance manager
+ [JsonPropertyName("managed")]
+ public V1ClusterSpecManaged? Managed { get; set; }
+
+ ///
+ /// The target value for the synchronous replication quorum, that can be
+ /// decreased if the number of ready standbys is lower than this.
+ /// Undefined or 0 disable synchronous replication.
+ ///
+ [JsonPropertyName("maxSyncReplicas")]
+ public int? MaxSyncReplicas { get; set; }
+
+ ///
+ /// Minimum number of instances required in synchronous replication with the
+ /// primary. Undefined or 0 allow writes to complete when no standby is
+ /// available.
+ ///
+ [JsonPropertyName("minSyncReplicas")]
+ public int? MinSyncReplicas { get; set; }
+
+ /// The configuration of the monitoring infrastructure of this cluster
+ [JsonPropertyName("monitoring")]
+ public V1ClusterSpecMonitoring? Monitoring { get; set; }
+
+ /// Define a maintenance window for the Kubernetes nodes
+ [JsonPropertyName("nodeMaintenanceWindow")]
+ public V1ClusterSpecNodeMaintenanceWindow? NodeMaintenanceWindow { get; set; }
+
+ ///
+ /// The plugins configuration, containing
+ /// any plugin to be loaded with the corresponding configuration
+ ///
+ [JsonPropertyName("plugins")]
+ public IList? Plugins { get; set; }
+
+ ///
+ /// Override the PodSecurityContext applied to every Pod of the cluster.
+ /// When set, this overrides the operator's default PodSecurityContext for the cluster.
+ /// If omitted, the operator defaults are used.
+ /// This field doesn't have any effect if SecurityContextConstraints are present.
+ ///
+ [JsonPropertyName("podSecurityContext")]
+ public V1ClusterSpecPodSecurityContext? PodSecurityContext { get; set; }
+
+ ///
+ /// PodSelectorRefs defines named pod label selectors that can be referenced
+ /// in pg_hba rules using the ${podselector:NAME} syntax in the address field.
+ /// The operator resolves matching pod IPs and the instance manager expands
+ /// pg_hba lines accordingly. Only pods in the Cluster's own namespace are considered.
+ ///
+ [JsonPropertyName("podSelectorRefs")]
+ public IList? PodSelectorRefs { get; set; }
+
+ /// The GID of the `postgres` user inside the image, defaults to `26`
+ [JsonPropertyName("postgresGID")]
+ public long? PostgresGID { get; set; }
+
+ /// The UID of the `postgres` user inside the image, defaults to `26`
+ [JsonPropertyName("postgresUID")]
+ public long? PostgresUID { get; set; }
+
+ /// Configuration of the PostgreSQL server
+ [JsonPropertyName("postgresql")]
+ public V1ClusterSpecPostgresql? Postgresql { get; set; }
+
+ ///
+ /// Method to follow to upgrade the primary server during a rolling
+ /// update procedure, after all replicas have been successfully updated:
+ /// it can be with a switchover (`switchover`) or in-place (`restart` - default).
+ /// Note: when using `switchover`, the operator will reject updates that change both
+ /// the image name and PostgreSQL configuration parameters simultaneously to avoid
+ /// configuration mismatches during the switchover process.
+ ///
+ [JsonPropertyName("primaryUpdateMethod")]
+ public V1ClusterSpecPrimaryUpdateMethodEnum? PrimaryUpdateMethod { get; set; }
+
+ ///
+ /// Deployment strategy to follow to upgrade the primary server during a rolling
+ /// update procedure, after all replicas have been successfully updated:
+ /// it can be automated (`unsupervised` - default) or manual (`supervised`)
+ ///
+ [JsonPropertyName("primaryUpdateStrategy")]
+ public V1ClusterSpecPrimaryUpdateStrategyEnum? PrimaryUpdateStrategy { get; set; }
+
+ ///
+ /// Name of the priority class which will be used in every generated Pod, if the PriorityClass
+ /// specified does not exist, the pod will not be able to schedule. Please refer to
+ /// https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass
+ /// for more information
+ ///
+ [JsonPropertyName("priorityClassName")]
+ public string? PriorityClassName { get; set; }
+
+ ///
+ /// The configuration of the probes to be injected
+ /// in the PostgreSQL Pods.
+ ///
+ [JsonPropertyName("probes")]
+ public V1ClusterSpecProbes? Probes { get; set; }
+
+ ///
+ /// Template to be used to define projected volumes, projected volumes will be mounted
+ /// under `/projected` base folder
+ ///
+ [JsonPropertyName("projectedVolumeTemplate")]
+ public V1ClusterSpecProjectedVolumeTemplate? ProjectedVolumeTemplate { get; set; }
+
+ /// Replica cluster configuration
+ [JsonPropertyName("replica")]
+ public V1ClusterSpecReplica? Replica { get; set; }
+
+ /// Replication slots management configuration
+ [JsonPropertyName("replicationSlots")]
+ public V1ClusterSpecReplicationSlots? ReplicationSlots { get; set; }
+
+ ///
+ /// Resources requirements of every generated Pod. Please refer to
+ /// https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ /// for more information.
+ ///
+ [JsonPropertyName("resources")]
+ public V1ClusterSpecResources? Resources { get; set; }
+
+ ///
+ /// If specified, the pod will be dispatched by specified Kubernetes
+ /// scheduler. If not specified, the pod will be dispatched by the default
+ /// scheduler. More info:
+ /// https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
+ ///
+ [JsonPropertyName("schedulerName")]
+ public string? SchedulerName { get; set; }
+
+ ///
+ /// The SeccompProfile applied to every Pod and Container.
+ /// Defaults to: `RuntimeDefault`
+ ///
+ [JsonPropertyName("seccompProfile")]
+ public V1ClusterSpecSeccompProfile? SeccompProfile { get; set; }
+
+ ///
+ /// Override the SecurityContext applied to every Container in the Pod of the cluster.
+ /// When set, this overrides the operator's default Container SecurityContext.
+ /// If omitted, the operator defaults are used.
+ ///
+ [JsonPropertyName("securityContext")]
+ public V1ClusterSpecSecurityContext? SecurityContext { get; set; }
+
+ ///
+ /// Name of an existing ServiceAccount in the same namespace to use for the cluster.
+ /// When specified, the operator will not create a new ServiceAccount
+ /// but will use the provided one. This is useful for sharing a single
+ /// ServiceAccount across multiple clusters (e.g., for cloud IAM configurations).
+ /// If not specified, a ServiceAccount will be created with the cluster name.
+ /// Mutually exclusive with ServiceAccountTemplate.
+ ///
+ [JsonPropertyName("serviceAccountName")]
+ public string? ServiceAccountName { get; set; }
+
+ /// Configure the generation of the service account
+ [JsonPropertyName("serviceAccountTemplate")]
+ public V1ClusterSpecServiceAccountTemplate? ServiceAccountTemplate { get; set; }
+
+ ///
+ /// The time in seconds that controls the window of time reserved for the smart shutdown of Postgres to complete.
+ /// Make sure you reserve enough time for the operator to request a fast shutdown of Postgres
+ /// (that is: `stopDelay` - `smartShutdownTimeout`). Default is 180 seconds.
+ ///
+ [JsonPropertyName("smartShutdownTimeout")]
+ public int? SmartShutdownTimeout { get; set; }
+
+ ///
+ /// The time in seconds that is allowed for a PostgreSQL instance to
+ /// successfully start up (default 3600).
+ /// The startup probe failure threshold is derived from this value using the formula:
+ /// ceiling(startDelay / 10).
+ ///
+ [JsonPropertyName("startDelay")]
+ public int? StartDelay { get; set; }
+
+ ///
+ /// The time in seconds that is allowed for a PostgreSQL instance to
+ /// gracefully shutdown (default 1800)
+ ///
+ [JsonPropertyName("stopDelay")]
+ public int? StopDelay { get; set; }
+
+ /// Configuration of the storage of the instances
+ [JsonPropertyName("storage")]
+ public V1ClusterSpecStorage? Storage { get; set; }
+
+ ///
+ /// The secret containing the superuser password. If not defined a new
+ /// secret will be created with a randomly generated password
+ ///
+ [JsonPropertyName("superuserSecret")]
+ public V1ClusterSpecSuperuserSecret? SuperuserSecret { get; set; }
+
+ ///
+ /// The time in seconds that is allowed for a primary PostgreSQL instance
+ /// to gracefully shutdown during a switchover.
+ /// Default value is 3600 seconds (1 hour).
+ ///
+ [JsonPropertyName("switchoverDelay")]
+ public int? SwitchoverDelay { get; set; }
+
+ /// The tablespaces configuration
+ [JsonPropertyName("tablespaces")]
+ public IList? Tablespaces { get; set; }
+
+ ///
+ /// TopologySpreadConstraints specifies how to spread matching pods among the given topology.
+ /// More info:
+ /// https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/
+ ///
+ [JsonPropertyName("topologySpreadConstraints")]
+ public IList? TopologySpreadConstraints { get; set; }
+
+ /// Configuration of the storage for PostgreSQL WAL (Write-Ahead Log)
+ [JsonPropertyName("walStorage")]
+ public V1ClusterSpecWalStorage? WalStorage { get; set; }
+}
+
+/// AvailableArchitecture represents the state of a cluster's architecture
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusAvailableArchitectures
+{
+ /// GoArch is the name of the executable architecture
+ [JsonPropertyName("goArch")]
+ public required string GoArch { get; set; }
+
+ /// Hash is the hash of the executable
+ [JsonPropertyName("hash")]
+ public required string Hash { get; set; }
+}
+
+/// The configuration for the CA and related certificates, initialized with defaults.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusCertificates
+{
+ ///
+ /// The secret containing the Client CA certificate. If not defined, a new secret will be created
+ /// with a self-signed CA and will be used to generate all the client certificates.<br />
+ /// <br />
+ /// Contains:<br />
+ /// <br />
+ /// - `ca.crt`: CA that should be used to validate the client certificates,
+ /// used as `ssl_ca_file` of all the instances.<br />
+ /// - `ca.key`: key used to generate client certificates, if ReplicationTLSSecret is provided,
+ /// this can be omitted.<br />
+ ///
+ [JsonPropertyName("clientCASecret")]
+ public string? ClientCASecret { get; set; }
+
+ /// Expiration dates for all certificates.
+ [JsonPropertyName("expirations")]
+ public IDictionary? Expirations { get; set; }
+
+ ///
+ /// The secret of type kubernetes.io/tls containing the client certificate to authenticate as
+ /// the `streaming_replica` user.
+ /// If not defined, ClientCASecret must provide also `ca.key`, and a new secret will be
+ /// created using the provided CA.
+ ///
+ [JsonPropertyName("replicationTLSSecret")]
+ public string? ReplicationTLSSecret { get; set; }
+
+ /// The list of the server alternative DNS names to be added to the generated server TLS certificates, when required.
+ [JsonPropertyName("serverAltDNSNames")]
+ public IList? ServerAltDNSNames { get; set; }
+
+ ///
+ /// The secret containing the Server CA certificate. If not defined, a new secret will be created
+ /// with a self-signed CA and will be used to generate the TLS certificate ServerTLSSecret.<br />
+ /// <br />
+ /// Contains:<br />
+ /// <br />
+ /// - `ca.crt`: CA that should be used to validate the server certificate,
+ /// used as `sslrootcert` in client connection strings.<br />
+ /// - `ca.key`: key used to generate Server SSL certs, if ServerTLSSecret is provided,
+ /// this can be omitted.<br />
+ ///
+ [JsonPropertyName("serverCASecret")]
+ public string? ServerCASecret { get; set; }
+
+ ///
+ /// The secret of type kubernetes.io/tls containing the server TLS certificate and key that will be set as
+ /// `ssl_cert_file` and `ssl_key_file` so that clients can connect to postgres securely.
+ /// If not defined, ServerCASecret must provide also `ca.key` and a new secret will be
+ /// created using the provided CA.
+ ///
+ [JsonPropertyName("serverTLSSecret")]
+ public string? ServerTLSSecret { get; set; }
+}
+
+/// status of the condition, one of True, False, Unknown.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum V1ClusterStatusConditionsStatusEnum
+{
+ [EnumMember(Value = "True"), JsonStringEnumMemberName("True")]
+ True,
+ [EnumMember(Value = "False"), JsonStringEnumMemberName("False")]
+ False,
+ [EnumMember(Value = "Unknown"), JsonStringEnumMemberName("Unknown")]
+ Unknown
+}
+
+/// Condition contains details for one aspect of the current state of this API Resource.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusConditions
+{
+ ///
+ /// lastTransitionTime is the last time the condition transitioned from one status to another.
+ /// This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
+ ///
+ [JsonPropertyName("lastTransitionTime")]
+ public required DateTime LastTransitionTime { get; set; }
+
+ ///
+ /// message is a human readable message indicating details about the transition.
+ /// This may be an empty string.
+ ///
+ [JsonPropertyName("message")]
+ public required string Message { get; set; }
+
+ ///
+ /// observedGeneration represents the .metadata.generation that the condition was set based upon.
+ /// For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
+ /// with respect to the current state of the instance.
+ ///
+ [JsonPropertyName("observedGeneration")]
+ public long? ObservedGeneration { get; set; }
+
+ ///
+ /// reason contains a programmatic identifier indicating the reason for the condition's last transition.
+ /// Producers of specific condition types may define expected values and meanings for this field,
+ /// and whether the values are considered a guaranteed API.
+ /// The value should be a CamelCase string.
+ /// This field may not be empty.
+ ///
+ [JsonPropertyName("reason")]
+ public required string Reason { get; set; }
+
+ /// status of the condition, one of True, False, Unknown.
+ [JsonPropertyName("status")]
+ public required V1ClusterStatusConditionsStatusEnum Status { get; set; }
+
+ /// type of condition in CamelCase or in foo.example.com/CamelCase.
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
+
+///
+/// The list of resource versions of the configmaps,
+/// managed by the operator. Every change here is done in the
+/// interest of the instance manager, which will refresh the
+/// configmap data
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusConfigMapResourceVersion
+{
+ ///
+ /// A map with the versions of all the config maps used to pass metrics.
+ /// Map keys are the config map names, map values are the versions
+ ///
+ [JsonPropertyName("metrics")]
+ public IDictionary? Metrics { get; set; }
+}
+
+/// InstanceReportedState describes the last reported state of an instance during a reconciliation loop
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusInstancesReportedState
+{
+ /// IP address of the instance
+ [JsonPropertyName("ip")]
+ public string? Ip { get; set; }
+
+ /// indicates if an instance is the primary one
+ [JsonPropertyName("isPrimary")]
+ public required bool IsPrimary { get; set; }
+
+ /// indicates on which TimelineId the instance is
+ [JsonPropertyName("timeLineID")]
+ public int? TimeLineID { get; set; }
+}
+
+/// PasswordState represents the state of the password of a managed RoleConfiguration
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusManagedRolesStatusPasswordStatus
+{
+ /// the resource version of the password secret
+ [JsonPropertyName("resourceVersion")]
+ public string? ResourceVersion { get; set; }
+
+ /// the last transaction ID to affect the role definition in PostgreSQL
+ [JsonPropertyName("transactionID")]
+ public long? TransactionID { get; set; }
+}
+
+/// ManagedRolesStatus reports the state of the managed roles in the cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusManagedRolesStatus
+{
+ /// ByStatus gives the list of roles in each state
+ [JsonPropertyName("byStatus")]
+ public IDictionary>? ByStatus { get; set; }
+
+ ///
+ /// CannotReconcile lists roles that cannot be reconciled in PostgreSQL,
+ /// with an explanation of the cause
+ ///
+ [JsonPropertyName("cannotReconcile")]
+ public IDictionary>? CannotReconcile { get; set; }
+
+ /// PasswordStatus gives the last transaction id and password secret version for each managed role
+ [JsonPropertyName("passwordStatus")]
+ public IDictionary? PasswordStatus { get; set; }
+}
+
+///
+/// ExtensionEnvVar defines an environment variable for a specific extension
+/// image volume.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPgDataImageInfoExtensionsEnv
+{
+ ///
+ /// Name of the environment variable to be injected into the
+ /// PostgreSQL process.
+ ///
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// Value of the environment variable. CloudNativePG performs a direct
+ /// replacement of this value, with support for placeholder expansion.
+ /// The ${`image_root`} placeholder resolves to the absolute mount path
+ /// of the extension's volume (e.g., `/extensions/my-extension`). This
+ /// is particularly useful for allowing applications or libraries to
+ /// locate specific directories within the mounted image.
+ /// Unrecognized placeholders are rejected. To include a literal ${...}
+ /// in the value, escape it as $${...}.
+ ///
+ [JsonPropertyName("value")]
+ public required string Value { get; set; }
+}
+
+/// The image containing the extension.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPgDataImageInfoExtensionsImage
+{
+ ///
+ /// Policy for pulling OCI objects. Possible values are:
+ /// Always: the kubelet always attempts to pull the reference. Container creation will fail If the pull fails.
+ /// Never: the kubelet never pulls the reference and only uses a local image or artifact. Container creation will fail if the reference isn't present.
+ /// IfNotPresent: the kubelet pulls if the reference isn't already present on disk. Container creation will fail if the reference isn't present and the pull fails.
+ /// Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
+ ///
+ [JsonPropertyName("pullPolicy")]
+ public string? PullPolicy { get; set; }
+
+ ///
+ /// Required: Image or artifact reference to be used.
+ /// Behaves in the same way as pod.spec.containers[*].image.
+ /// Pull secrets will be assembled in the same way as for the container image by looking up node credentials, SA image pull secrets, and pod spec image pull secrets.
+ /// More info: https://kubernetes.io/docs/concepts/containers/images
+ /// This field is optional to allow higher level config management to default or override
+ /// container images in workload controllers like Deployments and StatefulSets.
+ ///
+ [JsonPropertyName("reference")]
+ public string? Reference { get; set; }
+}
+
+///
+/// ExtensionConfiguration is the configuration used to add
+/// PostgreSQL extensions to the Cluster.
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPgDataImageInfoExtensions
+{
+ ///
+ /// A list of directories within the image to be appended to the
+ /// PostgreSQL process's `PATH` environment variable.
+ ///
+ [JsonPropertyName("bin_path")]
+ public IList? BinPath { get; set; }
+
+ ///
+ /// The list of directories inside the image which should be added to dynamic_library_path.
+ /// If not defined, defaults to "/lib".
+ ///
+ [JsonPropertyName("dynamic_library_path")]
+ public IList? DynamicLibraryPath { get; set; }
+
+ ///
+ /// Env is a list of custom environment variables to be set in the
+ /// PostgreSQL process for this extension. It is the responsibility of the
+ /// cluster administrator to ensure the variables are correct for the
+ /// specific extension. Note that changes to these variables require
+ /// a manual cluster restart to take effect.
+ ///
+ [JsonPropertyName("env")]
+ public IList? Env { get; set; }
+
+ ///
+ /// The list of directories inside the image which should be added to extension_control_path.
+ /// If not defined, defaults to "/share".
+ ///
+ [JsonPropertyName("extension_control_path")]
+ public IList? ExtensionControlPath { get; set; }
+
+ /// The image containing the extension.
+ [JsonPropertyName("image")]
+ public V1ClusterStatusPgDataImageInfoExtensionsImage? Image { get; set; }
+
+ /// The list of directories inside the image which should be added to ld_library_path.
+ [JsonPropertyName("ld_library_path")]
+ public IList? LdLibraryPath { get; set; }
+
+ /// The name of the extension, required
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// PGDataImageInfo contains the details of the latest image that has run on the current data directory.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPgDataImageInfo
+{
+ /// Extensions contains the container image extensions available for the current Image
+ [JsonPropertyName("extensions")]
+ public IList? Extensions { get; set; }
+
+ /// Image is the image name
+ [JsonPropertyName("image")]
+ public required string Image { get; set; }
+
+ /// MajorVersion is the major version of the image
+ [JsonPropertyName("majorVersion")]
+ public required int MajorVersion { get; set; }
+}
+
+/// PluginStatus is the status of a loaded plugin
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPluginStatus
+{
+ ///
+ /// BackupCapabilities are the list of capabilities of the
+ /// plugin regarding the Backup management
+ ///
+ [JsonPropertyName("backupCapabilities")]
+ public IList? BackupCapabilities { get; set; }
+
+ ///
+ /// Capabilities are the list of capabilities of the
+ /// plugin
+ ///
+ [JsonPropertyName("capabilities")]
+ public IList? Capabilities { get; set; }
+
+ /// Name is the name of the plugin
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ ///
+ /// OperatorCapabilities are the list of capabilities of the
+ /// plugin regarding the reconciler
+ ///
+ [JsonPropertyName("operatorCapabilities")]
+ public IList? OperatorCapabilities { get; set; }
+
+ ///
+ /// RestoreJobHookCapabilities are the list of capabilities of the
+ /// plugin regarding the RestoreJobHook management
+ ///
+ [JsonPropertyName("restoreJobHookCapabilities")]
+ public IList? RestoreJobHookCapabilities { get; set; }
+
+ /// Status contain the status reported by the plugin through the SetStatusInCluster interface
+ [JsonPropertyName("status")]
+ public string? Status { get; set; }
+
+ ///
+ /// Version is the version of the plugin loaded by the
+ /// latest reconciliation loop
+ ///
+ [JsonPropertyName("version")]
+ public required string Version { get; set; }
+
+ ///
+ /// WALCapabilities are the list of capabilities of the
+ /// plugin regarding the WAL management
+ ///
+ [JsonPropertyName("walCapabilities")]
+ public IList? WalCapabilities { get; set; }
+}
+
+/// PodSelectorRefStatus contains the resolved pod IPs for a named selector.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPodSelectorRefs
+{
+ ///
+ /// IPs is the list of pod IPs matching the selector.
+ /// Each IP is a single address (no CIDR notation).
+ ///
+ [JsonPropertyName("ips")]
+ public IList? Ips { get; set; }
+
+ /// Name corresponds to the name in the spec's PodSelectorRef.
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+}
+
+/// PgBouncerIntegrationStatus encapsulates the needed integration for the pgbouncer poolers referencing the cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPoolerIntegrationsPgBouncerIntegration
+{
+ [JsonPropertyName("secrets")]
+ public IList? Secrets { get; set; }
+}
+
+/// The integration needed by poolers referencing the cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusPoolerIntegrations
+{
+ /// PgBouncerIntegrationStatus encapsulates the needed integration for the pgbouncer poolers referencing the cluster
+ [JsonPropertyName("pgBouncerIntegration")]
+ public V1ClusterStatusPoolerIntegrationsPgBouncerIntegration? PgBouncerIntegration { get; set; }
+}
+
+///
+/// The list of resource versions of the secrets
+/// managed by the operator. Every change here is done in the
+/// interest of the instance manager, which will refresh the
+/// secret data
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusSecretsResourceVersion
+{
+ /// The resource version of the "app" user secret
+ [JsonPropertyName("applicationSecretVersion")]
+ public string? ApplicationSecretVersion { get; set; }
+
+ /// The resource version of the Barman Endpoint CA if provided
+ [JsonPropertyName("barmanEndpointCA")]
+ public string? BarmanEndpointCA { get; set; }
+
+ /// Unused. Retained for compatibility with old versions.
+ [JsonPropertyName("caSecretVersion")]
+ public string? CaSecretVersion { get; set; }
+
+ /// The resource version of the PostgreSQL client-side CA secret version
+ [JsonPropertyName("clientCaSecretVersion")]
+ public string? ClientCaSecretVersion { get; set; }
+
+ /// The resource versions of the external cluster secrets
+ [JsonPropertyName("externalClusterSecretVersion")]
+ public IDictionary? ExternalClusterSecretVersion { get; set; }
+
+ /// The resource versions of the managed roles secrets
+ [JsonPropertyName("managedRoleSecretVersion")]
+ public IDictionary? ManagedRoleSecretVersion { get; set; }
+
+ ///
+ /// A map with the versions of all the secrets used to pass metrics.
+ /// Map keys are the secret names, map values are the versions
+ ///
+ [JsonPropertyName("metrics")]
+ public IDictionary? Metrics { get; set; }
+
+ /// The resource version of the "streaming_replica" user secret
+ [JsonPropertyName("replicationSecretVersion")]
+ public string? ReplicationSecretVersion { get; set; }
+
+ /// The resource version of the PostgreSQL server-side CA secret version
+ [JsonPropertyName("serverCaSecretVersion")]
+ public string? ServerCaSecretVersion { get; set; }
+
+ /// The resource version of the PostgreSQL server-side secret version
+ [JsonPropertyName("serverSecretVersion")]
+ public string? ServerSecretVersion { get; set; }
+
+ /// The resource version of the "postgres" user secret
+ [JsonPropertyName("superuserSecretVersion")]
+ public string? SuperuserSecretVersion { get; set; }
+}
+
+/// SwitchReplicaClusterStatus is the status of the switch to replica cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusSwitchReplicaClusterStatus
+{
+ /// InProgress indicates if there is an ongoing procedure of switching a cluster to a replica cluster.
+ [JsonPropertyName("inProgress")]
+ public bool? InProgress { get; set; }
+}
+
+/// TablespaceState represents the state of a tablespace in a cluster
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusTablespacesStatus
+{
+ /// Error is the reconciliation error, if any
+ [JsonPropertyName("error")]
+ public string? Error { get; set; }
+
+ /// Name is the name of the tablespace
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ /// Owner is the PostgreSQL user owning the tablespace
+ [JsonPropertyName("owner")]
+ public string? Owner { get; set; }
+
+ /// State is the latest reconciliation state
+ [JsonPropertyName("state")]
+ public required string State { get; set; }
+}
+
+/// Instances topology.
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatusTopology
+{
+ /// Instances contains the pod topology of the instances
+ [JsonPropertyName("instances")]
+ public IDictionary>? Instances { get; set; }
+
+ ///
+ /// NodesUsed represents the count of distinct nodes accommodating the instances.
+ /// A value of '1' suggests that all instances are hosted on a single node,
+ /// implying the absence of High Availability (HA). Ideally, this value should
+ /// be the same as the number of instances in the Postgres HA cluster, implying
+ /// shared nothing architecture on the compute side.
+ ///
+ [JsonPropertyName("nodesUsed")]
+ public int? NodesUsed { get; set; }
+
+ ///
+ /// SuccessfullyExtracted indicates if the topology data was extract. It is useful to enact fallback behaviors
+ /// in synchronous replica election in case of failures
+ ///
+ [JsonPropertyName("successfullyExtracted")]
+ public bool? SuccessfullyExtracted { get; set; }
+}
+
+///
+/// Most recently observed status of the cluster. This data may not be up
+/// to date. Populated by the system. Read-only.
+/// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+///
+[global::System.CodeDom.Compiler.GeneratedCode("KubernetesCRDModelGen", "1.5.2+8c7b4a3647c1e77cd3e3152af5701ec2357dafe9")]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+public partial class V1ClusterStatus
+{
+ /// AvailableArchitectures reports the available architectures of a cluster
+ [JsonPropertyName("availableArchitectures")]
+ public IList? AvailableArchitectures { get; set; }
+
+ ///