From 50f0548ac9889d97fb51d84c4852f6e976d23bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ho=C3=9F?= Date: Tue, 23 Sep 2025 02:41:30 +0200 Subject: [PATCH] re-generate crates using https://github.com/kube-rs/kopium/pull/375 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sebastian Hoß --- .../v1/vlagents.ignore | 1 - .../v1/vlclusters.ignore | 1 - .../v1/vlsingles.ignore | 1 - .../v1/vmanomalies.ignore | 1 - .../v1/vtclusters.ignore | 1 - .../v1/vtsingles.ignore | 1 - .../v1beta1/vlogs.ignore | 1 - .../v1beta1/vmagents.ignore | 1 - .../v1beta1/vmalertmanagers.ignore | 1 - .../v1beta1/vmalerts.ignore | 1 - .../v1beta1/vmauths.ignore | 1 - .../v1beta1/vmclusters.ignore | 1 - .../v1beta1/vmsingles.ignore | 1 - .../v1alpha1/eventtailers.ignore | 1 - .../v1beta1/fluentbitagents.ignore | 1 - .../v1beta1/loggings.ignore | 1 - .../v1beta1/nodeagents.ignore | 1 - .../src/v1alpha1/autoscalinglisteners.rs | 2 +- .../src/v1alpha1/autoscalingrunnersets.rs | 2 +- .../src/v1alpha1/ephemeralrunnersets.rs | 2 +- .../v1alpha1/horizontalrunnerautoscalers.rs | 2 +- .../src/v1alpha1/runnerdeployments.rs | 2 +- .../src/v1alpha1/runnerreplicasets.rs | 2 +- .../src/v1alpha1/runners.rs | 2 +- .../src/v1alpha1/runnersets.rs | 2 +- .../src/v1alpha1/nexusblobstores.rs | 2 +- .../src/v1alpha1/nexuscleanuppolicies.rs | 2 +- .../edp_epam_com/src/v1alpha1/nexuses.rs | 2 +- .../src/v1alpha1/nexusrepositories.rs | 2 +- .../edp_epam_com/src/v1alpha1/nexusroles.rs | 2 +- .../edp_epam_com/src/v1alpha1/nexusscripts.rs | 2 +- .../logging_banzaicloud_io/README.md | 3 + .../logging_banzaicloud_io/src/lib.rs | 3 + .../src/v1alpha1/clusterflows.rs | 2 +- .../src/v1alpha1/clusteroutputs.rs | 2 +- .../src/v1alpha1/flows.rs | 2 +- .../src/v1alpha1/loggings.rs | 2 +- .../src/v1alpha1/outputs.rs | 2 +- .../src/v1beta1/clusterflows.rs | 2 +- .../src/v1beta1/clusteroutputs.rs | 2 +- .../src/v1beta1/flows.rs | 2 +- .../src/v1beta1/fluentbitagents.rs | 2546 +++ .../src/v1beta1/loggings.rs | 14335 ++++++++++++++++ .../logging_banzaicloud_io/src/v1beta1/mod.rs | 3 + .../src/v1beta1/nodeagents.rs | 4236 +++++ .../src/v1beta1/outputs.rs | 2 +- .../src/v1beta1/syslogngclusterflows.rs | 2 +- .../src/v1beta1/syslogngclusteroutputs.rs | 2 +- .../src/v1beta1/syslogngflows.rs | 2 +- .../src/v1beta1/syslogngoutputs.rs | 2 +- .../README.md | 1 + .../src/lib.rs | 1 + .../src/v1alpha1/eventtailers.rs | 2115 +++ .../src/v1alpha1/hosttailers.rs | 2 +- .../src/v1alpha1/mod.rs | 1 + .../operator_victoriametrics_com/Cargo.toml | 3 +- .../operator_victoriametrics_com/README.md | 14 + .../operator_victoriametrics_com/src/lib.rs | 16 + .../src/v1/mod.rs | 6 + .../src/v1/vlagents.rs | 1747 ++ .../src/v1/vlclusters.rs | 2150 +++ .../src/v1/vlsingles.rs | 974 ++ .../src/v1/vmanomalies.rs | 2231 +++ .../src/v1/vtclusters.rs | 2023 +++ .../src/v1/vtsingles.rs | 847 + .../src/v1beta1/mod.rs | 7 + .../src/v1beta1/vlogs.rs | 31 + .../src/v1beta1/vmagents.rs | 3984 +++++ .../src/v1beta1/vmalertmanagerconfigs.rs | 2 +- .../src/v1beta1/vmalertmanagers.rs | 2066 +++ .../src/v1beta1/vmalerts.rs | 1596 ++ .../src/v1beta1/vmauths.rs | 1379 ++ .../src/v1beta1/vmclusters.rs | 2929 ++++ .../src/v1beta1/vmnodescrapes.rs | 2 +- .../src/v1beta1/vmpodscrapes.rs | 2 +- .../src/v1beta1/vmprobes.rs | 2 +- .../src/v1beta1/vmrules.rs | 2 +- .../src/v1beta1/vmscrapeconfigs.rs | 2 +- .../src/v1beta1/vmservicescrapes.rs | 2 +- .../src/v1beta1/vmsingles.rs | 1551 ++ .../src/v1beta1/vmstaticscrapes.rs | 2 +- .../src/v1beta1/vmusers.rs | 2 +- 82 files changed, 46834 insertions(+), 55 deletions(-) delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlagents.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlclusters.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlsingles.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vmanomalies.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtclusters.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtsingles.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vlogs.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmagents.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalertmanagers.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalerts.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmauths.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmclusters.ignore delete mode 100644 crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmsingles.ignore delete mode 100644 crd-catalog/kube-logging/logging-operator/logging-extensions.banzaicloud.io/v1alpha1/eventtailers.ignore delete mode 100644 crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/fluentbitagents.ignore delete mode 100644 crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/loggings.ignore delete mode 100644 crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/nodeagents.ignore create mode 100644 custom-resources/logging_banzaicloud_io/src/v1beta1/fluentbitagents.rs create mode 100644 custom-resources/logging_banzaicloud_io/src/v1beta1/loggings.rs create mode 100644 custom-resources/logging_banzaicloud_io/src/v1beta1/nodeagents.rs create mode 100644 custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/eventtailers.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/mod.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/vlagents.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/vlclusters.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/vlsingles.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/vmanomalies.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/vtclusters.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1/vtsingles.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vlogs.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vmagents.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagers.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vmalerts.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vmauths.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vmclusters.rs create mode 100644 custom-resources/operator_victoriametrics_com/src/v1beta1/vmsingles.rs diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlagents.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlagents.ignore deleted file mode 100644 index 182d73085..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlagents.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VLAgentHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlclusters.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlclusters.ignore deleted file mode 100644 index 99be1457f..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlclusters.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VLClusterVlinsertHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlsingles.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlsingles.ignore deleted file mode 100644 index fb718e7e1..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlsingles.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VLSingleHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vmanomalies.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vmanomalies.ignore deleted file mode 100644 index c21ddc29a..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vmanomalies.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VMAnomalyHostAliases` is defined multiple times \ No newline at end of file diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtclusters.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtclusters.ignore deleted file mode 100644 index 175768a8a..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtclusters.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VTClusterInsertHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtsingles.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtsingles.ignore deleted file mode 100644 index b09f60c96..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtsingles.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VTSingleHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vlogs.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vlogs.ignore deleted file mode 100644 index 166ac5cdb..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vlogs.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VLogsHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmagents.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmagents.ignore deleted file mode 100644 index ff3bfb3e6..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmagents.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VmAgentHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalertmanagers.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalertmanagers.ignore deleted file mode 100644 index d4648e309..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalertmanagers.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VmAlertmanagerHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalerts.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalerts.ignore deleted file mode 100644 index b52a6b75e..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalerts.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VmAlertHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmauths.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmauths.ignore deleted file mode 100644 index c7008667f..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmauths.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VmAuthHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmclusters.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmclusters.ignore deleted file mode 100644 index fdcb6bad1..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmclusters.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VmClusterVminsertHostAliases` is defined multiple times diff --git a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmsingles.ignore b/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmsingles.ignore deleted file mode 100644 index 213a3a69e..000000000 --- a/crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmsingles.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `VmSingleHostAliases` is defined multiple times diff --git a/crd-catalog/kube-logging/logging-operator/logging-extensions.banzaicloud.io/v1alpha1/eventtailers.ignore b/crd-catalog/kube-logging/logging-operator/logging-extensions.banzaicloud.io/v1alpha1/eventtailers.ignore deleted file mode 100644 index 106e801ef..000000000 --- a/crd-catalog/kube-logging/logging-operator/logging-extensions.banzaicloud.io/v1alpha1/eventtailers.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `EventTailerPositionVolumeHostPath` is defined multiple times diff --git a/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/fluentbitagents.ignore b/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/fluentbitagents.ignore deleted file mode 100644 index 2516556da..000000000 --- a/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/fluentbitagents.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `FluentbitAgentBufferStorageVolumeHostPath` is defined multiple times diff --git a/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/loggings.ignore b/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/loggings.ignore deleted file mode 100644 index 57da03075..000000000 --- a/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/loggings.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `LoggingFluentbitBufferStorageVolumeHostPath` is defined multiple times diff --git a/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/nodeagents.ignore b/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/nodeagents.ignore deleted file mode 100644 index 2f2f8a2a5..000000000 --- a/crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/nodeagents.ignore +++ /dev/null @@ -1 +0,0 @@ -the name `NodeAgentNodeAgentFluentbitBufferStorageVolumeHostPath` is defined multiple times diff --git a/custom-resources/actions_github_com/src/v1alpha1/autoscalinglisteners.rs b/custom-resources/actions_github_com/src/v1alpha1/autoscalinglisteners.rs index 88fbc08e6..4faa2e690 100644 --- a/custom-resources/actions_github_com/src/v1alpha1/autoscalinglisteners.rs +++ b/custom-resources/actions_github_com/src/v1alpha1/autoscalinglisteners.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.github.com/v1alpha1/autoscalinglisteners.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_github_com/src/v1alpha1/autoscalingrunnersets.rs b/custom-resources/actions_github_com/src/v1alpha1/autoscalingrunnersets.rs index d34960fbd..b409661c1 100644 --- a/custom-resources/actions_github_com/src/v1alpha1/autoscalingrunnersets.rs +++ b/custom-resources/actions_github_com/src/v1alpha1/autoscalingrunnersets.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.github.com/v1alpha1/autoscalingrunnersets.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_github_com/src/v1alpha1/ephemeralrunnersets.rs b/custom-resources/actions_github_com/src/v1alpha1/ephemeralrunnersets.rs index c4412c947..4785f1a6c 100644 --- a/custom-resources/actions_github_com/src/v1alpha1/ephemeralrunnersets.rs +++ b/custom-resources/actions_github_com/src/v1alpha1/ephemeralrunnersets.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.github.com/v1alpha1/ephemeralrunnersets.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_summerwind_dev/src/v1alpha1/horizontalrunnerautoscalers.rs b/custom-resources/actions_summerwind_dev/src/v1alpha1/horizontalrunnerautoscalers.rs index 56db97fff..3c63db0b4 100644 --- a/custom-resources/actions_summerwind_dev/src/v1alpha1/horizontalrunnerautoscalers.rs +++ b/custom-resources/actions_summerwind_dev/src/v1alpha1/horizontalrunnerautoscalers.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.summerwind.dev/v1alpha1/horizontalrunnerautoscalers.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerdeployments.rs b/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerdeployments.rs index 310920339..70ecd38f0 100644 --- a/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerdeployments.rs +++ b/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerdeployments.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.summerwind.dev/v1alpha1/runnerdeployments.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerreplicasets.rs b/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerreplicasets.rs index 5d72cb54e..47ce404aa 100644 --- a/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerreplicasets.rs +++ b/custom-resources/actions_summerwind_dev/src/v1alpha1/runnerreplicasets.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.summerwind.dev/v1alpha1/runnerreplicasets.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_summerwind_dev/src/v1alpha1/runners.rs b/custom-resources/actions_summerwind_dev/src/v1alpha1/runners.rs index 68326d1a4..3f8eebf15 100644 --- a/custom-resources/actions_summerwind_dev/src/v1alpha1/runners.rs +++ b/custom-resources/actions_summerwind_dev/src/v1alpha1/runners.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.summerwind.dev/v1alpha1/runners.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/actions_summerwind_dev/src/v1alpha1/runnersets.rs b/custom-resources/actions_summerwind_dev/src/v1alpha1/runnersets.rs index 95d8d29c4..7d022748e 100644 --- a/custom-resources/actions_summerwind_dev/src/v1alpha1/runnersets.rs +++ b/custom-resources/actions_summerwind_dev/src/v1alpha1/runnersets.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/actions/actions-runner-controller/actions.summerwind.dev/v1alpha1/runnersets.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/edp_epam_com/src/v1alpha1/nexusblobstores.rs b/custom-resources/edp_epam_com/src/v1alpha1/nexusblobstores.rs index eb89aaa5a..89e240015 100644 --- a/custom-resources/edp_epam_com/src/v1alpha1/nexusblobstores.rs +++ b/custom-resources/edp_epam_com/src/v1alpha1/nexusblobstores.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/epam/edp-nexus-operator/edp.epam.com/v1alpha1/nexusblobstores.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/edp_epam_com/src/v1alpha1/nexuscleanuppolicies.rs b/custom-resources/edp_epam_com/src/v1alpha1/nexuscleanuppolicies.rs index 480c0111e..34754de0f 100644 --- a/custom-resources/edp_epam_com/src/v1alpha1/nexuscleanuppolicies.rs +++ b/custom-resources/edp_epam_com/src/v1alpha1/nexuscleanuppolicies.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/epam/edp-nexus-operator/edp.epam.com/v1alpha1/nexuscleanuppolicies.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/edp_epam_com/src/v1alpha1/nexuses.rs b/custom-resources/edp_epam_com/src/v1alpha1/nexuses.rs index 7f34cff64..07bd01c7f 100644 --- a/custom-resources/edp_epam_com/src/v1alpha1/nexuses.rs +++ b/custom-resources/edp_epam_com/src/v1alpha1/nexuses.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/epam/edp-nexus-operator/edp.epam.com/v1alpha1/nexuses.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/edp_epam_com/src/v1alpha1/nexusrepositories.rs b/custom-resources/edp_epam_com/src/v1alpha1/nexusrepositories.rs index 5cfa97af6..c75807390 100644 --- a/custom-resources/edp_epam_com/src/v1alpha1/nexusrepositories.rs +++ b/custom-resources/edp_epam_com/src/v1alpha1/nexusrepositories.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/epam/edp-nexus-operator/edp.epam.com/v1alpha1/nexusrepositories.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/edp_epam_com/src/v1alpha1/nexusroles.rs b/custom-resources/edp_epam_com/src/v1alpha1/nexusroles.rs index 278c6ee09..d4ec1f44a 100644 --- a/custom-resources/edp_epam_com/src/v1alpha1/nexusroles.rs +++ b/custom-resources/edp_epam_com/src/v1alpha1/nexusroles.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/epam/edp-nexus-operator/edp.epam.com/v1alpha1/nexusroles.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/edp_epam_com/src/v1alpha1/nexusscripts.rs b/custom-resources/edp_epam_com/src/v1alpha1/nexusscripts.rs index dd6fe6f9b..e1f45ff9e 100644 --- a/custom-resources/edp_epam_com/src/v1alpha1/nexusscripts.rs +++ b/custom-resources/edp_epam_com/src/v1alpha1/nexusscripts.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/epam/edp-nexus-operator/edp.epam.com/v1alpha1/nexusscripts.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/README.md b/custom-resources/logging_banzaicloud_io/README.md index 6021c621c..8d72b1b7f 100644 --- a/custom-resources/logging_banzaicloud_io/README.md +++ b/custom-resources/logging_banzaicloud_io/README.md @@ -21,6 +21,9 @@ This crate is part of [kube-custom-resources-rs](https://github.com/metio/kube-c - `ClusterFlow` - `ClusterOutput` - `Flow` +- `FluentbitAgent` +- `Logging` +- `NodeAgent` - `Output` - `SyslogNGClusterFlow` - `SyslogNGClusterOutput` diff --git a/custom-resources/logging_banzaicloud_io/src/lib.rs b/custom-resources/logging_banzaicloud_io/src/lib.rs index 85f7857ed..b0062a099 100644 --- a/custom-resources/logging_banzaicloud_io/src/lib.rs +++ b/custom-resources/logging_banzaicloud_io/src/lib.rs @@ -13,6 +13,9 @@ This crate contains [kube-rs](https://kube.rs/) compatible bindings for Kubernet - `ClusterFlow` - `ClusterOutput` - `Flow` +- `FluentbitAgent` +- `Logging` +- `NodeAgent` - `Output` - `SyslogNGClusterFlow` - `SyslogNGClusterOutput` diff --git a/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusterflows.rs b/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusterflows.rs index a620c0a62..fd1c009f3 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusterflows.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusterflows.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1alpha1/clusterflows.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusteroutputs.rs b/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusteroutputs.rs index 70ee97c4f..c5ac3174a 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusteroutputs.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1alpha1/clusteroutputs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1alpha1/clusteroutputs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1alpha1/flows.rs b/custom-resources/logging_banzaicloud_io/src/v1alpha1/flows.rs index bc7bcc4a5..df9734136 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1alpha1/flows.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1alpha1/flows.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1alpha1/flows.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1alpha1/loggings.rs b/custom-resources/logging_banzaicloud_io/src/v1alpha1/loggings.rs index 31c8cc31e..719874fb3 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1alpha1/loggings.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1alpha1/loggings.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1alpha1/loggings.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1alpha1/outputs.rs b/custom-resources/logging_banzaicloud_io/src/v1alpha1/outputs.rs index 0b3c3af61..65747de30 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1alpha1/outputs.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1alpha1/outputs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1alpha1/outputs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/clusterflows.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/clusterflows.rs index c8dd1c367..ad3a9316e 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/clusterflows.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/clusterflows.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/clusterflows.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/clusteroutputs.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/clusteroutputs.rs index 171aad951..6886d5be9 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/clusteroutputs.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/clusteroutputs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/clusteroutputs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/flows.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/flows.rs index a92455bcc..c4fb130df 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/flows.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/flows.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/flows.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/fluentbitagents.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/fluentbitagents.rs new file mode 100644 index 000000000..2e40aa21c --- /dev/null +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/fluentbitagents.rs @@ -0,0 +1,2546 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/fluentbitagents.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::api::core::v1::ObjectReference; +} +use self::prelude::*; + +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "logging.banzaicloud.io", version = "v1beta1", kind = "FluentbitAgent", plural = "fluentbitagents")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct FluentbitAgentSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "HostNetwork")] + pub host_network: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorage")] + pub buffer_storage: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorageVolume")] + pub buffer_storage_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeArgs")] + pub buffer_volume_args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeImage")] + pub buffer_volume_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeLivenessProbe")] + pub buffer_volume_liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetrics")] + pub buffer_volume_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeResources")] + pub buffer_volume_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configHotReload")] + pub config_hot_reload: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "coroStackSize")] + pub coro_stack_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customConfigSecret")] + pub custom_config_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customParsers")] + pub custom_parsers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "daemonsetAnnotations")] + pub daemonset_annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableKubernetesFilter")] + pub disable_kubernetes_filter: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableVarLibDockerContainers")] + pub disable_var_lib_docker_containers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableVarLog")] + pub disable_var_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableUpstream")] + pub enable_upstream: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enabledIPv6")] + pub enabled_i_pv6: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envVars")] + pub env_vars: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraVolumeMounts")] + pub extra_volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterAws")] + pub filter_aws: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterGrep")] + pub filter_grep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterKubernetes")] + pub filter_kubernetes: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterModify")] + pub filter_modify: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceHotReloadAfterGrace")] + pub force_hot_reload_after_grace: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forwardOptions")] + pub forward_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grace: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheck")] + pub health_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "inputTail")] + pub input_tail: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessDefaultCheck")] + pub liveness_default_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loggingRef")] + pub logging_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPath")] + pub mount_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub network: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podPriorityClassName")] + pub pod_priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub position_db: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub positiondb: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub security: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub syslogng_output: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetHost")] + pub target_host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: FluentbitAgentAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.backlog.mem_limit")] + pub storage_backlog_mem_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.checksum")] + pub storage_checksum: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.delete_irrecoverable_chunks")] + pub storage_delete_irrecoverable_chunks: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.max_chunks_up")] + pub storage_max_chunks_up: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.metrics")] + pub storage_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.path")] + pub storage_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.sync")] + pub storage_sync: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumeConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumeConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumeEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumeHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumePvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumeSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferStorageVolumeSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentBufferVolumeMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentBufferVolumeMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentBufferVolumeMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentBufferVolumeResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentConfigHotReload { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentConfigHotReloadImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentConfigHotReloadImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentConfigHotReloadResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentConfigHotReloadResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentDnsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentDnsConfigOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentEnvVars { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentEnvVarsValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentEnvVarsValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentEnvVarsValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentEnvVarsValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentEnvVarsValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentExtraVolumeMounts { + pub destination: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub source: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterAws { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub account_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ami_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub az: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ec2_instance_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ec2_instance_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub imds_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub private_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vpc_id: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterGrep { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Exclude")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "LogicalOp")] + pub logical_op: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Regex")] + pub regex: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentFilterGrepLogicalOp { + #[serde(rename = "legacy")] + Legacy, + #[serde(rename = "AND")] + And, + #[serde(rename = "OR")] + Or, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterKubernetes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Annotations")] + pub annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Size")] + pub buffer_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Cache_Use_Docker_Id")] + pub cache_use_docker_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DNS_Retries")] + pub dns_retries: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DNS_Wait_Time")] + pub dns_wait_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Dummy_Meta")] + pub dummy_meta: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "K8S-Logging.Exclude")] + pub k8s_logging_exclude: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "K8S-Logging.Parser")] + pub k8s_logging_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Keep_Log")] + pub keep_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_CA_File")] + pub kube_ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_CA_Path")] + pub kube_ca_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Meta_Cache_TTL")] + pub kube_meta_cache_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Tag_Prefix")] + pub kube_tag_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Token_File")] + pub kube_token_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Token_TTL")] + pub kube_token_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_URL")] + pub kube_url: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_meta_preload_cache_dir")] + pub kube_meta_preload_cache_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kubelet_Port")] + pub kubelet_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Labels")] + pub labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log")] + pub merge_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log_Key")] + pub merge_log_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log_Trim")] + pub merge_log_trim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Parser")] + pub merge_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Regex_Parser")] + pub regex_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Use_Journal")] + pub use_journal: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Use_Kubelet")] + pub use_kubelet: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kube_meta_namespace_cache_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tls.debug")] + pub tls_debug: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tls.verify")] + pub tls_verify: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModify { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rules: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "A_key_matches")] + pub a_key_matches: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_does_not_exist")] + pub key_does_not_exist: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_exists")] + pub key_exists: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_does_not_equal")] + pub key_value_does_not_equal: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_does_not_match")] + pub key_value_does_not_match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_equals")] + pub key_value_equals: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_matches")] + pub key_value_matches: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Matching_keys_do_not_have_matching_values")] + pub matching_keys_do_not_have_matching_values: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Matching_keys_have_matching_values")] + pub matching_keys_have_matching_values: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "No_key_matches")] + pub no_key_matches: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsAKeyMatches { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsKeyDoesNotExist { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsKeyExists { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsKeyValueDoesNotEqual { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsKeyValueDoesNotMatch { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsKeyValueEquals { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsKeyValueMatches { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsMatchingKeysDoNotHaveMatchingValues { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsMatchingKeysHaveMatchingValues { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyConditionsNoKeyMatches { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRules { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Add")] + pub add: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Copy")] + pub copy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Hard_copy")] + pub hard_copy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Hard_rename")] + pub hard_rename: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Remove")] + pub remove: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Remove_regex")] + pub remove_regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Remove_wildcard")] + pub remove_wildcard: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Rename")] + pub rename: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Set")] + pub set: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesAdd { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesCopy { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesHardCopy { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesHardRename { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesRemove { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesRemoveRegex { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesRemoveWildcard { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesRename { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentFilterModifyRulesSet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentForwardOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Require_ack_response")] + pub require_ack_response: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Retry_Limit")] + pub retry_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Send_options")] + pub send_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Time_as_Integer")] + pub time_as_integer: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Workers")] + pub workers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.total_limit_size")] + pub storage_total_limit_size: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentHealthCheck { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hcErrorsCount")] + pub hc_errors_count: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hcPeriod")] + pub hc_period: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hcRetryFailureCount")] + pub hc_retry_failure_count: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentInputTail { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Chunk_Size")] + pub buffer_chunk_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Max_Size")] + pub buffer_max_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB")] + pub db: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB.journal_mode")] + pub db_journal_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB.locking")] + pub db_locking: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB_Sync")] + pub db_sync: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode")] + pub docker_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode_Flush")] + pub docker_mode_flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode_Parser")] + pub docker_mode_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Exclude_Path")] + pub exclude_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Ignore_Older")] + pub ignore_older: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Mem_Buf_Limit")] + pub mem_buf_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Multiline")] + pub multiline: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Multiline_Flush")] + pub multiline_flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser_Firstline")] + pub parser_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser_N")] + pub parser_n: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Path")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Path_Key")] + pub path_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Read_From_Head")] + pub read_from_head: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Refresh_Interval")] + pub refresh_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Rotate_Wait")] + pub rotate_wait: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Skip_Long_Lines")] + pub skip_long_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag_Regex")] + pub tag_regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "multiline.parser")] + pub multiline_parser: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.pause_on_chunks_overlimit")] + pub storage_pause_on_chunks_overlimit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.type")] + pub storage_type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum FluentbitAgentMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentNetwork { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "connectTimeout")] + pub connect_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "connectTimeoutLogError")] + pub connect_timeout_log_error: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsMode")] + pub dns_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPreferIpv4")] + pub dns_prefer_ipv4: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsResolver")] + pub dns_resolver: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keepalive: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepaliveIdleTimeout")] + pub keepalive_idle_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepaliveMaxRecycle")] + pub keepalive_max_recycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxWorkerConnections")] + pub max_worker_connections: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceAddress")] + pub source_address: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDb { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbPvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositionDbSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondb { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbPvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentPositiondbSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "createOpenShiftSCC")] + pub create_open_shift_scc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityContext")] + pub pod_security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityPolicyCreate")] + pub pod_security_policy_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "roleBasedAccessControlCreate")] + pub role_based_access_control_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurityPodSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurityPodSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurityPodSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurityPodSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurityPodSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecurityPodSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecuritySecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecuritySecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecuritySecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecuritySecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecuritySecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSecuritySecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentServiceAccount { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentServiceAccountImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentServiceAccountMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentSyslogngOutput { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Retry_Limit")] + pub retry_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Workers")] + pub workers: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub json_date_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub json_date_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentTls { + pub enabled: bool, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sharedKey")] + pub shared_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentUpdateStrategy { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentUpdateStrategyRollingUpdate { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct FluentbitAgentStatus { +} + diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/loggings.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/loggings.rs new file mode 100644 index 000000000..506d26c78 --- /dev/null +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/loggings.rs @@ -0,0 +1,14335 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/loggings.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::api::core::v1::ObjectReference; +} +use self::prelude::*; + +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "logging.banzaicloud.io", version = "v1beta1", kind = "Logging", plural = "loggings")] +#[kube(status = "LoggingStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct LoggingSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowClusterResourcesFromAllNamespaces")] + pub allow_cluster_resources_from_all_namespaces: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterDomain")] + pub cluster_domain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheck")] + pub config_check: Option, + #[serde(rename = "controlNamespace")] + pub control_namespace: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultFlow")] + pub default_flow: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableDockerParserCompatibilityForCRI")] + pub enable_docker_parser_compatibility_for_cri: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableRecreateWorkloadOnImmutableFieldChange")] + pub enable_recreate_workload_on_immutable_field_change: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "errorOutputRef")] + pub error_output_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flowConfigCheckDisabled")] + pub flow_config_check_disabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flowConfigOverride")] + pub flow_config_override: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub fluentbit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub fluentd: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "globalFilters")] + pub global_filters: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loggingRef")] + pub logging_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "routeConfig")] + pub route_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "skipInvalidResources")] + pub skip_invalid_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "syslogNG")] + pub syslog_ng: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "watchNamespaceSelector")] + pub watch_namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "watchNamespaces")] + pub watch_namespaces: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingConfigCheck { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub strategy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlow { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub filters: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flowLabel")] + pub flow_label: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "globalOutputRefs")] + pub global_output_refs: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "includeLabelInRouter")] + pub include_label_in_router: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "outputRefs")] + pub output_refs: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFilters { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub concat: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dedot: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "detectExceptions")] + pub detect_exceptions: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub elasticsearch_genid: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grep: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kube_events_timestamp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prometheus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record_modifier: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record_transformer: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdout: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag_normaliser: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub throttle: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub useragent: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersConcat { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub continuous_line_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_partial_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_partial_metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_end_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub n_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_cri_logtag_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_cri_stream_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_metadata_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_value: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stream_identity_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout_label: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_first_timestamp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_partial_cri_logtag: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_partial_metadata: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersDedot { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub de_dot_nested: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub de_dot_separator: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersDetectExceptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub force_line_breaks: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub languages: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub match_tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_bytes: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub message: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_flush_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_tag_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stream: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersElasticsearchGenid { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hash_id_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hash_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub include_tag_in_seed: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub include_time_in_seed: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_entire_record: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_record_as_seed: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGeoip { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub backend_library: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip2_database: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip_database: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip_lookup_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub records: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub skip_adding_null_record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrep { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub and: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub or: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regexp: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepAnd { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regexp: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepAndExclude { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepAndRegexp { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepExclude { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepOr { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regexp: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepOrExclude { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepOrRegexp { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersGrepRegexp { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersKubeEventsTimestamp { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mapped_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timestamp_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParser { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub emit_invalid_record_to_error: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hash_value_field: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub inject_key_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parse: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parsers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_key_name_field: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replace_invalid_sequence: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reserve_data: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reserve_time: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParse { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub label_delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParseCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParseCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParseCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParseCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParseCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParseGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatternsCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatternsCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatternsCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatternsCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatternsCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsePatternsGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub label_delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatternsCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatternsCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatternsCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatternsCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatternsCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersParserParsersPatternsGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersPrometheus { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersPrometheusMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub buckets: Option, + pub desc: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + pub name: String, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersRecordModifier { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub char_encoding: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prepare_value: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub records: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replaces: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub whitelist_keys: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersRecordModifierReplaces { + pub expression: String, + pub key: String, + pub replace: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersRecordTransformer { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub auto_typecast: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enable_ruby: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub records: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub renew_record: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub renew_time_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersStdout { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub output_type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersTagNormaliser { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub match_tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersThrottle { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_bucket_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_bucket_period_s: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_drop_logs: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_reset_rate_s: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_warning_delay_s: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingDefaultFlowFiltersUseragent { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delete_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flatten: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub out_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbit { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "HostNetwork")] + pub host_network: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorage")] + pub buffer_storage: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorageVolume")] + pub buffer_storage_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeArgs")] + pub buffer_volume_args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeImage")] + pub buffer_volume_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeLivenessProbe")] + pub buffer_volume_liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetrics")] + pub buffer_volume_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeResources")] + pub buffer_volume_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configHotReload")] + pub config_hot_reload: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "coroStackSize")] + pub coro_stack_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customConfigSecret")] + pub custom_config_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customParsers")] + pub custom_parsers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "daemonsetAnnotations")] + pub daemonset_annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableKubernetesFilter")] + pub disable_kubernetes_filter: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableVarLibDockerContainers")] + pub disable_var_lib_docker_containers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableVarLog")] + pub disable_var_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableUpstream")] + pub enable_upstream: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enabledIPv6")] + pub enabled_i_pv6: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envVars")] + pub env_vars: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraVolumeMounts")] + pub extra_volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterAws")] + pub filter_aws: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterGrep")] + pub filter_grep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterKubernetes")] + pub filter_kubernetes: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterModify")] + pub filter_modify: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceHotReloadAfterGrace")] + pub force_hot_reload_after_grace: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forwardOptions")] + pub forward_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grace: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheck")] + pub health_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "inputTail")] + pub input_tail: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessDefaultCheck")] + pub liveness_default_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loggingRef")] + pub logging_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPath")] + pub mount_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub network: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podPriorityClassName")] + pub pod_priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub position_db: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub positiondb: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub security: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub syslogng_output: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetHost")] + pub target_host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: LoggingFluentbitAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.backlog.mem_limit")] + pub storage_backlog_mem_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.checksum")] + pub storage_checksum: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.delete_irrecoverable_chunks")] + pub storage_delete_irrecoverable_chunks: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.max_chunks_up")] + pub storage_max_chunks_up: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.metrics")] + pub storage_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.path")] + pub storage_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.sync")] + pub storage_sync: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumeConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumeConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumeEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumeHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumePvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumeSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferStorageVolumeSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitBufferVolumeMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitBufferVolumeResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitConfigHotReload { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitConfigHotReloadImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitConfigHotReloadImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitConfigHotReloadResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitConfigHotReloadResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitDnsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitDnsConfigOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitEnvVars { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitEnvVarsValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitEnvVarsValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitEnvVarsValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitEnvVarsValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitEnvVarsValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitExtraVolumeMounts { + pub destination: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub source: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterAws { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub account_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ami_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub az: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ec2_instance_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ec2_instance_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub imds_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub private_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vpc_id: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterGrep { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Exclude")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "LogicalOp")] + pub logical_op: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Regex")] + pub regex: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitFilterGrepLogicalOp { + #[serde(rename = "legacy")] + Legacy, + #[serde(rename = "AND")] + And, + #[serde(rename = "OR")] + Or, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterKubernetes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Annotations")] + pub annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Size")] + pub buffer_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Cache_Use_Docker_Id")] + pub cache_use_docker_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DNS_Retries")] + pub dns_retries: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DNS_Wait_Time")] + pub dns_wait_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Dummy_Meta")] + pub dummy_meta: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "K8S-Logging.Exclude")] + pub k8s_logging_exclude: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "K8S-Logging.Parser")] + pub k8s_logging_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Keep_Log")] + pub keep_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_CA_File")] + pub kube_ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_CA_Path")] + pub kube_ca_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Meta_Cache_TTL")] + pub kube_meta_cache_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Tag_Prefix")] + pub kube_tag_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Token_File")] + pub kube_token_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Token_TTL")] + pub kube_token_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_URL")] + pub kube_url: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_meta_preload_cache_dir")] + pub kube_meta_preload_cache_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kubelet_Port")] + pub kubelet_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Labels")] + pub labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log")] + pub merge_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log_Key")] + pub merge_log_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log_Trim")] + pub merge_log_trim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Parser")] + pub merge_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Regex_Parser")] + pub regex_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Use_Journal")] + pub use_journal: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Use_Kubelet")] + pub use_kubelet: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kube_meta_namespace_cache_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tls.debug")] + pub tls_debug: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tls.verify")] + pub tls_verify: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModify { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rules: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "A_key_matches")] + pub a_key_matches: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_does_not_exist")] + pub key_does_not_exist: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_exists")] + pub key_exists: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_does_not_equal")] + pub key_value_does_not_equal: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_does_not_match")] + pub key_value_does_not_match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_equals")] + pub key_value_equals: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key_value_matches")] + pub key_value_matches: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Matching_keys_do_not_have_matching_values")] + pub matching_keys_do_not_have_matching_values: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Matching_keys_have_matching_values")] + pub matching_keys_have_matching_values: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "No_key_matches")] + pub no_key_matches: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsAKeyMatches { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsKeyDoesNotExist { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsKeyExists { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsKeyValueDoesNotEqual { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsKeyValueDoesNotMatch { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsKeyValueEquals { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsKeyValueMatches { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsMatchingKeysDoNotHaveMatchingValues { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsMatchingKeysHaveMatchingValues { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyConditionsNoKeyMatches { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRules { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Add")] + pub add: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Copy")] + pub copy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Hard_copy")] + pub hard_copy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Hard_rename")] + pub hard_rename: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Remove")] + pub remove: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Remove_regex")] + pub remove_regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Remove_wildcard")] + pub remove_wildcard: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Rename")] + pub rename: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Set")] + pub set: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesAdd { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesCopy { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesHardCopy { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesHardRename { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesRemove { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesRemoveRegex { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesRemoveWildcard { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesRename { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitFilterModifyRulesSet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitForwardOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Require_ack_response")] + pub require_ack_response: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Retry_Limit")] + pub retry_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Send_options")] + pub send_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Time_as_Integer")] + pub time_as_integer: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Workers")] + pub workers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.total_limit_size")] + pub storage_total_limit_size: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitHealthCheck { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hcErrorsCount")] + pub hc_errors_count: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hcPeriod")] + pub hc_period: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hcRetryFailureCount")] + pub hc_retry_failure_count: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitInputTail { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Chunk_Size")] + pub buffer_chunk_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Max_Size")] + pub buffer_max_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB")] + pub db: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB.journal_mode")] + pub db_journal_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB.locking")] + pub db_locking: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB_Sync")] + pub db_sync: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode")] + pub docker_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode_Flush")] + pub docker_mode_flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode_Parser")] + pub docker_mode_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Exclude_Path")] + pub exclude_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Ignore_Older")] + pub ignore_older: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Mem_Buf_Limit")] + pub mem_buf_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Multiline")] + pub multiline: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Multiline_Flush")] + pub multiline_flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser_Firstline")] + pub parser_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser_N")] + pub parser_n: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Path")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Path_Key")] + pub path_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Read_From_Head")] + pub read_from_head: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Refresh_Interval")] + pub refresh_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Rotate_Wait")] + pub rotate_wait: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Skip_Long_Lines")] + pub skip_long_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag_Regex")] + pub tag_regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "multiline.parser")] + pub multiline_parser: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.pause_on_chunks_overlimit")] + pub storage_pause_on_chunks_overlimit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.type")] + pub storage_type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentbitMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitNetwork { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "connectTimeout")] + pub connect_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "connectTimeoutLogError")] + pub connect_timeout_log_error: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsMode")] + pub dns_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPreferIpv4")] + pub dns_prefer_ipv4: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsResolver")] + pub dns_resolver: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keepalive: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepaliveIdleTimeout")] + pub keepalive_idle_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepaliveMaxRecycle")] + pub keepalive_max_recycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxWorkerConnections")] + pub max_worker_connections: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceAddress")] + pub source_address: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDb { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbPvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositionDbSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondb { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbPvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitPositiondbSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "createOpenShiftSCC")] + pub create_open_shift_scc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityContext")] + pub pod_security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityPolicyCreate")] + pub pod_security_policy_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "roleBasedAccessControlCreate")] + pub role_based_access_control_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurityPodSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurityPodSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurityPodSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurityPodSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurityPodSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecurityPodSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecuritySecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecuritySecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecuritySecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecuritySecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecuritySecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSecuritySecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitServiceAccount { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitServiceAccountImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitServiceAccountMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitSyslogngOutput { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Retry_Limit")] + pub retry_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Workers")] + pub workers: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub json_date_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub json_date_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitTls { + pub enabled: bool, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sharedKey")] + pub shared_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitUpdateStrategy { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentbitUpdateStrategyRollingUpdate { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentd { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorageVolume")] + pub buffer_storage_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeArgs")] + pub buffer_volume_args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeImage")] + pub buffer_volume_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeLivenessProbe")] + pub buffer_volume_liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetrics")] + pub buffer_volume_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeResources")] + pub buffer_volume_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressConfigFile")] + pub compress_config_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheck")] + pub config_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheckAnnotations")] + pub config_check_annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheckResources")] + pub config_check_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderImage")] + pub config_reloader_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderResources")] + pub config_reloader_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderUseGracefulReloadWebhook")] + pub config_reloader_use_graceful_reload_webhook: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disablePvc")] + pub disable_pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableMsgpackTimeSupport")] + pub enable_msgpack_time_support: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enabledIPv6")] + pub enabled_i_pv6: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envVars")] + pub env_vars: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraVolumes")] + pub extra_volumes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fluentLogDestination")] + pub fluent_log_destination: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fluentOutLogrotate")] + pub fluent_out_logrotate: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fluentdPvcSpec")] + pub fluentd_pvc_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forwardInputConfig")] + pub forward_input_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreRepeatedLogInterval")] + pub ignore_repeated_log_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreSameLogInterval")] + pub ignore_same_log_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessDefaultCheck")] + pub liveness_default_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pdb: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podPriorityClassName")] + pub pod_priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessDefaultCheck")] + pub readiness_default_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rootDir")] + pub root_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scaling: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub security: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sidecarContainers")] + pub sidecar_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "statefulsetAnnotations")] + pub statefulset_annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeModImage")] + pub volume_mod_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMountChmod")] + pub volume_mount_chmod: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub workers: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: LoggingFluentdAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumeConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumeConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumeEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumeHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumePvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumeSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferStorageVolumeSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdBufferVolumeMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdBufferVolumeMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdBufferVolumeMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdBufferVolumeResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigCheck { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub strategy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigCheckResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigCheckResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigReloaderImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigReloaderImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigReloaderResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdConfigReloaderResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdDnsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdDnsConfigOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdEnvVars { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdEnvVarsValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdEnvVarsValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdEnvVarsValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdEnvVarsValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdEnvVarsValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumeConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumeConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumeEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumeHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumePvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumeSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdExtraVolumesVolumeSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentOutLogrotate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub age: Option, + pub enabled: bool, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub size: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecPvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdFluentdPvcSpecSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdForwardInputConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add_tag_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub bind: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub chunk_size_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub chunk_size_warn_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub deny_keepalive: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub linger_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resolve_hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub security: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub send_keepalive_packet: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub skip_invalid_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceHostnameKey")] + pub source_hostname_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source_address_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub transport: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdForwardInputConfigSecurity { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub allow_anonymous_source: Option, + pub self_hostname: String, + pub shared_key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user_auth: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdForwardInputConfigTransport { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca_cert_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca_private_key_passphrase: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca_private_key_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ciphers: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_cert_auth: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub insecure: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub private_key_passphrase: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub private_key_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub version: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingFluentdMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdPdb { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "unhealthyPodEvictionPolicy")] + pub unhealthy_pod_eviction_policy: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessDefaultCheck { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFileNumber")] + pub buffer_file_number: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFileNumberMax")] + pub buffer_file_number_max: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFreeSpace")] + pub buffer_free_space: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFreeSpaceThreshold")] + pub buffer_free_space_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScaling { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podManagementPolicy")] + pub pod_management_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replicas: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrain { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "deleteVolume")] + pub delete_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pauseImage")] + pub pause_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainPauseImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainPauseImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdScalingDrainSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "createOpenShiftSCC")] + pub create_open_shift_scc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityContext")] + pub pod_security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityPolicyCreate")] + pub pod_security_policy_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "roleBasedAccessControlCreate")] + pub role_based_access_control_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurityPodSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurityPodSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurityPodSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurityPodSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurityPodSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecurityPodSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecuritySecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecuritySecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecuritySecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecuritySecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecuritySecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSecuritySecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdServiceAccount { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdServiceAccountImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdServiceAccountMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdSidecarContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdTls { + pub enabled: bool, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sharedKey")] + pub shared_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdTopologySpreadConstraints { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(rename = "maxSkew")] + pub max_skew: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minDomains")] + pub min_domains: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinityPolicy")] + pub node_affinity_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeTaintsPolicy")] + pub node_taints_policy: Option, + #[serde(rename = "topologyKey")] + pub topology_key: String, + #[serde(rename = "whenUnsatisfiable")] + pub when_unsatisfiable: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdTopologySpreadConstraintsLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdTopologySpreadConstraintsLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdVolumeModImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingFluentdVolumeModImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFilters { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub concat: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dedot: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "detectExceptions")] + pub detect_exceptions: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub elasticsearch_genid: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grep: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kube_events_timestamp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prometheus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record_modifier: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record_transformer: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdout: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag_normaliser: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub throttle: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub useragent: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersConcat { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub continuous_line_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_partial_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_partial_metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_end_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub n_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_cri_logtag_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_cri_stream_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_metadata_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partial_value: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stream_identity_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout_label: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_first_timestamp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_partial_cri_logtag: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_partial_metadata: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersDedot { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub de_dot_nested: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub de_dot_separator: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersDetectExceptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub force_line_breaks: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub languages: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub match_tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_bytes: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub message: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_flush_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_tag_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stream: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersElasticsearchGenid { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hash_id_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hash_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub include_tag_in_seed: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub include_time_in_seed: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_entire_record: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub use_record_as_seed: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGeoip { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub backend_library: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip2_database: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip_database: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub geoip_lookup_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub records: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub skip_adding_null_record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrep { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub and: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub or: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regexp: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepAnd { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regexp: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepAndExclude { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepAndRegexp { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepExclude { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepOr { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exclude: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regexp: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepOrExclude { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepOrRegexp { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersGrepRegexp { + pub key: String, + pub pattern: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersKubeEventsTimestamp { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mapped_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timestamp_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParser { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub emit_invalid_record_to_error: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hash_value_field: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub inject_key_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parse: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub parsers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_key_name_field: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replace_invalid_sequence: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reserve_data: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reserve_time: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParse { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub label_delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParseCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParseCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParseCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParseCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParseCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParseGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatternsCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatternsCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatternsCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatternsCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatternsCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsePatternsGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delimiter_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub label_delimiter: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub custom_pattern_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub estimate_current_event: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expression: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_failure_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_name_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grok_patterns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub local_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub multiline_start_regexp: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_empty_string: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub null_value_pattern: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub types: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub utc: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatternsCustomPatternPath { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountFrom")] + pub mount_from: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatternsCustomPatternPathMountFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatternsCustomPatternPathMountFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatternsCustomPatternPathValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatternsCustomPatternPathValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersParserParsersPatternsGrokPatterns { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + pub pattern: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub time_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timezone: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersPrometheus { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersPrometheusMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub buckets: Option, + pub desc: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + pub name: String, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersRecordModifier { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub char_encoding: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prepare_value: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub records: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replaces: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub whitelist_keys: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersRecordModifierReplaces { + pub expression: String, + pub key: String, + pub replace: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersRecordTransformer { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub auto_typecast: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enable_ruby: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub records: Option>>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub remove_keys: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub renew_record: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub renew_time_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersStdout { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub output_type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersTagNormaliser { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub match_tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersThrottle { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_bucket_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_bucket_period_s: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_drop_logs: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_reset_rate_s: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group_warning_delay_s: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingGlobalFiltersUseragent { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub delete_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flatten: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub out_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingRouteConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableLoggingRoute")] + pub disable_logging_route: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableTelemetryControllerRoute")] + pub enable_telemetry_controller_route: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantLabels")] + pub tenant_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNg { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetrics")] + pub buffer_volume_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetricsImage")] + pub buffer_volume_metrics_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetricsLivenessProbe")] + pub buffer_volume_metrics_liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetricsResources")] + pub buffer_volume_metrics_resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferVolumeMetricsService")] + pub buffer_volume_metrics_service: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheck")] + pub config_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheckPod")] + pub config_check_pod: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloadImage")] + pub config_reload_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "globalOptions")] + pub global_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "jsonKeyDelim")] + pub json_key_delim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "jsonKeyPrefix")] + pub json_key_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logIWSize")] + pub log_iw_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxConnections")] + pub max_connections: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricsExporterImage")] + pub metrics_exporter_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricsService")] + pub metrics_service: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessDefaultCheck")] + pub readiness_default_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "skipRBACCreate")] + pub skip_rbac_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceDateParser")] + pub source_date_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceMetrics")] + pub source_metrics: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "statefulSet")] + pub stateful_set: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "syslogNGImage")] + pub syslog_ng_image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mount_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgBufferVolumeMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsImage { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsService { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocateLoadBalancerNodePorts")] + pub allocate_load_balancer_node_ports: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIP")] + pub cluster_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIPs")] + pub cluster_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalIPs")] + pub external_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalName")] + pub external_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalTrafficPolicy")] + pub external_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheckNodePort")] + pub health_check_node_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "internalTrafficPolicy")] + pub internal_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilies")] + pub ip_families: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilyPolicy")] + pub ip_family_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerClass")] + pub load_balancer_class: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerIP")] + pub load_balancer_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerSourceRanges")] + pub load_balancer_source_ranges: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "publishNotReadyAddresses")] + pub publish_not_ready_addresses: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinity")] + pub session_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinityConfig")] + pub session_affinity_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "trafficDistribution")] + pub traffic_distribution: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceSpecPorts { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appProtocol")] + pub app_protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePort")] + pub node_port: Option, + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceSpecSessionAffinityConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientIP")] + pub client_ip: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgBufferVolumeMetricsServiceSpecSessionAffinityConfigClientIp { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheck { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub strategy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPod { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "activeDeadlineSeconds")] + pub active_deadline_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableServiceLinks")] + pub enable_service_links: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ephemeralContainers")] + pub ephemeral_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIPC")] + pub host_ipc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPID")] + pub host_pid: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeName")] + pub node_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub overhead: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preemptionPolicy")] + pub preemption_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub priority: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "setHostnameAsFQDN")] + pub set_hostname_as_fqdn: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "shareProcessNamespace")] + pub share_process_namespace: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub subdomain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: LoggingSyslogNgConfigCheckPodAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodDnsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodDnsConfigOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetContainerName")] + pub target_container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodEphemeralContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodHostAliases { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + pub ip: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodInitContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodReadinessGates { + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodTopologySpreadConstraints { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(rename = "maxSkew")] + pub max_skew: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minDomains")] + pub min_domains: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinityPolicy")] + pub node_affinity_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeTaintsPolicy")] + pub node_taints_policy: Option, + #[serde(rename = "topologyKey")] + pub topology_key: String, + #[serde(rename = "whenUnsatisfiable")] + pub when_unsatisfiable: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodTopologySpreadConstraintsLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodTopologySpreadConstraintsLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "awsElasticBlockStore")] + pub aws_elastic_block_store: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureDisk")] + pub azure_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureFile")] + pub azure_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cephfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cinder: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub csi: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ephemeral: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub fc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flexVolume")] + pub flex_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flocker: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gcePersistentDisk")] + pub gce_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitRepo")] + pub git_repo: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub glusterfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub iscsi: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaim")] + pub persistent_volume_claim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "photonPersistentDisk")] + pub photon_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "portworxVolume")] + pub portworx_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub projected: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub quobyte: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rbd: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scaleIO")] + pub scale_io: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storageos: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vsphereVolume")] + pub vsphere_volume: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesAwsElasticBlockStore { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesAzureDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMode")] + pub caching_mode: Option, + #[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, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesAzureFile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretName")] + pub secret_name: String, + #[serde(rename = "shareName")] + pub share_name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesCephfs { + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretFile")] + pub secret_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesCephfsSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesCinder { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesCinderSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesCsi { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePublishSecretRef")] + pub node_publish_secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributes")] + pub volume_attributes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesCsiNodePublishSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeral { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + pub spec: LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateMetadata { +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesEphemeralVolumeClaimTemplateSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesFc { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lun: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetWWNs")] + pub target_ww_ns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub wwids: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesFlexVolume { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesFlexVolumeSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesFlocker { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetName")] + pub dataset_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetUUID")] + pub dataset_uuid: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesGcePersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(rename = "pdName")] + pub pd_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesGitRepo { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub directory: Option, + pub repository: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub revision: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesGlusterfs { + pub endpoints: String, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reference: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesIscsi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthDiscovery")] + pub chap_auth_discovery: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthSession")] + pub chap_auth_session: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initiatorName")] + pub initiator_name: Option, + pub iqn: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "iscsiInterface")] + pub iscsi_interface: Option, + pub lun: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub portals: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "targetPortal")] + pub target_portal: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesIscsiSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesNfs { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub server: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesPersistentVolumeClaim { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesPhotonPersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(rename = "pdID")] + pub pd_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesPortworxVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjected { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sources: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSources { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterTrustBundle")] + pub cluster_trust_bundle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountToken")] + pub service_account_token: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesClusterTrustBundle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "signerName")] + pub signer_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesClusterTrustBundleLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesClusterTrustBundleLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesSecret { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesProjectedSourcesServiceAccountToken { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub audience: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "expirationSeconds")] + pub expiration_seconds: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesQuobyte { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub registry: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tenant: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, + pub volume: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesRbd { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub image: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keyring: Option, + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pool: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesRbdSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesScaleIo { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub gateway: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "protectionDomain")] + pub protection_domain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretRef")] + pub secret_ref: LoggingSyslogNgConfigCheckPodVolumesScaleIoSecretRef, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sslEnabled")] + pub ssl_enabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMode")] + pub storage_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePool")] + pub storage_pool: Option, + pub system: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesScaleIoSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesStorageos { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeNamespace")] + pub volume_namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesStorageosSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigCheckPodVolumesVsphereVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyID")] + pub storage_policy_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyName")] + pub storage_policy_name: Option, + #[serde(rename = "volumePath")] + pub volume_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgConfigReloadImage { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgGlobalOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub log_level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stats: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stats_freq: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stats_level: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgGlobalOptionsStats { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub freq: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum LoggingSyslogNgMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsExporterImage { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsService { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocateLoadBalancerNodePorts")] + pub allocate_load_balancer_node_ports: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIP")] + pub cluster_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIPs")] + pub cluster_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalIPs")] + pub external_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalName")] + pub external_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalTrafficPolicy")] + pub external_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheckNodePort")] + pub health_check_node_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "internalTrafficPolicy")] + pub internal_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilies")] + pub ip_families: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilyPolicy")] + pub ip_family_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerClass")] + pub load_balancer_class: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerIP")] + pub load_balancer_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerSourceRanges")] + pub load_balancer_source_ranges: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "publishNotReadyAddresses")] + pub publish_not_ready_addresses: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinity")] + pub session_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinityConfig")] + pub session_affinity_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "trafficDistribution")] + pub traffic_distribution: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceSpecPorts { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appProtocol")] + pub app_protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePort")] + pub node_port: Option, + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceSpecSessionAffinityConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientIP")] + pub client_ip: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgMetricsServiceSpecSessionAffinityConfigClientIp { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgReadinessDefaultCheck { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFileNumber")] + pub buffer_file_number: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFileNumberMax")] + pub buffer_file_number_max: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFreeSpace")] + pub buffer_free_space: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferFreeSpaceThreshold")] + pub buffer_free_space_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgService { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocateLoadBalancerNodePorts")] + pub allocate_load_balancer_node_ports: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIP")] + pub cluster_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIPs")] + pub cluster_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalIPs")] + pub external_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalName")] + pub external_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalTrafficPolicy")] + pub external_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheckNodePort")] + pub health_check_node_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "internalTrafficPolicy")] + pub internal_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilies")] + pub ip_families: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilyPolicy")] + pub ip_family_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerClass")] + pub load_balancer_class: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerIP")] + pub load_balancer_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerSourceRanges")] + pub load_balancer_source_ranges: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "publishNotReadyAddresses")] + pub publish_not_ready_addresses: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinity")] + pub session_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinityConfig")] + pub session_affinity_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "trafficDistribution")] + pub traffic_distribution: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceSpecPorts { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appProtocol")] + pub app_protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePort")] + pub node_port: Option, + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceSpecSessionAffinityConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientIP")] + pub client_ip: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceSpecSessionAffinityConfigClientIp { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceAccount { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceAccountImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgServiceAccountMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgSourceDateParser { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub format: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub template: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgSourceMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podManagementPolicy")] + pub pod_management_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replicas: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimit")] + pub revision_history_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceName")] + pub service_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub template: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplates")] + pub volume_claim_templates: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "activeDeadlineSeconds")] + pub active_deadline_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableServiceLinks")] + pub enable_service_links: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ephemeralContainers")] + pub ephemeral_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIPC")] + pub host_ipc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPID")] + pub host_pid: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeName")] + pub node_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub overhead: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preemptionPolicy")] + pub preemption_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub priority: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "setHostnameAsFQDN")] + pub set_hostname_as_fqdn: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "shareProcessNamespace")] + pub share_process_namespace: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub subdomain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecDnsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecDnsConfigOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetContainerName")] + pub target_container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecEphemeralContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecHostAliases { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + pub ip: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecInitContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecReadinessGates { + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecTopologySpreadConstraints { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(rename = "maxSkew")] + pub max_skew: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minDomains")] + pub min_domains: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinityPolicy")] + pub node_affinity_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeTaintsPolicy")] + pub node_taints_policy: Option, + #[serde(rename = "topologyKey")] + pub topology_key: String, + #[serde(rename = "whenUnsatisfiable")] + pub when_unsatisfiable: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecTopologySpreadConstraintsLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecTopologySpreadConstraintsLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "awsElasticBlockStore")] + pub aws_elastic_block_store: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureDisk")] + pub azure_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureFile")] + pub azure_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cephfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cinder: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub csi: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ephemeral: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub fc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flexVolume")] + pub flex_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flocker: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gcePersistentDisk")] + pub gce_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitRepo")] + pub git_repo: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub glusterfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub iscsi: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaim")] + pub persistent_volume_claim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "photonPersistentDisk")] + pub photon_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "portworxVolume")] + pub portworx_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub projected: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub quobyte: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rbd: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scaleIO")] + pub scale_io: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storageos: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vsphereVolume")] + pub vsphere_volume: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesAwsElasticBlockStore { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesAzureDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMode")] + pub caching_mode: Option, + #[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, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesAzureFile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretName")] + pub secret_name: String, + #[serde(rename = "shareName")] + pub share_name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesCephfs { + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretFile")] + pub secret_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesCephfsSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesCinder { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesCinderSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesCsi { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePublishSecretRef")] + pub node_publish_secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributes")] + pub volume_attributes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesCsiNodePublishSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeral { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + pub spec: LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateMetadata { +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesFc { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lun: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetWWNs")] + pub target_ww_ns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub wwids: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesFlexVolume { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesFlexVolumeSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesFlocker { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetName")] + pub dataset_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetUUID")] + pub dataset_uuid: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesGcePersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(rename = "pdName")] + pub pd_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesGitRepo { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub directory: Option, + pub repository: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub revision: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesGlusterfs { + pub endpoints: String, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reference: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesIscsi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthDiscovery")] + pub chap_auth_discovery: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthSession")] + pub chap_auth_session: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initiatorName")] + pub initiator_name: Option, + pub iqn: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "iscsiInterface")] + pub iscsi_interface: Option, + pub lun: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub portals: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "targetPortal")] + pub target_portal: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesIscsiSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesNfs { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub server: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesPersistentVolumeClaim { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesPhotonPersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(rename = "pdID")] + pub pd_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesPortworxVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjected { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sources: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSources { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterTrustBundle")] + pub cluster_trust_bundle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountToken")] + pub service_account_token: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesClusterTrustBundle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "signerName")] + pub signer_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesClusterTrustBundleLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesClusterTrustBundleLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesSecret { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesProjectedSourcesServiceAccountToken { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub audience: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "expirationSeconds")] + pub expiration_seconds: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesQuobyte { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub registry: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tenant: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, + pub volume: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesRbd { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub image: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keyring: Option, + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pool: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesRbdSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesScaleIo { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub gateway: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "protectionDomain")] + pub protection_domain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretRef")] + pub secret_ref: LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesScaleIoSecretRef, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sslEnabled")] + pub ssl_enabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMode")] + pub storage_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePool")] + pub storage_pool: Option, + pub system: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesScaleIoSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesStorageos { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeNamespace")] + pub volume_namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesStorageosSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecTemplateSpecVolumesVsphereVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyID")] + pub storage_policy_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyName")] + pub storage_policy_name: Option, + #[serde(rename = "volumePath")] + pub volume_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecUpdateStrategy { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecUpdateStrategyRollingUpdate { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplates { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgStatefulSetSpecVolumeClaimTemplatesSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgSyslogNgImage { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingSyslogNgTls { + pub enabled: bool, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sharedKey")] + pub shared_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingWatchNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingWatchNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct LoggingStatus { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configCheckResults")] + pub config_check_results: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fluentdConfigName")] + pub fluentd_config_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub problems: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "problemsCount")] + pub problems_count: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "syslogNGConfigName")] + pub syslog_ng_config_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "watchNamespaces")] + pub watch_namespaces: Option>, +} + diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/mod.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/mod.rs index c4aafef90..9dbc5904a 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/mod.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/mod.rs @@ -1,6 +1,9 @@ pub mod clusterflows; pub mod clusteroutputs; pub mod flows; +pub mod fluentbitagents; +pub mod loggings; +pub mod nodeagents; pub mod outputs; pub mod syslogngclusterflows; pub mod syslogngclusteroutputs; diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/nodeagents.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/nodeagents.rs new file mode 100644 index 000000000..128d7524d --- /dev/null +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/nodeagents.rs @@ -0,0 +1,4236 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/nodeagents.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::api::core::v1::ObjectReference; +} +use self::prelude::*; + +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "logging.banzaicloud.io", version = "v1beta1", kind = "NodeAgent", plural = "nodeagents")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct NodeAgentSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loggingRef")] + pub logging_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAgentFluentbit")] + pub node_agent_fluentbit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub profile: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbit { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorage")] + pub buffer_storage: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bufferStorageVolume")] + pub buffer_storage_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containersPath")] + pub containers_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "coroStackSize")] + pub coro_stack_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customConfigSecret")] + pub custom_config_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "daemonSet")] + pub daemon_set: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableKubernetesFilter")] + pub disable_kubernetes_filter: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableUpstream")] + pub enable_upstream: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraVolumeMounts")] + pub extra_volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterAws")] + pub filter_aws: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterKubernetes")] + pub filter_kubernetes: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forwardOptions")] + pub forward_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grace: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "inputTail")] + pub input_tail: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessDefaultCheck")] + pub liveness_default_check: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricsService")] + pub metrics_service: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub network: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podPriorityClassName")] + pub pod_priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub positiondb: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub security: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetHost")] + pub target_host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "varLogsPath")] + pub var_logs_path: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.backlog.mem_limit")] + pub storage_backlog_mem_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.checksum")] + pub storage_checksum: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.delete_irrecoverable_chunks")] + pub storage_delete_irrecoverable_chunks: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.max_chunks_up")] + pub storage_max_chunks_up: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.metrics")] + pub storage_metrics: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.path")] + pub storage_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.sync")] + pub storage_sync: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumeConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumeConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumeEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumeHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumePvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumeSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitBufferStorageVolumeSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimit")] + pub revision_history_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub template: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "activeDeadlineSeconds")] + pub active_deadline_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableServiceLinks")] + pub enable_service_links: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ephemeralContainers")] + pub ephemeral_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIPC")] + pub host_ipc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPID")] + pub host_pid: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeName")] + pub node_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub overhead: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preemptionPolicy")] + pub preemption_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub priority: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "setHostnameAsFQDN")] + pub set_hostname_as_fqdn: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "shareProcessNamespace")] + pub share_process_namespace: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub subdomain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecDnsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecDnsConfigOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetContainerName")] + pub target_container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecEphemeralContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecHostAliases { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + pub ip: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub env: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "envFrom")] + pub env_from: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullPolicy")] + pub image_pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lifecycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resizePolicy")] + pub resize_policy: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "restartPolicy")] + pub restart_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub stdin: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stdinOnce")] + pub stdin_once: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePath")] + pub termination_message_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationMessagePolicy")] + pub termination_message_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tty: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeDevices")] + pub volume_devices: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")] + pub working_dir: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnv { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvValueFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvValueFromConfigMapKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvValueFromFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvValueFromResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvValueFromSecretKeyRef { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvFrom { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvFromConfigMapRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersEnvFromSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecycle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "postStart")] + pub post_start: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preStop")] + pub pre_stop: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stopSignal")] + pub stop_signal: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePostStart { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePostStartExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePostStartHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePostStartHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePostStartSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePostStartTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePreStop { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sleep: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePreStopExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePreStopHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePreStopHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePreStopSleep { + pub seconds: i64, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLifecyclePreStopTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersPorts { + #[serde(rename = "containerPort")] + pub container_port: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostIP")] + pub host_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPort")] + pub host_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersResizePolicy { + #[serde(rename = "resourceName")] + pub resource_name: String, + #[serde(rename = "restartPolicy")] + pub restart_policy: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersStartupProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersStartupProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersStartupProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersStartupProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersStartupProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersStartupProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersVolumeDevices { + #[serde(rename = "devicePath")] + pub device_path: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecInitContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecReadinessGates { + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecTopologySpreadConstraints { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(rename = "maxSkew")] + pub max_skew: i32, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minDomains")] + pub min_domains: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinityPolicy")] + pub node_affinity_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeTaintsPolicy")] + pub node_taints_policy: Option, + #[serde(rename = "topologyKey")] + pub topology_key: String, + #[serde(rename = "whenUnsatisfiable")] + pub when_unsatisfiable: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecTopologySpreadConstraintsLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecTopologySpreadConstraintsLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "awsElasticBlockStore")] + pub aws_elastic_block_store: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureDisk")] + pub azure_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureFile")] + pub azure_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cephfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cinder: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub csi: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ephemeral: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub fc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flexVolume")] + pub flex_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flocker: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gcePersistentDisk")] + pub gce_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitRepo")] + pub git_repo: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub glusterfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub iscsi: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaim")] + pub persistent_volume_claim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "photonPersistentDisk")] + pub photon_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "portworxVolume")] + pub portworx_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub projected: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub quobyte: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rbd: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scaleIO")] + pub scale_io: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storageos: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vsphereVolume")] + pub vsphere_volume: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesAwsElasticBlockStore { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesAzureDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMode")] + pub caching_mode: Option, + #[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, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesAzureFile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretName")] + pub secret_name: String, + #[serde(rename = "shareName")] + pub share_name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesCephfs { + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretFile")] + pub secret_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesCephfsSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesCinder { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesCinderSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesCsi { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePublishSecretRef")] + pub node_publish_secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributes")] + pub volume_attributes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesCsiNodePublishSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeral { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + pub spec: NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateMetadata { +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesEphemeralVolumeClaimTemplateSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesFc { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lun: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetWWNs")] + pub target_ww_ns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub wwids: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesFlexVolume { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesFlexVolumeSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesFlocker { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetName")] + pub dataset_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetUUID")] + pub dataset_uuid: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesGcePersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(rename = "pdName")] + pub pd_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesGitRepo { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub directory: Option, + pub repository: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub revision: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesGlusterfs { + pub endpoints: String, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reference: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesIscsi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthDiscovery")] + pub chap_auth_discovery: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthSession")] + pub chap_auth_session: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initiatorName")] + pub initiator_name: Option, + pub iqn: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "iscsiInterface")] + pub iscsi_interface: Option, + pub lun: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub portals: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "targetPortal")] + pub target_portal: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesIscsiSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesNfs { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub server: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesPersistentVolumeClaim { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesPhotonPersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(rename = "pdID")] + pub pd_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesPortworxVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjected { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sources: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSources { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterTrustBundle")] + pub cluster_trust_bundle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountToken")] + pub service_account_token: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesClusterTrustBundle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "signerName")] + pub signer_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesClusterTrustBundleLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesClusterTrustBundleLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesSecret { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesProjectedSourcesServiceAccountToken { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub audience: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "expirationSeconds")] + pub expiration_seconds: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesQuobyte { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub registry: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tenant: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, + pub volume: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesRbd { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub image: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keyring: Option, + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pool: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesRbdSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesScaleIo { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub gateway: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "protectionDomain")] + pub protection_domain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretRef")] + pub secret_ref: NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesScaleIoSecretRef, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sslEnabled")] + pub ssl_enabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMode")] + pub storage_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePool")] + pub storage_pool: Option, + pub system: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesScaleIoSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesStorageos { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeNamespace")] + pub volume_namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesStorageosSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecTemplateSpecVolumesVsphereVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyID")] + pub storage_policy_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyName")] + pub storage_policy_name: Option, + #[serde(rename = "volumePath")] + pub volume_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecUpdateStrategy { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitDaemonSetSpecUpdateStrategyRollingUpdate { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitExtraVolumeMounts { + pub destination: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub source: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitFilterAws { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub account_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ami_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub az: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ec2_instance_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ec2_instance_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostname: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub imds_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub private_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vpc_id: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitFilterKubernetes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Annotations")] + pub annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Size")] + pub buffer_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Cache_Use_Docker_Id")] + pub cache_use_docker_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DNS_Retries")] + pub dns_retries: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DNS_Wait_Time")] + pub dns_wait_time: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Dummy_Meta")] + pub dummy_meta: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "K8S-Logging.Exclude")] + pub k8s_logging_exclude: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "K8S-Logging.Parser")] + pub k8s_logging_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Keep_Log")] + pub keep_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_CA_File")] + pub kube_ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_CA_Path")] + pub kube_ca_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Meta_Cache_TTL")] + pub kube_meta_cache_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Tag_Prefix")] + pub kube_tag_prefix: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Token_File")] + pub kube_token_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_Token_TTL")] + pub kube_token_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_URL")] + pub kube_url: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kube_meta_preload_cache_dir")] + pub kube_meta_preload_cache_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Kubelet_Port")] + pub kubelet_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Labels")] + pub labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Match")] + pub r#match: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log")] + pub merge_log: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log_Key")] + pub merge_log_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Log_Trim")] + pub merge_log_trim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Merge_Parser")] + pub merge_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Regex_Parser")] + pub regex_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Use_Journal")] + pub use_journal: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Use_Kubelet")] + pub use_kubelet: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kube_meta_namespace_cache_ttl: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tls.debug")] + pub tls_debug: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tls.verify")] + pub tls_verify: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitForwardOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Require_ack_response")] + pub require_ack_response: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Retry_Limit")] + pub retry_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Send_options")] + pub send_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Time_as_Integer")] + pub time_as_integer: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Workers")] + pub workers: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.total_limit_size")] + pub storage_total_limit_size: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitInputTail { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Chunk_Size")] + pub buffer_chunk_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Buffer_Max_Size")] + pub buffer_max_size: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB")] + pub db: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB.journal_mode")] + pub db_journal_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB.locking")] + pub db_locking: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "DB_Sync")] + pub db_sync: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode")] + pub docker_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode_Flush")] + pub docker_mode_flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Docker_Mode_Parser")] + pub docker_mode_parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Exclude_Path")] + pub exclude_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Ignore_Older")] + pub ignore_older: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Key")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Mem_Buf_Limit")] + pub mem_buf_limit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Multiline")] + pub multiline: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Multiline_Flush")] + pub multiline_flush: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser")] + pub parser: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser_Firstline")] + pub parser_firstline: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Parser_N")] + pub parser_n: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Path")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Path_Key")] + pub path_key: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Read_From_Head")] + pub read_from_head: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Refresh_Interval")] + pub refresh_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Rotate_Wait")] + pub rotate_wait: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Skip_Long_Lines")] + pub skip_long_lines: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag")] + pub tag: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "Tag_Regex")] + pub tag_regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "multiline.parser")] + pub multiline_parser: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.pause_on_chunks_overlimit")] + pub storage_pause_on_chunks_overlimit: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storage.type")] + pub storage_type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetrics { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusAnnotations")] + pub prometheus_annotations: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRules")] + pub prometheus_rules: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "prometheusRulesOverride")] + pub prometheus_rules_override: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitor")] + pub service_monitor: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceMonitorConfig")] + pub service_monitor_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsPrometheusRulesOverride { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub alert: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub expr: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "for")] + pub r#for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_firing_for: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub record: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalLabels")] + pub additional_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "honorLabels")] + pub honor_labels: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricRelabelings")] + pub metric_relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub relabelings: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigMetricRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigMetricRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigRelabelings { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigRelabelingsAction { + #[serde(rename = "replace")] + Replace, + #[serde(rename = "Replace")] + ReplaceX, + #[serde(rename = "keep")] + Keep, + #[serde(rename = "Keep")] + KeepX, + #[serde(rename = "drop")] + Drop, + #[serde(rename = "Drop")] + DropX, + #[serde(rename = "hashmod")] + Hashmod, + HashMod, + #[serde(rename = "labelmap")] + Labelmap, + LabelMap, + #[serde(rename = "labeldrop")] + Labeldrop, + LabelDrop, + #[serde(rename = "labelkeep")] + Labelkeep, + LabelKeep, + #[serde(rename = "lowercase")] + Lowercase, + #[serde(rename = "Lowercase")] + LowercaseX, + #[serde(rename = "uppercase")] + Uppercase, + #[serde(rename = "Uppercase")] + UppercaseX, + #[serde(rename = "keepequal")] + Keepequal, + KeepEqual, + #[serde(rename = "dropequal")] + Dropequal, + DropEqual, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfig { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxVersion")] + pub max_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minVersion")] + pub min_version: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigCa { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigCaConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigCaSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigCert { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigCertConfigMap { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigCertSecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigKeySecret { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum NodeAgentNodeAgentFluentbitMetricsServiceMonitorConfigTlsConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsService { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocateLoadBalancerNodePorts")] + pub allocate_load_balancer_node_ports: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIP")] + pub cluster_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterIPs")] + pub cluster_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalIPs")] + pub external_i_ps: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalName")] + pub external_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalTrafficPolicy")] + pub external_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthCheckNodePort")] + pub health_check_node_port: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "internalTrafficPolicy")] + pub internal_traffic_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilies")] + pub ip_families: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ipFamilyPolicy")] + pub ip_family_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerClass")] + pub load_balancer_class: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerIP")] + pub load_balancer_ip: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancerSourceRanges")] + pub load_balancer_source_ranges: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ports: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "publishNotReadyAddresses")] + pub publish_not_ready_addresses: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinity")] + pub session_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinityConfig")] + pub session_affinity_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "trafficDistribution")] + pub traffic_distribution: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceSpecPorts { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appProtocol")] + pub app_protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePort")] + pub node_port: Option, + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub protocol: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")] + pub target_port: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceSpecSessionAffinityConfig { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientIP")] + pub client_ip: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitMetricsServiceSpecSessionAffinityConfigClientIp { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitNetwork { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "connectTimeout")] + pub connect_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "connectTimeoutLogError")] + pub connect_timeout_log_error: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsMode")] + pub dns_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPreferIpv4")] + pub dns_prefer_ipv4: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsResolver")] + pub dns_resolver: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keepalive: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepaliveIdleTimeout")] + pub keepalive_idle_timeout: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepaliveMaxRecycle")] + pub keepalive_max_recycle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxWorkerConnections")] + pub max_worker_connections: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceAddress")] + pub source_address: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondb { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbPvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitPositiondbSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "createOpenShiftSCC")] + pub create_open_shift_scc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityContext")] + pub pod_security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podSecurityPolicyCreate")] + pub pod_security_policy_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "roleBasedAccessControlCreate")] + pub role_based_access_control_create: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccount")] + pub service_account: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurityPodSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurityPodSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurityPodSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurityPodSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurityPodSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecurityPodSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecuritySecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecuritySecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecuritySecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecuritySecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecuritySecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitSecuritySecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitServiceAccount { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "automountServiceAccountToken")] + pub automount_service_account_token: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitServiceAccountImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitServiceAccountMetadata { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentNodeAgentFluentbitTls { + pub enabled: bool, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sharedKey")] + pub shared_key: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct NodeAgentStatus { +} + diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/outputs.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/outputs.rs index 9b32034b7..350822b97 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/outputs.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/outputs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/outputs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusterflows.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusterflows.rs index 1c20648f0..6545e8c42 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusterflows.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusterflows.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/syslogngclusterflows.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusteroutputs.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusteroutputs.rs index bb92ebd08..c3cf0624c 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusteroutputs.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngclusteroutputs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/syslogngclusteroutputs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngflows.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngflows.rs index 2cd2c6117..03423d7dc 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngflows.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngflows.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/syslogngflows.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngoutputs.rs b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngoutputs.rs index d67045423..64bc1ed1e 100644 --- a/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngoutputs.rs +++ b/custom-resources/logging_banzaicloud_io/src/v1beta1/syslogngoutputs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging.banzaicloud.io/v1beta1/syslogngoutputs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_extensions_banzaicloud_io/README.md b/custom-resources/logging_extensions_banzaicloud_io/README.md index aa350f2bf..ffd0f7c65 100644 --- a/custom-resources/logging_extensions_banzaicloud_io/README.md +++ b/custom-resources/logging_extensions_banzaicloud_io/README.md @@ -12,4 +12,5 @@ This crate is part of [kube-custom-resources-rs](https://github.com/metio/kube-c ## Available Custom Resources ### logging-extensions.banzaicloud.io/v1alpha1 +- `EventTailer` - `HostTailer` diff --git a/custom-resources/logging_extensions_banzaicloud_io/src/lib.rs b/custom-resources/logging_extensions_banzaicloud_io/src/lib.rs index 64323fb20..3fbe30c22 100644 --- a/custom-resources/logging_extensions_banzaicloud_io/src/lib.rs +++ b/custom-resources/logging_extensions_banzaicloud_io/src/lib.rs @@ -4,6 +4,7 @@ This crate contains [kube-rs](https://kube.rs/) compatible bindings for Kubernet # Available Custom Resources ## logging-extensions.banzaicloud.io/v1alpha1 +- `EventTailer` - `HostTailer` */ #[cfg(feature = "v1alpha1")] diff --git a/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/eventtailers.rs b/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/eventtailers.rs new file mode 100644 index 000000000..9eeac3cae --- /dev/null +++ b/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/eventtailers.rs @@ -0,0 +1,2115 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging-extensions.banzaicloud.io/v1alpha1/eventtailers.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; +} +use self::prelude::*; + +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "logging-extensions.banzaicloud.io", version = "v1alpha1", kind = "EventTailer", plural = "eventtailers")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct EventTailerSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerOverrides")] + pub container_overrides: Option, + #[serde(rename = "controlNamespace")] + pub control_namespace: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "positionVolume")] + pub position_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workloadMetaOverrides")] + pub workload_meta_overrides: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "workloadOverrides")] + pub workload_overrides: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverrides { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerContainerOverridesVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerImageImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_path")] + pub host_path_x: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pvc: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumeConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumeConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumeEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumeHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvc { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSource { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumePvcSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumeSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerPositionVolumeSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadMetaOverrides { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverrides { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeAffinity")] + pub node_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAffinity")] + pub pod_affinity: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podAntiAffinity")] + pub pod_anti_affinity: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution { + pub preference: EventTailerWorkloadOverridesAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "nodeSelectorTerms")] + pub node_selector_terms: Vec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")] + pub match_fields: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinity { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")] + pub preferred_during_scheduling_ignored_during_execution: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")] + pub required_during_scheduling_ignored_during_execution: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution { + #[serde(rename = "podAffinityTerm")] + pub pod_affinity_term: EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm, + pub weight: i32, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")] + pub match_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")] + pub mismatch_label_keys: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespaces: Option>, + #[serde(rename = "topologyKey")] + pub topology_key: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesImagePullSecrets { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainers { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersLivenessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersLivenessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersLivenessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersLivenessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersLivenessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersLivenessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersReadinessProbe { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "failureThreshold")] + pub failure_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub grpc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpGet")] + pub http_get: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialDelaySeconds")] + pub initial_delay_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "periodSeconds")] + pub period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "successThreshold")] + pub success_threshold: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpSocket")] + pub tcp_socket: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "timeoutSeconds")] + pub timeout_seconds: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersReadinessProbeExec { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub command: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersReadinessProbeGrpc { + pub port: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersReadinessProbeHttpGet { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaders")] + pub http_headers: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + pub port: IntOrString, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scheme: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersReadinessProbeHttpGetHttpHeaders { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersReadinessProbeTcpSocket { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + pub port: IntOrString, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersResourcesClaims { + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowPrivilegeEscalation")] + pub allow_privilege_escalation: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capabilities: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privileged: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "procMount")] + pub proc_mount: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnlyRootFilesystem")] + pub read_only_root_filesystem: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersSecurityContextCapabilities { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub add: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesInitContainersVolumeMounts { + #[serde(rename = "mountPath")] + pub mount_path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesSecurityContext { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "appArmorProfile")] + pub app_armor_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")] + pub fs_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroupChangePolicy")] + pub fs_group_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsGroup")] + pub run_as_group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsNonRoot")] + pub run_as_non_root: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")] + pub run_as_user: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxChangePolicy")] + pub se_linux_change_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seLinuxOptions")] + pub se_linux_options: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "seccompProfile")] + pub seccomp_profile: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroups")] + pub supplemental_groups: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "supplementalGroupsPolicy")] + pub supplemental_groups_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sysctls: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "windowsOptions")] + pub windows_options: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesSecurityContextAppArmorProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesSecurityContextSeLinuxOptions { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub level: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub role: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesSecurityContextSeccompProfile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localhostProfile")] + pub localhost_profile: Option, + #[serde(rename = "type")] + pub r#type: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesSecurityContextSysctls { + pub name: String, + pub value: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesSecurityContextWindowsOptions { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpec")] + pub gmsa_credential_spec: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gmsaCredentialSpecName")] + pub gmsa_credential_spec_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostProcess")] + pub host_process: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUserName")] + pub run_as_user_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesTolerations { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumes { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "awsElasticBlockStore")] + pub aws_elastic_block_store: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureDisk")] + pub azure_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureFile")] + pub azure_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cephfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cinder: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub csi: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ephemeral: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub fc: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flexVolume")] + pub flex_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flocker: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gcePersistentDisk")] + pub gce_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitRepo")] + pub git_repo: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub glusterfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostPath")] + pub host_path: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub iscsi: Option, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nfs: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaim")] + pub persistent_volume_claim: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "photonPersistentDisk")] + pub photon_persistent_disk: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "portworxVolume")] + pub portworx_volume: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub projected: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub quobyte: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rbd: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scaleIO")] + pub scale_io: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storageos: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vsphereVolume")] + pub vsphere_volume: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesAwsElasticBlockStore { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesAzureDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMode")] + pub caching_mode: Option, + #[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, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesAzureFile { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretName")] + pub secret_name: String, + #[serde(rename = "shareName")] + pub share_name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesCephfs { + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretFile")] + pub secret_file: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesCephfsSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesCinder { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesCinderSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesCsi { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodePublishSecretRef")] + pub node_publish_secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributes")] + pub volume_attributes: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesCsiNodePublishSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEmptyDir { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeral { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplate { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + pub spec: EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpec, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateMetadata { +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpec { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpecDataSource { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpecDataSourceRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + pub kind: String, + pub name: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpecResources { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpecSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesEphemeralVolumeClaimTemplateSpecSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesFc { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lun: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetWWNs")] + pub target_ww_ns: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub wwids: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesFlexVolume { + pub driver: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesFlexVolumeSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesFlocker { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetName")] + pub dataset_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "datasetUUID")] + pub dataset_uuid: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesGcePersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub partition: Option, + #[serde(rename = "pdName")] + pub pd_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesGitRepo { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub directory: Option, + pub repository: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub revision: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesGlusterfs { + pub endpoints: String, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesHostPath { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesImage { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reference: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesIscsi { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthDiscovery")] + pub chap_auth_discovery: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "chapAuthSession")] + pub chap_auth_session: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initiatorName")] + pub initiator_name: Option, + pub iqn: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "iscsiInterface")] + pub iscsi_interface: Option, + pub lun: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub portals: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(rename = "targetPortal")] + pub target_portal: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesIscsiSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesNfs { + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub server: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesPersistentVolumeClaim { + #[serde(rename = "claimName")] + pub claim_name: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesPhotonPersistentDisk { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(rename = "pdID")] + pub pd_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesPortworxVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "volumeID")] + pub volume_id: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjected { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub sources: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSources { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterTrustBundle")] + pub cluster_trust_bundle: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "downwardAPI")] + pub downward_api: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountToken")] + pub service_account_token: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesClusterTrustBundle { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "signerName")] + pub signer_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesClusterTrustBundleLabelSelector { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesClusterTrustBundleLabelSelectorMatchExpressions { + pub key: String, + pub operator: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesConfigMap { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesConfigMapItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesDownwardApi { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesDownwardApiItems { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesDownwardApiItemsFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesDownwardApiItemsResourceFieldRef { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + pub resource: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesSecret { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesProjectedSourcesServiceAccountToken { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub audience: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "expirationSeconds")] + pub expiration_seconds: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesQuobyte { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub group: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + pub registry: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tenant: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, + pub volume: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesRbd { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub image: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keyring: Option, + pub monitors: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pool: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub user: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesRbdSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesScaleIo { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + pub gateway: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "protectionDomain")] + pub protection_domain: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(rename = "secretRef")] + pub secret_ref: EventTailerWorkloadOverridesVolumesScaleIoSecretRef, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sslEnabled")] + pub ssl_enabled: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMode")] + pub storage_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePool")] + pub storage_pool: Option, + pub system: String, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesScaleIoSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesSecret { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "defaultMode")] + pub default_mode: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub items: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesSecretItems { + pub key: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub mode: Option, + pub path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesStorageos { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeNamespace")] + pub volume_namespace: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesStorageosSecretRef { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerWorkloadOverridesVolumesVsphereVolume { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsType")] + pub fs_type: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyID")] + pub storage_policy_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storagePolicyName")] + pub storage_policy_name: Option, + #[serde(rename = "volumePath")] + pub volume_path: String, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct EventTailerStatus { +} + diff --git a/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/hosttailers.rs b/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/hosttailers.rs index b2d4a41ce..5e2ddc90a 100644 --- a/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/hosttailers.rs +++ b/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/hosttailers.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/kube-logging/logging-operator/logging-extensions.banzaicloud.io/v1alpha1/hosttailers.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/mod.rs b/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/mod.rs index 35559b70a..2535c385b 100644 --- a/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/mod.rs +++ b/custom-resources/logging_extensions_banzaicloud_io/src/v1alpha1/mod.rs @@ -1 +1,2 @@ +pub mod eventtailers; pub mod hosttailers; diff --git a/custom-resources/operator_victoriametrics_com/Cargo.toml b/custom-resources/operator_victoriametrics_com/Cargo.toml index e6fa0c979..3d7b83a14 100644 --- a/custom-resources/operator_victoriametrics_com/Cargo.toml +++ b/custom-resources/operator_victoriametrics_com/Cargo.toml @@ -28,5 +28,6 @@ k8s-openapi = { version = "~0", features = ["v1_34"] } features = ["k8s-openapi/v1_34"] [features] -default = ["v1beta1"] +default = ["v1", "v1beta1"] +v1 = [] v1beta1 = [] diff --git a/custom-resources/operator_victoriametrics_com/README.md b/custom-resources/operator_victoriametrics_com/README.md index 91b4eab95..20ebe8e50 100644 --- a/custom-resources/operator_victoriametrics_com/README.md +++ b/custom-resources/operator_victoriametrics_com/README.md @@ -11,13 +11,27 @@ This crate is part of [kube-custom-resources-rs](https://github.com/metio/kube-c ## Available Custom Resources +### operator.victoriametrics.com/v1 +- `VLAgent` +- `VLCluster` +- `VLSingle` +- `VMAnomaly` +- `VTCluster` +- `VTSingle` ### operator.victoriametrics.com/v1beta1 +- `VLogs` +- `VMAgent` - `VMAlertmanagerConfig` +- `VMAlertmanager` +- `VMAlert` +- `VMAuth` +- `VMCluster` - `VMNodeScrape` - `VMPodScrape` - `VMProbe` - `VMRule` - `VMScrapeConfig` - `VMServiceScrape` +- `VMSingle` - `VMStaticScrape` - `VMUser` diff --git a/custom-resources/operator_victoriametrics_com/src/lib.rs b/custom-resources/operator_victoriametrics_com/src/lib.rs index e6727cebd..3803d77b3 100644 --- a/custom-resources/operator_victoriametrics_com/src/lib.rs +++ b/custom-resources/operator_victoriametrics_com/src/lib.rs @@ -3,16 +3,32 @@ This crate contains [kube-rs](https://kube.rs/) compatible bindings for Kubernet # Available Custom Resources +## operator.victoriametrics.com/v1 +- `VLAgent` +- `VLCluster` +- `VLSingle` +- `VMAnomaly` +- `VTCluster` +- `VTSingle` ## operator.victoriametrics.com/v1beta1 +- `VLogs` +- `VMAgent` - `VMAlertmanagerConfig` +- `VMAlertmanager` +- `VMAlert` +- `VMAuth` +- `VMCluster` - `VMNodeScrape` - `VMPodScrape` - `VMProbe` - `VMRule` - `VMScrapeConfig` - `VMServiceScrape` +- `VMSingle` - `VMStaticScrape` - `VMUser` */ +#[cfg(feature = "v1")] +pub mod v1; #[cfg(feature = "v1beta1")] pub mod v1beta1; diff --git a/custom-resources/operator_victoriametrics_com/src/v1/mod.rs b/custom-resources/operator_victoriametrics_com/src/v1/mod.rs new file mode 100644 index 000000000..f5126ec8b --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/mod.rs @@ -0,0 +1,6 @@ +pub mod vlagents; +pub mod vlclusters; +pub mod vlsingles; +pub mod vmanomalies; +pub mod vtclusters; +pub mod vtsingles; diff --git a/custom-resources/operator_victoriametrics_com/src/v1/vlagents.rs b/custom-resources/operator_victoriametrics_com/src/v1/vlagents.rs new file mode 100644 index 000000000..3b8dd4741 --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/vlagents.rs @@ -0,0 +1,1747 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlagents.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VLAgentSpec defines the desired state of VLAgent +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1", kind = "VLAgent", plural = "vlagents")] +#[kube(namespaced)] +#[kube(status = "VlAgentStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VlAgentSpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for VLAgent in Mode: StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VLAgent to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VLAgent to be configured with. + /// INFO, WARN, ERROR, FATAL, PANIC + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the vlagent pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// RemoteWrite list of victoria logs endpoints + /// for victorialogs it must looks like: + /// or for cluster different url + /// + #[serde(rename = "remoteWrite")] + pub remote_write: Vec, + /// RemoteWriteSettings defines global settings for all remoteWrite urls. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "remoteWriteSettings")] + pub remote_write_settings: Option, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// StatefulRollingUpdateStrategy allows configuration for strategyType + /// set it to RollingUpdate for disabling operator statefulSet rollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vlagent VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vlagent service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// StatefulStorage configures storage for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// SyslogSpec defines syslog listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "syslogSpec")] + pub syslog_spec: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// PersistentVolumeClaim is a user's request for and claim to a persistent volume +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplates { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// Standard object's metadata. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option>, + /// spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentClaimTemplatesStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VLAgentSpec defines the desired state of VLAgent +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlAgentLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VLAgentSpec defines the desired state of VLAgent +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlAgentLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentPersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the vlagent pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// VLAgentRemoteWriteSpec defines the remote storage configuration for VmAgent +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWrite { + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenPath")] + pub bearer_token_path: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName: headerValue + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// MaxDiskUsage defines the maximum file-based buffer size in bytes for the given remoteWrite + /// It overrides global configuration defined at remoteWriteSettings.maxDiskUsagePerURL + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxDiskUsage")] + pub max_disk_usage: Option, + /// OAuth2 defines auth configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option, + /// ProxyURL for -remoteWrite.url. Supported proxies: http, https, socks5. Example: socks5://proxy:1234 + #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyURL")] + pub proxy_url: Option, + /// Timeout for sending a single block of data to -remoteWrite.url (default 1m0s) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sendTimeout")] + pub send_timeout: Option, + /// TLSConfig describes tls configuration for remote write target + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, + /// URL of the endpoint to send samples to. + pub url: String, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// OAuth2 defines auth configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteOauth2 { + /// ClientIDFile defines path to pre-mounted OAuth2 client id + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientIDFile")] + pub client_id_file: Option, + /// ClientIDSecret defines secret or configmap containing the OAuth2 client id + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientIDSecret")] + pub client_id_secret: Option, + /// The secret containing the OAuth2 client secret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientSecret")] + pub client_secret: Option, + /// ClientSecretFile defines path to pre-mounted OAuth2 client secret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientSecretFile")] + pub client_secret_file: Option, + /// EndpointParams to append to the token URL + #[serde(default, skip_serializing_if = "Option::is_none", rename = "endpointParams")] + pub endpoint_params: Option>, + /// Scopes used for the token request + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scopes: Option>, + /// TokenURL defines URL to fetch the token from + #[serde(rename = "tokenURL")] + pub token_url: String, +} + +/// ClientIDSecret defines secret or configmap containing the OAuth2 client id +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteOauth2ClientIdSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The secret containing the OAuth2 client secret +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteOauth2ClientSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSConfig describes tls configuration for remote write target +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteTlsConfig { + /// CAFile defines path to the pre-mounted file with TLS ca certificate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// CASecret defines secret reference with tls CA key by given key + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caSecretKeyRef")] + pub ca_secret_key_ref: Option, + /// CertFile defines path to the pre-mounted file with TLS certificate + /// mutually exclusive with CertSecret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// CertSecret defines secret reference with TLS cert by given key + /// mutually exclusive with CASecret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certSecretKeyRef")] + pub cert_secret_key_ref: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// KeyFile defines path to the pre-mounted file with TLS cert key + /// mutually exclusive with CertSecret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// CertSecret defines secret reference with TLS key by given key + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecretKeyRef")] + pub key_secret_key_ref: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// CASecret defines secret reference with tls CA key by given key +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteTlsConfigCaSecretKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// CertSecret defines secret reference with TLS cert by given key +/// mutually exclusive with CASecret +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteTlsConfigCertSecretKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// CertSecret defines secret reference with TLS key by given key +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteTlsConfigKeySecretKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// RemoteWriteSettings defines global settings for all remoteWrite urls. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentRemoteWriteSettings { + /// Interval for flushing the data to remote storage. (default 1s) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flushInterval")] + pub flush_interval: Option, + /// The maximum size of unpacked request to send to remote storage + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxBlockSize")] + pub max_block_size: Option, + /// The maximum file-based buffer size in bytes at -remoteWrite.tmpDataPath + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxDiskUsagePerURL")] + pub max_disk_usage_per_url: Option, + /// The number of concurrent queues + #[serde(default, skip_serializing_if = "Option::is_none")] + pub queues: Option, + /// Whether to show -remoteWrite.url in the exported metrics. It is hidden by default, since it can contain sensitive auth info + #[serde(default, skip_serializing_if = "Option::is_none", rename = "showURL")] + pub show_url: Option, + /// Path to directory where temporary data for remote write component is stored (default /vlagent_pq/vlagent-remotewrite-data) + /// If defined, operator ignores spec.storage field and skips adding volume and volumeMount for pq + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tmpDataPath")] + pub tmp_data_path: Option, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ServiceSpec that will be added to vlagent service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// StatefulStorage configures storage for StatefulSet +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// A PVC spec to be used by the StatefulSets/Deployments. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplate { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// Spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// Status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// Status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStorageVolumeClaimTemplateStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// SyslogSpec defines syslog listener configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentSyslogSpec { + /// TCPListeners defines syslog server TCP listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpListeners")] + pub tcp_listeners: Option>, + /// UDPListeners defines syslog server UDP listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "udpListeners")] + pub udp_listeners: Option>, +} + +/// SyslogTCPListener defines configuration for TCP syslog server listen +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentSyslogSpecTcpListeners { + /// CompressMethod for syslog messages + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressMethod")] + pub compress_method: Option, + /// DecolorizeFields to remove ANSI color codes across logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "decolorizeFields")] + pub decolorize_fields: Option, + /// IgnoreFields to ignore at logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFields")] + pub ignore_fields: Option, + /// ListenPort defines listen port + #[serde(rename = "listenPort")] + pub listen_port: i32, + /// StreamFields to use as log stream labels + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamFields")] + pub stream_fields: Option, + /// TenantID for logs ingested in form of accountID:projectID + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, + /// TLSServerConfig defines VictoriaMetrics TLS configuration for the application's server + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +/// TLSServerConfig defines VictoriaMetrics TLS configuration for the application's server +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentSyslogSpecTcpListenersTlsConfig { + /// CertFile defines path to the pre-mounted file with certificate + /// mutually exclusive with CertSecret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// CertSecretRef defines reference for secret with certificate content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certSecret")] + pub cert_secret: Option, + /// KeyFile defines path to the pre-mounted file with certificate key + /// mutually exclusive with KeySecretRef + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Key defines reference for secret with certificate key content under given key + /// mutually exclusive with KeyFile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, +} + +/// CertSecretRef defines reference for secret with certificate content under given key +/// mutually exclusive with CertFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentSyslogSpecTcpListenersTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Key defines reference for secret with certificate key content under given key +/// mutually exclusive with KeyFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentSyslogSpecTcpListenersTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// SyslogUDPListener defines configuration for UDP syslog server listen +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentSyslogSpecUdpListeners { + /// CompressMethod for syslog messages + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressMethod")] + pub compress_method: Option, + /// DecolorizeFields to remove ANSI color codes across logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "decolorizeFields")] + pub decolorize_fields: Option, + /// IgnoreFields to ignore at logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFields")] + pub ignore_fields: Option, + /// ListenPort defines listen port + #[serde(rename = "listenPort")] + pub listen_port: i32, + /// StreamFields to use as log stream labels + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamFields")] + pub stream_fields: Option, + /// TenantID for logs ingested in form of accountID:projectID + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VLAgentStatus defines the observed state of VLAgent +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlAgentStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// ReplicaCount Total number of pods targeted by this VLAgent + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replicas: Option, + /// Selector string form of label value set for autoscaling + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1/vlclusters.rs b/custom-resources/operator_victoriametrics_com/src/v1/vlclusters.rs new file mode 100644 index 000000000..38cdb261d --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/vlclusters.rs @@ -0,0 +1,2150 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlclusters.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VLClusterSpec defines the desired state of VLCluster +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1", kind = "VLCluster", plural = "vlclusters")] +#[kube(namespaced)] +#[kube(status = "VlClusterStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VlClusterSpec { + /// ClusterDomainName defines domain name suffix for in-cluster dns addresses + /// aka .cluster.local + /// used by vlinsert and vlselect to build vlstorage address + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterDomainName")] + pub cluster_domain_name: Option, + /// ClusterVersion defines default images tag for all components. + /// it can be overwritten with component specific image.tag value. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterVersion")] + pub cluster_version: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// RequestsLoadBalancer configures load-balancing for vlinsert and vlselect requests. + /// It helps to evenly spread load across pods. + /// Usually it's not possible with Kubernetes TCP-based services. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requestsLoadBalancer")] + pub requests_load_balancer: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the + /// VLSelect, VLInsert and VLStorage Pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VLInsert defines vlinsert component configuration at victoria-logs cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vlinsert: Option, + /// VLSelect defines vlselect component configuration at victoria-logs cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vlselect: Option, + /// VLStorage defines vlstorage component configuration at victoria-logs cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vlstorage: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// RequestsLoadBalancer configures load-balancing for vlinsert and vlselect requests. +/// It helps to evenly spread load across pods. +/// Usually it's not possible with Kubernetes TCP-based services. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterRequestsLoadBalancer { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableInsertBalancing")] + pub disable_insert_balancing: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelectBalancing")] + pub disable_select_balancing: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, + /// VMAuthLoadBalancerSpec defines configuration spec for VMAuth used as load-balancer + /// for VMCluster component + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option>, +} + +/// VLInsert defines vlinsert component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsert { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Configures horizontal pod autoscaling. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hpa: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VLSelect to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VLSelect to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VLSelect pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vlselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vlselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// SyslogSpec defines syslog listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "syslogSpec")] + pub syslog_spec: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VLInsert defines vlinsert component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlinsertLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VLInsert defines vlinsert component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlinsertLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VLSelect pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vlselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// SyslogSpec defines syslog listener configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertSyslogSpec { + /// TCPListeners defines syslog server TCP listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpListeners")] + pub tcp_listeners: Option>, + /// UDPListeners defines syslog server UDP listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "udpListeners")] + pub udp_listeners: Option>, +} + +/// SyslogTCPListener defines configuration for TCP syslog server listen +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertSyslogSpecTcpListeners { + /// CompressMethod for syslog messages + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressMethod")] + pub compress_method: Option, + /// DecolorizeFields to remove ANSI color codes across logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "decolorizeFields")] + pub decolorize_fields: Option, + /// IgnoreFields to ignore at logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFields")] + pub ignore_fields: Option, + /// ListenPort defines listen port + #[serde(rename = "listenPort")] + pub listen_port: i32, + /// StreamFields to use as log stream labels + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamFields")] + pub stream_fields: Option, + /// TenantID for logs ingested in form of accountID:projectID + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, + /// TLSServerConfig defines VictoriaMetrics TLS configuration for the application's server + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +/// TLSServerConfig defines VictoriaMetrics TLS configuration for the application's server +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertSyslogSpecTcpListenersTlsConfig { + /// CertFile defines path to the pre-mounted file with certificate + /// mutually exclusive with CertSecret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// CertSecretRef defines reference for secret with certificate content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certSecret")] + pub cert_secret: Option, + /// KeyFile defines path to the pre-mounted file with certificate key + /// mutually exclusive with KeySecretRef + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Key defines reference for secret with certificate key content under given key + /// mutually exclusive with KeyFile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, +} + +/// CertSecretRef defines reference for secret with certificate content under given key +/// mutually exclusive with CertFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertSyslogSpecTcpListenersTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Key defines reference for secret with certificate key content under given key +/// mutually exclusive with KeyFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertSyslogSpecTcpListenersTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// SyslogUDPListener defines configuration for UDP syslog server listen +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertSyslogSpecUdpListeners { + /// CompressMethod for syslog messages + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressMethod")] + pub compress_method: Option, + /// DecolorizeFields to remove ANSI color codes across logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "decolorizeFields")] + pub decolorize_fields: Option, + /// IgnoreFields to ignore at logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFields")] + pub ignore_fields: Option, + /// ListenPort defines listen port + #[serde(rename = "listenPort")] + pub listen_port: i32, + /// StreamFields to use as log stream labels + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamFields")] + pub stream_fields: Option, + /// TenantID for logs ingested in form of accountID:projectID + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VLInsert defines vlinsert component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlinsertUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlinsertVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VLSelect defines vlselect component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselect { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Configures horizontal pod autoscaling. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hpa: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VLSelect to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VLSelect to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VLSelect pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vlselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vlselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VLSelect defines vlselect component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlselectLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VLSelect defines vlselect component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlselectLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VLSelect pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vlselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VLSelect defines vlselect component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlselectUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlselectVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VLStorage defines vlstorage component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorage { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// FutureRetention for the stored logs + /// Log entries with timestamps bigger than now+futureRetention are rejected during data ingestion; see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "futureRetention")] + pub future_retention: Option, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VLStorage to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// Whether to log all the ingested log entries; this can be useful for debugging of data ingestion; see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logIngestedRows")] + pub log_ingested_rows: Option, + /// LogLevel for VLStorage to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// LogNewStreams Whether to log creation of new streams; this can be useful for debugging of high cardinality issues with log streams; see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logNewStreams")] + pub log_new_streams: Option, + /// MaintenanceInsertNodeIDs - excludes given node ids from insert requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. + /// lets say, you have pod-0, pod-1, pod-2, pod-3. to exclude pod-0 and pod-3 from insert routing, define nodeIDs: [0,3]. + /// Useful at storage expanding, when you want to rebalance some data at cluster. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maintenanceInsertNodeIDs")] + pub maintenance_insert_node_i_ds: Option>, + /// MaintenanceInsertNodeIDs - excludes given node ids from select requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maintenanceSelectNodeIDs")] + pub maintenance_select_node_i_ds: Option>, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VLStorage pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// RetentionMaxDiskSpaceUsageBytes for the stored logs + /// VictoriaLogs keeps at least two last days of data in order to guarantee that the logs for the last day can be returned in queries. + /// This means that the total disk space usage may exceed the -retention.maxDiskSpaceUsageBytes, + /// if the size of the last two days of data exceeds the -retention.maxDiskSpaceUsageBytes. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionMaxDiskSpaceUsageBytes")] + pub retention_max_disk_space_usage_bytes: Option, + /// RetentionPeriod for the stored logs + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionPeriod")] + pub retention_period: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdateStrategy defines strategy for application updates + /// Default is OnDelete, in this case operator handles update process + /// Can be changed for RollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. + /// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategyBehavior")] + pub rolling_update_strategy_behavior: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vlselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vlselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage configures persistent volume for VLStorage + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// StorageDataPath - path to storage data + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageDataPath")] + pub storage_data_path: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VLStorage defines vlstorage component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlstorageLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VLStorage defines vlstorage component configuration at victoria-logs cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlClusterVlstorageLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstoragePersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstoragePodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VLStorage pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstoragePodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. +/// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageRollingUpdateStrategyBehavior { + /// MaxUnavailable defines the maximum number of pods that can be unavailable during the update. + /// It can be specified as an absolute number (e.g. 2) or a percentage of the total pods (e.g. "50%"). + /// For example, if set to 100%, all pods will be upgraded at once, minimizing downtime when needed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vlselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage configures persistent volume for VLStorage +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option>, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterVlstorageVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VLClusterStatus defines the observed state of VLCluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlClusterStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1/vlsingles.rs b/custom-resources/operator_victoriametrics_com/src/v1/vlsingles.rs new file mode 100644 index 000000000..1ace4e5c1 --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/vlsingles.rs @@ -0,0 +1,974 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vlsingles.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VLSingleSpec defines the desired state of VLSingle +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1", kind = "VLSingle", plural = "vlsingles")] +#[kube(namespaced)] +#[kube(status = "VlSingleStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VlSingleSpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// FutureRetention for the stored logs + /// Log entries with timestamps bigger than now+futureRetention are rejected during data ingestion; see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "futureRetention")] + pub future_retention: Option, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VLSingle to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// Whether to log all the ingested log entries; this can be useful for debugging of data ingestion; see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logIngestedRows")] + pub log_ingested_rows: Option, + /// LogLevel for VictoriaLogs to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// LogNewStreams Whether to log creation of new streams; this can be useful for debugging of high cardinality issues with log streams; see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logNewStreams")] + pub log_new_streams: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VLSingle pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// RetentionMaxDiskSpaceUsageBytes for the stored logs + /// VictoriaLogs keeps at least two last days of data in order to guarantee that the logs for the last day can be returned in queries. + /// This means that the total disk space usage may exceed the -retention.maxDiskSpaceUsageBytes, + /// if the size of the last two days of data exceeds the -retention.maxDiskSpaceUsageBytes. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionMaxDiskSpaceUsageBytes")] + pub retention_max_disk_space_usage_bytes: Option, + /// RetentionPeriod for the stored logs + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionPeriod")] + pub retention_period: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vlsingle VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vlsingle service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage is the definition of how storage will be used by the VLSingle + /// by default it`s empty dir + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// StorageDataPath disables spec.storage option and overrides arg for victoria-logs binary --storageDataPath, + /// its users responsibility to mount proper device into given path. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageDataPath")] + pub storage_data_path: Option, + /// StorageMeta defines annotations and labels attached to PVC for given vlsingle CR + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMetadata")] + pub storage_metadata: Option, + /// SyslogSpec defines syslog listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "syslogSpec")] + pub syslog_spec: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VLSingleSpec defines the desired state of VLSingle +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlSingleLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VLSingleSpec defines the desired state of VLSingle +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VlSingleLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VLSingle pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSinglePodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ServiceSpec that will be added to vlsingle service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage is the definition of how storage will be used by the VLSingle +/// by default it`s empty dir +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorage { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorageDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorageDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorageResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorageSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorageSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// StorageMeta defines annotations and labels attached to PVC for given vlsingle CR +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStorageMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// SyslogSpec defines syslog listener configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleSyslogSpec { + /// TCPListeners defines syslog server TCP listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tcpListeners")] + pub tcp_listeners: Option>, + /// UDPListeners defines syslog server UDP listener configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "udpListeners")] + pub udp_listeners: Option>, +} + +/// SyslogTCPListener defines configuration for TCP syslog server listen +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleSyslogSpecTcpListeners { + /// CompressMethod for syslog messages + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressMethod")] + pub compress_method: Option, + /// DecolorizeFields to remove ANSI color codes across logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "decolorizeFields")] + pub decolorize_fields: Option, + /// IgnoreFields to ignore at logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFields")] + pub ignore_fields: Option, + /// ListenPort defines listen port + #[serde(rename = "listenPort")] + pub listen_port: i32, + /// StreamFields to use as log stream labels + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamFields")] + pub stream_fields: Option, + /// TenantID for logs ingested in form of accountID:projectID + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, + /// TLSServerConfig defines VictoriaMetrics TLS configuration for the application's server + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +/// TLSServerConfig defines VictoriaMetrics TLS configuration for the application's server +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleSyslogSpecTcpListenersTlsConfig { + /// CertFile defines path to the pre-mounted file with certificate + /// mutually exclusive with CertSecret + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// CertSecretRef defines reference for secret with certificate content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certSecret")] + pub cert_secret: Option, + /// KeyFile defines path to the pre-mounted file with certificate key + /// mutually exclusive with KeySecretRef + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Key defines reference for secret with certificate key content under given key + /// mutually exclusive with KeyFile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, +} + +/// CertSecretRef defines reference for secret with certificate content under given key +/// mutually exclusive with CertFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleSyslogSpecTcpListenersTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Key defines reference for secret with certificate key content under given key +/// mutually exclusive with KeyFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleSyslogSpecTcpListenersTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// SyslogUDPListener defines configuration for UDP syslog server listen +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleSyslogSpecUdpListeners { + /// CompressMethod for syslog messages + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "compressMethod")] + pub compress_method: Option, + /// DecolorizeFields to remove ANSI color codes across logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "decolorizeFields")] + pub decolorize_fields: Option, + /// IgnoreFields to ignore at logs + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFields")] + pub ignore_fields: Option, + /// ListenPort defines listen port + #[serde(rename = "listenPort")] + pub listen_port: i32, + /// StreamFields to use as log stream labels + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamFields")] + pub stream_fields: Option, + /// TenantID for logs ingested in form of accountID:projectID + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VLSingleStatus defines the observed state of VLSingle +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VlSingleStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1/vmanomalies.rs b/custom-resources/operator_victoriametrics_com/src/v1/vmanomalies.rs new file mode 100644 index 000000000..e8ce0e1af --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/vmanomalies.rs @@ -0,0 +1,2231 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vmanomalies.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VMAnomalySpec defines the desired state of VMAnomaly. +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1", kind = "VMAnomaly", plural = "vmanomalies")] +#[kube(namespaced)] +#[kube(status = "VmAnomalyStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmAnomalySpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for VMAnomaly + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// ConfigRawYaml - raw configuration for anomaly, + /// it helps it to start without secret. + /// priority -> hardcoded ConfigRaw -> ConfigRaw, provided by user -> ConfigSecret. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configRawYaml")] + pub config_raw_yaml: Option, + /// ConfigSecret is the name of a Kubernetes Secret in the same namespace as the + /// VMAnomaly object, which contains configuration for this VMAnomaly, + /// configuration must be inside secret key: anomaly.yaml. + /// It must be created by user. + /// instance. Defaults to 'vmanomaly-' + /// The secret is mounted into /etc/anomaly/config. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configSecret")] + pub config_secret: Option, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// License allows to configure license key to be used for enterprise features. + /// Using license key is supported starting from VictoriaMetrics v1.94.0. + /// See [here]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub license: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogLevel for VMAnomaly to be configured with. + /// INFO, WARN, ERROR, FATAL, PANIC + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// Monitoring configures how expose anomaly metrics + /// See + #[serde(default, skip_serializing_if = "Option::is_none")] + pub monitoring: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the vmanomaly pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// Metrics source for VMAnomaly + /// See + pub reader: VmAnomalyReader, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdateStrategy allows configuration for strategyType + /// set it to RollingUpdate for disabling operator statefulSet rollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vmanomaly VMPodScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ShardCount - numbers of shards of VMAnomaly + /// in this case operator will use 1 sts per shard with + /// replicas count according to spec.replicas. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "shardCount")] + pub shard_count: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage configures storage for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, + /// Metrics destination for VMAnomaly + /// See + pub writer: VmAnomalyWriter, +} + +/// PersistentVolumeClaim is a user's request for and claim to a persistent volume +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplates { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// Standard object's metadata. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option>, + /// spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyClaimTemplatesStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// ConfigSecret is the name of a Kubernetes Secret in the same namespace as the +/// VMAnomaly object, which contains configuration for this VMAnomaly, +/// configuration must be inside secret key: anomaly.yaml. +/// It must be created by user. +/// instance. Defaults to 'vmanomaly-' +/// The secret is mounted into /etc/anomaly/config. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyConfigSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// License allows to configure license key to be used for enterprise features. +/// Using license key is supported starting from VictoriaMetrics v1.94.0. +/// See [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyLicense { + /// Enforce offline verification of the license key. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceOffline")] + pub force_offline: Option, + /// Enterprise license key. This flag is available only in [VictoriaMetrics enterprise]( + /// To request a trial license, [go to]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// KeyRef is reference to secret with license key for enterprise features. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyRef")] + pub key_ref: Option, + /// Interval to be used for checking for license key changes. Note that this is only applicable when using KeyRef. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "reloadInterval")] + pub reload_interval: Option, +} + +/// KeyRef is reference to secret with license key for enterprise features. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyLicenseKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAnomalySpec defines the desired state of VMAnomaly. +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAnomalyLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// Monitoring configures how expose anomaly metrics +/// See +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoring { + /// VMAnomalyMonitoringPullSpec defines pull monitoring configuration + /// which is enabled by default and served at POD_IP:8490/metrics + #[serde(default, skip_serializing_if = "Option::is_none")] + pub pull: Option, + /// VMAnomalyMonitoringPushSpec defines metrics push configuration + /// + /// VMAnomaly uses prometheus text exposition format + #[serde(default, skip_serializing_if = "Option::is_none")] + pub push: Option, +} + +/// VMAnomalyMonitoringPullSpec defines pull monitoring configuration +/// which is enabled by default and served at POD_IP:8490/metrics +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPull { + /// Addr changes listen addr, default is 0.0.0.0 + #[serde(default, skip_serializing_if = "Option::is_none")] + pub addr: Option, + /// Port defines a port for metrics scrape + pub port: String, +} + +/// VMAnomalyMonitoringPushSpec defines metrics push configuration +/// +/// VMAnomaly uses prometheus text exposition format +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPush { + /// Basic auth defines basic authorization configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// BearerAuth defines authorization with Authorization: Bearer header + #[serde(default, skip_serializing_if = "Option::is_none")] + pub bearer: Option, + /// ExtraLabels defines a set of labels to attach to the pushed metrics + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraLabels")] + pub extra_labels: Option>, + /// HealthPath defines absolute or relative URL address where to check availability of the remote webserver + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthPath")] + pub health_path: Option, + /// PushFrequency defines push interval + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pushFrequency")] + pub push_frequency: Option, + /// TenantID defines for VictoriaMetrics Cluster version only, tenants are identified by accountID, accountID:projectID or multitenant. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, + /// Timeout for the requests, passed as a string + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, + /// TLSConfig defines tls connection configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, + /// defines target url for push requests + pub url: String, +} + +/// Basic auth defines basic authorization configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// BearerAuth defines authorization with Authorization: Bearer header +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushBearer { + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushBearerBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSConfig defines tls connection configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfig { + /// Struct containing the CA cert to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + /// Path to the CA cert in the container to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// Struct containing the client cert file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + /// Path to the client cert file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// Path to the client key file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Secret containing the client key file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// Struct containing the CA cert to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigCa { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigCaConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigCaSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Struct containing the client cert file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigCert { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigCertConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing the client key file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyMonitoringPushTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyPersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the vmanomaly pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Metrics source for VMAnomaly +/// See +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReader { + /// Basic auth defines basic authorization configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// BearerAuth defines authorization with Authorization: Bearer header + #[serde(default, skip_serializing_if = "Option::is_none")] + pub bearer: Option, + /// Optional argumentallows defining valid data ranges for input of all the queries in queries + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataRange")] + pub data_range: Option>, + /// DatasourceURL address + /// datasource must serve /api/v1/query and /api/v1/query_range APIs + #[serde(rename = "datasourceURL")] + pub datasource_url: String, + /// List of strings with series selector. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraFilters")] + pub extra_filters: Option>, + /// HealthPath defines absolute or relative URL address where to check availability of the remote webserver + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthPath")] + pub health_path: Option, + /// It allows overriding the default -search.latencyOffsetflag of VictoriaMetrics + #[serde(default, skip_serializing_if = "Option::is_none", rename = "latencyOffset")] + pub latency_offset: Option, + /// Optional argoverrides how search.maxPointsPerTimeseries flagimpacts vmanomaly on splitting long fitWindow queries into smaller sub-intervals + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxPointsPerQuery")] + pub max_points_per_query: Option, + /// If True, then query will be performed from the last seen timestamp for a given series. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "queryFromLastSeenTimestamp")] + pub query_from_last_seen_timestamp: Option, + /// Performs PromQL/MetricsQL range query + #[serde(default, skip_serializing_if = "Option::is_none", rename = "queryRangePath")] + pub query_range_path: Option, + /// Frequency of the points returned + #[serde(rename = "samplingPeriod")] + pub sampling_period: String, + /// TenantID defines for VictoriaMetrics Cluster version only, tenants are identified by accountID, accountID:projectID or multitenant. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, + /// Timeout for the requests, passed as a string + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, + /// TLSConfig defines tls connection configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, + /// Optional argumentspecifies the IANA timezone to account for local shifts, like DST, in models sensitive to seasonal patterns + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tz: Option, +} + +/// Basic auth defines basic authorization configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// BearerAuth defines authorization with Authorization: Bearer header +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderBearer { + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderBearerBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSConfig defines tls connection configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfig { + /// Struct containing the CA cert to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + /// Path to the CA cert in the container to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// Struct containing the client cert file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + /// Path to the client cert file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// Path to the client key file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Secret containing the client key file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// Struct containing the CA cert to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigCa { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigCaConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigCaSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Struct containing the client cert file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigCert { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigCertConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing the client key file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReaderTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// Storage configures storage for StatefulSet +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// A PVC spec to be used by the StatefulSets/Deployments. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplate { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// Spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// Status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// Status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStorageVolumeClaimTemplateStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// Metrics destination for VMAnomaly +/// See +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriter { + /// Basic auth defines basic authorization configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// BearerAuth defines authorization with Authorization: Bearer header + #[serde(default, skip_serializing_if = "Option::is_none")] + pub bearer: Option, + /// DatasourceURL defines remote write url for write requests + /// provided endpoint must serve /api/v1/import path + /// vmanomaly joins datasourceURL + "/api/v1/import" + #[serde(rename = "datasourceURL")] + pub datasource_url: String, + /// HealthPath defines absolute or relative URL address where to check availability of the remote webserver + #[serde(default, skip_serializing_if = "Option::is_none", rename = "healthPath")] + pub health_path: Option, + /// Metrics to save the output (in metric names or labels) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "metricFormat")] + pub metric_format: Option, + /// TenantID defines for VictoriaMetrics Cluster version only, tenants are identified by accountID, accountID:projectID or multitenant. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")] + pub tenant_id: Option, + /// Timeout for the requests, passed as a string + #[serde(default, skip_serializing_if = "Option::is_none")] + pub timeout: Option, + /// TLSConfig defines tls connection configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +/// Basic auth defines basic authorization configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// BearerAuth defines authorization with Authorization: Bearer header +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterBearer { + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterBearerBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Metrics to save the output (in metric names or labels) +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterMetricFormat { + /// Name of result metric + /// Must have a value with $VAR placeholder in it to distinguish between resulting metrics + #[serde(rename = "__name__")] + pub name: String, + /// ExtraLabels defines additional labels to be added to the resulting metrics + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraLabels")] + pub extra_labels: Option>, + /// For is a special label with $QUERY_KEY placeholder + #[serde(rename = "for")] + pub r#for: String, +} + +/// TLSConfig defines tls connection configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfig { + /// Struct containing the CA cert to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + /// Path to the CA cert in the container to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// Struct containing the client cert file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + /// Path to the client cert file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// Path to the client key file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Secret containing the client key file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// Struct containing the CA cert to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigCa { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigCaConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigCaSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Struct containing the client cert file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigCert { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigCertConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing the client key file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyWriterTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAnomalyStatus defines the observed state of VMAnomaly. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAnomalyStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// Shards represents total number of vmanomaly statefulsets with uniq scrape targets + #[serde(default, skip_serializing_if = "Option::is_none")] + pub shards: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1/vtclusters.rs b/custom-resources/operator_victoriametrics_com/src/v1/vtclusters.rs new file mode 100644 index 000000000..ef2cc7a2f --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/vtclusters.rs @@ -0,0 +1,2023 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtclusters.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VTClusterSpec defines the desired state of VTCluster +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1", kind = "VTCluster", plural = "vtclusters")] +#[kube(namespaced)] +#[kube(status = "VtClusterStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VtClusterSpec { + /// ClusterDomainName defines domain name suffix for in-cluster dns addresses + /// aka .cluster.local + /// used by vtinsert and vtselect to build vtstorage address + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterDomainName")] + pub cluster_domain_name: Option, + /// ClusterVersion defines default images tag for all components. + /// it can be overwritten with component specific image.tag value. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterVersion")] + pub cluster_version: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// VTInsert defines vtinsert component configuration at victoria-traces cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub insert: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// RequestsLoadBalancer configures load-balancing for vtinsert and vtselect requests. + /// It helps to evenly spread load across pods. + /// Usually it's not possible with Kubernetes TCP-based services. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requestsLoadBalancer")] + pub requests_load_balancer: Option, + /// VTSelect defines vtselect component configuration at victoria-traces cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub select: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the + /// VTSelect, VTInsert and VTStorage Pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// VTStorage defines vtstorage component configuration at victoria-traces cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VTInsert defines vtinsert component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsert { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Configures horizontal pod autoscaling. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hpa: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VTSelect to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VTSelect to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VTSelect pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vtselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vtselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VTInsert defines vtinsert component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterInsertLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VTInsert defines vtinsert component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterInsertLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VTSelect pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vtselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VTInsert defines vtinsert component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterInsertUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterInsertVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// RequestsLoadBalancer configures load-balancing for vtinsert and vtselect requests. +/// It helps to evenly spread load across pods. +/// Usually it's not possible with Kubernetes TCP-based services. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterRequestsLoadBalancer { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableInsertBalancing")] + pub disable_insert_balancing: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelectBalancing")] + pub disable_select_balancing: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, + /// VMAuthLoadBalancerSpec defines configuration spec for VMAuth used as load-balancer + /// for VMCluster component + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option>, +} + +/// VTSelect defines vtselect component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelect { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Configures horizontal pod autoscaling. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hpa: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VTSelect to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VTSelect to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VTSelect pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vtselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vtselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VTSelect defines vtselect component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterSelectLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VTSelect defines vtselect component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterSelectLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VTSelect pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vtselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VTSelect defines vtselect component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterSelectUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterSelectVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VTStorage defines vtstorage component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorage { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// FutureRetention for the stored traces + /// Log entries with timestamps bigger than now+futureRetention are rejected during data ingestion + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "futureRetention")] + pub future_retention: Option, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VTStorage to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// Whether to log all the ingested log entries; this can be useful for debugging of data ingestion + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logIngestedRows")] + pub log_ingested_rows: Option, + /// LogLevel for VTStorage to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// LogNewStreams Whether to log creation of new streams; this can be useful for debugging of high cardinality issues with log streams + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logNewStreams")] + pub log_new_streams: Option, + /// MaintenanceInsertNodeIDs - excludes given node ids from insert requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. + /// lets say, you have pod-0, pod-1, pod-2, pod-3. to exclude pod-0 and pod-3 from insert routing, define nodeIDs: [0,3]. + /// Useful at storage expanding, when you want to rebalance some data at cluster. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maintenanceInsertNodeIDs")] + pub maintenance_insert_node_i_ds: Option>, + /// MaintenanceInsertNodeIDs - excludes given node ids from select requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maintenanceSelectNodeIDs")] + pub maintenance_select_node_i_ds: Option>, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VTStorage pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// RetentionMaxDiskSpaceUsageBytes for the stored traces + /// VictoriaTraces keeps at least two last days of data in order to guarantee that the traces for the last day can be returned in queries. + /// This means that the total disk space usage may exceed the -retention.maxDiskSpaceUsageBytes, + /// if the size of the last two days of data exceeds the -retention.maxDiskSpaceUsageBytes. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionMaxDiskSpaceUsageBytes")] + pub retention_max_disk_space_usage_bytes: Option, + /// RetentionPeriod for the stored traces + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionPeriod")] + pub retention_period: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdateStrategy defines strategy for application updates + /// Default is OnDelete, in this case operator handles update process + /// Can be changed for RollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. + /// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategyBehavior")] + pub rolling_update_strategy_behavior: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vtselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vtselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage configures persistent volume for VTStorage + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// StorageDataPath - path to storage data + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageDataPath")] + pub storage_data_path: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VTStorage defines vtstorage component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterStorageLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VTStorage defines vtstorage component configuration at victoria-traces cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtClusterStorageLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStoragePersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStoragePodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VTStorage pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStoragePodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. +/// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageRollingUpdateStrategyBehavior { + /// MaxUnavailable defines the maximum number of pods that can be unavailable during the update. + /// It can be specified as an absolute number (e.g. 2) or a percentage of the total pods (e.g. "50%"). + /// For example, if set to 100%, all pods will be upgraded at once, minimizing downtime when needed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vtselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage configures persistent volume for VTStorage +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option>, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStorageVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VTClusterStatus defines the observed state of VTCluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtClusterStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1/vtsingles.rs b/custom-resources/operator_victoriametrics_com/src/v1/vtsingles.rs new file mode 100644 index 000000000..0260ca37d --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1/vtsingles.rs @@ -0,0 +1,847 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1/vtsingles.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VTSingleSpec defines the desired state of VTSingle +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1", kind = "VTSingle", plural = "vtsingles")] +#[kube(namespaced)] +#[kube(status = "VtSingleStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VtSingleSpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// FutureRetention for the stored traces + /// Log entries with timestamps bigger than now+futureRetention are rejected during data ingestion; + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "futureRetention")] + pub future_retention: Option, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VTSingle to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// Whether to log all the ingested log entries; this can be useful for debugging of data ingestion; + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logIngestedRows")] + pub log_ingested_rows: Option, + /// LogLevel for VictoriaTraces to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// LogNewStreams Whether to log creation of new streams; this can be useful for debugging of high cardinality issues with log streams; + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logNewStreams")] + pub log_new_streams: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VTSingle pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// RetentionMaxDiskSpaceUsageBytes for the stored traces + /// VictoriaTraces keeps at least two last days of data in order to guarantee that the traces for the last day can be returned in queries. + /// This means that the total disk space usage may exceed the -retention.maxDiskSpaceUsageBytes, + /// if the size of the last two days of data exceeds the -retention.maxDiskSpaceUsageBytes. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionMaxDiskSpaceUsageBytes")] + pub retention_max_disk_space_usage_bytes: Option, + /// RetentionPeriod for the stored traces + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionPeriod")] + pub retention_period: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vtsingle VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vtsingle service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage is the definition of how storage will be used by the VTSingle + /// by default it`s empty dir + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// StorageDataPath disables spec.storage option and overrides arg for victoria-traces binary --storageDataPath, + /// its users responsibility to mount proper device into given path. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageDataPath")] + pub storage_data_path: Option, + /// StorageMeta defines annotations and labels attached to PVC for given vtsingle CR + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMetadata")] + pub storage_metadata: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VTSingleSpec defines the desired state of VTSingle +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtSingleLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VTSingleSpec defines the desired state of VTSingle +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VtSingleLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VTSingle pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSinglePodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ServiceSpec that will be added to vtsingle service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage is the definition of how storage will be used by the VTSingle +/// by default it`s empty dir +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorage { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorageDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorageDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorageResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorageSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorageSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// StorageMeta defines annotations and labels attached to PVC for given vtsingle CR +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStorageMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VTSingleStatus defines the observed state of VTSingle +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VtSingleStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/mod.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/mod.rs index 540d5872f..8ea3663bb 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/mod.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/mod.rs @@ -1,9 +1,16 @@ +pub mod vlogs; +pub mod vmagents; pub mod vmalertmanagerconfigs; +pub mod vmalertmanagers; +pub mod vmalerts; +pub mod vmauths; +pub mod vmclusters; pub mod vmnodescrapes; pub mod vmpodscrapes; pub mod vmprobes; pub mod vmrules; pub mod vmscrapeconfigs; pub mod vmservicescrapes; +pub mod vmsingles; pub mod vmstaticscrapes; pub mod vmusers; diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vlogs.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vlogs.rs new file mode 100644 index 000000000..cd027673b --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vlogs.rs @@ -0,0 +1,31 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vlogs.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VLogsStatus defines the observed state of VLogs +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VLogsStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmagents.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmagents.rs new file mode 100644 index 000000000..fea71ec5b --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmagents.rs @@ -0,0 +1,3984 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmagents.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VMAgentSpec defines the desired state of VMAgent +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1beta1", kind = "VMAgent", plural = "vmagents")] +#[kube(namespaced)] +#[kube(status = "VmAgentStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmAgentSpec { + /// APIServerConfig allows specifying a host and auth methods to access apiserver. + /// If left empty, VMAgent is assumed to run inside of the cluster + /// and will discover API servers automatically and use the pod's CA certificate + /// and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/. + /// aPIServerConfig is deprecated use apiServerConfig instead + #[serde(default, skip_serializing_if = "Option::is_none", rename = "aPIServerConfig")] + pub a_pi_server_config: Option>, + /// AdditionalScrapeConfigs As scrape configs are appended, the user is responsible to make sure it + /// is valid. Note that using this feature may expose the possibility to + /// break upgrades of VMAgent. It is advised to review VMAgent release + /// notes to ensure that no incompatible scrape configs are going to break + /// VMAgent after the upgrade. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalScrapeConfigs")] + pub additional_scrape_configs: Option, + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// APIServerConfig allows specifying a host and auth methods to access apiserver. + /// If left empty, VMAgent is assumed to run inside of the cluster + /// and will discover API servers automatically and use the pod's CA certificate + /// and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiServerConfig")] + pub api_server_config: Option, + /// ArbitraryFSAccessThroughSMs configures whether configuration + /// based on EndpointAuth can access arbitrary files on the file system + /// of the VMAgent container e.g. bearer token files, basic auth, tls certs + #[serde(default, skip_serializing_if = "Option::is_none", rename = "arbitraryFSAccessThroughSMs")] + pub arbitrary_fs_access_through_s_ms: Option, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for VMAgent in StatefulMode + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. + /// Given secret reference will be added to the application and vm-config-reloader as volume + /// available since v0.57.0 version + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloadAuthKeySecret")] + pub config_reload_auth_key_secret: Option, + /// ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container + /// for example resyncInterval: "30s" + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderExtraArgs")] + pub config_reloader_extra_args: Option>, + /// ConfigReloaderImageTag defines image:tag for config-reloader container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderImageTag")] + pub config_reloader_image_tag: Option, + /// ConfigReloaderResources config-reloader container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderResources")] + pub config_reloader_resources: Option, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DaemonSetMode enables DaemonSet deployment mode instead of Deployment. + /// Supports only VMPodScrape + /// (available from v0.55.0). + /// Cannot be used with statefulMode + #[serde(default, skip_serializing_if = "Option::is_none", rename = "daemonSetMode")] + pub daemon_set_mode: Option, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// EnableKubernetesAPISelectors instructs vmagent to use CRD scrape objects spec.selectors for + /// Kubernetes API list and watch requests. + /// + /// It could be useful to reduce Kubernetes API server resource usage for serving less than 100 CRD scrape objects in total. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableKubernetesAPISelectors")] + pub enable_kubernetes_api_selectors: Option, + /// EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert + /// and metric that is user created. The label value will always be the namespace of the object that is + /// being created. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enforcedNamespaceLabel")] + pub enforced_namespace_label: Option, + /// ExternalLabels The labels to add to any time series scraped by vmagent. + /// it doesn't affect metrics ingested directly by push API's + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalLabels")] + pub external_labels: Option>, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// GlobalScrapeMetricRelabelConfigs is a global metric relabel configuration, which is applied to each scrape job. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "globalScrapeMetricRelabelConfigs")] + pub global_scrape_metric_relabel_configs: Option>, + /// GlobalScrapeRelabelConfigs is a global relabel configuration, which is applied to each samples of each scrape job during service discovery. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "globalScrapeRelabelConfigs")] + pub global_scrape_relabel_configs: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// IgnoreNamespaceSelectors if set to true will ignore NamespaceSelector settings from + /// scrape objects, and they will only discover endpoints + /// within their current namespace. Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreNamespaceSelectors")] + pub ignore_namespace_selectors: Option, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// IngestOnlyMode switches vmagent into unmanaged mode + /// it disables any config generation for scraping + /// Currently it prevents vmagent from managing tls and auth options for remote write + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ingestOnlyMode")] + pub ingest_only_mode: Option, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// InlineRelabelConfig - defines GlobalRelabelConfig for vmagent, can be defined directly at CRD. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "inlineRelabelConfig")] + pub inline_relabel_config: Option>, + /// InlineScrapeConfig As scrape configs are appended, the user is responsible to make sure it + /// is valid. Note that using this feature may expose the possibility to + /// break upgrades of VMAgent. It is advised to review VMAgent release + /// notes to ensure that no incompatible scrape configs are going to break + /// VMAgent after the upgrade. + /// it should be defined as single yaml file. + /// inlineScrapeConfig: | + /// - job_name: "prometheus" + /// static_configs: + /// - targets: ["localhost:9090"] + #[serde(default, skip_serializing_if = "Option::is_none", rename = "inlineScrapeConfig")] + pub inline_scrape_config: Option, + /// InsertPorts - additional listen ports for data ingestion. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insertPorts")] + pub insert_ports: Option, + /// License allows to configure license key to be used for enterprise features. + /// Using license key is supported starting from VictoriaMetrics v1.94.0. + /// See [here]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub license: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMAgent to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMAgent to be configured with. + /// INFO, WARN, ERROR, FATAL, PANIC + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MaxScrapeInterval allows limiting maximum scrape interval for VMServiceScrape, VMPodScrape and other scrapes + /// If interval is higher than defined limit, `maxScrapeInterval` will be used. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxScrapeInterval")] + pub max_scrape_interval: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// MinScrapeInterval allows limiting minimal scrape interval for VMServiceScrape, VMPodScrape and other scrapes + /// If interval is lower than defined limit, `minScrapeInterval` will be used. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minScrapeInterval")] + pub min_scrape_interval: Option, + /// NodeScrapeNamespaceSelector defines Namespaces to be selected for VMNodeScrape discovery. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeScrapeNamespaceSelector")] + pub node_scrape_namespace_selector: Option, + /// NodeScrapeRelabelTemplate defines relabel config, that will be added to each VMNodeScrape. + /// it's useful for adding specific labels to all targets + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeScrapeRelabelTemplate")] + pub node_scrape_relabel_template: Option>, + /// NodeScrapeSelector defines VMNodeScrape to be selected for scraping. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeScrapeSelector")] + pub node_scrape_selector: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// OverrideHonorLabels if set to true overrides all user configured honor_labels. + /// If HonorLabels is set in scrape objects to true, this overrides honor_labels to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "overrideHonorLabels")] + pub override_honor_labels: Option, + /// OverrideHonorTimestamps allows to globally enforce honoring timestamps in all scrape configs. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "overrideHonorTimestamps")] + pub override_honor_timestamps: Option, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the vmagent pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// PodScrapeNamespaceSelector defines Namespaces to be selected for VMPodScrape discovery. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podScrapeNamespaceSelector")] + pub pod_scrape_namespace_selector: Option, + /// PodScrapeRelabelTemplate defines relabel config, that will be added to each VMPodScrape. + /// it's useful for adding specific labels to all targets + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podScrapeRelabelTemplate")] + pub pod_scrape_relabel_template: Option>, + /// PodScrapeSelector defines PodScrapes to be selected for target discovery. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podScrapeSelector")] + pub pod_scrape_selector: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ProbeNamespaceSelector defines Namespaces to be selected for VMProbe discovery. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "probeNamespaceSelector")] + pub probe_namespace_selector: Option, + /// ProbeScrapeRelabelTemplate defines relabel config, that will be added to each VMProbeScrape. + /// it's useful for adding specific labels to all targets + #[serde(default, skip_serializing_if = "Option::is_none", rename = "probeScrapeRelabelTemplate")] + pub probe_scrape_relabel_template: Option>, + /// ProbeSelector defines VMProbe to be selected for target probing. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "probeSelector")] + pub probe_selector: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// RelabelConfig ConfigMap with global relabel config -remoteWrite.relabelConfig + /// This relabeling is applied to all the collected metrics before sending them to remote storage. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "relabelConfig")] + pub relabel_config: Option, + /// RemoteWrite list of victoria metrics /some other remote write system + /// for vm it must looks like: + /// or for cluster different url + /// + #[serde(rename = "remoteWrite")] + pub remote_write: Vec, + /// RemoteWriteSettings defines global settings for all remoteWrite urls. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "remoteWriteSettings")] + pub remote_write_settings: Option, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// ScrapeConfigNamespaceSelector defines Namespaces to be selected for VMScrapeConfig discovery. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scrapeConfigNamespaceSelector")] + pub scrape_config_namespace_selector: Option, + /// ScrapeConfigRelabelTemplate defines relabel config, that will be added to each VMScrapeConfig. + /// it's useful for adding specific labels to all targets + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scrapeConfigRelabelTemplate")] + pub scrape_config_relabel_template: Option>, + /// ScrapeConfigSelector defines VMScrapeConfig to be selected for target discovery. + /// Works in combination with NamespaceSelector. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scrapeConfigSelector")] + pub scrape_config_selector: Option, + /// ScrapeInterval defines how often scrape targets by default + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scrapeInterval")] + pub scrape_interval: Option, + /// ScrapeTimeout defines global timeout for targets scrape + #[serde(default, skip_serializing_if = "Option::is_none", rename = "scrapeTimeout")] + pub scrape_timeout: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// SelectAllByDefault changes default behavior for empty CRD selectors, such ServiceScrapeSelector. + /// with selectAllByDefault: true and empty serviceScrapeSelector and ServiceScrapeNamespaceSelector + /// Operator selects all exist serviceScrapes + /// with selectAllByDefault: false - selects nothing + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectAllByDefault")] + pub select_all_by_default: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeNamespaceSelector Namespaces to be selected for VMServiceScrape discovery. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeNamespaceSelector")] + pub service_scrape_namespace_selector: Option, + /// ServiceScrapeRelabelTemplate defines relabel config, that will be added to each VMServiceScrape. + /// it's useful for adding specific labels to all targets + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeRelabelTemplate")] + pub service_scrape_relabel_template: Option>, + /// ServiceScrapeSelector defines ServiceScrapes to be selected for target discovery. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSelector")] + pub service_scrape_selector: Option, + /// ServiceScrapeSpec that will be added to vmagent VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vmagent service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// ShardCount - numbers of shards of VMAgent + /// in this case operator will use 1 deployment/sts per shard with + /// replicas count according to spec.replicas, + /// see [here]( + #[serde(default, skip_serializing_if = "Option::is_none", rename = "shardCount")] + pub shard_count: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// StatefulMode enables StatefulSet for `VMAgent` instead of Deployment + /// it allows using persistent storage for vmagent's persistentQueue + #[serde(default, skip_serializing_if = "Option::is_none", rename = "statefulMode")] + pub stateful_mode: Option, + /// StatefulRollingUpdateStrategy allows configuration for strategyType + /// set it to RollingUpdate for disabling operator statefulSet rollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "statefulRollingUpdateStrategy")] + pub stateful_rolling_update_strategy: Option, + /// StatefulStorage configures storage for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "statefulStorage")] + pub stateful_storage: Option, + /// StaticScrapeNamespaceSelector defines Namespaces to be selected for VMStaticScrape discovery. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "staticScrapeNamespaceSelector")] + pub static_scrape_namespace_selector: Option, + /// StaticScrapeRelabelTemplate defines relabel config, that will be added to each VMStaticScrape. + /// it's useful for adding specific labels to all targets + #[serde(default, skip_serializing_if = "Option::is_none", rename = "staticScrapeRelabelTemplate")] + pub static_scrape_relabel_template: Option>, + /// StaticScrapeSelector defines VMStaticScrape to be selected for target discovery. + /// Works in combination with NamespaceSelector. + /// If both nil - match everything. + /// NamespaceSelector nil - only objects at VMAgent namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "staticScrapeSelector")] + pub static_scrape_selector: Option, + /// StreamAggrConfig defines global stream aggregation configuration for VMAgent + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamAggrConfig")] + pub stream_aggr_config: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + /// works only for deployments, statefulset always use OnDelete. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// UseVMConfigReloader replaces prometheus-like config-reloader + /// with vm one. It uses secrets watch instead of file watch + /// which greatly increases speed of config updates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useVMConfigReloader")] + pub use_vm_config_reloader: Option, + /// VMAgentExternalLabelName Name of vmAgent external label used to denote vmAgent instance + /// name. Defaults to the value of `prometheus`. External label will + /// _not_ be added when value is set to empty string (`""`). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vmAgentExternalLabelName")] + pub vm_agent_external_label_name: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// AdditionalScrapeConfigs As scrape configs are appended, the user is responsible to make sure it +/// is valid. Note that using this feature may expose the possibility to +/// break upgrades of VMAgent. It is advised to review VMAgent release +/// notes to ensure that no incompatible scrape configs are going to break +/// VMAgent after the upgrade. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentAdditionalScrapeConfigs { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// APIServerConfig allows specifying a host and auth methods to access apiserver. +/// If left empty, VMAgent is assumed to run inside of the cluster +/// and will discover API servers automatically and use the pod's CA certificate +/// and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfig { + /// Authorization configures generic authorization params + #[serde(default, skip_serializing_if = "Option::is_none")] + pub authorization: Option, + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Bearer token for accessing apiserver. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerToken")] + pub bearer_token: Option, + /// File to read bearer token for accessing apiserver. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Host of apiserver. + /// A valid string consisting of a hostname or IP followed by an optional port number + pub host: String, + /// TLSConfig Config to use for accessing apiserver. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, +} + +/// Authorization configures generic authorization params +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigAuthorization { + /// Reference to the secret with value for authorization + #[serde(default, skip_serializing_if = "Option::is_none")] + pub credentials: Option, + /// File with value for authorization + #[serde(default, skip_serializing_if = "Option::is_none", rename = "credentialsFile")] + pub credentials_file: Option, + /// Type of authorization, default to bearer + #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")] + pub r#type: Option, +} + +/// Reference to the secret with value for authorization +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigAuthorizationCredentials { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSConfig Config to use for accessing apiserver. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfig { + /// Struct containing the CA cert to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + /// Path to the CA cert in the container to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// Struct containing the client cert file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + /// Path to the client cert file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// Path to the client key file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Secret containing the client key file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// Struct containing the CA cert to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigCa { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigCaConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigCaSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Struct containing the client cert file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigCert { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigCertConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing the client key file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentApiServerConfigTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ArbitraryFSAccessThroughSMs configures whether configuration +/// based on EndpointAuth can access arbitrary files on the file system +/// of the VMAgent container e.g. bearer token files, basic auth, tls certs +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentArbitraryFsAccessThroughSMs { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub deny: Option, +} + +/// PersistentVolumeClaim is a user's request for and claim to a persistent volume +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplates { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// Standard object's metadata. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option>, + /// spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentClaimTemplatesStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. +/// Given secret reference will be added to the application and vm-config-reloader as volume +/// available since v0.57.0 version +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentConfigReloadAuthKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ConfigReloaderResources config-reloader container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentConfigReloaderResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentConfigReloaderResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentGlobalScrapeMetricRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentGlobalScrapeRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentInlineRelabelConfig { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// InsertPorts - additional listen ports for data ingestion. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentInsertPorts { + /// GraphitePort listen port + #[serde(default, skip_serializing_if = "Option::is_none", rename = "graphitePort")] + pub graphite_port: Option, + /// InfluxPort listen port + #[serde(default, skip_serializing_if = "Option::is_none", rename = "influxPort")] + pub influx_port: Option, + /// OpenTSDBHTTPPort for http connections. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "openTSDBHTTPPort")] + pub open_tsdbhttp_port: Option, + /// OpenTSDBPort for tcp and udp listen + #[serde(default, skip_serializing_if = "Option::is_none", rename = "openTSDBPort")] + pub open_tsdb_port: Option, +} + +/// License allows to configure license key to be used for enterprise features. +/// Using license key is supported starting from VictoriaMetrics v1.94.0. +/// See [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentLicense { + /// Enforce offline verification of the license key. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceOffline")] + pub force_offline: Option, + /// Enterprise license key. This flag is available only in [VictoriaMetrics enterprise]( + /// To request a trial license, [go to]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// KeyRef is reference to secret with license key for enterprise features. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyRef")] + pub key_ref: Option, + /// Interval to be used for checking for license key changes. Note that this is only applicable when using KeyRef. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "reloadInterval")] + pub reload_interval: Option, +} + +/// KeyRef is reference to secret with license key for enterprise features. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentLicenseKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAgentSpec defines the desired state of VMAgent +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAgentLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMAgentSpec defines the desired state of VMAgent +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAgentLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// NodeScrapeNamespaceSelector defines Namespaces to be selected for VMNodeScrape discovery. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentNodeScrapeNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentNodeScrapeNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentNodeScrapeRelabelTemplate { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// NodeScrapeSelector defines VMNodeScrape to be selected for scraping. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentNodeScrapeSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentNodeScrapeSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the vmagent pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodScrapeNamespaceSelector defines Namespaces to be selected for VMPodScrape discovery. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodScrapeNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodScrapeNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodScrapeRelabelTemplate { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// PodScrapeSelector defines PodScrapes to be selected for target discovery. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodScrapeSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentPodScrapeSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// ProbeNamespaceSelector defines Namespaces to be selected for VMProbe discovery. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentProbeNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentProbeNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentProbeScrapeRelabelTemplate { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// ProbeSelector defines VMProbe to be selected for target probing. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentProbeSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentProbeSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// RelabelConfig ConfigMap with global relabel config -remoteWrite.relabelConfig +/// This relabeling is applied to all the collected metrics before sending them to remote storage. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRelabelConfig { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAgentRemoteWriteSpec defines the remote storage configuration for VmAgent +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWrite { + /// AWS describes params specific to AWS cloud + #[serde(default, skip_serializing_if = "Option::is_none")] + pub aws: Option, + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// ForceVMProto forces using VictoriaMetrics protocol for sending data to -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceVMProto")] + pub force_vm_proto: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName: headerValue + /// vmagent supports since 1.79.0 version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// InlineUrlRelabelConfig defines relabeling config for remoteWriteURL, it can be defined at crd spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "inlineUrlRelabelConfig")] + pub inline_url_relabel_config: Option>, + /// MaxDiskUsage defines the maximum file-based buffer size in bytes for the given remoteWrite + /// It overrides global configuration defined at remoteWriteSettings.maxDiskUsagePerURL + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxDiskUsage")] + pub max_disk_usage: Option, + /// OAuth2 defines auth configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option, + /// ProxyURL for -remoteWrite.url. Supported proxies: http, https, socks5. Example: socks5://proxy:1234 + #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyURL")] + pub proxy_url: Option, + /// Timeout for sending a single block of data to -remoteWrite.url (default 1m0s) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sendTimeout")] + pub send_timeout: Option, + /// StreamAggrConfig defines stream aggregation configuration for VMAgent for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamAggrConfig")] + pub stream_aggr_config: Option, + /// TLSConfig describes tls configuration for remote write target + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, + /// URL of the endpoint to send samples to. + pub url: String, + /// ConfigMap with relabeling config which is applied to metrics before sending them to the corresponding -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "urlRelabelConfig")] + pub url_relabel_config: Option, +} + +/// AWS describes params specific to AWS cloud +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteAws { + /// EC2Endpoint is an optional AWS EC2 API endpoint to use for the corresponding -remoteWrite.url if -remoteWrite.aws.useSigv4 is set + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ec2Endpoint")] + pub ec2_endpoint: Option, + /// Region is an optional AWS region to use for the corresponding -remoteWrite.url if -remoteWrite.aws.useSigv4 is set + #[serde(default, skip_serializing_if = "Option::is_none")] + pub region: Option, + /// RoleARN is an optional AWS region to use for the corresponding -remoteWrite.url if -remoteWrite.aws.useSigv4 is set + #[serde(default, skip_serializing_if = "Option::is_none", rename = "roleARN")] + pub role_arn: Option, + /// Service is an optional AWS Service to use for the corresponding -remoteWrite.url if -remoteWrite.aws.useSigv4 is set + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, + /// STSEndpoint is an optional AWS STS API endpoint to use for the corresponding -remoteWrite.url if -remoteWrite.aws.useSigv4 is set + #[serde(default, skip_serializing_if = "Option::is_none", rename = "stsEndpoint")] + pub sts_endpoint: Option, + /// UseSigv4 enables SigV4 request signing for the corresponding -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useSigv4")] + pub use_sigv4: Option, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteInlineUrlRelabelConfig { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// OAuth2 defines auth configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteOauth2 { + /// The secret or configmap containing the OAuth2 client id + pub client_id: VmAgentRemoteWriteOauth2ClientId, + /// The secret containing the OAuth2 client secret + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_secret: Option, + /// ClientSecretFile defines path for client secret file. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_secret_file: Option, + /// Parameters to append to the token URL + #[serde(default, skip_serializing_if = "Option::is_none")] + pub endpoint_params: Option>, + /// The proxy URL for token_url connection + /// ( available from v0.55.0). + /// Is only supported by Scrape objects family + #[serde(default, skip_serializing_if = "Option::is_none")] + pub proxy_url: Option, + /// OAuth2 scopes used for the token request + #[serde(default, skip_serializing_if = "Option::is_none")] + pub scopes: Option>, + /// TLSConfig for token_url connection + /// ( available from v0.55.0). + /// Is only supported by Scrape objects family + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls_config: Option, + /// The URL to fetch the token from + pub token_url: String, +} + +/// The secret or configmap containing the OAuth2 client id +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteOauth2ClientId { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteOauth2ClientIdConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteOauth2ClientIdSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The secret containing the OAuth2 client secret +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteOauth2ClientSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// StreamAggrConfig defines stream aggregation configuration for VMAgent for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteStreamAggrConfig { + /// ConfigMap with stream aggregation rules + #[serde(default, skip_serializing_if = "Option::is_none")] + pub configmap: Option, + /// Allows setting different de-duplication intervals per each configured remote storage + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dedupInterval")] + pub dedup_interval: Option, + /// Allow drop all the input samples after the aggregation + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dropInput")] + pub drop_input: Option, + /// labels to drop from samples for aggregator before stream de-duplication and aggregation + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dropInputLabels")] + pub drop_input_labels: Option>, + /// EnableWindows enables aggregating data in separate windows ( available from v0.54.0). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableWindows")] + pub enable_windows: Option, + /// IgnoreFirstIntervals instructs to ignore first interval + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstIntervals")] + pub ignore_first_intervals: Option, + /// IgnoreFirstSampleInterval sets interval for total and prometheus_total during which first samples will be ignored + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstSampleInterval")] + pub ignore_first_sample_interval: Option, + /// IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreOldSamples")] + pub ignore_old_samples: Option, + /// Allows writing both raw and aggregate data + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepInput")] + pub keep_input: Option, + /// Stream aggregation rules + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rules: Option>, +} + +/// ConfigMap with stream aggregation rules +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteStreamAggrConfigConfigmap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// StreamAggrRule defines the rule in stream aggregation config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteStreamAggrConfigRules { + /// By is an optional list of labels for grouping input series. + /// + /// See also Without. + /// + /// If neither By nor Without are set, then the Outputs are calculated + /// individually per each input time series. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub by: Option>, + /// DedupInterval is an optional interval for deduplication. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dedup_interval: Option, + /// DropInputLabels is an optional list with labels, which must be dropped before further processing of input samples. + /// + /// Labels are dropped before de-duplication and aggregation. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop_input_labels: Option>, + /// EnableWindows enables aggregating data in separate windows + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enable_windows: Option, + /// FlushOnShutdown defines whether to flush the aggregation state on process termination + /// or config reload. Is `false` by default. + /// It is not recommended changing this setting, unless unfinished aggregations states + /// are preferred to missing data points. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush_on_shutdown: Option, + /// IgnoreFirstSampleInterval sets interval for total and prometheus_total during which first samples will be ignored + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstSampleInterval")] + pub ignore_first_sample_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ignore_first_intervals: Option, + /// IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ignore_old_samples: Option, + /// InputRelabelConfigs is an optional relabeling rules, which are applied on the input + /// before aggregation. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub input_relabel_configs: Option>, + /// Interval is the interval between aggregations. + pub interval: String, + /// KeepMetricNames instructs to leave metric names as is for the output time series without adding any suffix. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_metric_names: Option, + /// Match is a label selector (or list of label selectors) for filtering time series for the given selector. + /// + /// If the match isn't set, then all the input time series are processed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// NoAlignFlushToInterval disables aligning of flushes to multiples of Interval. + /// By default flushes are aligned to Interval. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub no_align_flush_to_interval: Option, + /// OutputRelabelConfigs is an optional relabeling rules, which are applied + /// on the aggregated output before being sent to remote storage. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub output_relabel_configs: Option>, + /// Outputs is a list of output aggregate functions to produce. + /// + /// The following names are allowed: + /// + /// - total - aggregates input counters + /// - increase - counts the increase over input counters + /// - count_series - counts the input series + /// - count_samples - counts the input samples + /// - sum_samples - sums the input samples + /// - last - the last biggest sample value + /// - min - the minimum sample value + /// - max - the maximum sample value + /// - avg - the average value across all the samples + /// - stddev - standard deviation across all the samples + /// - stdvar - standard variance across all the samples + /// - histogram_bucket - creates VictoriaMetrics histogram for input samples + /// - quantiles(phi1, ..., phiN) - quantiles' estimation for phi in the range [0..1] + /// + /// The output time series will have the following names: + /// + /// input_name:aggr__ + pub outputs: Vec, + /// Staleness interval is interval after which the series state will be reset if no samples have been sent during it. + /// The parameter is only relevant for outputs: total, total_prometheus, increase, increase_prometheus and histogram_bucket. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub staleness_interval: Option, + /// Without is an optional list of labels, which must be excluded when grouping input series. + /// + /// See also By. + /// + /// If neither By nor Without are set, then the Outputs are calculated + /// individually per each input time series. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub without: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteStreamAggrConfigRulesInputRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteStreamAggrConfigRulesOutputRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// TLSConfig describes tls configuration for remote write target +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfig { + /// Struct containing the CA cert to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + /// Path to the CA cert in the container to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// Struct containing the client cert file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + /// Path to the client cert file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// Path to the client key file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Secret containing the client key file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// Struct containing the CA cert to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigCa { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigCaConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigCaSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Struct containing the client cert file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigCert { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigCertConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing the client key file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ConfigMap with relabeling config which is applied to metrics before sending them to the corresponding -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteUrlRelabelConfig { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// RemoteWriteSettings defines global settings for all remoteWrite urls. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRemoteWriteSettings { + /// Interval for flushing the data to remote storage. (default 1s) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flushInterval")] + pub flush_interval: Option, + /// Labels in the form 'name=value' to add to all the metrics before sending them. This overrides the label if it already exists. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub label: Option>, + /// The maximum size in bytes of unpacked request to send to remote storage + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxBlockSize")] + pub max_block_size: Option, + /// The maximum file-based buffer size in bytes at -remoteWrite.tmpDataPath + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxDiskUsagePerURL")] + pub max_disk_usage_per_url: Option, + /// The number of concurrent queues + #[serde(default, skip_serializing_if = "Option::is_none")] + pub queues: Option, + /// Whether to show -remoteWrite.url in the exported metrics. It is hidden by default, since it can contain sensitive auth info + #[serde(default, skip_serializing_if = "Option::is_none", rename = "showURL")] + pub show_url: Option, + /// Path to directory where temporary data for remote write component is stored (default vmagent-remotewrite-data) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tmpDataPath")] + pub tmp_data_path: Option, + /// Configures vmagent accepting data via the same multitenant endpoints as vminsert at VictoriaMetrics cluster does, + /// see [here]( + /// it's global setting and affects all remote storage configurations + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useMultiTenantMode")] + pub use_multi_tenant_mode: Option, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ScrapeConfigNamespaceSelector defines Namespaces to be selected for VMScrapeConfig discovery. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentScrapeConfigNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentScrapeConfigNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentScrapeConfigRelabelTemplate { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// ScrapeConfigSelector defines VMScrapeConfig to be selected for target discovery. +/// Works in combination with NamespaceSelector. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentScrapeConfigSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentScrapeConfigSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// ServiceScrapeNamespaceSelector Namespaces to be selected for VMServiceScrape discovery. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceScrapeNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceScrapeNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceScrapeRelabelTemplate { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// ServiceScrapeSelector defines ServiceScrapes to be selected for target discovery. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceScrapeSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceScrapeSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// ServiceSpec that will be added to vmagent service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// StatefulStorage configures storage for StatefulSet +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// A PVC spec to be used by the StatefulSets/Deployments. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplate { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// Spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// Status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// Status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatefulStorageVolumeClaimTemplateStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// StaticScrapeNamespaceSelector defines Namespaces to be selected for VMStaticScrape discovery. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStaticScrapeNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStaticScrapeNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStaticScrapeRelabelTemplate { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// StaticScrapeSelector defines VMStaticScrape to be selected for target discovery. +/// Works in combination with NamespaceSelector. +/// If both nil - match everything. +/// NamespaceSelector nil - only objects at VMAgent namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStaticScrapeSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStaticScrapeSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// StreamAggrConfig defines global stream aggregation configuration for VMAgent +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStreamAggrConfig { + /// ConfigMap with stream aggregation rules + #[serde(default, skip_serializing_if = "Option::is_none")] + pub configmap: Option, + /// Allows setting different de-duplication intervals per each configured remote storage + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dedupInterval")] + pub dedup_interval: Option, + /// Allow drop all the input samples after the aggregation + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dropInput")] + pub drop_input: Option, + /// labels to drop from samples for aggregator before stream de-duplication and aggregation + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dropInputLabels")] + pub drop_input_labels: Option>, + /// EnableWindows enables aggregating data in separate windows ( available from v0.54.0). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableWindows")] + pub enable_windows: Option, + /// IgnoreFirstIntervals instructs to ignore first interval + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstIntervals")] + pub ignore_first_intervals: Option, + /// IgnoreFirstSampleInterval sets interval for total and prometheus_total during which first samples will be ignored + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstSampleInterval")] + pub ignore_first_sample_interval: Option, + /// IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreOldSamples")] + pub ignore_old_samples: Option, + /// Allows writing both raw and aggregate data + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepInput")] + pub keep_input: Option, + /// Stream aggregation rules + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rules: Option>, +} + +/// ConfigMap with stream aggregation rules +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStreamAggrConfigConfigmap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// StreamAggrRule defines the rule in stream aggregation config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStreamAggrConfigRules { + /// By is an optional list of labels for grouping input series. + /// + /// See also Without. + /// + /// If neither By nor Without are set, then the Outputs are calculated + /// individually per each input time series. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub by: Option>, + /// DedupInterval is an optional interval for deduplication. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dedup_interval: Option, + /// DropInputLabels is an optional list with labels, which must be dropped before further processing of input samples. + /// + /// Labels are dropped before de-duplication and aggregation. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop_input_labels: Option>, + /// EnableWindows enables aggregating data in separate windows + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enable_windows: Option, + /// FlushOnShutdown defines whether to flush the aggregation state on process termination + /// or config reload. Is `false` by default. + /// It is not recommended changing this setting, unless unfinished aggregations states + /// are preferred to missing data points. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush_on_shutdown: Option, + /// IgnoreFirstSampleInterval sets interval for total and prometheus_total during which first samples will be ignored + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstSampleInterval")] + pub ignore_first_sample_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ignore_first_intervals: Option, + /// IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ignore_old_samples: Option, + /// InputRelabelConfigs is an optional relabeling rules, which are applied on the input + /// before aggregation. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub input_relabel_configs: Option>, + /// Interval is the interval between aggregations. + pub interval: String, + /// KeepMetricNames instructs to leave metric names as is for the output time series without adding any suffix. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_metric_names: Option, + /// Match is a label selector (or list of label selectors) for filtering time series for the given selector. + /// + /// If the match isn't set, then all the input time series are processed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// NoAlignFlushToInterval disables aligning of flushes to multiples of Interval. + /// By default flushes are aligned to Interval. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub no_align_flush_to_interval: Option, + /// OutputRelabelConfigs is an optional relabeling rules, which are applied + /// on the aggregated output before being sent to remote storage. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub output_relabel_configs: Option>, + /// Outputs is a list of output aggregate functions to produce. + /// + /// The following names are allowed: + /// + /// - total - aggregates input counters + /// - increase - counts the increase over input counters + /// - count_series - counts the input series + /// - count_samples - counts the input samples + /// - sum_samples - sums the input samples + /// - last - the last biggest sample value + /// - min - the minimum sample value + /// - max - the maximum sample value + /// - avg - the average value across all the samples + /// - stddev - standard deviation across all the samples + /// - stdvar - standard variance across all the samples + /// - histogram_bucket - creates VictoriaMetrics histogram for input samples + /// - quantiles(phi1, ..., phiN) - quantiles' estimation for phi in the range [0..1] + /// + /// The output time series will have the following names: + /// + /// input_name:aggr__ + pub outputs: Vec, + /// Staleness interval is interval after which the series state will be reset if no samples have been sent during it. + /// The parameter is only relevant for outputs: total, total_prometheus, increase, increase_prometheus and histogram_bucket. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub staleness_interval: Option, + /// Without is an optional list of labels, which must be excluded when grouping input series. + /// + /// See also By. + /// + /// If neither By nor Without are set, then the Outputs are calculated + /// individually per each input time series. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub without: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStreamAggrConfigRulesInputRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStreamAggrConfigRulesOutputRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VMAgentSpec defines the desired state of VMAgent +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAgentUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VMAgentStatus defines the observed state of VMAgent +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAgentStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// ReplicaCount Total number of pods targeted by this VMAgent + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replicas: Option, + /// Selector string form of label value set for autoscaling + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// Shards represents total number of vmagent deployments with uniq scrape targets + #[serde(default, skip_serializing_if = "Option::is_none")] + pub shards: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagerconfigs.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagerconfigs.rs index d5c1eef58..26302157a 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagerconfigs.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagerconfigs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalertmanagerconfigs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagers.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagers.rs new file mode 100644 index 000000000..a6691eb8e --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalertmanagers.rs @@ -0,0 +1,2066 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalertmanagers.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// Specification of the desired behavior of the VMAlertmanager cluster. More info: +/// +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1beta1", kind = "VMAlertmanager", plural = "vmalertmanagers")] +#[kube(namespaced)] +#[kube(status = "VmAlertmanagerStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmAlertmanagerSpec { + /// AdditionalPeers allows injecting a set of additional Alertmanagers to peer with to form a highly available cluster. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "additionalPeers")] + pub additional_peers: Option>, + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>, + /// ClusterAdvertiseAddress is the explicit address to advertise in cluster. + /// Needs to be provided for non RFC1918 [1] (public) addresses. + /// [1] RFC1918: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterAdvertiseAddress")] + pub cluster_advertise_address: Option, + /// ClusterDomainName defines domain name suffix for in-cluster dns addresses + /// aka .cluster.local + /// used to build pod peer addresses for in-cluster communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterDomainName")] + pub cluster_domain_name: Option, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// ConfigNamespaceSelector defines namespace selector for VMAlertmanagerConfig. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAlertmanager namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configNamespaceSelector")] + pub config_namespace_selector: Option, + /// ConfigRawYaml - raw configuration for alertmanager, + /// it helps it to start without secret. + /// priority -> hardcoded ConfigRaw -> ConfigRaw, provided by user -> ConfigSecret. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configRawYaml")] + pub config_raw_yaml: Option, + /// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. + /// Given secret reference will be added to the application and vm-config-reloader as volume + /// available since v0.57.0 version + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloadAuthKeySecret")] + pub config_reload_auth_key_secret: Option, + /// ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container + /// for example resyncInterval: "30s" + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderExtraArgs")] + pub config_reloader_extra_args: Option>, + /// ConfigReloaderImageTag defines image:tag for config-reloader container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderImageTag")] + pub config_reloader_image_tag: Option, + /// ConfigReloaderResources config-reloader container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderResources")] + pub config_reloader_resources: Option, + /// ConfigSecret is the name of a Kubernetes Secret in the same namespace as the + /// VMAlertmanager object, which contains configuration for this VMAlertmanager, + /// configuration must be inside secret key: alertmanager.yaml. + /// It must be created by user. + /// instance. Defaults to 'vmalertmanager-' + /// The secret is mounted into /etc/alertmanager/config. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configSecret")] + pub config_secret: Option, + /// ConfigSelector defines selector for VMAlertmanagerConfig, result config will be merged with with Raw or Secret config. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAlertmanager namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configSelector")] + pub config_selector: Option, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableNamespaceMatcher disables adding top route label matcher "namespace = " for VMAlertmanagerConfig + /// It may be useful if alert doesn't have namespace label for some reason + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableNamespaceMatcher")] + pub disable_namespace_matcher: Option, + /// DisableRouteContinueEnforce cancel the behavior for VMAlertmanagerConfig that always enforce first-level route continue to true + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableRouteContinueEnforce")] + pub disable_route_continue_enforce: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// EnforcedNamespaceLabel defines the namespace label key for top route matcher for VMAlertmanagerConfig + /// Default is "namespace" + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enforcedNamespaceLabel")] + pub enforced_namespace_label: Option, + /// EnforcedTopRouteMatchers defines label matchers to be added for the top route + /// of VMAlertmanagerConfig + /// It allows to make some set of labels required for alerts. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enforcedTopRouteMatchers")] + pub enforced_top_route_matchers: Option>, + /// ExternalURL the VMAlertmanager instances will be available under. This is + /// necessary to generate correct URLs. This is necessary if VMAlertmanager is not + /// served from root of a DNS name. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalURL")] + pub external_url: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// GossipConfig defines gossip TLS configuration for Alertmanager cluster + #[serde(default, skip_serializing_if = "Option::is_none", rename = "gossipConfig")] + pub gossip_config: Option, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// ListenLocal makes the VMAlertmanager server listen on loopback, so that it + /// does not bind against the Pod IP. Note this is only for the VMAlertmanager + /// UI, not the gossip communication. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "listenLocal")] + pub listen_local: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMAlertmanager to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// Log level for VMAlertmanager to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the alertmanager pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PortName used for the pods and governing service. + /// This defaults to web + #[serde(default, skip_serializing_if = "Option::is_none", rename = "portName")] + pub port_name: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// Retention Time duration VMAlertmanager shall retain data for. Default is '120h', + /// and must match the regular expression `[0-9]+(ms|s|m|h)` (milliseconds seconds minutes hours). + #[serde(default, skip_serializing_if = "Option::is_none")] + pub retention: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdateStrategy defines strategy for application updates + /// Default is OnDelete, in this case operator handles update process + /// Can be changed for RollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RoutePrefix VMAlertmanager registers HTTP handlers for. This is useful, + /// if using ExternalURL and a proxy is rewriting HTTP routes of a request, + /// and the actual ExternalURL is still true, but the server serves requests + /// under a different route prefix. For example for use with `kubectl proxy`. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "routePrefix")] + pub route_prefix: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// SelectAllByDefault changes default behavior for empty CRD selectors, such ConfigSelector. + /// with selectAllByDefault: true and undefined ConfigSelector and ConfigNamespaceSelector + /// Operator selects all exist alertManagerConfigs + /// with selectAllByDefault: false - selects nothing + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectAllByDefault")] + pub select_all_by_default: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vmalertmanager VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vmalertmanager service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage is the definition of how storage will be used by the VMAlertmanager + /// instances. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// Templates is a list of ConfigMap key references for ConfigMaps in the same namespace as the VMAlertmanager + /// object, which shall be mounted into the VMAlertmanager Pods. + /// The Templates are mounted into /etc/vm/templates//. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub templates: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// UseVMConfigReloader replaces prometheus-like config-reloader + /// with vm one. It uses secrets watch instead of file watch + /// which greatly increases speed of config updates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useVMConfigReloader")] + pub use_vm_config_reloader: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, + /// WebConfig defines configuration for webserver + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "webConfig")] + pub web_config: Option, +} + +/// PersistentVolumeClaim is a user's request for and claim to a persistent volume +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplates { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// Standard object's metadata. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option>, + /// spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerClaimTemplatesStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// ConfigNamespaceSelector defines namespace selector for VMAlertmanagerConfig. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAlertmanager namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. +/// Given secret reference will be added to the application and vm-config-reloader as volume +/// available since v0.57.0 version +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigReloadAuthKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ConfigReloaderResources config-reloader container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigReloaderResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigReloaderResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ConfigSelector defines selector for VMAlertmanagerConfig, result config will be merged with with Raw or Secret config. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAlertmanager namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerConfigSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// GossipConfig defines gossip TLS configuration for Alertmanager cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfig { + /// TLSClientConfig defines client TLS configuration for alertmanager + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls_client_config: Option, + /// TLSServerConfig defines server TLS configuration for alertmanager + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls_server_config: Option, +} + +/// TLSClientConfig defines client TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsClientConfig { + /// CAFile defines path to the pre-mounted file with CA + /// mutually exclusive with CASecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca_file: Option, + /// CA defines reference for secret with CA content under given key + /// mutually exclusive with CAFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca_secret_ref: Option, + /// CertFile defines path to the pre-mounted file with certificate + /// mutually exclusive with CertSecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_file: Option, + /// CertSecretRef defines reference for secret with certificate content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_secret_ref: Option, + /// Cert defines reference for secret with CA content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub insecure_skip_verify: Option, + /// KeyFile defines path to the pre-mounted file with certificate key + /// mutually exclusive with KeySecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_file: Option, + /// Key defines reference for secret with certificate key content under given key + /// mutually exclusive with KeyFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_secret_ref: Option, + /// ServerName indicates a name of a server + #[serde(default, skip_serializing_if = "Option::is_none")] + pub server_name: Option, +} + +/// CA defines reference for secret with CA content under given key +/// mutually exclusive with CAFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsClientConfigCaSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// CertSecretRef defines reference for secret with certificate content under given key +/// mutually exclusive with CertFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsClientConfigCertSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Key defines reference for secret with certificate key content under given key +/// mutually exclusive with KeyFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsClientConfigKeySecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsServerConfig { + /// CertFile defines path to the pre-mounted file with certificate + /// mutually exclusive with CertSecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_file: Option, + /// CertSecretRef defines reference for secret with certificate content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_secret_ref: Option, + /// CipherSuites defines list of supported cipher suites for TLS versions up to TLS 1.2 + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cipher_suites: Option>, + /// Cert defines reference for secret with CA content under given key + /// mutually exclusive with CertFile + /// ClientAuthType defines server policy for client authentication + /// If you want to enable client authentication (aka mTLS), you need to use RequireAndVerifyClientCert + /// Note, mTLS is supported only at enterprise version of VictoriaMetrics components + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_auth_type: Option, + /// ClientCAFile defines path to the pre-mounted file with CA + /// mutually exclusive with ClientCASecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_ca_file: Option, + /// ClientCASecretRef defines reference for secret with CA content under given key + /// mutually exclusive with ClientCAFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_ca_secret_ref: Option, + /// CurvePreferences defines elliptic curves that will be used in an ECDHE handshake, in preference order. + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub curve_preferences: Option>, + /// KeyFile defines path to the pre-mounted file with certificate key + /// mutually exclusive with KeySecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_file: Option, + /// Key defines reference for secret with certificate key content under given key + /// mutually exclusive with KeyFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_secret_ref: Option, + /// MaxVersion maximum TLS version that is acceptable. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_version: Option, + /// MinVersion minimum TLS version that is acceptable. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub min_version: Option, + /// PreferServerCipherSuites controls whether the server selects the + /// client's most preferred ciphersuite + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefer_server_cipher_suites: Option, +} + +/// CertSecretRef defines reference for secret with certificate content under given key +/// mutually exclusive with CertFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsServerConfigCertSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerGossipConfigTlsServerConfigClientAuthType { + NoClientCert, + RequireAndVerifyClientCert, +} + +/// ClientCASecretRef defines reference for secret with CA content under given key +/// mutually exclusive with ClientCAFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsServerConfigClientCaSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Key defines reference for secret with certificate key content under given key +/// mutually exclusive with KeyFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerGossipConfigTlsServerConfigKeySecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerGossipConfigTlsServerConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerGossipConfigTlsServerConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Specification of the desired behavior of the VMAlertmanager cluster. More info: +/// +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerLogFormat { + #[serde(rename = "logfmt")] + Logfmt, + #[serde(rename = "json")] + Json, +} + +/// Specification of the desired behavior of the VMAlertmanager cluster. More info: +/// +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerLogLevel { + #[serde(rename = "debug")] + Debug, + #[serde(rename = "info")] + Info, + #[serde(rename = "warn")] + Warn, + #[serde(rename = "error")] + Error, + #[serde(rename = "DEBUG")] + DebugX, + #[serde(rename = "INFO")] + InfoX, + #[serde(rename = "WARN")] + WarnX, + #[serde(rename = "ERROR")] + ErrorX, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerPersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the alertmanager pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ServiceSpec that will be added to vmalertmanager service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage is the definition of how storage will be used by the VMAlertmanager +/// instances. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// A PVC spec to be used by the StatefulSets/Deployments. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplate { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// Spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// Status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// Status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStorageVolumeClaimTemplateStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// ConfigMapKeyReference refers to a key in a ConfigMap. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerTemplates { + /// The ConfigMap key to refer to. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// WebConfig defines configuration for webserver +/// +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerWebConfig { + /// BasicAuthUsers Usernames and hashed passwords that have full access to the web server + /// Passwords must be hashed with bcrypt + #[serde(default, skip_serializing_if = "Option::is_none")] + pub basic_auth_users: Option>, + /// HTTPServerConfig defines http server configuration for alertmanager web server + #[serde(default, skip_serializing_if = "Option::is_none")] + pub http_server_config: Option, + /// TLSServerConfig defines server TLS configuration for alertmanager + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tls_server_config: Option, +} + +/// HTTPServerConfig defines http server configuration for alertmanager web server +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerWebConfigHttpServerConfig { + /// Headers defines list of headers that can be added to HTTP responses. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// HTTP2 enables HTTP/2 support. Note that HTTP/2 is only supported with TLS. + /// This can not be changed on the fly. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub http2: Option, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerWebConfigTlsServerConfig { + /// CertFile defines path to the pre-mounted file with certificate + /// mutually exclusive with CertSecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_file: Option, + /// CertSecretRef defines reference for secret with certificate content under given key + /// mutually exclusive with CertFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert_secret_ref: Option, + /// CipherSuites defines list of supported cipher suites for TLS versions up to TLS 1.2 + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cipher_suites: Option>, + /// Cert defines reference for secret with CA content under given key + /// mutually exclusive with CertFile + /// ClientAuthType defines server policy for client authentication + /// If you want to enable client authentication (aka mTLS), you need to use RequireAndVerifyClientCert + /// Note, mTLS is supported only at enterprise version of VictoriaMetrics components + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_auth_type: Option, + /// ClientCAFile defines path to the pre-mounted file with CA + /// mutually exclusive with ClientCASecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_ca_file: Option, + /// ClientCASecretRef defines reference for secret with CA content under given key + /// mutually exclusive with ClientCAFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub client_ca_secret_ref: Option, + /// CurvePreferences defines elliptic curves that will be used in an ECDHE handshake, in preference order. + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub curve_preferences: Option>, + /// KeyFile defines path to the pre-mounted file with certificate key + /// mutually exclusive with KeySecretRef + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_file: Option, + /// Key defines reference for secret with certificate key content under given key + /// mutually exclusive with KeyFile + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key_secret_ref: Option, + /// MaxVersion maximum TLS version that is acceptable. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_version: Option, + /// MinVersion minimum TLS version that is acceptable. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub min_version: Option, + /// PreferServerCipherSuites controls whether the server selects the + /// client's most preferred ciphersuite + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefer_server_cipher_suites: Option, +} + +/// CertSecretRef defines reference for secret with certificate content under given key +/// mutually exclusive with CertFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerWebConfigTlsServerConfigCertSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerWebConfigTlsServerConfigClientAuthType { + NoClientCert, + RequireAndVerifyClientCert, +} + +/// ClientCASecretRef defines reference for secret with CA content under given key +/// mutually exclusive with ClientCAFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerWebConfigTlsServerConfigClientCaSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Key defines reference for secret with certificate key content under given key +/// mutually exclusive with KeyFile +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerWebConfigTlsServerConfigKeySecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerWebConfigTlsServerConfigMaxVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +/// TLSServerConfig defines server TLS configuration for alertmanager +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertmanagerWebConfigTlsServerConfigMinVersion { + #[serde(rename = "TLS10")] + Tls10, + #[serde(rename = "TLS11")] + Tls11, + #[serde(rename = "TLS12")] + Tls12, + #[serde(rename = "TLS13")] + Tls13, +} + +/// Most recent observed status of the VMAlertmanager cluster. +/// Operator API itself. More info: +/// +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertmanagerStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalerts.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalerts.rs new file mode 100644 index 000000000..7b3db45de --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmalerts.rs @@ -0,0 +1,1596 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmalerts.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VMAlertSpec defines the desired state of VMAlert +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1beta1", kind = "VMAlert", plural = "vmalerts")] +#[kube(namespaced)] +#[kube(status = "VmAlertStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmAlertSpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. + /// Given secret reference will be added to the application and vm-config-reloader as volume + /// available since v0.57.0 version + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloadAuthKeySecret")] + pub config_reload_auth_key_secret: Option, + /// ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container + /// for example resyncInterval: "30s" + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderExtraArgs")] + pub config_reloader_extra_args: Option>, + /// ConfigReloaderImageTag defines image:tag for config-reloader container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderImageTag")] + pub config_reloader_image_tag: Option, + /// ConfigReloaderResources config-reloader container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderResources")] + pub config_reloader_resources: Option, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// Datasource Victoria Metrics or VMSelect url. Required parameter. e.g. + pub datasource: VmAlertDatasource, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// EnforcedNamespaceLabel enforces adding a namespace label of origin for each alert + /// and metric that is user created. The label value will always be the namespace of the object that is + /// being created. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enforcedNamespaceLabel")] + pub enforced_namespace_label: Option, + /// EvaluationInterval defines how often to evaluate rules by default + #[serde(default, skip_serializing_if = "Option::is_none", rename = "evaluationInterval")] + pub evaluation_interval: Option, + /// ExternalLabels in the form 'name: value' to add to all generated recording rules and alerts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalLabels")] + pub external_labels: Option>, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// License allows to configure license key to be used for enterprise features. + /// Using license key is supported starting from VictoriaMetrics v1.94.0. + /// See [here]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub license: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMAlert to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMAlert to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Notifier prometheus alertmanager endpoint spec. Required at least one of notifier or notifiers when there are alerting rules. e.g. + /// If specified both notifier and notifiers, notifier will be added as last element to notifiers. + /// only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier + #[serde(default, skip_serializing_if = "Option::is_none")] + pub notifier: Option, + /// NotifierConfigRef reference for secret with notifier configuration for vmalert + /// only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier + #[serde(default, skip_serializing_if = "Option::is_none", rename = "notifierConfigRef")] + pub notifier_config_ref: Option, + /// Notifiers prometheus alertmanager endpoints. Required at least one of notifier or notifiers when there are alerting rules. e.g. + /// If specified both notifier and notifiers, notifier will be added as last element to notifiers. + /// only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier + #[serde(default, skip_serializing_if = "Option::is_none")] + pub notifiers: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VMAlert pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// RemoteRead Optional URL to read vmalert state (persisted via RemoteWrite) + /// This configuration only makes sense if alerts state has been successfully + /// persisted (via RemoteWrite) before. + /// see -remoteRead.url docs in vmalerts for details. + /// E.g. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "remoteRead")] + pub remote_read: Option, + /// RemoteWrite Optional URL to remote-write compatible storage to persist + /// vmalert state and rule results to. + /// Rule results will be persisted according to each rule. + /// Alerts state will be persisted in the form of time series named ALERTS and ALERTS_FOR_STATE + /// see -remoteWrite.url docs in vmalerts for details. + /// E.g. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "remoteWrite")] + pub remote_write: Option, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuleNamespaceSelector to be selected for VMRules discovery. + /// Works in combination with Selector. + /// If both nil - behaviour controlled by selectAllByDefault + /// NamespaceSelector nil - only objects at VMAlert namespace. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ruleNamespaceSelector")] + pub rule_namespace_selector: Option, + /// RulePath to the file with alert rules. + /// Supports patterns. Flag can be specified multiple times. + /// Examples: + /// -rule /path/to/file. Path to a single file with alerting rules + /// -rule dir/*.yaml -rule /*.yaml. Relative path to all .yaml files in folder, + /// absolute path to all .yaml files in root. + /// by default operator adds /etc/vmalert/configs/base/vmalert.yaml + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rulePath")] + pub rule_path: Option>, + /// RuleSelector selector to select which VMRules to mount for loading alerting + /// rules from. + /// Works in combination with NamespaceSelector. + /// If both nil - behaviour controlled by selectAllByDefault + /// NamespaceSelector nil - only objects at VMAlert namespace. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ruleSelector")] + pub rule_selector: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// SelectAllByDefault changes default behavior for empty CRD selectors, such RuleSelector. + /// with selectAllByDefault: true and empty serviceScrapeSelector and RuleNamespaceSelector + /// Operator selects all exist serviceScrapes + /// with selectAllByDefault: false - selects nothing + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectAllByDefault")] + pub select_all_by_default: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vmalert VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vmalert service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// UseVMConfigReloader replaces prometheus-like config-reloader + /// with vm one. It uses secrets watch instead of file watch + /// which greatly increases speed of config updates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useVMConfigReloader")] + pub use_vm_config_reloader: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. +/// Given secret reference will be added to the application and vm-config-reloader as volume +/// available since v0.57.0 version +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertConfigReloadAuthKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ConfigReloaderResources config-reloader container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertConfigReloaderResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertConfigReloaderResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// Datasource Victoria Metrics or VMSelect url. Required parameter. e.g. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDatasource { + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName:headerValue + /// vmalert supports it since 1.79.0 version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// OAuth2 defines OAuth2 configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option>, + /// TLSConfig specifies TLSConfig configuration parameters. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option>, + /// Victoria Metrics or VMSelect url. Required parameter. E.g. + pub url: String, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDatasourceBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDatasourceBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDatasourceBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDatasourceBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// License allows to configure license key to be used for enterprise features. +/// Using license key is supported starting from VictoriaMetrics v1.94.0. +/// See [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertLicense { + /// Enforce offline verification of the license key. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceOffline")] + pub force_offline: Option, + /// Enterprise license key. This flag is available only in [VictoriaMetrics enterprise]( + /// To request a trial license, [go to]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// KeyRef is reference to secret with license key for enterprise features. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyRef")] + pub key_ref: Option, + /// Interval to be used for checking for license key changes. Note that this is only applicable when using KeyRef. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "reloadInterval")] + pub reload_interval: Option, +} + +/// KeyRef is reference to secret with license key for enterprise features. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertLicenseKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAlertSpec defines the desired state of VMAlert +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMAlertSpec defines the desired state of VMAlert +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// Notifier prometheus alertmanager endpoint spec. Required at least one of notifier or notifiers when there are alerting rules. e.g. +/// If specified both notifier and notifiers, notifier will be added as last element to notifiers. +/// only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifier { + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName:headerValue + /// vmalert supports it since 1.79.0 version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// OAuth2 defines OAuth2 configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option>, + /// Selector allows service discovery for alertmanager + /// in this case all matched vmalertmanager replicas will be added into vmalert notifier.url + /// as statefulset pod.fqdn + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// TLSConfig specifies TLSConfig configuration parameters. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option>, + /// AlertManager url. E.g. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub url: Option, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Selector allows service discovery for alertmanager +/// in this case all matched vmalertmanager replicas will be added into vmalert notifier.url +/// as statefulset pod.fqdn +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierSelector { + /// A label selector is a label query over a set of resources. The result of matchLabels and + /// matchExpressions are ANDed. An empty label selector matches all objects. A null + /// label selector matches no objects. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + /// NamespaceSelector is a selector for selecting either all namespaces or a + /// list of namespaces. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, +} + +/// A label selector is a label query over a set of resources. The result of matchLabels and +/// matchExpressions are ANDed. An empty label selector matches all objects. A null +/// label selector matches no objects. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierSelectorLabelSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierSelectorLabelSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// NamespaceSelector is a selector for selecting either all namespaces or a +/// list of namespaces. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierSelectorNamespaceSelector { + /// Boolean describing whether all namespaces are selected in contrast to a + /// list restricting them. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub any: Option, + /// List of namespace names. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchNames")] + pub match_names: Option>, +} + +/// NotifierConfigRef reference for secret with notifier configuration for vmalert +/// only one of notifier options could be chosen: notifierConfigRef or notifiers + notifier +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifierConfigRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAlertNotifierSpec defines the notifier url for sending information about alerts +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiers { + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName:headerValue + /// vmalert supports it since 1.79.0 version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// OAuth2 defines OAuth2 configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option>, + /// Selector allows service discovery for alertmanager + /// in this case all matched vmalertmanager replicas will be added into vmalert notifier.url + /// as statefulset pod.fqdn + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// TLSConfig specifies TLSConfig configuration parameters. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option>, + /// AlertManager url. E.g. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub url: Option, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Selector allows service discovery for alertmanager +/// in this case all matched vmalertmanager replicas will be added into vmalert notifier.url +/// as statefulset pod.fqdn +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersSelector { + /// A label selector is a label query over a set of resources. The result of matchLabels and + /// matchExpressions are ANDed. An empty label selector matches all objects. A null + /// label selector matches no objects. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")] + pub label_selector: Option, + /// NamespaceSelector is a selector for selecting either all namespaces or a + /// list of namespaces. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")] + pub namespace_selector: Option, +} + +/// A label selector is a label query over a set of resources. The result of matchLabels and +/// matchExpressions are ANDed. An empty label selector matches all objects. A null +/// label selector matches no objects. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersSelectorLabelSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersSelectorLabelSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// NamespaceSelector is a selector for selecting either all namespaces or a +/// list of namespaces. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertNotifiersSelectorNamespaceSelector { + /// Boolean describing whether all namespaces are selected in contrast to a + /// list restricting them. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub any: Option, + /// List of namespace names. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchNames")] + pub match_names: Option>, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VMAlert pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// RemoteRead Optional URL to read vmalert state (persisted via RemoteWrite) +/// This configuration only makes sense if alerts state has been successfully +/// persisted (via RemoteWrite) before. +/// see -remoteRead.url docs in vmalerts for details. +/// E.g. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteRead { + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName:headerValue + /// vmalert supports it since 1.79.0 version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// Lookback defines how far to look into past for alerts timeseries. For example, if lookback=1h then range from now() to now()-1h will be scanned. (default 1h0m0s) + /// Applied only to RemoteReadSpec + #[serde(default, skip_serializing_if = "Option::is_none")] + pub lookback: Option, + /// OAuth2 defines OAuth2 configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option>, + /// TLSConfig specifies TLSConfig configuration parameters. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option>, + /// URL of the endpoint to send samples to. + pub url: String, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteReadBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteReadBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteReadBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteReadBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// RemoteWrite Optional URL to remote-write compatible storage to persist +/// vmalert state and rule results to. +/// Rule results will be persisted according to each rule. +/// Alerts state will be persisted in the form of time series named ALERTS and ALERTS_FOR_STATE +/// see -remoteWrite.url docs in vmalerts for details. +/// E.g. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteWrite { + /// BasicAuth allow an endpoint to authenticate over basic authentication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "basicAuth")] + pub basic_auth: Option, + /// Path to bearer token file + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenFile")] + pub bearer_token_file: Option, + /// Optional bearer auth token to use for -remoteWrite.url + #[serde(default, skip_serializing_if = "Option::is_none", rename = "bearerTokenSecret")] + pub bearer_token_secret: Option, + /// Defines number of readers that concurrently write into remote storage (default 1) + #[serde(default, skip_serializing_if = "Option::is_none")] + pub concurrency: Option, + /// Defines interval of flushes to remote write endpoint (default 5s) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "flushInterval")] + pub flush_interval: Option, + /// Headers allow configuring custom http headers + /// Must be in form of semicolon separated header with value + /// e.g. + /// headerName:headerValue + /// vmalert supports it since 1.79.0 version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// Defines defines max number of timeseries to be flushed at once (default 1000) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxBatchSize")] + pub max_batch_size: Option, + /// Defines the max number of pending datapoints to remote write endpoint (default 100000) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxQueueSize")] + pub max_queue_size: Option, + /// OAuth2 defines OAuth2 configuration + #[serde(default, skip_serializing_if = "Option::is_none")] + pub oauth2: Option>, + /// TLSConfig specifies TLSConfig configuration parameters. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option>, + /// URL of the endpoint to send samples to. + pub url: String, +} + +/// BasicAuth allow an endpoint to authenticate over basic authentication +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteWriteBasicAuth { + /// Password defines reference for secret with password value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password: Option, + /// PasswordFile defines path to password file at disk + /// must be pre-mounted + #[serde(default, skip_serializing_if = "Option::is_none")] + pub password_file: Option, + /// Username defines reference for secret with username value + /// The secret needs to be in the same namespace as scrape object + #[serde(default, skip_serializing_if = "Option::is_none")] + pub username: Option, +} + +/// Password defines reference for secret with password value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteWriteBasicAuthPassword { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Username defines reference for secret with username value +/// The secret needs to be in the same namespace as scrape object +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteWriteBasicAuthUsername { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Optional bearer auth token to use for -remoteWrite.url +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRemoteWriteBearerTokenSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// RuleNamespaceSelector to be selected for VMRules discovery. +/// Works in combination with Selector. +/// If both nil - behaviour controlled by selectAllByDefault +/// NamespaceSelector nil - only objects at VMAlert namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRuleNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRuleNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// RuleSelector selector to select which VMRules to mount for loading alerting +/// rules from. +/// Works in combination with NamespaceSelector. +/// If both nil - behaviour controlled by selectAllByDefault +/// NamespaceSelector nil - only objects at VMAlert namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRuleSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertRuleSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// ServiceSpec that will be added to vmalert service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VMAlertSpec defines the desired state of VMAlert +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAlertUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VMAlertStatus defines the observed state of VMAlert +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAlertStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmauths.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmauths.rs new file mode 100644 index 000000000..136eb85c9 --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmauths.rs @@ -0,0 +1,1379 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmauths.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VMAuthSpec defines the desired state of VMAuth +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1beta1", kind = "VMAuth", plural = "vmauths")] +#[kube(namespaced)] +#[kube(status = "VmAuthStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmAuthSpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. + /// Given secret reference will be added to the application and vm-config-reloader as volume + /// available since v0.57.0 version + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloadAuthKeySecret")] + pub config_reload_auth_key_secret: Option, + /// ConfigReloaderExtraArgs that will be passed to VMAuths config-reloader container + /// for example resyncInterval: "30s" + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderExtraArgs")] + pub config_reloader_extra_args: Option>, + /// ConfigReloaderImageTag defines image:tag for config-reloader container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderImageTag")] + pub config_reloader_image_tag: Option, + /// ConfigReloaderResources config-reloader container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configReloaderResources")] + pub config_reloader_resources: Option, + /// ConfigSecret is the name of a Kubernetes Secret in the same namespace as the + /// VMAuth object, which contains auth configuration for vmauth, + /// configuration must be inside secret key: config.yaml. + /// It must be created and managed manually. + /// If it's defined, configuration for vmauth becomes unmanaged and operator'll not create any related secrets/config-reloaders + /// Deprecated: use externalConfig.secretRef instead + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configSecret")] + pub config_secret: Option, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExternalConfig defines a source of external VMAuth configuration. + /// If it's defined, configuration for vmauth becomes unmanaged and operator'll not create any related secrets/config-reloaders + #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalConfig")] + pub external_config: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// Ingress enables ingress configuration for VMAuth. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ingress: Option, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// InternalListenPort instructs vmauth to serve internal routes at given port + /// available from v0.56.0 operator + /// and v1.111.0 vmauth version + /// related doc + #[serde(default, skip_serializing_if = "Option::is_none", rename = "internalListenPort")] + pub internal_listen_port: Option, + /// License allows to configure license key to be used for enterprise features. + /// Using license key is supported starting from VictoriaMetrics v1.94.0. + /// See [here]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub license: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMAuth to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for victoria metrics single to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VMAuth pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// SelectAllByDefault changes default behavior for empty CRD selectors, such userSelector. + /// with selectAllByDefault: true and empty userSelector and userNamespaceSelector + /// Operator selects all exist users + /// with selectAllByDefault: false - selects nothing + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectAllByDefault")] + pub select_all_by_default: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vmauth VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vmsingle service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UnauthorizedAccessConfig configures access for un authorized users + /// + /// Deprecated: use unauthorizedUserAccessSpec instead + /// will be removed at v1.0 release + #[serde(default, skip_serializing_if = "Option::is_none", rename = "unauthorizedAccessConfig")] + pub unauthorized_access_config: Option, + /// UnauthorizedUserAccessSpec defines unauthorized_user config section of vmauth config + #[serde(default, skip_serializing_if = "Option::is_none", rename = "unauthorizedUserAccessSpec")] + pub unauthorized_user_access_spec: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseProxyProtocol enables proxy protocol for vmauth + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useProxyProtocol")] + pub use_proxy_protocol: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// UseVMConfigReloader replaces prometheus-like config-reloader + /// with vm one. It uses secrets watch instead of file watch + /// which greatly increases speed of config updates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useVMConfigReloader")] + pub use_vm_config_reloader: Option, + /// UserNamespaceSelector Namespaces to be selected for VMAuth discovery. + /// Works in combination with Selector. + /// NamespaceSelector nil - only objects at VMAuth namespace. + /// Selector nil - only objects at NamespaceSelector namespaces. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "userNamespaceSelector")] + pub user_namespace_selector: Option, + /// UserSelector defines VMUser to be selected for config file generation. + /// Works in combination with NamespaceSelector. + /// NamespaceSelector nil - only objects at VMAuth namespace. + /// If both nil - behaviour controlled by selectAllByDefault + #[serde(default, skip_serializing_if = "Option::is_none", rename = "userSelector")] + pub user_selector: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// ConfigReloadAuthKeySecret defines optional secret reference authKey for /-/reload API requests. +/// Given secret reference will be added to the application and vm-config-reloader as volume +/// available since v0.57.0 version +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthConfigReloadAuthKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ConfigReloaderResources config-reloader container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthConfigReloaderResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthConfigReloaderResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// ExternalConfig defines a source of external VMAuth configuration. +/// If it's defined, configuration for vmauth becomes unmanaged and operator'll not create any related secrets/config-reloaders +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthExternalConfig { + /// LocalPath contains static path to a config, which is managed externally for cases + /// when using secrets is not applicable, e.g.: Vault sidecar. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "localPath")] + pub local_path: Option, + /// SecretRef defines selector for externally managed secret which contains configuration + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// SecretRef defines selector for externally managed secret which contains configuration +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthExternalConfigSecretRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Ingress enables ingress configuration for VMAuth. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngress { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// ClassName defines ingress class name for VMAuth + #[serde(default, skip_serializing_if = "Option::is_none")] + pub class_name: Option, + /// ExtraRules - additional rules for ingress, + /// must be checked for correctness by user. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraRules")] + pub extra_rules: Option>, + /// ExtraTLS - additional TLS configuration for ingress + /// must be checked for correctness by user. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraTls")] + pub extra_tls: Option>, + /// Host defines ingress host parameter for default rule + /// It will be used, only if TlsHosts is empty + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// TlsHosts configures TLS access for ingress, tlsSecretName must be defined for it. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsHosts")] + pub tls_hosts: Option>, + /// TlsSecretName defines secretname at the VMAuth namespace with cert and key + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsSecretName")] + pub tls_secret_name: Option, +} + +/// IngressRule represents the rules mapping the paths under a specified host to +/// the related backend services. Incoming requests are first evaluated for a host +/// match, then routed to the backend associated with the matching IngressRuleValue. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRules { + /// host is the fully qualified domain name of a network host, as defined by RFC 3986. + /// Note the following deviations from the "host" part of the + /// URI as defined in RFC 3986: + /// 1. IPs are not allowed. Currently an IngressRuleValue can only apply to + /// the IP in the Spec of the parent Ingress. + /// 2. The `:` delimiter is not respected because ports are not allowed. + /// Currently the port of an Ingress is implicitly :80 for http and + /// :443 for https. + /// Both these may change in the future. + /// Incoming requests are matched against the host before the + /// IngressRuleValue. If the host is unspecified, the Ingress routes all + /// traffic based on the specified IngressRuleValue. + /// + /// host can be "precise" which is a domain name without the terminating dot of + /// a network host (e.g. "foo.bar.com") or "wildcard", which is a domain name + /// prefixed with a single wildcard label (e.g. "*.foo.com"). + /// The wildcard character '*' must appear by itself as the first DNS label and + /// matches only a single label. You cannot have a wildcard label by itself (e.g. Host == "*"). + /// Requests will be matched against the Host field in the following way: + /// 1. If host is precise, the request matches this rule if the http host header is equal to Host. + /// 2. If host is a wildcard, then the request matches this rule if the http host header + /// is to equal to the suffix (removing the first label) of the wildcard rule. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub host: Option, + /// HTTPIngressRuleValue is a list of http selectors pointing to backends. + /// In the example: /?> -> backend where + /// where parts of the url correspond to RFC 3986, this resource will be used + /// to match against everything after the last '/' and before the first '?' + /// or '#'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub http: Option, +} + +/// HTTPIngressRuleValue is a list of http selectors pointing to backends. +/// In the example: /?> -> backend where +/// where parts of the url correspond to RFC 3986, this resource will be used +/// to match against everything after the last '/' and before the first '?' +/// or '#'. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRulesHttp { + /// paths is a collection of paths that map requests to backends. + pub paths: Vec, +} + +/// HTTPIngressPath associates a path with a backend. Incoming urls matching the +/// path are forwarded to the backend. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRulesHttpPaths { + /// backend defines the referenced service endpoint to which the traffic + /// will be forwarded to. + pub backend: VmAuthIngressExtraRulesHttpPathsBackend, + /// path is matched against the path of an incoming request. Currently it can + /// contain characters disallowed from the conventional "path" part of a URL + /// as defined by RFC 3986. Paths must begin with a '/' and must be present + /// when using PathType with value "Exact" or "Prefix". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + /// pathType determines the interpretation of the path matching. PathType can + /// be one of the following values: + /// * Exact: Matches the URL path exactly. + /// * Prefix: Matches based on a URL path prefix split by '/'. Matching is + /// done on a path element by element basis. A path element refers is the + /// list of labels in the path split by the '/' separator. A request is a + /// match for path p if every p is an element-wise prefix of p of the + /// request path. Note that if the last element of the path is a substring + /// of the last element in request path, it is not a match (e.g. /foo/bar + /// matches /foo/bar/baz, but does not match /foo/barbaz). + /// * ImplementationSpecific: Interpretation of the Path matching is up to + /// the IngressClass. Implementations can treat this as a separate PathType + /// or treat it identically to Prefix or Exact path types. + /// Implementations are required to support all path types. + #[serde(rename = "pathType")] + pub path_type: String, +} + +/// backend defines the referenced service endpoint to which the traffic +/// will be forwarded to. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRulesHttpPathsBackend { + /// resource is an ObjectRef to another Kubernetes resource in the namespace + /// of the Ingress object. If resource is specified, a service.Name and + /// service.Port must not be specified. + /// This is a mutually exclusive setting with "Service". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resource: Option, + /// service references a service as a backend. + /// This is a mutually exclusive setting with "Resource". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub service: Option, +} + +/// resource is an ObjectRef to another Kubernetes resource in the namespace +/// of the Ingress object. If resource is specified, a service.Name and +/// service.Port must not be specified. +/// This is a mutually exclusive setting with "Service". +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRulesHttpPathsBackendResource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// service references a service as a backend. +/// This is a mutually exclusive setting with "Resource". +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRulesHttpPathsBackendService { + /// name is the referenced service. The service must exist in + /// the same namespace as the Ingress object. + pub name: String, + /// port of the referenced service. A port name or port number + /// is required for a IngressServiceBackend. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, +} + +/// port of the referenced service. A port name or port number +/// is required for a IngressServiceBackend. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraRulesHttpPathsBackendServicePort { + /// name is the name of the port on the Service. + /// This is a mutually exclusive setting with "Number". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// number is the numerical port number (e.g. 80) on the Service. + /// This is a mutually exclusive setting with "Name". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub number: Option, +} + +/// IngressTLS describes the transport layer security associated with an ingress. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthIngressExtraTls { + /// hosts is a list of hosts included in the TLS certificate. The values in + /// this list must match the name/s used in the tlsSecret. Defaults to the + /// wildcard host setting for the loadbalancer controller fulfilling this + /// Ingress, if left unspecified. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hosts: Option>, + /// secretName is the name of the secret used to terminate TLS traffic on + /// port 443. Field is left optional to allow TLS routing based on SNI + /// hostname alone. If the SNI host in a listener conflicts with the "Host" + /// header field used by an IngressRule, the SNI host is used for termination + /// and value of the "Host" header is used for routing. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretName")] + pub secret_name: Option, +} + +/// License allows to configure license key to be used for enterprise features. +/// Using license key is supported starting from VictoriaMetrics v1.94.0. +/// See [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthLicense { + /// Enforce offline verification of the license key. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceOffline")] + pub force_offline: Option, + /// Enterprise license key. This flag is available only in [VictoriaMetrics enterprise]( + /// To request a trial license, [go to]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// KeyRef is reference to secret with license key for enterprise features. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyRef")] + pub key_ref: Option, + /// Interval to be used for checking for license key changes. Note that this is only applicable when using KeyRef. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "reloadInterval")] + pub reload_interval: Option, +} + +/// KeyRef is reference to secret with license key for enterprise features. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthLicenseKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMAuthSpec defines the desired state of VMAuth +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAuthLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMAuthSpec defines the desired state of VMAuth +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAuthLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VMAuth pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ServiceSpec that will be added to vmsingle service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// UnauthorizedUserAccessSpec defines unauthorized_user config section of vmauth config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpec { + /// DefaultURLs backend url for non-matching paths filter + /// usually used for default backend with error message + #[serde(default, skip_serializing_if = "Option::is_none")] + pub default_url: Option>, + /// DiscoverBackendIPs instructs discovering URLPrefix backend IPs via DNS. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub discover_backend_ips: Option, + /// DropSrcPathPrefixParts is the number of `/`-delimited request path prefix parts to drop before proxying the request to backend. + /// See [here]( for more details. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop_src_path_prefix_parts: Option, + /// DumpRequestOnErrors instructs vmauth to return detailed request params to the client + /// if routing rules don't allow to forward request to the backends. + /// Useful for debugging `src_hosts` and `src_headers` based routing rules + /// + /// available since v1.107.0 vmauth version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dump_request_on_errors: Option, + /// Headers represent additional http headers, that vmauth uses + /// in form of ["header_key: header_value"] + /// multiple values for header key: + /// ["header_key: value1,value2"] + /// it's available since 1.68.0 version of vmauth + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// IPFilters defines per target src ip filters + /// supported only with enterprise version of [vmauth]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ip_filters: Option, + /// LoadBalancingPolicy defines load balancing policy to use for backend urls. + /// Supported policies: least_loaded, first_available. + /// See [here]( for more details (default "least_loaded") + #[serde(default, skip_serializing_if = "Option::is_none")] + pub load_balancing_policy: Option, + /// MaxConcurrentRequests defines max concurrent requests per user + /// 300 is default value for vmauth + #[serde(default, skip_serializing_if = "Option::is_none")] + pub max_concurrent_requests: Option, + /// MetricLabels - additional labels for metrics exported by vmauth for given user. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metric_labels: Option>, + /// ResponseHeaders represent additional http headers, that vmauth adds for request response + /// in form of ["header_key: header_value"] + /// multiple values for header key: + /// ["header_key: value1,value2"] + /// it's available since 1.93.0 version of vmauth + #[serde(default, skip_serializing_if = "Option::is_none")] + pub response_headers: Option>, + /// RetryStatusCodes defines http status codes in numeric format for request retries + /// e.g. [429,503] + #[serde(default, skip_serializing_if = "Option::is_none")] + pub retry_status_codes: Option>, + /// TLSConfig defines tls configuration for the backend connection + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsConfig")] + pub tls_config: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub url_map: Option>, + /// URLPrefix defines prefix prefix for destination + #[serde(default, skip_serializing_if = "Option::is_none")] + pub url_prefix: Option, +} + +/// IPFilters defines per target src ip filters +/// supported only with enterprise version of [vmauth]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecIpFilters { + #[serde(default, skip_serializing_if = "Option::is_none")] + pub allow_list: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub deny_list: Option>, +} + +/// UnauthorizedUserAccessSpec defines unauthorized_user config section of vmauth config +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAuthUnauthorizedUserAccessSpecLoadBalancingPolicy { + #[serde(rename = "least_loaded")] + LeastLoaded, + #[serde(rename = "first_available")] + FirstAvailable, +} + +/// TLSConfig defines tls configuration for the backend connection +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfig { + /// Struct containing the CA cert to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ca: Option, + /// Path to the CA cert in the container to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "caFile")] + pub ca_file: Option, + /// Struct containing the client cert file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub cert: Option, + /// Path to the client cert file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "certFile")] + pub cert_file: Option, + /// Disable target certificate validation. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insecureSkipVerify")] + pub insecure_skip_verify: Option, + /// Path to the client key file in the container for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyFile")] + pub key_file: Option, + /// Secret containing the client key file for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keySecret")] + pub key_secret: Option, + /// Used to verify the hostname for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverName")] + pub server_name: Option, +} + +/// Struct containing the CA cert to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigCa { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigCaConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigCaSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Struct containing the client cert file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigCert { + /// ConfigMap containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMap")] + pub config_map: Option, + /// Secret containing data to use for the targets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secret: Option, +} + +/// ConfigMap containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigCertConfigMap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing data to use for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigCertSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Secret containing the client key file for the targets. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecTlsConfigKeySecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// UnauthorizedAccessConfigURLMap defines element of url_map routing configuration +/// For UnauthorizedAccessConfig and VMAuthUnauthorizedUserAccessSpec.URLMap +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUnauthorizedUserAccessSpecUrlMap { + /// DiscoverBackendIPs instructs discovering URLPrefix backend IPs via DNS. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub discover_backend_ips: Option, + /// DropSrcPathPrefixParts is the number of `/`-delimited request path prefix parts to drop before proxying the request to backend. + /// See [here]( for more details. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop_src_path_prefix_parts: Option, + /// RequestHeaders represent additional http headers, that vmauth uses + /// in form of ["header_key: header_value"] + /// multiple values for header key: + /// ["header_key: value1,value2"] + /// it's available since 1.68.0 version of vmauth + #[serde(default, skip_serializing_if = "Option::is_none")] + pub headers: Option>, + /// LoadBalancingPolicy defines load balancing policy to use for backend urls. + /// Supported policies: least_loaded, first_available. + /// See [here]( for more details (default "least_loaded") + #[serde(default, skip_serializing_if = "Option::is_none")] + pub load_balancing_policy: Option, + /// ResponseHeaders represent additional http headers, that vmauth adds for request response + /// in form of ["header_key: header_value"] + /// multiple values for header key: + /// ["header_key: value1,value2"] + /// it's available since 1.93.0 version of vmauth + #[serde(default, skip_serializing_if = "Option::is_none")] + pub response_headers: Option>, + /// RetryStatusCodes defines http status codes in numeric format for request retries + /// Can be defined per target or at VMUser.spec level + /// e.g. [429,503] + #[serde(default, skip_serializing_if = "Option::is_none")] + pub retry_status_codes: Option>, + /// SrcHeaders is an optional list of headers, which must match request headers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub src_headers: Option>, + /// SrcHosts is an optional list of regular expressions, which must match the request hostname. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub src_hosts: Option>, + /// SrcPaths is an optional list of regular expressions, which must match the request path. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub src_paths: Option>, + /// SrcQueryArgs is an optional list of query args, which must match request URL query args. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub src_query_args: Option>, + /// UrlPrefix contains backend url prefixes for the proxied request url. + /// URLPrefix defines prefix prefix for destination + #[serde(default, skip_serializing_if = "Option::is_none")] + pub url_prefix: Option, +} + +/// UnauthorizedAccessConfigURLMap defines element of url_map routing configuration +/// For UnauthorizedAccessConfig and VMAuthUnauthorizedUserAccessSpec.URLMap +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmAuthUnauthorizedUserAccessSpecUrlMapLoadBalancingPolicy { + #[serde(rename = "least_loaded")] + LeastLoaded, + #[serde(rename = "first_available")] + FirstAvailable, +} + +/// UserNamespaceSelector Namespaces to be selected for VMAuth discovery. +/// Works in combination with Selector. +/// NamespaceSelector nil - only objects at VMAuth namespace. +/// Selector nil - only objects at NamespaceSelector namespaces. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUserNamespaceSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUserNamespaceSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// UserSelector defines VMUser to be selected for config file generation. +/// Works in combination with NamespaceSelector. +/// NamespaceSelector nil - only objects at VMAuth namespace. +/// If both nil - behaviour controlled by selectAllByDefault +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUserSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthUserSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VMAuthStatus defines the observed state of VMAuth +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmAuthStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmclusters.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmclusters.rs new file mode 100644 index 000000000..f8f9f73da --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmclusters.rs @@ -0,0 +1,2929 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmclusters.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VMClusterSpec defines the desired state of VMCluster +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1beta1", kind = "VMCluster", plural = "vmclusters")] +#[kube(namespaced)] +#[kube(status = "VmClusterStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmClusterSpec { + /// ClusterDomainName defines domain name suffix for in-cluster dns addresses + /// aka .cluster.local + /// used by vminsert and vmselect to build vmstorage address + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterDomainName")] + pub cluster_domain_name: Option, + /// ClusterVersion defines default images tag for all components. + /// it can be overwritten with component specific image.tag value. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterVersion")] + pub cluster_version: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// License allows to configure license key to be used for enterprise features. + /// Using license key is supported starting from VictoriaMetrics v1.94.0. + /// See [here]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub license: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// ReplicationFactor defines how many copies of data make among + /// distinct storage nodes + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicationFactor")] + pub replication_factor: Option, + /// RequestsLoadBalancer configures load-balancing for vminsert and vmselect requests. + /// It helps to evenly spread load across pods. + /// Usually it's not possible with Kubernetes TCP-based services. + /// See more [here]( + #[serde(default, skip_serializing_if = "Option::is_none", rename = "requestsLoadBalancer")] + pub requests_load_balancer: Option, + /// RetentionPeriod defines how long to retain stored metrics, specified as a duration (e.g., "1d", "1w", "1m"). + /// Data with timestamps outside the RetentionPeriod is automatically deleted. The minimum allowed value is 1d, or 24h. + /// The default value is 1 (one month). + /// See [retention]( docs for details. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionPeriod")] + pub retention_period: Option, + /// ServiceAccountName is the name of the ServiceAccount to use to run the + /// VMSelect, VMStorage and VMInsert Pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vminsert: Option, + /// VMSelect defines configuration section for vmselect components of the victoria-metrics cluster + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vmselect: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub vmstorage: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// License allows to configure license key to be used for enterprise features. +/// Using license key is supported starting from VictoriaMetrics v1.94.0. +/// See [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterLicense { + /// Enforce offline verification of the license key. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceOffline")] + pub force_offline: Option, + /// Enterprise license key. This flag is available only in [VictoriaMetrics enterprise]( + /// To request a trial license, [go to]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// KeyRef is reference to secret with license key for enterprise features. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyRef")] + pub key_ref: Option, + /// Interval to be used for checking for license key changes. Note that this is only applicable when using KeyRef. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "reloadInterval")] + pub reload_interval: Option, +} + +/// KeyRef is reference to secret with license key for enterprise features. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterLicenseKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// RequestsLoadBalancer configures load-balancing for vminsert and vmselect requests. +/// It helps to evenly spread load across pods. +/// Usually it's not possible with Kubernetes TCP-based services. +/// See more [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterRequestsLoadBalancer { + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableInsertBalancing")] + pub disable_insert_balancing: Option, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelectBalancing")] + pub disable_select_balancing: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, + /// VMAuthLoadBalancerSpec defines configuration spec for VMAuth used as load-balancer + /// for VMCluster component + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option>, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsert { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClusterNativePort for multi-level cluster setup. + /// More [details]( + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterNativeListenPort")] + pub cluster_native_listen_port: Option, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// HPA defines kubernetes PodAutoScaling configuration version 2. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hpa: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// InsertPorts - additional listen ports for data ingestion. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insertPorts")] + pub insert_ports: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMInsert to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMInsert to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VMInsert pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdate - overrides deployment update params. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdate")] + pub rolling_update: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vminsert VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vminsert service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UpdateStrategy - overrides default update strategy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStrategy")] + pub update_strategy: Option, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// InsertPorts - additional listen ports for data ingestion. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertInsertPorts { + /// GraphitePort listen port + #[serde(default, skip_serializing_if = "Option::is_none", rename = "graphitePort")] + pub graphite_port: Option, + /// InfluxPort listen port + #[serde(default, skip_serializing_if = "Option::is_none", rename = "influxPort")] + pub influx_port: Option, + /// OpenTSDBHTTPPort for http connections. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "openTSDBHTTPPort")] + pub open_tsdbhttp_port: Option, + /// OpenTSDBPort for tcp and udp listen + #[serde(default, skip_serializing_if = "Option::is_none", rename = "openTSDBPort")] + pub open_tsdb_port: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVminsertLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVminsertLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VMInsert pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdate - overrides deployment update params. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertRollingUpdate { + /// The maximum number of pods that can be scheduled above the desired number of + /// pods. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// This can not be 0 if MaxUnavailable is 0. + /// Absolute number is calculated from percentage by rounding up. + /// Defaults to 25%. + /// Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when + /// the rolling update starts, such that the total number of old and new pods do not exceed + /// 130% of desired pods. Once old pods have been killed, + /// new ReplicaSet can be scaled up further, ensuring that total number of pods running + /// at any time during the update is at most 130% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxSurge")] + pub max_surge: Option, + /// The maximum number of pods that can be unavailable during the update. + /// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). + /// Absolute number is calculated from percentage by rounding down. + /// This can not be 0 if MaxSurge is 0. + /// Defaults to 25%. + /// Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods + /// immediately when the rolling update starts. Once new pods are ready, old ReplicaSet + /// can be scaled down further, followed by scaling up the new ReplicaSet, ensuring + /// that the total number of pods available at all times during the update is at + /// least 70% of desired pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vminsert service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVminsertUpdateStrategy { + Recreate, + RollingUpdate, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVminsertVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VMSelect defines configuration section for vmselect components of the victoria-metrics cluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselect { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// CacheMountPath allows to add cache persistent for VMSelect, + /// will use "/cache" as default if not specified. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "cacheMountPath")] + pub cache_mount_path: Option, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>, + /// ClusterNativePort for multi-level cluster setup. + /// More [details]( + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterNativeListenPort")] + pub cluster_native_listen_port: Option, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Configures horizontal pod autoscaling. + /// Note, enabling this option disables vmselect to vmselect communication. In most cases it's not an issue. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hpa: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMSelect to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMSelect to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// Storage - add persistent volume for cacheMountPath + /// its useful for persistent cache + /// use storage instead of persistentVolume. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolume")] + pub persistent_volume: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VMSelect pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdateStrategy defines strategy for application updates + /// Default is OnDelete, in this case operator handles update process + /// Can be changed for RollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. + /// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategyBehavior")] + pub rolling_update_strategy_behavior: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vmselect VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vmselect service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// StorageSpec - add persistent volume claim for cacheMountPath + /// its needed for persistent cache + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// PersistentVolumeClaim is a user's request for and claim to a persistent volume +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectClaimTemplates { +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// VMSelect defines configuration section for vmselect components of the victoria-metrics cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVmselectLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMSelect defines configuration section for vmselect components of the victoria-metrics cluster +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVmselectLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// Storage - add persistent volume for cacheMountPath +/// its useful for persistent cache +/// use storage instead of persistentVolume. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectPersistentVolume { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option>, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectPersistentVolumeEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectPersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectPodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VMSelect pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectPodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. +/// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectRollingUpdateStrategyBehavior { + /// MaxUnavailable defines the maximum number of pods that can be unavailable during the update. + /// It can be specified as an absolute number (e.g. 2) or a percentage of the total pods (e.g. "50%"). + /// For example, if set to 100%, all pods will be upgraded at once, minimizing downtime when needed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be added to vmselect service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// StorageSpec - add persistent volume claim for cacheMountPath +/// its needed for persistent cache +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// A PVC spec to be used by the StatefulSets/Deployments. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplate { + /// APIVersion defines the versioned schema of this representation of an object. + /// Servers should convert recognized schemas to the latest internal value, and + /// may reject unrecognized values. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Kind is a string value representing the REST resource this object represents. + /// Servers may infer this from the endpoint the client submits requests to. + /// Cannot be updated. + /// In CamelCase. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub kind: Option, + /// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// Spec defines the desired characteristics of a volume requested by a pod author. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub spec: Option, + /// Status represents the current information/status of a persistent volume claim. + /// Read-only. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub status: Option, +} + +/// EmbeddedMetadata contains metadata relevant to an EmbeddedResource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Spec defines the desired characteristics of a volume requested by a pod author. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateSpec { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateSpecDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateSpecDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateSpecResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateSpecSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateSpecSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// Status represents the current information/status of a persistent volume claim. +/// Read-only. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateStatus { + /// accessModes contains the actual access modes the volume backing the PVC has. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// allocatedResourceStatuses stores status of resource being resized for the given PVC. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// ClaimResourceStatus can be in any of following states: + /// - ControllerResizeInProgress: + /// State set when resize controller starts resizing the volume in control-plane. + /// - ControllerResizeFailed: + /// State set when resize has failed in resize controller with a terminal error. + /// - NodeResizePending: + /// State set when resize controller has finished resizing the volume but further resizing of + /// volume is needed on the node. + /// - NodeResizeInProgress: + /// State set when kubelet starts resizing the volume. + /// - NodeResizeFailed: + /// State set when resizing has failed in kubelet with a terminal error. Transient errors don't set + /// NodeResizeFailed. + /// For example: if expanding a PVC for more capacity - this field can be one of the following states: + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "ControllerResizeFailed" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizePending" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeInProgress" + /// - pvc.status.allocatedResourceStatus['storage'] = "NodeResizeFailed" + /// When this field is not set, it means that no resize operation is in progress for the given PVC. + /// + /// A controller that receives PVC update with previously unknown resourceName or ClaimResourceStatus + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResourceStatuses")] + pub allocated_resource_statuses: Option>, + /// allocatedResources tracks the resources allocated to a PVC including its capacity. + /// Key names follow standard Kubernetes label syntax. Valid values are either: + /// * Un-prefixed keys: + /// - storage - the capacity of the volume. + /// * Custom resources must use implementation-defined prefixed names such as "example.com/my-custom-resource" + /// Apart from above values - keys that are unprefixed or have kubernetes.io prefix are considered + /// reserved and hence may not be used. + /// + /// Capacity reported here may be larger than the actual capacity when a volume expansion operation + /// is requested. + /// For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. + /// If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. + /// If a volume expansion capacity request is lowered, allocatedResources is only + /// lowered if there are no expansion operations in progress and if the actual volume capacity + /// is equal or lower than the requested capacity. + /// + /// A controller that receives PVC update with previously unknown resourceName + /// should ignore the update for the purpose it was designed. For example - a controller that + /// only is responsible for resizing capacity of the volume, should ignore PVC updates that change other valid + /// resources associated with PVC. + /// + /// This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "allocatedResources")] + pub allocated_resources: Option>, + /// capacity represents the actual resources of the underlying volume. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub capacity: Option>, + /// conditions is the current Condition of persistent volume claim. If underlying persistent volume is being + /// resized then the Condition will be set to 'Resizing'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. + /// When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "currentVolumeAttributesClassName")] + pub current_volume_attributes_class_name: Option, + /// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. + /// When this is unset, there is no ModifyVolume operation being attempted. + /// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "modifyVolumeStatus")] + pub modify_volume_status: Option, + /// phase represents the current phase of PersistentVolumeClaim. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub phase: Option, +} + +/// ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. +/// When this is unset, there is no ModifyVolume operation being attempted. +/// This is a beta field and requires enabling VolumeAttributesClass feature (off by default). +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectStorageVolumeClaimTemplateStatusModifyVolumeStatus { + /// status is the status of the ControllerModifyVolume operation. It can be in any of following states: + /// - Pending + /// Pending indicates that the PersistentVolumeClaim cannot be modified due to unmet requirements, such as + /// the specified VolumeAttributesClass not existing. + /// - InProgress + /// InProgress indicates that the volume is being modified. + /// - Infeasible + /// Infeasible indicates that the request has been rejected as invalid by the CSI driver. To + /// resolve the error, a valid VolumeAttributesClass needs to be specified. + /// Note: New statuses can be added in the future. Consumers should check for unknown statuses and fail appropriately. + pub status: String, + /// targetVolumeAttributesClassName is the name of the VolumeAttributesClass the PVC currently being reconciled + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetVolumeAttributesClassName")] + pub target_volume_attributes_class_name: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmselectVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorage { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ClaimTemplates allows adding additional VolumeClaimTemplates for StatefulSet + #[serde(default, skip_serializing_if = "Option::is_none", rename = "claimTemplates")] + pub claim_templates: Option>>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMStorage to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMStorage to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// MaintenanceInsertNodeIDs - excludes given node ids from insert requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. + /// lets say, you have pod-0, pod-1, pod-2, pod-3. to exclude pod-0 and pod-3 from insert routing, define nodeIDs: [0,3]. + /// Useful at storage expanding, when you want to rebalance some data at cluster. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maintenanceInsertNodeIDs")] + pub maintenance_insert_node_i_ds: Option>, + /// MaintenanceInsertNodeIDs - excludes given node ids from select requests routing, must contain pod suffixes - for pod-0, id will be 0 and etc. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maintenanceSelectNodeIDs")] + pub maintenance_select_node_i_ds: Option>, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy + #[serde(default, skip_serializing_if = "Option::is_none", rename = "persistentVolumeClaimRetentionPolicy")] + pub persistent_volume_claim_retention_policy: Option, + /// PodDisruptionBudget created by operator + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podDisruptionBudget")] + pub pod_disruption_budget: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VMStorage pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RollingUpdateStrategy defines strategy for application updates + /// Default is OnDelete, in this case operator handles update process + /// Can be changed for RollingUpdate + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategy")] + pub rolling_update_strategy: Option, + /// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. + /// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "rollingUpdateStrategyBehavior")] + pub rolling_update_strategy_behavior: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceScrapeSpec that will be added to vmstorage VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be create additional service for vmstorage + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage - add persistent volume for StorageDataPath + /// its useful for persistent cache + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// StorageDataPath - path to storage data + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageDataPath")] + pub storage_data_path: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VMBackup configuration for backup + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vmBackup")] + pub vm_backup: Option, + /// VMInsertPort for VMInsert connections + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vmInsertPort")] + pub vm_insert_port: Option, + /// VMSelectPort for VMSelect connections + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vmSelectPort")] + pub vm_select_port: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVmstorageLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVmstorageLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// PersistentVolumeClaimRetentionPolicy allows configuration of PVC retention policy +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstoragePersistentVolumeClaimRetentionPolicy { + /// WhenDeleted specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is deleted. The default policy + /// of `Retain` causes PVCs to not be affected by StatefulSet deletion. The + /// `Delete` policy causes those PVCs to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenDeleted")] + pub when_deleted: Option, + /// WhenScaled specifies what happens to PVCs created from StatefulSet + /// VolumeClaimTemplates when the StatefulSet is scaled down. The default + /// policy of `Retain` causes PVCs to not be affected by a scaledown. The + /// `Delete` policy causes the associated PVCs for any excess pods above + /// the replica count to be deleted. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "whenScaled")] + pub when_scaled: Option, +} + +/// PodDisruptionBudget created by operator +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstoragePodDisruptionBudget { + /// An eviction is allowed if at most "maxUnavailable" pods selected by + /// "selector" are unavailable after the eviction, i.e. even in absence of + /// the evicted pod. For example, one can prevent all voluntary evictions + /// by specifying 0. This is a mutually exclusive setting with "minAvailable". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, + /// An eviction is allowed if at least "minAvailable" pods selected by + /// "selector" will still be available after the eviction, i.e. even in the + /// absence of the evicted pod. So for example you can prevent all voluntary + /// evictions by specifying "100%". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minAvailable")] + pub min_available: Option, + /// replaces default labels selector generated by operator + /// it's useful when you need to create custom budget + #[serde(default, skip_serializing_if = "Option::is_none", rename = "selectorLabels")] + pub selector_labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VMStorage pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstoragePodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// RollingUpdateStrategyBehavior defines customized behavior for rolling updates. +/// It applies if the RollingUpdateStrategy is set to OnDelete, which is the default. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageRollingUpdateStrategyBehavior { + /// MaxUnavailable defines the maximum number of pods that can be unavailable during the update. + /// It can be specified as an absolute number (e.g. 2) or a percentage of the total pods (e.g. "50%"). + /// For example, if set to 100%, all pods will be upgraded at once, minimizing downtime when needed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxUnavailable")] + pub max_unavailable: Option, +} + +/// ServiceSpec that will be create additional service for vmstorage +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage - add persistent volume for StorageDataPath +/// its useful for persistent cache +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageStorage { + /// Deprecated: subPath usage will be disabled by default in a future release, this option will become unnecessary. + /// DisableMountSubPath allows to remove any subPath usage in volume mounts. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMountSubPath")] + pub disable_mount_sub_path: Option, + /// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More + /// info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "emptyDir")] + pub empty_dir: Option, + /// A PVC spec to be used by the StatefulSets/Deployments. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeClaimTemplate")] + pub volume_claim_template: Option>, +} + +/// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More +/// info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageStorageEmptyDir { + /// medium represents what type of storage medium should back this directory. + /// The default is "" which means to use the node's default medium. + /// Must be an empty string (default) or Memory. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub medium: Option, + /// sizeLimit is the total amount of local storage required for this EmptyDir volume. + /// The size limit is also applicable for memory medium. + /// The maximum usage on memory medium EmptyDir would be the minimum value between + /// the SizeLimit specified here and the sum of memory limits of all containers in a pod. + /// The default is nil which means that the limit is undefined. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sizeLimit")] + pub size_limit: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VMBackup configuration for backup +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackup { + /// AcceptEULA accepts enterprise feature usage, must be set to true. + /// otherwise backupmanager cannot be added to single/cluster version. + /// + /// Deprecated: use license.key or license.keyRef instead + #[serde(default, skip_serializing_if = "Option::is_none", rename = "acceptEULA")] + pub accept_eula: Option, + /// Defines number of concurrent workers. Higher concurrency may reduce backup duration (default 10) + #[serde(default, skip_serializing_if = "Option::is_none")] + pub concurrency: Option, + /// CredentialsSecret is secret in the same namespace for access to remote storage + /// The secret is mounted into /etc/vm/creds. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "credentialsSecret")] + pub credentials_secret: Option, + /// Custom S3 endpoint for use with S3-compatible storages (e.g. MinIO). S3 is used if not set + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customS3Endpoint")] + pub custom_s3_endpoint: Option, + /// Defines destination for backup + #[serde(default, skip_serializing_if = "Option::is_none")] + pub destination: Option, + /// DestinationDisableSuffixAdd - disables suffix adding for cluster version backups + /// each vmstorage backup must have unique backup folder + /// so operator adds POD_NAME as suffix for backup destination folder. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "destinationDisableSuffixAdd")] + pub destination_disable_suffix_add: Option, + /// Defines if daily backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableDaily")] + pub disable_daily: Option, + /// Defines if hourly backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableHourly")] + pub disable_hourly: Option, + /// Defines if monthly backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMonthly")] + pub disable_monthly: Option, + /// Defines if weekly backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableWeekly")] + pub disable_weekly: Option, + /// extra args like maxBytesPerSecond default 0 + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// Image - docker image settings for VMBackuper + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// LogFormat for VMBackup to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMBackup to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// Port for health check connections + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// Restore Allows to enable restore options for pod + /// Read [more]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub restore: Option, + /// SnapshotCreateURL overwrites url for snapshot create + #[serde(default, skip_serializing_if = "Option::is_none", rename = "snapshotCreateURL")] + pub snapshot_create_url: Option, + /// SnapShotDeleteURL overwrites url for snapshot delete + #[serde(default, skip_serializing_if = "Option::is_none", rename = "snapshotDeleteURL")] + pub snapshot_delete_url: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the vmbackupmanager container, + /// that are generated as a result of StorageSpec objects. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, +} + +/// CredentialsSecret is secret in the same namespace for access to remote storage +/// The secret is mounted into /etc/vm/creds. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupCredentialsSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + /// Source for the environment variable's value. Cannot be used if value is not empty. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +/// Source for the environment variable's value. Cannot be used if value is not empty. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsValueFrom { + /// Selects a key of a ConfigMap. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, + /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + /// Selects a resource of the container: only resources limits and requests + /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + /// Selects a key of a secret in the pod's namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +/// Selects a key of a ConfigMap. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsValueFromConfigMapKeyRef { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsValueFromFieldRef { + /// Version of the schema the FieldPath is written in terms of, defaults to "v1". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Path of the field to select in the specified API version. + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +/// Selects a resource of the container: only resources limits and requests +/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsValueFromResourceFieldRef { + /// Container name: required for volumes, optional for env vars + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + /// Specifies the output format of the exposed resources, defaults to "1" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + /// Required: resource to select + pub resource: String, +} + +/// Selects a key of a secret in the pod's namespace +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsValueFromSecretKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Image - docker image settings for VMBackuper +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// VMBackup configuration for backup +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVmstorageVmBackupLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMBackup configuration for backup +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmClusterVmstorageVmBackupLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// Restore Allows to enable restore options for pod +/// Read [more]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupRestore { + /// OnStart defines configuration for restore on pod start + #[serde(default, skip_serializing_if = "Option::is_none", rename = "onStart")] + pub on_start: Option, +} + +/// OnStart defines configuration for restore on pod start +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupRestoreOnStart { + /// Enabled defines if restore on start enabled + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVmBackupVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterVmstorageVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VMClusterStatus defines the observed state of VMCluster +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmClusterStatus { + /// LegacyStatus is deprecated and will be removed at v0.52.0 version + #[serde(default, skip_serializing_if = "Option::is_none", rename = "clusterStatus")] + pub cluster_status: Option, + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmnodescrapes.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmnodescrapes.rs index 8812982e5..fbf15352b 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmnodescrapes.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmnodescrapes.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmnodescrapes.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmpodscrapes.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmpodscrapes.rs index f25852591..3a168fe4f 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmpodscrapes.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmpodscrapes.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmpodscrapes.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmprobes.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmprobes.rs index 4cd402535..b7ea05a41 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmprobes.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmprobes.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmprobes.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmrules.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmrules.rs index b5963b221..a7d1e56a2 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmrules.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmrules.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmrules.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmscrapeconfigs.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmscrapeconfigs.rs index 098cccd68..0e640d341 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmscrapeconfigs.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmscrapeconfigs.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmscrapeconfigs.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmservicescrapes.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmservicescrapes.rs index d9a830ae4..517bccdbf 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmservicescrapes.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmservicescrapes.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmservicescrapes.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmsingles.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmsingles.rs new file mode 100644 index 000000000..f4bcb1081 --- /dev/null +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmsingles.rs @@ -0,0 +1,1551 @@ +// WARNING: generated by kopium - manual changes will be overwritten +// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmsingles.yaml +// kopium version: 0.22.5 + +#[allow(unused_imports)] +mod prelude { + pub use kube::CustomResource; + pub use serde::{Serialize, Deserialize}; + pub use std::collections::BTreeMap; + pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString; + pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition; +} +use self::prelude::*; + +/// VMSingleSpec defines the desired state of VMSingle +#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +#[kube(group = "operator.victoriametrics.com", version = "v1beta1", kind = "VMSingle", plural = "vmsingles")] +#[kube(namespaced)] +#[kube(status = "VmSingleStatus")] +#[kube(schema = "disabled")] +#[kube(derive="Default")] +#[kube(derive="PartialEq")] +pub struct VmSingleSpec { + /// Affinity If specified, the pod's scheduling constraints. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub affinity: Option>, + /// ConfigMaps is a list of ConfigMaps in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/configs/CONFIGMAP_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMaps")] + pub config_maps: Option>, + /// Containers property allows to inject additions sidecars or to patch existing containers. + /// It can be useful for proxies, backup, etc. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub containers: Option>>, + /// DisableAutomountServiceAccountToken whether to disable serviceAccount auto mount by Kubernetes (available from v0.54.0). + /// Operator will conditionally create volumes and volumeMounts for containers if it requires k8s API access. + /// For example, vmagent and vm-config-reloader requires k8s API access. + /// Operator creates volumes with name: "kube-api-access", which can be used as volumeMount for extraContainers if needed. + /// And also adds VolumeMounts at /var/run/secrets/kubernetes.io/serviceaccount. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableAutomountServiceAccountToken")] + pub disable_automount_service_account_token: Option, + /// DisableSelfServiceScrape controls creation of VMServiceScrape by operator + /// for the application. + /// Has priority over `VM_DISABLESELFSERVICESCRAPECREATION` operator env variable + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableSelfServiceScrape")] + pub disable_self_service_scrape: Option, + /// Specifies the DNS parameters of a pod. + /// Parameters specified here will be merged to the generated DNS + /// configuration based on DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsConfig")] + pub dns_config: Option, + /// DNSPolicy sets DNS policy for the pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsPolicy")] + pub dns_policy: Option, + /// ExtraArgs that will be passed to the application container + /// for example remoteWrite.tmpDataPath: /tmp + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + /// ExtraEnvs that will be passed to the application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// HostAliases provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostAliases")] + pub host_aliases: Option>, + /// HostNetwork controls whether the pod may use the node network namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "hostNetwork")] + pub host_network: Option, + /// HostAliasesUnderScore provides mapping for ip and hostname, + /// that would be propagated to pod, + /// cannot be used with HostNetwork. + /// Has Priority over hostAliases field + #[serde(default, skip_serializing_if = "Option::is_none", rename = "host_aliases")] + pub host_aliases_x: Option>, + /// Image - docker image settings + /// if no specified operator uses default version from operator config + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// ImagePullSecrets An optional list of references to secrets in the same namespace + /// to use for pulling images from registries + /// see + #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")] + pub image_pull_secrets: Option>, + /// InitContainers allows adding initContainers to the pod definition. + /// Any errors during the execution of an initContainer will lead to a restart of the Pod. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "initContainers")] + pub init_containers: Option>>, + /// InsertPorts - additional listen ports for data ingestion. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "insertPorts")] + pub insert_ports: Option, + /// License allows to configure license key to be used for enterprise features. + /// Using license key is supported starting from VictoriaMetrics v1.94.0. + /// See [here]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub license: Option, + /// LivenessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "livenessProbe")] + pub liveness_probe: Option>, + /// LogFormat for VMSingle to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for victoria metrics single to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// ManagedMetadata defines metadata that will be added to the all objects + /// created by operator for the given CustomResource + #[serde(default, skip_serializing_if = "Option::is_none", rename = "managedMetadata")] + pub managed_metadata: Option, + /// MinReadySeconds defines a minimum number of seconds to wait before starting update next pod + /// if previous in healthy state + /// Has no effect for VLogs and VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "minReadySeconds")] + pub min_ready_seconds: Option, + /// NodeSelector Define which Nodes the Pods are scheduled on. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")] + pub node_selector: Option>, + /// Paused If set to true all actions on the underlying managed objects are not + /// going to be performed, except for delete actions. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub paused: Option, + /// PodMetadata configures Labels and Annotations which are propagated to the VMSingle pods. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "podMetadata")] + pub pod_metadata: Option, + /// Port listen address + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// PriorityClassName class assigned to the Pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "priorityClassName")] + pub priority_class_name: Option, + /// ReadinessGates defines pod readiness gates + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessGates")] + pub readiness_gates: Option>, + /// ReadinessProbe that will be added CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readinessProbe")] + pub readiness_probe: Option>, + /// RemovePvcAfterDelete - if true, controller adds ownership to pvc + /// and after VMSingle object deletion - pvc will be garbage collected + /// by controller manager + #[serde(default, skip_serializing_if = "Option::is_none", rename = "removePvcAfterDelete")] + pub remove_pvc_after_delete: Option, + /// ReplicaCount is the expected size of the Application. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "replicaCount")] + pub replica_count: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// RetentionPeriod defines how long to retain stored metrics, specified as a duration (e.g., "1d", "1w", "1m"). + /// Data with timestamps outside the RetentionPeriod is automatically deleted. The minimum allowed value is 1d, or 24h. + /// The default value is 1 (one month). + /// See [retention]( docs for details. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "retentionPeriod")] + pub retention_period: Option, + /// The number of old ReplicaSets to retain to allow rollback in deployment or + /// maximum number of revisions that will be maintained in the Deployment revision history. + /// Has no effect at StatefulSets + /// Defaults to 10. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "revisionHistoryLimitCount")] + pub revision_history_limit_count: Option, + /// RuntimeClassName - defines runtime class for kubernetes pod. + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "runtimeClassName")] + pub runtime_class_name: Option, + /// SchedulerName - defines kubernetes scheduler name + #[serde(default, skip_serializing_if = "Option::is_none", rename = "schedulerName")] + pub scheduler_name: Option, + /// Secrets is a list of Secrets in the same namespace as the Application + /// object, which shall be mounted into the Application container + /// at /etc/vm/secrets/SECRET_NAME folder + #[serde(default, skip_serializing_if = "Option::is_none")] + pub secrets: Option>, + /// SecurityContext holds pod-level security attributes and common container settings. + /// This defaults to the default PodSecurityContext. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContext")] + pub security_context: Option>, + /// ServiceAccountName is the name of the ServiceAccount to use to run the pods + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceAccountName")] + pub service_account_name: Option, + /// ServiceScrapeSpec that will be added to vmsingle VMServiceScrape spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceScrapeSpec")] + pub service_scrape_spec: Option>, + /// ServiceSpec that will be added to vmsingle service spec + #[serde(default, skip_serializing_if = "Option::is_none", rename = "serviceSpec")] + pub service_spec: Option, + /// StartupProbe that will be added to CRD pod + #[serde(default, skip_serializing_if = "Option::is_none", rename = "startupProbe")] + pub startup_probe: Option>, + /// Storage is the definition of how storage will be used by the VMSingle + /// by default it`s empty dir + /// this option is ignored if storageDataPath is set + #[serde(default, skip_serializing_if = "Option::is_none")] + pub storage: Option, + /// StorageDataPath disables spec.storage option and overrides arg for victoria-metrics binary --storageDataPath, + /// its users responsibility to mount proper device into given path. + /// It requires to provide spec.volumes and spec.volumeMounts with at least 1 value + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageDataPath")] + pub storage_data_path: Option, + /// StorageMeta defines annotations and labels attached to PVC for given vmsingle CR + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageMetadata")] + pub storage_metadata: Option, + /// StreamAggrConfig defines stream aggregation configuration for VMSingle + #[serde(default, skip_serializing_if = "Option::is_none", rename = "streamAggrConfig")] + pub stream_aggr_config: Option, + /// TerminationGracePeriodSeconds period for container graceful termination + #[serde(default, skip_serializing_if = "Option::is_none", rename = "terminationGracePeriodSeconds")] + pub termination_grace_period_seconds: Option, + /// Tolerations If specified, the pod's tolerations. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tolerations: Option>, + /// TopologySpreadConstraints embedded kubernetes pod configuration option, + /// controls how pods are spread across your cluster among failure-domains + /// such as regions, zones, nodes, and other user-defined topology domains + /// + #[serde(default, skip_serializing_if = "Option::is_none", rename = "topologySpreadConstraints")] + pub topology_spread_constraints: Option>>, + /// UseDefaultResources controls resource settings + /// By default, operator sets built-in resource requirements + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useDefaultResources")] + pub use_default_resources: Option, + /// UseStrictSecurity enables strict security mode for component + /// it restricts disk writes access + /// uses non-root user out of the box + /// drops not needed security permissions + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useStrictSecurity")] + pub use_strict_security: Option, + /// VMBackup configuration for backup + #[serde(default, skip_serializing_if = "Option::is_none", rename = "vmBackup")] + pub vm_backup: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment/StatefulSet definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the Application container + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, + /// Volumes allows configuration of additional volumes on the output Deployment/StatefulSet definition. + /// Volumes specified will be appended to other volumes that are generated. + /// / +optional + #[serde(default, skip_serializing_if = "Option::is_none")] + pub volumes: Option>>, +} + +/// Specifies the DNS parameters of a pod. +/// Parameters specified here will be merged to the generated DNS +/// configuration based on DNSPolicy. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleDnsConfig { + /// A list of DNS name server IP addresses. + /// This will be appended to the base nameservers generated from DNSPolicy. + /// Duplicated nameservers will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub nameservers: Option>, + /// A list of DNS resolver options. + /// This will be merged with the base options generated from DNSPolicy. + /// Duplicated entries will be removed. Resolution options given in Options + /// will override those that appear in the base DNSPolicy. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub options: Option>, + /// A list of DNS search domains for host-name lookup. + /// This will be appended to the base search paths generated from DNSPolicy. + /// Duplicated search paths will be removed. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub searches: Option>, +} + +/// PodDNSConfigOption defines DNS resolver options of a pod. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleDnsConfigOptions { + /// Name is this DNS resolver option's name. + /// Required. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Value is this DNS resolver option's value. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the +/// pod's hosts file. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleHostAliases { + /// Hostnames for the above IP address. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hostnames: Option>, + /// IP address of the host file entry. + pub ip: String, +} + +/// Image - docker image settings +/// if no specified operator uses default version from operator config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// LocalObjectReference contains enough information to let you locate the +/// referenced object inside the same namespace. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleImagePullSecrets { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// InsertPorts - additional listen ports for data ingestion. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleInsertPorts { + /// GraphitePort listen port + #[serde(default, skip_serializing_if = "Option::is_none", rename = "graphitePort")] + pub graphite_port: Option, + /// InfluxPort listen port + #[serde(default, skip_serializing_if = "Option::is_none", rename = "influxPort")] + pub influx_port: Option, + /// OpenTSDBHTTPPort for http connections. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "openTSDBHTTPPort")] + pub open_tsdbhttp_port: Option, + /// OpenTSDBPort for tcp and udp listen + #[serde(default, skip_serializing_if = "Option::is_none", rename = "openTSDBPort")] + pub open_tsdb_port: Option, +} + +/// License allows to configure license key to be used for enterprise features. +/// Using license key is supported starting from VictoriaMetrics v1.94.0. +/// See [here]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleLicense { + /// Enforce offline verification of the license key. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "forceOffline")] + pub force_offline: Option, + /// Enterprise license key. This flag is available only in [VictoriaMetrics enterprise]( + /// To request a trial license, [go to]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// KeyRef is reference to secret with license key for enterprise features. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keyRef")] + pub key_ref: Option, + /// Interval to be used for checking for license key changes. Note that this is only applicable when using KeyRef. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "reloadInterval")] + pub reload_interval: Option, +} + +/// KeyRef is reference to secret with license key for enterprise features. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleLicenseKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// VMSingleSpec defines the desired state of VMSingle +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmSingleLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMSingleSpec defines the desired state of VMSingle +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmSingleLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// ManagedMetadata defines metadata that will be added to the all objects +/// created by operator for the given CustomResource +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleManagedMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, +} + +/// PodMetadata configures Labels and Annotations which are propagated to the VMSingle pods. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSinglePodMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// PodReadinessGate contains the reference to a pod condition +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleReadinessGates { + /// ConditionType refers to a condition in the pod's condition list with matching type. + #[serde(rename = "conditionType")] + pub condition_type: String, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// ServiceSpec that will be added to vmsingle service spec +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleServiceSpec { + /// EmbeddedObjectMetadata defines objectMeta for additional service. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// ServiceSpec describes the attributes that a user creates on a service. + /// More info: + pub spec: BTreeMap, + /// UseAsDefault applies changes from given service definition to the main object Service + /// Changing from headless service to clusterIP or loadbalancer may break cross-component communication + #[serde(default, skip_serializing_if = "Option::is_none", rename = "useAsDefault")] + pub use_as_default: Option, +} + +/// EmbeddedObjectMetadata defines objectMeta for additional service. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleServiceSpecMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// Storage is the definition of how storage will be used by the VMSingle +/// by default it`s empty dir +/// this option is ignored if storageDataPath is set +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorage { + /// accessModes contains the desired access modes the volume should have. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "accessModes")] + pub access_modes: Option>, + /// dataSource field can be used to specify either: + /// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + /// * An existing PVC (PersistentVolumeClaim) + /// If the provisioner or an external controller can support the specified data source, + /// it will create a new volume based on the contents of the specified data source. + /// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, + /// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. + /// If the namespace is specified, then dataSourceRef will not be copied to dataSource. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSource")] + pub data_source: Option, + /// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty + /// volume is desired. This may be any object from a non-empty API group (non + /// core object) or a PersistentVolumeClaim object. + /// When this field is specified, volume binding will only succeed if the type of + /// the specified object matches some installed volume populator or dynamic + /// provisioner. + /// This field will replace the functionality of the dataSource field and as such + /// if both fields are non-empty, they must have the same value. For backwards + /// compatibility, when namespace isn't specified in dataSourceRef, + /// both fields (dataSource and dataSourceRef) will be set to the same + /// value automatically if one of them is empty and the other is non-empty. + /// When namespace is specified in dataSourceRef, + /// dataSource isn't set to the same value and must be empty. + /// There are three important differences between dataSource and dataSourceRef: + /// * While dataSource only allows two specific types of objects, dataSourceRef + /// allows any non-core object, as well as PersistentVolumeClaim objects. + /// * While dataSource ignores disallowed values (dropping them), dataSourceRef + /// preserves all values, and generates an error if a disallowed value is + /// specified. + /// * While dataSource only allows local objects, dataSourceRef allows objects + /// in any namespaces. + /// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. + /// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dataSourceRef")] + pub data_source_ref: Option, + /// resources represents the minimum resources the volume should have. + /// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements + /// that are lower than previous value but must still be higher than capacity recorded in the + /// status field of the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// selector is a label query over volumes to consider for binding. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub selector: Option, + /// storageClassName is the name of the StorageClass required by the claim. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none", rename = "storageClassName")] + pub storage_class_name: Option, + /// volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. + /// If specified, the CSI driver will create or update the volume with the attributes defined + /// in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, + /// it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass + /// will be applied to the claim but it's not allowed to reset this field to empty string once it is set. + /// If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass + /// will be set by the persistentvolume controller if it exists. + /// If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be + /// set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource + /// exists. + /// More info: + /// (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeAttributesClassName")] + pub volume_attributes_class_name: Option, + /// volumeMode defines what type of volume is required by the claim. + /// Value of Filesystem is implied when not included in claim spec. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMode")] + pub volume_mode: Option, + /// volumeName is the binding reference to the PersistentVolume backing this claim. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeName")] + pub volume_name: Option, +} + +/// dataSource field can be used to specify either: +/// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +/// * An existing PVC (PersistentVolumeClaim) +/// If the provisioner or an external controller can support the specified data source, +/// it will create a new volume based on the contents of the specified data source. +/// When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +/// and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +/// If the namespace is specified, then dataSourceRef will not be copied to dataSource. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorageDataSource { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, +} + +/// dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +/// volume is desired. This may be any object from a non-empty API group (non +/// core object) or a PersistentVolumeClaim object. +/// When this field is specified, volume binding will only succeed if the type of +/// the specified object matches some installed volume populator or dynamic +/// provisioner. +/// This field will replace the functionality of the dataSource field and as such +/// if both fields are non-empty, they must have the same value. For backwards +/// compatibility, when namespace isn't specified in dataSourceRef, +/// both fields (dataSource and dataSourceRef) will be set to the same +/// value automatically if one of them is empty and the other is non-empty. +/// When namespace is specified in dataSourceRef, +/// dataSource isn't set to the same value and must be empty. +/// There are three important differences between dataSource and dataSourceRef: +/// * While dataSource only allows two specific types of objects, dataSourceRef +/// allows any non-core object, as well as PersistentVolumeClaim objects. +/// * While dataSource ignores disallowed values (dropping them), dataSourceRef +/// preserves all values, and generates an error if a disallowed value is +/// specified. +/// * While dataSource only allows local objects, dataSourceRef allows objects +/// in any namespaces. +/// (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled. +/// (Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorageDataSourceRef { + /// APIGroup is the group for the resource being referenced. + /// If APIGroup is not specified, the specified Kind must be in the core API group. + /// For any other third-party types, APIGroup is required. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiGroup")] + pub api_group: Option, + /// Kind is the type of resource being referenced + pub kind: String, + /// Name is the name of resource being referenced + pub name: String, + /// Namespace is the namespace of resource being referenced + /// Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. + /// (Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub namespace: Option, +} + +/// resources represents the minimum resources the volume should have. +/// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +/// that are lower than previous value but must still be higher than capacity recorded in the +/// status field of the claim. +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorageResources { + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// selector is a label query over volumes to consider for binding. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorageSelector { + /// matchExpressions is a list of label selector requirements. The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")] + pub match_expressions: Option>, + /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + /// map is equivalent to an element of matchExpressions, whose key field is "key", the + /// operator is "In", and the values array contains only "value". The requirements are ANDed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")] + pub match_labels: Option>, +} + +/// A label selector requirement is a selector that contains values, a key, and an operator that +/// relates the key and values. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorageSelectorMatchExpressions { + /// key is the label key that the selector applies to. + pub key: String, + /// operator represents a key's relationship to a set of values. + /// Valid operators are In, NotIn, Exists and DoesNotExist. + pub operator: String, + /// values is an array of string values. If the operator is In or NotIn, + /// the values array must be non-empty. If the operator is Exists or DoesNotExist, + /// the values array must be empty. This array is replaced during a strategic + /// merge patch. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub values: Option>, +} + +/// StorageMeta defines annotations and labels attached to PVC for given vmsingle CR +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStorageMetadata { + /// Annotations is an unstructured key value map stored with a resource that may be + /// set by external tools to store and retrieve arbitrary metadata. They are not + /// queryable and should be preserved when modifying objects. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub annotations: Option>, + /// Labels Map of string keys and values that can be used to organize and categorize + /// (scope and select) objects. May match selectors of replication controllers + /// and services. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Name must be unique within a namespace. Is required when creating resources, although + /// some resources may allow a client to request the generation of an appropriate name + /// automatically. Name is primarily intended for creation idempotence and configuration + /// definition. + /// Cannot be updated. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, +} + +/// StreamAggrConfig defines stream aggregation configuration for VMSingle +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStreamAggrConfig { + /// ConfigMap with stream aggregation rules + #[serde(default, skip_serializing_if = "Option::is_none")] + pub configmap: Option, + /// Allows setting different de-duplication intervals per each configured remote storage + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dedupInterval")] + pub dedup_interval: Option, + /// Allow drop all the input samples after the aggregation + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dropInput")] + pub drop_input: Option, + /// labels to drop from samples for aggregator before stream de-duplication and aggregation + #[serde(default, skip_serializing_if = "Option::is_none", rename = "dropInputLabels")] + pub drop_input_labels: Option>, + /// EnableWindows enables aggregating data in separate windows ( available from v0.54.0). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "enableWindows")] + pub enable_windows: Option, + /// IgnoreFirstIntervals instructs to ignore first interval + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstIntervals")] + pub ignore_first_intervals: Option, + /// IgnoreFirstSampleInterval sets interval for total and prometheus_total during which first samples will be ignored + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstSampleInterval")] + pub ignore_first_sample_interval: Option, + /// IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreOldSamples")] + pub ignore_old_samples: Option, + /// Allows writing both raw and aggregate data + #[serde(default, skip_serializing_if = "Option::is_none", rename = "keepInput")] + pub keep_input: Option, + /// Stream aggregation rules + #[serde(default, skip_serializing_if = "Option::is_none")] + pub rules: Option>, +} + +/// ConfigMap with stream aggregation rules +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStreamAggrConfigConfigmap { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// StreamAggrRule defines the rule in stream aggregation config +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStreamAggrConfigRules { + /// By is an optional list of labels for grouping input series. + /// + /// See also Without. + /// + /// If neither By nor Without are set, then the Outputs are calculated + /// individually per each input time series. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub by: Option>, + /// DedupInterval is an optional interval for deduplication. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub dedup_interval: Option, + /// DropInputLabels is an optional list with labels, which must be dropped before further processing of input samples. + /// + /// Labels are dropped before de-duplication and aggregation. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub drop_input_labels: Option>, + /// EnableWindows enables aggregating data in separate windows + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enable_windows: Option, + /// FlushOnShutdown defines whether to flush the aggregation state on process termination + /// or config reload. Is `false` by default. + /// It is not recommended changing this setting, unless unfinished aggregations states + /// are preferred to missing data points. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub flush_on_shutdown: Option, + /// IgnoreFirstSampleInterval sets interval for total and prometheus_total during which first samples will be ignored + #[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreFirstSampleInterval")] + pub ignore_first_sample_interval: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ignore_first_intervals: Option, + /// IgnoreOldSamples instructs to ignore samples with old timestamps outside the current aggregation interval. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ignore_old_samples: Option, + /// InputRelabelConfigs is an optional relabeling rules, which are applied on the input + /// before aggregation. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub input_relabel_configs: Option>, + /// Interval is the interval between aggregations. + pub interval: String, + /// KeepMetricNames instructs to leave metric names as is for the output time series without adding any suffix. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub keep_metric_names: Option, + /// Match is a label selector (or list of label selectors) for filtering time series for the given selector. + /// + /// If the match isn't set, then all the input time series are processed. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// NoAlignFlushToInterval disables aligning of flushes to multiples of Interval. + /// By default flushes are aligned to Interval. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub no_align_flush_to_interval: Option, + /// OutputRelabelConfigs is an optional relabeling rules, which are applied + /// on the aggregated output before being sent to remote storage. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub output_relabel_configs: Option>, + /// Outputs is a list of output aggregate functions to produce. + /// + /// The following names are allowed: + /// + /// - total - aggregates input counters + /// - increase - counts the increase over input counters + /// - count_series - counts the input series + /// - count_samples - counts the input samples + /// - sum_samples - sums the input samples + /// - last - the last biggest sample value + /// - min - the minimum sample value + /// - max - the maximum sample value + /// - avg - the average value across all the samples + /// - stddev - standard deviation across all the samples + /// - stdvar - standard variance across all the samples + /// - histogram_bucket - creates VictoriaMetrics histogram for input samples + /// - quantiles(phi1, ..., phiN) - quantiles' estimation for phi in the range [0..1] + /// + /// The output time series will have the following names: + /// + /// input_name:aggr__ + pub outputs: Vec, + /// Staleness interval is interval after which the series state will be reset if no samples have been sent during it. + /// The parameter is only relevant for outputs: total, total_prometheus, increase, increase_prometheus and histogram_bucket. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub staleness_interval: Option, + /// Without is an optional list of labels, which must be excluded when grouping input series. + /// + /// See also By. + /// + /// If neither By nor Without are set, then the Outputs are calculated + /// individually per each input time series. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub without: Option>, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStreamAggrConfigRulesInputRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// RelabelConfig allows dynamic rewriting of the label set +/// More info: +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStreamAggrConfigRulesOutputRelabelConfigs { + /// Action to perform based on regex matching. Default is 'replace' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action: Option, + /// If represents metricsQL match expression (or list of expressions): '{__name__=~"foo_.*"}' + #[serde(default, skip_serializing_if = "Option::is_none", rename = "if")] + pub r#if: Option, + /// Labels is used together with Match for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none")] + pub labels: Option>, + /// Match is used together with Labels for `action: graphite` + #[serde(default, skip_serializing_if = "Option::is_none", rename = "match")] + pub r#match: Option, + /// Modulus to take of the hash of the source label values. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub modulus: Option, + /// Regular expression against which the extracted value is matched. Default is '(.*)' + /// victoriaMetrics supports multiline regex joined with | + /// + #[serde(default, skip_serializing_if = "Option::is_none")] + pub regex: Option, + /// Replacement value against which a regex replace is performed if the + /// regular expression matches. Regex capture groups are available. Default is '$1' + #[serde(default, skip_serializing_if = "Option::is_none")] + pub replacement: Option, + /// Separator placed between concatenated source label values. default is ';'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub separator: Option, + /// The source labels select values from existing labels. Their content is concatenated + /// using the configured separator and matched against the configured regular expression + /// for the replace, keep, and drop actions. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")] + pub source_labels: Option>, + /// UnderScoreSourceLabels - additional form of source labels source_labels + /// for compatibility with original relabel config. + /// if set both sourceLabels and source_labels, sourceLabels has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "source_labels")] + pub source_labels_x: Option>, + /// Label to which the resulting value is written in a replace action. + /// It is mandatory for replace actions. Regex capture groups are available. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetLabel")] + pub target_label: Option, + /// UnderScoreTargetLabel - additional form of target label - target_label + /// for compatibility with original relabel config. + /// if set both targetLabel and target_label, targetLabel has priority. + /// for details + #[serde(default, skip_serializing_if = "Option::is_none", rename = "target_label")] + pub target_label_x: Option, +} + +/// The pod this Toleration is attached to tolerates any taint that matches +/// the triple using the matching operator . +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleTolerations { + /// Effect indicates the taint effect to match. Empty means match all taint effects. + /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub effect: Option, + /// Key is the taint key that the toleration applies to. Empty means match all taint keys. + /// If the key is empty, operator must be Exists; this combination means to match all values and all keys. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub key: Option, + /// Operator represents a key's relationship to the value. + /// Valid operators are Exists and Equal. Defaults to Equal. + /// Exists is equivalent to wildcard for value, so that a pod can + /// tolerate all taints of a particular category. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub operator: Option, + /// TolerationSeconds represents the period of time the toleration (which must be + /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, + /// it is not set, which means tolerate the taint forever (do not evict). Zero and + /// negative values will be treated as 0 (evict immediately) by the system. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")] + pub toleration_seconds: Option, + /// Value is the taint value the toleration matches to. + /// If the operator is Exists, the value should be empty, otherwise just a regular string. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, +} + +/// VMBackup configuration for backup +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackup { + /// AcceptEULA accepts enterprise feature usage, must be set to true. + /// otherwise backupmanager cannot be added to single/cluster version. + /// + /// Deprecated: use license.key or license.keyRef instead + #[serde(default, skip_serializing_if = "Option::is_none", rename = "acceptEULA")] + pub accept_eula: Option, + /// Defines number of concurrent workers. Higher concurrency may reduce backup duration (default 10) + #[serde(default, skip_serializing_if = "Option::is_none")] + pub concurrency: Option, + /// CredentialsSecret is secret in the same namespace for access to remote storage + /// The secret is mounted into /etc/vm/creds. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "credentialsSecret")] + pub credentials_secret: Option, + /// Custom S3 endpoint for use with S3-compatible storages (e.g. MinIO). S3 is used if not set + #[serde(default, skip_serializing_if = "Option::is_none", rename = "customS3Endpoint")] + pub custom_s3_endpoint: Option, + /// Defines destination for backup + #[serde(default, skip_serializing_if = "Option::is_none")] + pub destination: Option, + /// DestinationDisableSuffixAdd - disables suffix adding for cluster version backups + /// each vmstorage backup must have unique backup folder + /// so operator adds POD_NAME as suffix for backup destination folder. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "destinationDisableSuffixAdd")] + pub destination_disable_suffix_add: Option, + /// Defines if daily backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableDaily")] + pub disable_daily: Option, + /// Defines if hourly backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableHourly")] + pub disable_hourly: Option, + /// Defines if monthly backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableMonthly")] + pub disable_monthly: Option, + /// Defines if weekly backups disabled (default false) + #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableWeekly")] + pub disable_weekly: Option, + /// extra args like maxBytesPerSecond default 0 + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraArgs")] + pub extra_args: Option>, + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvs")] + pub extra_envs: Option>, + /// ExtraEnvsFrom defines source of env variables for the application container + /// could either be secret or configmap + #[serde(default, skip_serializing_if = "Option::is_none", rename = "extraEnvsFrom")] + pub extra_envs_from: Option>, + /// Image - docker image settings for VMBackuper + #[serde(default, skip_serializing_if = "Option::is_none")] + pub image: Option, + /// LogFormat for VMBackup to be configured with. + /// default or json + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logFormat")] + pub log_format: Option, + /// LogLevel for VMBackup to be configured with. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "logLevel")] + pub log_level: Option, + /// Port for health check connections + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + /// Resources container resource request and limits, + /// if not defined default resources from operator config will be used + #[serde(default, skip_serializing_if = "Option::is_none")] + pub resources: Option, + /// Restore Allows to enable restore options for pod + /// Read [more]( + #[serde(default, skip_serializing_if = "Option::is_none")] + pub restore: Option, + /// SnapshotCreateURL overwrites url for snapshot create + #[serde(default, skip_serializing_if = "Option::is_none", rename = "snapshotCreateURL")] + pub snapshot_create_url: Option, + /// SnapShotDeleteURL overwrites url for snapshot delete + #[serde(default, skip_serializing_if = "Option::is_none", rename = "snapshotDeleteURL")] + pub snapshot_delete_url: Option, + /// VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition. + /// VolumeMounts specified will be appended to other VolumeMounts in the vmbackupmanager container, + /// that are generated as a result of StorageSpec objects. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")] + pub volume_mounts: Option>, +} + +/// CredentialsSecret is secret in the same namespace for access to remote storage +/// The secret is mounted into /etc/vm/creds. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupCredentialsSecret { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// EnvVar represents an environment variable present in a Container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvs { + /// Name of the environment variable. Must be a C_IDENTIFIER. + pub name: String, + /// Variable references $(VAR_NAME) are expanded + /// using the previously defined environment variables in the container and + /// any service environment variables. If a variable cannot be resolved, + /// the reference in the input string will be unchanged. Double $$ are reduced + /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + /// Escaped references will never be expanded, regardless of whether the variable + /// exists or not. + /// Defaults to "". + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option, + /// Source for the environment variable's value. Cannot be used if value is not empty. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")] + pub value_from: Option, +} + +/// Source for the environment variable's value. Cannot be used if value is not empty. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsValueFrom { + /// Selects a key of a ConfigMap. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")] + pub config_map_key_ref: Option, + /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, + /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")] + pub field_ref: Option, + /// Selects a resource of the container: only resources limits and requests + /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")] + pub resource_field_ref: Option, + /// Selects a key of a secret in the pod's namespace + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")] + pub secret_key_ref: Option, +} + +/// Selects a key of a ConfigMap. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsValueFromConfigMapKeyRef { + /// The key to select. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsValueFromFieldRef { + /// Version of the schema the FieldPath is written in terms of, defaults to "v1". + #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")] + pub api_version: Option, + /// Path of the field to select in the specified API version. + #[serde(rename = "fieldPath")] + pub field_path: String, +} + +/// Selects a resource of the container: only resources limits and requests +/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsValueFromResourceFieldRef { + /// Container name: required for volumes, optional for env vars + #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")] + pub container_name: Option, + /// Specifies the output format of the exposed resources, defaults to "1" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub divisor: Option, + /// Required: resource to select + pub resource: String, +} + +/// Selects a key of a secret in the pod's namespace +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsValueFromSecretKeyRef { + /// The key of the secret to select from. Must be a valid secret key. + pub key: String, + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret or its key must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// EnvFromSource represents the source of a set of ConfigMaps +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsFrom { + /// The ConfigMap to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapRef")] + pub config_map_ref: Option, + /// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub prefix: Option, + /// The Secret to select from + #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")] + pub secret_ref: Option, +} + +/// The ConfigMap to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsFromConfigMapRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the ConfigMap must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// The Secret to select from +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupExtraEnvsFromSecretRef { + /// Name of the referent. + /// This field is effectively required, but due to backwards compatibility is + /// allowed to be empty. Instances of this type with an empty value here are + /// almost certainly wrong. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub name: Option, + /// Specify whether the Secret must be defined + #[serde(default, skip_serializing_if = "Option::is_none")] + pub optional: Option, +} + +/// Image - docker image settings for VMBackuper +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupImage { + /// PullPolicy describes how to pull docker image + #[serde(default, skip_serializing_if = "Option::is_none", rename = "pullPolicy")] + pub pull_policy: Option, + /// Repository contains name of docker image + it's repository if needed + #[serde(default, skip_serializing_if = "Option::is_none")] + pub repository: Option, + /// Tag contains desired docker image version + #[serde(default, skip_serializing_if = "Option::is_none")] + pub tag: Option, +} + +/// VMBackup configuration for backup +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmSingleVmBackupLogFormat { + #[serde(rename = "default")] + Default, + #[serde(rename = "json")] + Json, +} + +/// VMBackup configuration for backup +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +pub enum VmSingleVmBackupLogLevel { + #[serde(rename = "INFO")] + Info, + #[serde(rename = "WARN")] + Warn, + #[serde(rename = "ERROR")] + Error, + #[serde(rename = "FATAL")] + Fatal, + #[serde(rename = "PANIC")] + Panic, +} + +/// Resources container resource request and limits, +/// if not defined default resources from operator config will be used +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupResources { + /// Claims lists the names of resources, defined in spec.resourceClaims, + /// that are used by this container. + /// + /// This is an alpha field and requires enabling the + /// DynamicResourceAllocation feature gate. + /// + /// This field is immutable. It can only be set for containers. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub claims: Option>, + /// Limits describes the maximum amount of compute resources allowed. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub limits: Option>, + /// Requests describes the minimum amount of compute resources required. + /// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + /// otherwise to an implementation-defined value. Requests cannot exceed Limits. + /// More info: + #[serde(default, skip_serializing_if = "Option::is_none")] + pub requests: Option>, +} + +/// ResourceClaim references one entry in PodSpec.ResourceClaims. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupResourcesClaims { + /// Name must match the name of one entry in pod.spec.resourceClaims of + /// the Pod where this field is used. It makes that resource available + /// inside a container. + pub name: String, + /// Request is the name chosen for a request in the referenced claim. + /// If empty, everything from the claim is made available, otherwise + /// only the result of this request. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub request: Option, +} + +/// Restore Allows to enable restore options for pod +/// Read [more]( +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupRestore { + /// OnStart defines configuration for restore on pod start + #[serde(default, skip_serializing_if = "Option::is_none", rename = "onStart")] + pub on_start: Option, +} + +/// OnStart defines configuration for restore on pod start +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupRestoreOnStart { + /// Enabled defines if restore on start enabled + #[serde(default, skip_serializing_if = "Option::is_none")] + pub enabled: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVmBackupVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VolumeMount describes a mounting of a Volume within a container. +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleVolumeMounts { + /// Path within the container at which the volume should be mounted. Must + /// not contain ':'. + #[serde(rename = "mountPath")] + pub mount_path: String, + /// mountPropagation determines how mounts are propagated from the host + /// to container and the other way around. + /// When not set, MountPropagationNone is used. + /// This field is beta in 1.10. + /// When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + /// (which defaults to None). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPropagation")] + pub mount_propagation: Option, + /// This must match the Name of a Volume. + pub name: String, + /// Mounted read-only if true, read-write otherwise (false or unspecified). + /// Defaults to false. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "readOnly")] + pub read_only: Option, + /// RecursiveReadOnly specifies whether read-only mounts should be handled + /// recursively. + /// + /// If ReadOnly is false, this field has no meaning and must be unspecified. + /// + /// If ReadOnly is true, and this field is set to Disabled, the mount is not made + /// recursively read-only. If this field is set to IfPossible, the mount is made + /// recursively read-only, if it is supported by the container runtime. If this + /// field is set to Enabled, the mount is made recursively read-only if it is + /// supported by the container runtime, otherwise the pod will not be started and + /// an error will be generated to indicate the reason. + /// + /// If this field is set to IfPossible or Enabled, MountPropagation must be set to + /// None (or be unspecified, which defaults to None). + /// + /// If this field is not specified, it is treated as an equivalent of Disabled. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "recursiveReadOnly")] + pub recursive_read_only: Option, + /// Path within the volume from which the container's volume should be mounted. + /// Defaults to "" (volume's root). + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPath")] + pub sub_path: Option, + /// Expanded path within the volume from which the container's volume should be mounted. + /// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + /// Defaults to "" (volume's root). + /// SubPathExpr and SubPath are mutually exclusive. + #[serde(default, skip_serializing_if = "Option::is_none", rename = "subPathExpr")] + pub sub_path_expr: Option, +} + +/// VMSingleStatus defines the observed state of VMSingle +#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] +pub struct VmSingleStatus { + /// Known .status.conditions.type are: "Available", "Progressing", and "Degraded" + #[serde(default, skip_serializing_if = "Option::is_none")] + pub conditions: Option>, + /// ObservedGeneration defines current generation picked by operator for the + /// reconcile + #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")] + pub observed_generation: Option, + /// Reason defines human readable error reason + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + /// LegacyStatus is deprecated and will be removed at v0.52.0 version + #[serde(default, skip_serializing_if = "Option::is_none", rename = "singleStatus")] + pub single_status: Option, + /// UpdateStatus defines a status for update rollout + #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateStatus")] + pub update_status: Option, +} + diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmstaticscrapes.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmstaticscrapes.rs index 729c72e5d..6427f93c1 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmstaticscrapes.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmstaticscrapes.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmstaticscrapes.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude { diff --git a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmusers.rs b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmusers.rs index f78b12d05..84c666f37 100644 --- a/custom-resources/operator_victoriametrics_com/src/v1beta1/vmusers.rs +++ b/custom-resources/operator_victoriametrics_com/src/v1beta1/vmusers.rs @@ -1,6 +1,6 @@ // WARNING: generated by kopium - manual changes will be overwritten // kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/VictoriaMetrics/operator/operator.victoriametrics.com/v1beta1/vmusers.yaml -// kopium version: 0.22.4 +// kopium version: 0.22.5 #[allow(unused_imports)] mod prelude {