use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
use kube::CustomResource;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use utoipa::ToSchema;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, JsonSchema)]
#[kube(
    group = "postgresql.cnpg.io",
    version = "v1",
    kind = "Pooler",
    plural = "poolers"
)]
#[kube(namespaced)]
#[kube(status = "PoolerStatus")]
#[kube(schema = "disabled")]
pub struct PoolerSpec {
    pub cluster: PoolerCluster,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "deploymentStrategy"
    )]
    pub deployment_strategy: Option<PoolerDeploymentStrategy>,
    pub instances: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub monitoring: Option<PoolerMonitoring>,
    pub pgbouncer: PoolerPgbouncer,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub template: Option<PoolerTemplate>,
    #[serde(rename = "type")]
    pub r#type: PoolerType,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerCluster {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerDeploymentStrategy {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")]
    pub rolling_update: Option<PoolerDeploymentStrategyRollingUpdate>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
    pub r#type: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerDeploymentStrategyRollingUpdate {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")]
    pub max_surge: Option<IntOrString>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")]
    pub max_unavailable: Option<IntOrString>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerMonitoring {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "enablePodMonitor")]
    pub enable_pod_monitor: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerPgbouncer {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "authQuery")]
    pub auth_query: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "authQuerySecret")]
    pub auth_query_secret: Option<PoolerPgbouncerAuthQuerySecret>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub parameters: Option<BTreeMap<String, String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub paused: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pg_hba: Option<Vec<String>>,
    #[serde(rename = "poolMode")]
    pub pool_mode: PoolerPgbouncerPoolMode,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerPgbouncerAuthQuerySecret {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, ToSchema, Default)]
pub enum PoolerPgbouncerPoolMode {
    #[serde(rename = "session")]
    Session,
    #[default]
    #[serde(rename = "transaction")]
    Transaction,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplate {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<PoolerTemplateMetadata>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub spec: Option<PoolerTemplateSpec>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateMetadata {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub annotations: Option<BTreeMap<String, String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default)]
pub struct PoolerTemplateSpec {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "activeDeadlineSeconds"
    )]
    pub active_deadline_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub affinity: Option<PoolerTemplateSpecAffinity>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "automountServiceAccountToken"
    )]
    pub automount_service_account_token: Option<bool>,
    pub containers: Vec<PoolerTemplateSpecContainers>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")]
    pub dns_config: Option<PoolerTemplateSpecDnsConfig>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")]
    pub dns_policy: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "enableServiceLinks"
    )]
    pub enable_service_links: Option<bool>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "ephemeralContainers"
    )]
    pub ephemeral_containers: Option<Vec<PoolerTemplateSpecEphemeralContainers>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")]
    pub host_aliases: Option<Vec<PoolerTemplateSpecHostAliases>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIPC")]
    pub host_ipc: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")]
    pub host_network: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPID")]
    pub host_pid: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostUsers")]
    pub host_users: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hostname: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")]
    pub image_pull_secrets: Option<Vec<PoolerTemplateSpecImagePullSecrets>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")]
    pub init_containers: Option<Vec<PoolerTemplateSpecInitContainers>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeName")]
    pub node_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")]
    pub node_selector: Option<BTreeMap<String, String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub os: Option<PoolerTemplateSpecOs>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub overhead: Option<BTreeMap<String, IntOrString>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preemptionPolicy")]
    pub preemption_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub priority: Option<i32>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "priorityClassName"
    )]
    pub priority_class_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")]
    pub readiness_gates: Option<Vec<PoolerTemplateSpecReadinessGates>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceClaims")]
    pub resource_claims: Option<Vec<PoolerTemplateSpecResourceClaims>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")]
    pub restart_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")]
    pub runtime_class_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")]
    pub scheduler_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulingGates")]
    pub scheduling_gates: Option<Vec<PoolerTemplateSpecSchedulingGates>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")]
    pub security_context: Option<PoolerTemplateSpecSecurityContext>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")]
    pub service_account: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "serviceAccountName"
    )]
    pub service_account_name: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "setHostnameAsFQDN"
    )]
    pub set_hostname_as_fqdn: Option<bool>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "shareProcessNamespace"
    )]
    pub share_process_namespace: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub subdomain: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tolerations: Option<Vec<PoolerTemplateSpecTolerations>>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "topologySpreadConstraints"
    )]
    pub topology_spread_constraints: Option<Vec<PoolerTemplateSpecTopologySpreadConstraints>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub volumes: Option<Vec<PoolerTemplateSpecVolumes>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinity {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")]
    pub node_affinity: Option<PoolerTemplateSpecAffinityNodeAffinity>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")]
    pub pod_affinity: Option<PoolerTemplateSpecAffinityPodAffinity>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")]
    pub pod_anti_affinity: Option<PoolerTemplateSpecAffinityPodAntiAffinity>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinity {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "preferredDuringSchedulingIgnoredDuringExecution"
    )]
    pub preferred_during_scheduling_ignored_during_execution:
        Option<Vec<PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "requiredDuringSchedulingIgnoredDuringExecution"
    )]
    pub required_during_scheduling_ignored_during_execution:
        Option<PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution {
    pub preference:
        PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference,
    pub weight: i32,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")]
    pub match_fields: Option<Vec<PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution {
    #[serde(rename = "nodeSelectorTerms")]
    pub node_selector_terms: Vec<
        PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms,
    >,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")]
    pub match_fields: Option<Vec<PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinity {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "preferredDuringSchedulingIgnoredDuringExecution"
    )]
    pub preferred_during_scheduling_ignored_during_execution:
        Option<Vec<PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "requiredDuringSchedulingIgnoredDuringExecution"
    )]
    pub required_during_scheduling_ignored_during_execution:
        Option<Vec<PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution {
    #[serde(rename = "podAffinityTerm")]
    pub pod_affinity_term:
        PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm,
    pub weight: i32,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
    pub label_selector: Option<PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
    pub namespace_selector: Option<PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub namespaces: Option<Vec<String>>,
    #[serde(rename = "topologyKey")]
    pub topology_key: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
    pub label_selector: Option<
        PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector,
    >,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "namespaceSelector"
    )]
    pub namespace_selector: Option<
        PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector,
    >,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub namespaces: Option<Vec<String>>,
    #[serde(rename = "topologyKey")]
    pub topology_key: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinity {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "preferredDuringSchedulingIgnoredDuringExecution"
    )]
    pub preferred_during_scheduling_ignored_during_execution:
        Option<Vec<PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "requiredDuringSchedulingIgnoredDuringExecution"
    )]
    pub required_during_scheduling_ignored_during_execution:
        Option<Vec<PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution {
    #[serde(rename = "podAffinityTerm")]
    pub pod_affinity_term: PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm,
    pub weight: i32,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
    pub label_selector: Option<PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
    pub namespace_selector: Option<PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub namespaces: Option<Vec<String>>,
    #[serde(rename = "topologyKey")]
    pub topology_key: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
    pub label_selector: Option<PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
    pub namespace_selector: Option<PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub namespaces: Option<Vec<String>>,
    #[serde(rename = "topologyKey")]
    pub topology_key: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions: Option<Vec<PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
{
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default)]
pub struct PoolerTemplateSpecContainers {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub args: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub env: Option<Vec<PoolerTemplateSpecContainersEnv>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")]
    pub env_from: Option<Vec<PoolerTemplateSpecContainersEnvFrom>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub image: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")]
    pub image_pull_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lifecycle: Option<PoolerTemplateSpecContainersLifecycle>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")]
    pub liveness_probe: Option<PoolerTemplateSpecContainersLivenessProbe>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ports: Option<Vec<PoolerTemplateSpecContainersPorts>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")]
    pub readiness_probe: Option<PoolerTemplateSpecContainersReadinessProbe>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")]
    pub resize_policy: Option<Vec<PoolerTemplateSpecContainersResizePolicy>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub resources: Option<PoolerTemplateSpecContainersResources>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")]
    pub security_context: Option<PoolerTemplateSpecContainersSecurityContext>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")]
    pub startup_probe: Option<PoolerTemplateSpecContainersStartupProbe>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stdin: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")]
    pub stdin_once: Option<bool>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationMessagePath"
    )]
    pub termination_message_path: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationMessagePolicy"
    )]
    pub termination_message_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tty: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")]
    pub volume_devices: Option<Vec<PoolerTemplateSpecContainersVolumeDevices>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")]
    pub volume_mounts: Option<Vec<PoolerTemplateSpecContainersVolumeMounts>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")]
    pub working_dir: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnv {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
    pub value_from: Option<PoolerTemplateSpecContainersEnvValueFrom>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvValueFrom {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
    pub config_map_key_ref: Option<PoolerTemplateSpecContainersEnvValueFromConfigMapKeyRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
    pub field_ref: Option<PoolerTemplateSpecContainersEnvValueFromFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
    pub resource_field_ref: Option<PoolerTemplateSpecContainersEnvValueFromResourceFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
    pub secret_key_ref: Option<PoolerTemplateSpecContainersEnvValueFromSecretKeyRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvValueFromConfigMapKeyRef {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvValueFromFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
    pub api_version: Option<String>,
    #[serde(rename = "fieldPath")]
    pub field_path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvValueFromResourceFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
    pub container_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub divisor: Option<IntOrString>,
    pub resource: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvValueFromSecretKeyRef {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvFrom {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")]
    pub config_map_ref: Option<PoolerTemplateSpecContainersEnvFromConfigMapRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecContainersEnvFromSecretRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvFromConfigMapRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersEnvFromSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecycle {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")]
    pub post_start: Option<PoolerTemplateSpecContainersLifecyclePostStart>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")]
    pub pre_stop: Option<PoolerTemplateSpecContainersLifecyclePreStop>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePostStart {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecContainersLifecyclePostStartExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecContainersLifecyclePostStartHttpGet>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecContainersLifecyclePostStartTcpSocket>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePostStartExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePostStartHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecContainersLifecyclePostStartHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePostStartHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePostStartTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePreStop {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecContainersLifecyclePreStopExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecContainersLifecyclePreStopHttpGet>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecContainersLifecyclePreStopTcpSocket>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePreStopExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePreStopHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecContainersLifecyclePreStopHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePreStopHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLifecyclePreStopTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLivenessProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecContainersLivenessProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecContainersLivenessProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecContainersLivenessProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecContainersLivenessProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLivenessProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLivenessProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLivenessProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecContainersLivenessProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLivenessProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersLivenessProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersPorts {
    #[serde(rename = "containerPort")]
    pub container_port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")]
    pub host_ip: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")]
    pub host_port: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub protocol: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersReadinessProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecContainersReadinessProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecContainersReadinessProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecContainersReadinessProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecContainersReadinessProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersReadinessProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersReadinessProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersReadinessProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecContainersReadinessProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersReadinessProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersReadinessProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersResizePolicy {
    #[serde(rename = "resourceName")]
    pub resource_name: String,
    #[serde(rename = "restartPolicy")]
    pub restart_policy: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, ToSchema)]
pub struct PoolerTemplateSpecContainersResources {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub claims: Option<Vec<PoolerTemplateSpecContainersResourcesClaims>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub limits: Option<BTreeMap<String, IntOrString>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub requests: Option<BTreeMap<String, IntOrString>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, ToSchema)]
pub struct PoolerTemplateSpecContainersResourcesClaims {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersSecurityContext {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "allowPrivilegeEscalation"
    )]
    pub allow_privilege_escalation: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub capabilities: Option<PoolerTemplateSpecContainersSecurityContextCapabilities>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub privileged: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")]
    pub proc_mount: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "readOnlyRootFilesystem"
    )]
    pub read_only_root_filesystem: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")]
    pub run_as_group: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")]
    pub run_as_non_root: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")]
    pub run_as_user: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")]
    pub se_linux_options: Option<PoolerTemplateSpecContainersSecurityContextSeLinuxOptions>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")]
    pub seccomp_profile: Option<PoolerTemplateSpecContainersSecurityContextSeccompProfile>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")]
    pub windows_options: Option<PoolerTemplateSpecContainersSecurityContextWindowsOptions>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersSecurityContextCapabilities {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub add: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub drop: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersSecurityContextSeLinuxOptions {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub level: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
    pub r#type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersSecurityContextSeccompProfile {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")]
    pub localhost_profile: Option<String>,
    #[serde(rename = "type")]
    pub r#type: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersSecurityContextWindowsOptions {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpec"
    )]
    pub gmsa_credential_spec: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpecName"
    )]
    pub gmsa_credential_spec_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")]
    pub host_process: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")]
    pub run_as_user_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersStartupProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecContainersStartupProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecContainersStartupProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecContainersStartupProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecContainersStartupProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersStartupProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersStartupProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersStartupProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecContainersStartupProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersStartupProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersStartupProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersVolumeDevices {
    #[serde(rename = "devicePath")]
    pub device_path: String,
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecContainersVolumeMounts {
    #[serde(rename = "mountPath")]
    pub mount_path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")]
    pub mount_propagation: Option<String>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")]
    pub sub_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")]
    pub sub_path_expr: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecDnsConfig {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nameservers: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub options: Option<Vec<PoolerTemplateSpecDnsConfigOptions>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub searches: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecDnsConfigOptions {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainers {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub args: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub env: Option<Vec<PoolerTemplateSpecEphemeralContainersEnv>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")]
    pub env_from: Option<Vec<PoolerTemplateSpecEphemeralContainersEnvFrom>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub image: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")]
    pub image_pull_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lifecycle: Option<PoolerTemplateSpecEphemeralContainersLifecycle>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")]
    pub liveness_probe: Option<PoolerTemplateSpecEphemeralContainersLivenessProbe>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ports: Option<Vec<PoolerTemplateSpecEphemeralContainersPorts>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")]
    pub readiness_probe: Option<PoolerTemplateSpecEphemeralContainersReadinessProbe>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")]
    pub resize_policy: Option<Vec<PoolerTemplateSpecEphemeralContainersResizePolicy>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub resources: Option<PoolerTemplateSpecEphemeralContainersResources>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")]
    pub security_context: Option<PoolerTemplateSpecEphemeralContainersSecurityContext>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")]
    pub startup_probe: Option<PoolerTemplateSpecEphemeralContainersStartupProbe>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stdin: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")]
    pub stdin_once: Option<bool>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "targetContainerName"
    )]
    pub target_container_name: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationMessagePath"
    )]
    pub termination_message_path: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationMessagePolicy"
    )]
    pub termination_message_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tty: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")]
    pub volume_devices: Option<Vec<PoolerTemplateSpecEphemeralContainersVolumeDevices>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")]
    pub volume_mounts: Option<Vec<PoolerTemplateSpecEphemeralContainersVolumeMounts>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")]
    pub working_dir: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnv {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
    pub value_from: Option<PoolerTemplateSpecEphemeralContainersEnvValueFrom>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvValueFrom {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
    pub config_map_key_ref: Option<PoolerTemplateSpecEphemeralContainersEnvValueFromConfigMapKeyRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
    pub field_ref: Option<PoolerTemplateSpecEphemeralContainersEnvValueFromFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
    pub resource_field_ref: Option<PoolerTemplateSpecEphemeralContainersEnvValueFromResourceFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
    pub secret_key_ref: Option<PoolerTemplateSpecEphemeralContainersEnvValueFromSecretKeyRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvValueFromConfigMapKeyRef {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvValueFromFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
    pub api_version: Option<String>,
    #[serde(rename = "fieldPath")]
    pub field_path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvValueFromResourceFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
    pub container_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub divisor: Option<IntOrString>,
    pub resource: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvValueFromSecretKeyRef {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvFrom {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")]
    pub config_map_ref: Option<PoolerTemplateSpecEphemeralContainersEnvFromConfigMapRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecEphemeralContainersEnvFromSecretRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvFromConfigMapRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersEnvFromSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecycle {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")]
    pub post_start: Option<PoolerTemplateSpecEphemeralContainersLifecyclePostStart>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")]
    pub pre_stop: Option<PoolerTemplateSpecEphemeralContainersLifecyclePreStop>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePostStart {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecEphemeralContainersLifecyclePostStartExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecEphemeralContainersLifecyclePostStartHttpGet>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecEphemeralContainersLifecyclePostStartTcpSocket>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePostStartExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePostStartHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecEphemeralContainersLifecyclePostStartHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePostStartHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePostStartTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePreStop {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecEphemeralContainersLifecyclePreStopExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecEphemeralContainersLifecyclePreStopHttpGet>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecEphemeralContainersLifecyclePreStopTcpSocket>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePreStopExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePreStopHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecEphemeralContainersLifecyclePreStopHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePreStopHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLifecyclePreStopTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLivenessProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecEphemeralContainersLivenessProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecEphemeralContainersLivenessProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecEphemeralContainersLivenessProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecEphemeralContainersLivenessProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLivenessProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLivenessProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLivenessProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecEphemeralContainersLivenessProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLivenessProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersLivenessProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersPorts {
    #[serde(rename = "containerPort")]
    pub container_port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")]
    pub host_ip: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")]
    pub host_port: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub protocol: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersReadinessProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecEphemeralContainersReadinessProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecEphemeralContainersReadinessProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecEphemeralContainersReadinessProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecEphemeralContainersReadinessProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersReadinessProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersReadinessProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersReadinessProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecEphemeralContainersReadinessProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersReadinessProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersReadinessProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersResizePolicy {
    #[serde(rename = "resourceName")]
    pub resource_name: String,
    #[serde(rename = "restartPolicy")]
    pub restart_policy: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersResources {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub claims: Option<Vec<PoolerTemplateSpecEphemeralContainersResourcesClaims>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub limits: Option<BTreeMap<String, IntOrString>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub requests: Option<BTreeMap<String, IntOrString>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersResourcesClaims {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersSecurityContext {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "allowPrivilegeEscalation"
    )]
    pub allow_privilege_escalation: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub capabilities: Option<PoolerTemplateSpecEphemeralContainersSecurityContextCapabilities>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub privileged: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")]
    pub proc_mount: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "readOnlyRootFilesystem"
    )]
    pub read_only_root_filesystem: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")]
    pub run_as_group: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")]
    pub run_as_non_root: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")]
    pub run_as_user: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")]
    pub se_linux_options: Option<PoolerTemplateSpecEphemeralContainersSecurityContextSeLinuxOptions>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")]
    pub seccomp_profile: Option<PoolerTemplateSpecEphemeralContainersSecurityContextSeccompProfile>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")]
    pub windows_options: Option<PoolerTemplateSpecEphemeralContainersSecurityContextWindowsOptions>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersSecurityContextCapabilities {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub add: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub drop: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersSecurityContextSeLinuxOptions {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub level: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
    pub r#type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersSecurityContextSeccompProfile {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")]
    pub localhost_profile: Option<String>,
    #[serde(rename = "type")]
    pub r#type: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersSecurityContextWindowsOptions {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpec"
    )]
    pub gmsa_credential_spec: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpecName"
    )]
    pub gmsa_credential_spec_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")]
    pub host_process: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")]
    pub run_as_user_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersStartupProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecEphemeralContainersStartupProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecEphemeralContainersStartupProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecEphemeralContainersStartupProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecEphemeralContainersStartupProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersStartupProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersStartupProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersStartupProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecEphemeralContainersStartupProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersStartupProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersStartupProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersVolumeDevices {
    #[serde(rename = "devicePath")]
    pub device_path: String,
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecEphemeralContainersVolumeMounts {
    #[serde(rename = "mountPath")]
    pub mount_path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")]
    pub mount_propagation: Option<String>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")]
    pub sub_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")]
    pub sub_path_expr: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecHostAliases {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hostnames: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ip: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecImagePullSecrets {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainers {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub args: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub env: Option<Vec<PoolerTemplateSpecInitContainersEnv>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")]
    pub env_from: Option<Vec<PoolerTemplateSpecInitContainersEnvFrom>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub image: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")]
    pub image_pull_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lifecycle: Option<PoolerTemplateSpecInitContainersLifecycle>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")]
    pub liveness_probe: Option<PoolerTemplateSpecInitContainersLivenessProbe>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ports: Option<Vec<PoolerTemplateSpecInitContainersPorts>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")]
    pub readiness_probe: Option<PoolerTemplateSpecInitContainersReadinessProbe>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")]
    pub resize_policy: Option<Vec<PoolerTemplateSpecInitContainersResizePolicy>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub resources: Option<PoolerTemplateSpecInitContainersResources>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")]
    pub security_context: Option<PoolerTemplateSpecInitContainersSecurityContext>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")]
    pub startup_probe: Option<PoolerTemplateSpecInitContainersStartupProbe>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stdin: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")]
    pub stdin_once: Option<bool>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationMessagePath"
    )]
    pub termination_message_path: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationMessagePolicy"
    )]
    pub termination_message_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tty: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")]
    pub volume_devices: Option<Vec<PoolerTemplateSpecInitContainersVolumeDevices>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")]
    pub volume_mounts: Option<Vec<PoolerTemplateSpecInitContainersVolumeMounts>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")]
    pub working_dir: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnv {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
    pub value_from: Option<PoolerTemplateSpecInitContainersEnvValueFrom>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvValueFrom {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
    pub config_map_key_ref: Option<PoolerTemplateSpecInitContainersEnvValueFromConfigMapKeyRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
    pub field_ref: Option<PoolerTemplateSpecInitContainersEnvValueFromFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
    pub resource_field_ref: Option<PoolerTemplateSpecInitContainersEnvValueFromResourceFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
    pub secret_key_ref: Option<PoolerTemplateSpecInitContainersEnvValueFromSecretKeyRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvValueFromConfigMapKeyRef {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvValueFromFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
    pub api_version: Option<String>,
    #[serde(rename = "fieldPath")]
    pub field_path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvValueFromResourceFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
    pub container_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub divisor: Option<IntOrString>,
    pub resource: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvValueFromSecretKeyRef {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvFrom {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")]
    pub config_map_ref: Option<PoolerTemplateSpecInitContainersEnvFromConfigMapRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecInitContainersEnvFromSecretRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvFromConfigMapRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersEnvFromSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecycle {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")]
    pub post_start: Option<PoolerTemplateSpecInitContainersLifecyclePostStart>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")]
    pub pre_stop: Option<PoolerTemplateSpecInitContainersLifecyclePreStop>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePostStart {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecInitContainersLifecyclePostStartExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecInitContainersLifecyclePostStartHttpGet>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecInitContainersLifecyclePostStartTcpSocket>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePostStartExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePostStartHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecInitContainersLifecyclePostStartHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePostStartHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePostStartTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePreStop {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecInitContainersLifecyclePreStopExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecInitContainersLifecyclePreStopHttpGet>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecInitContainersLifecyclePreStopTcpSocket>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePreStopExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePreStopHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecInitContainersLifecyclePreStopHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePreStopHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLifecyclePreStopTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLivenessProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecInitContainersLivenessProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecInitContainersLivenessProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecInitContainersLivenessProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecInitContainersLivenessProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLivenessProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLivenessProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLivenessProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecInitContainersLivenessProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLivenessProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersLivenessProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersPorts {
    #[serde(rename = "containerPort")]
    pub container_port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")]
    pub host_ip: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")]
    pub host_port: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub protocol: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersReadinessProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecInitContainersReadinessProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecInitContainersReadinessProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecInitContainersReadinessProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecInitContainersReadinessProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersReadinessProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersReadinessProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersReadinessProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecInitContainersReadinessProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersReadinessProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersReadinessProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersResizePolicy {
    #[serde(rename = "resourceName")]
    pub resource_name: String,
    #[serde(rename = "restartPolicy")]
    pub restart_policy: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersResources {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub claims: Option<Vec<PoolerTemplateSpecInitContainersResourcesClaims>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub limits: Option<BTreeMap<String, IntOrString>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub requests: Option<BTreeMap<String, IntOrString>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersResourcesClaims {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersSecurityContext {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "allowPrivilegeEscalation"
    )]
    pub allow_privilege_escalation: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub capabilities: Option<PoolerTemplateSpecInitContainersSecurityContextCapabilities>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub privileged: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")]
    pub proc_mount: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "readOnlyRootFilesystem"
    )]
    pub read_only_root_filesystem: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")]
    pub run_as_group: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")]
    pub run_as_non_root: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")]
    pub run_as_user: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")]
    pub se_linux_options: Option<PoolerTemplateSpecInitContainersSecurityContextSeLinuxOptions>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")]
    pub seccomp_profile: Option<PoolerTemplateSpecInitContainersSecurityContextSeccompProfile>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")]
    pub windows_options: Option<PoolerTemplateSpecInitContainersSecurityContextWindowsOptions>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersSecurityContextCapabilities {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub add: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub drop: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersSecurityContextSeLinuxOptions {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub level: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
    pub r#type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersSecurityContextSeccompProfile {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")]
    pub localhost_profile: Option<String>,
    #[serde(rename = "type")]
    pub r#type: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersSecurityContextWindowsOptions {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpec"
    )]
    pub gmsa_credential_spec: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpecName"
    )]
    pub gmsa_credential_spec_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")]
    pub host_process: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")]
    pub run_as_user_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersStartupProbe {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub exec: Option<PoolerTemplateSpecInitContainersStartupProbeExec>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")]
    pub failure_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub grpc: Option<PoolerTemplateSpecInitContainersStartupProbeGrpc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")]
    pub http_get: Option<PoolerTemplateSpecInitContainersStartupProbeHttpGet>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "initialDelaySeconds"
    )]
    pub initial_delay_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")]
    pub period_seconds: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")]
    pub success_threshold: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")]
    pub tcp_socket: Option<PoolerTemplateSpecInitContainersStartupProbeTcpSocket>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "terminationGracePeriodSeconds"
    )]
    pub termination_grace_period_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")]
    pub timeout_seconds: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersStartupProbeExec {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub command: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersStartupProbeGrpc {
    pub port: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub service: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersStartupProbeHttpGet {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")]
    pub http_headers: Option<Vec<PoolerTemplateSpecInitContainersStartupProbeHttpGetHttpHeaders>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    pub port: IntOrString,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersStartupProbeHttpGetHttpHeaders {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersStartupProbeTcpSocket {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub host: Option<String>,
    pub port: IntOrString,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersVolumeDevices {
    #[serde(rename = "devicePath")]
    pub device_path: String,
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecInitContainersVolumeMounts {
    #[serde(rename = "mountPath")]
    pub mount_path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")]
    pub mount_propagation: Option<String>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")]
    pub sub_path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")]
    pub sub_path_expr: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecOs {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecReadinessGates {
    #[serde(rename = "conditionType")]
    pub condition_type: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecResourceClaims {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source: Option<PoolerTemplateSpecResourceClaimsSource>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecResourceClaimsSource {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "resourceClaimName"
    )]
    pub resource_claim_name: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "resourceClaimTemplateName"
    )]
    pub resource_claim_template_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecSchedulingGates {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecSecurityContext {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")]
    pub fs_group: Option<i64>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "fsGroupChangePolicy"
    )]
    pub fs_group_change_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")]
    pub run_as_group: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")]
    pub run_as_non_root: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")]
    pub run_as_user: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")]
    pub se_linux_options: Option<PoolerTemplateSpecSecurityContextSeLinuxOptions>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")]
    pub seccomp_profile: Option<PoolerTemplateSpecSecurityContextSeccompProfile>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "supplementalGroups"
    )]
    pub supplemental_groups: Option<Vec<i64>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sysctls: Option<Vec<PoolerTemplateSpecSecurityContextSysctls>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")]
    pub windows_options: Option<PoolerTemplateSpecSecurityContextWindowsOptions>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecSecurityContextSeLinuxOptions {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub level: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
    pub r#type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecSecurityContextSeccompProfile {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")]
    pub localhost_profile: Option<String>,
    #[serde(rename = "type")]
    pub r#type: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecSecurityContextSysctls {
    pub name: String,
    pub value: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecSecurityContextWindowsOptions {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpec"
    )]
    pub gmsa_credential_spec: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gmsaCredentialSpecName"
    )]
    pub gmsa_credential_spec_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")]
    pub host_process: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")]
    pub run_as_user_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecTolerations {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub effect: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub key: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub operator: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "tolerationSeconds"
    )]
    pub toleration_seconds: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub value: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecTopologySpreadConstraints {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
    pub label_selector: Option<PoolerTemplateSpecTopologySpreadConstraintsLabelSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
    pub match_label_keys: Option<Vec<String>>,
    #[serde(rename = "maxSkew")]
    pub max_skew: i32,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "minDomains")]
    pub min_domains: Option<i32>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "nodeAffinityPolicy"
    )]
    pub node_affinity_policy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeTaintsPolicy")]
    pub node_taints_policy: Option<String>,
    #[serde(rename = "topologyKey")]
    pub topology_key: String,
    #[serde(rename = "whenUnsatisfiable")]
    pub when_unsatisfiable: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecTopologySpreadConstraintsLabelSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions:
        Option<Vec<PoolerTemplateSpecTopologySpreadConstraintsLabelSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecTopologySpreadConstraintsLabelSelectorMatchExpressions {
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumes {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "awsElasticBlockStore"
    )]
    pub aws_elastic_block_store: Option<PoolerTemplateSpecVolumesAwsElasticBlockStore>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureDisk")]
    pub azure_disk: Option<PoolerTemplateSpecVolumesAzureDisk>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureFile")]
    pub azure_file: Option<PoolerTemplateSpecVolumesAzureFile>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cephfs: Option<PoolerTemplateSpecVolumesCephfs>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cinder: Option<PoolerTemplateSpecVolumesCinder>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")]
    pub config_map: Option<PoolerTemplateSpecVolumesConfigMap>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub csi: Option<PoolerTemplateSpecVolumesCsi>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")]
    pub downward_api: Option<PoolerTemplateSpecVolumesDownwardApi>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")]
    pub empty_dir: Option<PoolerTemplateSpecVolumesEmptyDir>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ephemeral: Option<PoolerTemplateSpecVolumesEphemeral>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub fc: Option<PoolerTemplateSpecVolumesFc>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "flexVolume")]
    pub flex_volume: Option<PoolerTemplateSpecVolumesFlexVolume>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub flocker: Option<PoolerTemplateSpecVolumesFlocker>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "gcePersistentDisk"
    )]
    pub gce_persistent_disk: Option<PoolerTemplateSpecVolumesGcePersistentDisk>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitRepo")]
    pub git_repo: Option<PoolerTemplateSpecVolumesGitRepo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub glusterfs: Option<PoolerTemplateSpecVolumesGlusterfs>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")]
    pub host_path: Option<PoolerTemplateSpecVolumesHostPath>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub iscsi: Option<PoolerTemplateSpecVolumesIscsi>,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nfs: Option<PoolerTemplateSpecVolumesNfs>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "persistentVolumeClaim"
    )]
    pub persistent_volume_claim: Option<PoolerTemplateSpecVolumesPersistentVolumeClaim>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "photonPersistentDisk"
    )]
    pub photon_persistent_disk: Option<PoolerTemplateSpecVolumesPhotonPersistentDisk>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "portworxVolume")]
    pub portworx_volume: Option<PoolerTemplateSpecVolumesPortworxVolume>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub projected: Option<PoolerTemplateSpecVolumesProjected>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub quobyte: Option<PoolerTemplateSpecVolumesQuobyte>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub rbd: Option<PoolerTemplateSpecVolumesRbd>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "scaleIO")]
    pub scale_io: Option<PoolerTemplateSpecVolumesScaleIo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub secret: Option<PoolerTemplateSpecVolumesSecret>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storageos: Option<PoolerTemplateSpecVolumesStorageos>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "vsphereVolume")]
    pub vsphere_volume: Option<PoolerTemplateSpecVolumesVsphereVolume>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesAwsElasticBlockStore {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub partition: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(rename = "volumeID")]
    pub volume_id: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesAzureDisk {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMode")]
    pub caching_mode: Option<String>,
    #[serde(rename = "diskName")]
    pub disk_name: String,
    #[serde(rename = "diskURI")]
    pub disk_uri: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub kind: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesAzureFile {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(rename = "secretName")]
    pub secret_name: String,
    #[serde(rename = "shareName")]
    pub share_name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesCephfs {
    pub monitors: Vec<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub path: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretFile")]
    pub secret_file: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecVolumesCephfsSecretRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesCephfsSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesCinder {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecVolumesCinderSecretRef>,
    #[serde(rename = "volumeID")]
    pub volume_id: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesCinderSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesConfigMap {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")]
    pub default_mode: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub items: Option<Vec<PoolerTemplateSpecVolumesConfigMapItems>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesConfigMapItems {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<i32>,
    pub path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesCsi {
    pub driver: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "nodePublishSecretRef"
    )]
    pub node_publish_secret_ref: Option<PoolerTemplateSpecVolumesCsiNodePublishSecretRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributes")]
    pub volume_attributes: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesCsiNodePublishSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesDownwardApi {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")]
    pub default_mode: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub items: Option<Vec<PoolerTemplateSpecVolumesDownwardApiItems>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesDownwardApiItems {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
    pub field_ref: Option<PoolerTemplateSpecVolumesDownwardApiItemsFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<i32>,
    pub path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
    pub resource_field_ref: Option<PoolerTemplateSpecVolumesDownwardApiItemsResourceFieldRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesDownwardApiItemsFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
    pub api_version: Option<String>,
    #[serde(rename = "fieldPath")]
    pub field_path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesDownwardApiItemsResourceFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
    pub container_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub divisor: Option<IntOrString>,
    pub resource: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEmptyDir {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub medium: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")]
    pub size_limit: Option<IntOrString>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeral {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "volumeClaimTemplate"
    )]
    pub volume_claim_template: Option<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplate>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplate {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub metadata: Option<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateMetadata>,
    pub spec: PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpec,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateMetadata {}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpec {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")]
    pub access_modes: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")]
    pub data_source: Option<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSource>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")]
    pub data_source_ref: Option<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSourceRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub resources: Option<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecResources>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub selector: Option<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelector>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")]
    pub storage_class_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")]
    pub volume_mode: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")]
    pub volume_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSource {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")]
    pub api_group: Option<String>,
    pub kind: String,
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSourceRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")]
    pub api_group: Option<String>,
    pub kind: String,
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecResources {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub claims: Option<Vec<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecResourcesClaims>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub limits: Option<BTreeMap<String, IntOrString>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub requests: Option<BTreeMap<String, IntOrString>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecResourcesClaims {
    pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelector {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
    pub match_expressions:
        Option<Vec<PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelectorMatchExpressions>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
    pub match_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelectorMatchExpressions {
    pub key: String,
    pub operator: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub values: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesFc {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub lun: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetWWNs")]
    pub target_ww_ns: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub wwids: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesFlexVolume {
    pub driver: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub options: Option<BTreeMap<String, String>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecVolumesFlexVolumeSecretRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesFlexVolumeSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesFlocker {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetName")]
    pub dataset_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetUUID")]
    pub dataset_uuid: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesGcePersistentDisk {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub partition: Option<i32>,
    #[serde(rename = "pdName")]
    pub pd_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesGitRepo {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub directory: Option<String>,
    pub repository: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub revision: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesGlusterfs {
    pub endpoints: String,
    pub path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesHostPath {
    pub path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
    pub r#type: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesIscsi {
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "chapAuthDiscovery"
    )]
    pub chap_auth_discovery: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthSession")]
    pub chap_auth_session: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "initiatorName")]
    pub initiator_name: Option<String>,
    pub iqn: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "iscsiInterface")]
    pub iscsi_interface: Option<String>,
    pub lun: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub portals: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecVolumesIscsiSecretRef>,
    #[serde(rename = "targetPortal")]
    pub target_portal: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesIscsiSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesNfs {
    pub path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    pub server: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesPersistentVolumeClaim {
    #[serde(rename = "claimName")]
    pub claim_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesPhotonPersistentDisk {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(rename = "pdID")]
    pub pd_id: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesPortworxVolume {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(rename = "volumeID")]
    pub volume_id: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjected {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")]
    pub default_mode: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sources: Option<Vec<PoolerTemplateSpecVolumesProjectedSources>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSources {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")]
    pub config_map: Option<PoolerTemplateSpecVolumesProjectedSourcesConfigMap>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")]
    pub downward_api: Option<PoolerTemplateSpecVolumesProjectedSourcesDownwardApi>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub secret: Option<PoolerTemplateSpecVolumesProjectedSourcesSecret>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "serviceAccountToken"
    )]
    pub service_account_token: Option<PoolerTemplateSpecVolumesProjectedSourcesServiceAccountToken>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesConfigMap {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub items: Option<Vec<PoolerTemplateSpecVolumesProjectedSourcesConfigMapItems>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesConfigMapItems {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<i32>,
    pub path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesDownwardApi {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub items: Option<Vec<PoolerTemplateSpecVolumesProjectedSourcesDownwardApiItems>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesDownwardApiItems {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
    pub field_ref: Option<PoolerTemplateSpecVolumesProjectedSourcesDownwardApiItemsFieldRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<i32>,
    pub path: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
    pub resource_field_ref: Option<PoolerTemplateSpecVolumesProjectedSourcesDownwardApiItemsResourceFieldRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesDownwardApiItemsFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
    pub api_version: Option<String>,
    #[serde(rename = "fieldPath")]
    pub field_path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesDownwardApiItemsResourceFieldRef {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
    pub container_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub divisor: Option<IntOrString>,
    pub resource: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesSecret {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub items: Option<Vec<PoolerTemplateSpecVolumesProjectedSourcesSecretItems>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesSecretItems {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<i32>,
    pub path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesProjectedSourcesServiceAccountToken {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub audience: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "expirationSeconds"
    )]
    pub expiration_seconds: Option<i64>,
    pub path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesQuobyte {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub group: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    pub registry: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tenant: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
    pub volume: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesRbd {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    pub image: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub keyring: Option<String>,
    pub monitors: Vec<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pool: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecVolumesRbdSecretRef>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub user: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesRbdSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesScaleIo {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    pub gateway: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "protectionDomain")]
    pub protection_domain: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(rename = "secretRef")]
    pub secret_ref: PoolerTemplateSpecVolumesScaleIoSecretRef,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "sslEnabled")]
    pub ssl_enabled: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMode")]
    pub storage_mode: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePool")]
    pub storage_pool: Option<String>,
    pub system: String,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")]
    pub volume_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesScaleIoSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesSecret {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")]
    pub default_mode: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub items: Option<Vec<PoolerTemplateSpecVolumesSecretItems>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub optional: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")]
    pub secret_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesSecretItems {
    pub key: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mode: Option<i32>,
    pub path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesStorageos {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")]
    pub read_only: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
    pub secret_ref: Option<PoolerTemplateSpecVolumesStorageosSecretRef>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")]
    pub volume_name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeNamespace")]
    pub volume_namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesStorageosSecretRef {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerTemplateSpecVolumesVsphereVolume {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")]
    pub fs_type: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyID")]
    pub storage_policy_id: Option<String>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        rename = "storagePolicyName"
    )]
    pub storage_policy_name: Option<String>,
    #[serde(rename = "volumePath")]
    pub volume_path: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub enum PoolerType {
    #[serde(rename = "rw")]
    Rw,
    #[serde(rename = "ro")]
    Ro,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatus {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub instances: Option<i32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub secrets: Option<PoolerStatusSecrets>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatusSecrets {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientCA")]
    pub client_ca: Option<PoolerStatusSecretsClientCa>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pgBouncerSecrets")]
    pub pg_bouncer_secrets: Option<PoolerStatusSecretsPgBouncerSecrets>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverCA")]
    pub server_ca: Option<PoolerStatusSecretsServerCa>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverTLS")]
    pub server_tls: Option<PoolerStatusSecretsServerTls>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatusSecretsClientCa {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatusSecretsPgBouncerSecrets {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "authQuery")]
    pub auth_query: Option<PoolerStatusSecretsPgBouncerSecretsAuthQuery>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatusSecretsPgBouncerSecretsAuthQuery {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatusSecretsServerCa {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub struct PoolerStatusSecretsServerTls {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}