Skip to main content

mz_cloud_resources/crd/generated/cert_manager/
issuers.rs

1// Copyright Materialize, Inc. and contributors. All rights reserved.
2//
3// Use of this software is governed by the Business Source License
4// included in the LICENSE file.
5//
6// As of the Change Date specified in that file, in accordance with
7// the Business Source License, use of this software will be governed
8// by the Apache License, Version 2.0.
9
10#![allow(rustdoc::all)]
11#![cfg_attr(rustfmt, rustfmt::skip)]
12
13// WARNING: generated by kopium - manual changes will be overwritten
14// kopium command: kopium issuers.cert-manager.io --docs --smart-derive-elision --derive Default
15// kopium version: 0.21.1
16
17#[allow(unused_imports)]
18mod prelude {
19    pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition;
20    pub use kube::CustomResource;
21    pub use serde::{Deserialize, Serialize};
22    pub use std::collections::BTreeMap;
23}
24use self::prelude::*;
25
26/// Desired state of the Issuer resource.
27#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default)]
28#[kube(
29    group = "cert-manager.io",
30    version = "v1",
31    kind = "Issuer",
32    plural = "issuers"
33)]
34#[kube(namespaced)]
35#[kube(status = "IssuerStatus")]
36#[kube(schema = "disabled")]
37#[kube(derive = "Default")]
38pub struct IssuerSpec {
39    /// ACME configures this issuer to communicate with a RFC8555 (ACME) server
40    /// to obtain signed x509 certificates.
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    pub acme: Option<IssuerAcme>,
43    /// CA configures this issuer to sign certificates using a signing CA keypair
44    /// stored in a Secret resource.
45    /// This is used to build internal PKIs that are managed by cert-manager.
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub ca: Option<IssuerCa>,
48    /// SelfSigned configures this issuer to 'self sign' certificates using the
49    /// private key used to create the CertificateRequest object.
50    #[serde(
51        default,
52        skip_serializing_if = "Option::is_none",
53        rename = "selfSigned"
54    )]
55    pub self_signed: Option<IssuerSelfSigned>,
56    /// Vault configures this issuer to sign certificates using a HashiCorp Vault
57    /// PKI backend.
58    #[serde(default, skip_serializing_if = "Option::is_none")]
59    pub vault: Option<IssuerVault>,
60    /// Venafi configures this issuer to sign certificates using a Venafi TPP
61    /// or Venafi Cloud policy zone.
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub venafi: Option<IssuerVenafi>,
64}
65
66/// ACME configures this issuer to communicate with a RFC8555 (ACME) server
67/// to obtain signed x509 certificates.
68#[derive(Serialize, Deserialize, Clone, Debug, Default)]
69pub struct IssuerAcme {
70    /// Base64-encoded bundle of PEM CAs which can be used to validate the certificate
71    /// chain presented by the ACME server.
72    /// Mutually exclusive with SkipTLSVerify; prefer using CABundle to prevent various
73    /// kinds of security vulnerabilities.
74    /// If CABundle and SkipTLSVerify are unset, the system certificate bundle inside
75    /// the container is used to validate the TLS connection.
76    #[serde(default, skip_serializing_if = "Option::is_none", rename = "caBundle")]
77    pub ca_bundle: Option<String>,
78    /// Enables or disables generating a new ACME account key.
79    /// If true, the Issuer resource will *not* request a new account but will expect
80    /// the account key to be supplied via an existing secret.
81    /// If false, the cert-manager system will generate a new ACME account key
82    /// for the Issuer.
83    /// Defaults to false.
84    #[serde(
85        default,
86        skip_serializing_if = "Option::is_none",
87        rename = "disableAccountKeyGeneration"
88    )]
89    pub disable_account_key_generation: Option<bool>,
90    /// Email is the email address to be associated with the ACME account.
91    /// This field is optional, but it is strongly recommended to be set.
92    /// It will be used to contact you in case of issues with your account or
93    /// certificates, including expiry notification emails.
94    /// This field may be updated after the account is initially registered.
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub email: Option<String>,
97    /// Enables requesting a Not After date on certificates that matches the
98    /// duration of the certificate. This is not supported by all ACME servers
99    /// like Let's Encrypt. If set to true when the ACME server does not support
100    /// it, it will create an error on the Order.
101    /// Defaults to false.
102    #[serde(
103        default,
104        skip_serializing_if = "Option::is_none",
105        rename = "enableDurationFeature"
106    )]
107    pub enable_duration_feature: Option<bool>,
108    /// ExternalAccountBinding is a reference to a CA external account of the ACME
109    /// server.
110    /// If set, upon registration cert-manager will attempt to associate the given
111    /// external account credentials with the registered ACME account.
112    #[serde(
113        default,
114        skip_serializing_if = "Option::is_none",
115        rename = "externalAccountBinding"
116    )]
117    pub external_account_binding: Option<IssuerAcmeExternalAccountBinding>,
118    /// PreferredChain is the chain to use if the ACME server outputs multiple.
119    /// PreferredChain is no guarantee that this one gets delivered by the ACME
120    /// endpoint.
121    /// For example, for Let's Encrypt's DST crosssign you would use:
122    /// "DST Root CA X3" or "ISRG Root X1" for the newer Let's Encrypt root CA.
123    /// This value picks the first certificate bundle in the combined set of
124    /// ACME default and alternative chains that has a root-most certificate with
125    /// this value as its issuer's commonname.
126    #[serde(
127        default,
128        skip_serializing_if = "Option::is_none",
129        rename = "preferredChain"
130    )]
131    pub preferred_chain: Option<String>,
132    /// PrivateKey is the name of a Kubernetes Secret resource that will be used to
133    /// store the automatically generated ACME account private key.
134    /// Optionally, a `key` may be specified to select a specific entry within
135    /// the named Secret resource.
136    /// If `key` is not specified, a default of `tls.key` will be used.
137    #[serde(rename = "privateKeySecretRef")]
138    pub private_key_secret_ref: IssuerAcmePrivateKeySecretRef,
139    /// Server is the URL used to access the ACME server's 'directory' endpoint.
140    /// For example, for Let's Encrypt's staging endpoint, you would use:
141    /// "https://acme-staging-v02.api.letsencrypt.org/directory".
142    /// Only ACME v2 endpoints (i.e. RFC 8555) are supported.
143    pub server: String,
144    /// INSECURE: Enables or disables validation of the ACME server TLS certificate.
145    /// If true, requests to the ACME server will not have the TLS certificate chain
146    /// validated.
147    /// Mutually exclusive with CABundle; prefer using CABundle to prevent various
148    /// kinds of security vulnerabilities.
149    /// Only enable this option in development environments.
150    /// If CABundle and SkipTLSVerify are unset, the system certificate bundle inside
151    /// the container is used to validate the TLS connection.
152    /// Defaults to false.
153    #[serde(
154        default,
155        skip_serializing_if = "Option::is_none",
156        rename = "skipTLSVerify"
157    )]
158    pub skip_tls_verify: Option<bool>,
159    /// Solvers is a list of challenge solvers that will be used to solve
160    /// ACME challenges for the matching domains.
161    /// Solver configurations must be provided in order to obtain certificates
162    /// from an ACME server.
163    /// For more information, see: https://cert-manager.io/docs/configuration/acme/
164    #[serde(default, skip_serializing_if = "Option::is_none")]
165    pub solvers: Option<Vec<IssuerAcmeSolvers>>,
166}
167
168/// ExternalAccountBinding is a reference to a CA external account of the ACME
169/// server.
170/// If set, upon registration cert-manager will attempt to associate the given
171/// external account credentials with the registered ACME account.
172#[derive(Serialize, Deserialize, Clone, Debug, Default)]
173pub struct IssuerAcmeExternalAccountBinding {
174    /// Deprecated: keyAlgorithm field exists for historical compatibility
175    /// reasons and should not be used. The algorithm is now hardcoded to HS256
176    /// in golang/x/crypto/acme.
177    #[serde(
178        default,
179        skip_serializing_if = "Option::is_none",
180        rename = "keyAlgorithm"
181    )]
182    pub key_algorithm: Option<IssuerAcmeExternalAccountBindingKeyAlgorithm>,
183    /// keyID is the ID of the CA key that the External Account is bound to.
184    #[serde(rename = "keyID")]
185    pub key_id: String,
186    /// keySecretRef is a Secret Key Selector referencing a data item in a Kubernetes
187    /// Secret which holds the symmetric MAC key of the External Account Binding.
188    /// The `key` is the index string that is paired with the key data in the
189    /// Secret and should not be confused with the key data itself, or indeed with
190    /// the External Account Binding keyID above.
191    /// The secret key stored in the Secret **must** be un-padded, base64 URL
192    /// encoded data.
193    #[serde(rename = "keySecretRef")]
194    pub key_secret_ref: IssuerAcmeExternalAccountBindingKeySecretRef,
195}
196
197/// ExternalAccountBinding is a reference to a CA external account of the ACME
198/// server.
199/// If set, upon registration cert-manager will attempt to associate the given
200/// external account credentials with the registered ACME account.
201#[derive(Serialize, Deserialize, Clone, Debug)]
202pub enum IssuerAcmeExternalAccountBindingKeyAlgorithm {
203    #[serde(rename = "HS256")]
204    Hs256,
205    #[serde(rename = "HS384")]
206    Hs384,
207    #[serde(rename = "HS512")]
208    Hs512,
209}
210
211/// keySecretRef is a Secret Key Selector referencing a data item in a Kubernetes
212/// Secret which holds the symmetric MAC key of the External Account Binding.
213/// The `key` is the index string that is paired with the key data in the
214/// Secret and should not be confused with the key data itself, or indeed with
215/// the External Account Binding keyID above.
216/// The secret key stored in the Secret **must** be un-padded, base64 URL
217/// encoded data.
218#[derive(Serialize, Deserialize, Clone, Debug, Default)]
219pub struct IssuerAcmeExternalAccountBindingKeySecretRef {
220    /// The key of the entry in the Secret resource's `data` field to be used.
221    /// Some instances of this field may be defaulted, in others it may be
222    /// required.
223    #[serde(default, skip_serializing_if = "Option::is_none")]
224    pub key: Option<String>,
225    /// Name of the resource being referred to.
226    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
227    pub name: String,
228}
229
230/// PrivateKey is the name of a Kubernetes Secret resource that will be used to
231/// store the automatically generated ACME account private key.
232/// Optionally, a `key` may be specified to select a specific entry within
233/// the named Secret resource.
234/// If `key` is not specified, a default of `tls.key` will be used.
235#[derive(Serialize, Deserialize, Clone, Debug, Default)]
236pub struct IssuerAcmePrivateKeySecretRef {
237    /// The key of the entry in the Secret resource's `data` field to be used.
238    /// Some instances of this field may be defaulted, in others it may be
239    /// required.
240    #[serde(default, skip_serializing_if = "Option::is_none")]
241    pub key: Option<String>,
242    /// Name of the resource being referred to.
243    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
244    pub name: String,
245}
246
247/// An ACMEChallengeSolver describes how to solve ACME challenges for the issuer it is part of.
248/// A selector may be provided to use different solving strategies for different DNS names.
249/// Only one of HTTP01 or DNS01 must be provided.
250#[derive(Serialize, Deserialize, Clone, Debug, Default)]
251pub struct IssuerAcmeSolvers {
252    /// Configures cert-manager to attempt to complete authorizations by
253    /// performing the DNS01 challenge flow.
254    #[serde(default, skip_serializing_if = "Option::is_none")]
255    pub dns01: Option<IssuerAcmeSolversDns01>,
256    /// Configures cert-manager to attempt to complete authorizations by
257    /// performing the HTTP01 challenge flow.
258    /// It is not possible to obtain certificates for wildcard domain names
259    /// (e.g. `*.example.com`) using the HTTP01 challenge mechanism.
260    #[serde(default, skip_serializing_if = "Option::is_none")]
261    pub http01: Option<IssuerAcmeSolversHttp01>,
262    /// Selector selects a set of DNSNames on the Certificate resource that
263    /// should be solved using this challenge solver.
264    /// If not specified, the solver will be treated as the 'default' solver
265    /// with the lowest priority, i.e. if any other solver has a more specific
266    /// match, it will be used instead.
267    #[serde(default, skip_serializing_if = "Option::is_none")]
268    pub selector: Option<IssuerAcmeSolversSelector>,
269}
270
271/// Configures cert-manager to attempt to complete authorizations by
272/// performing the DNS01 challenge flow.
273#[derive(Serialize, Deserialize, Clone, Debug, Default)]
274pub struct IssuerAcmeSolversDns01 {
275    /// Use the 'ACME DNS' (https://github.com/joohoi/acme-dns) API to manage
276    /// DNS01 challenge records.
277    #[serde(default, skip_serializing_if = "Option::is_none", rename = "acmeDNS")]
278    pub acme_dns: Option<IssuerAcmeSolversDns01AcmeDns>,
279    /// Use the Akamai DNS zone management API to manage DNS01 challenge records.
280    #[serde(default, skip_serializing_if = "Option::is_none")]
281    pub akamai: Option<IssuerAcmeSolversDns01Akamai>,
282    /// Use the Microsoft Azure DNS API to manage DNS01 challenge records.
283    #[serde(default, skip_serializing_if = "Option::is_none", rename = "azureDNS")]
284    pub azure_dns: Option<IssuerAcmeSolversDns01AzureDns>,
285    /// Use the Google Cloud DNS API to manage DNS01 challenge records.
286    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cloudDNS")]
287    pub cloud_dns: Option<IssuerAcmeSolversDns01CloudDns>,
288    /// Use the Cloudflare API to manage DNS01 challenge records.
289    #[serde(default, skip_serializing_if = "Option::is_none")]
290    pub cloudflare: Option<IssuerAcmeSolversDns01Cloudflare>,
291    /// CNAMEStrategy configures how the DNS01 provider should handle CNAME
292    /// records when found in DNS zones.
293    #[serde(
294        default,
295        skip_serializing_if = "Option::is_none",
296        rename = "cnameStrategy"
297    )]
298    pub cname_strategy: Option<IssuerAcmeSolversDns01CnameStrategy>,
299    /// Use the DigitalOcean DNS API to manage DNS01 challenge records.
300    #[serde(default, skip_serializing_if = "Option::is_none")]
301    pub digitalocean: Option<IssuerAcmeSolversDns01Digitalocean>,
302    /// Use RFC2136 ("Dynamic Updates in the Domain Name System") (https://datatracker.ietf.org/doc/rfc2136/)
303    /// to manage DNS01 challenge records.
304    #[serde(default, skip_serializing_if = "Option::is_none")]
305    pub rfc2136: Option<IssuerAcmeSolversDns01Rfc2136>,
306    /// Use the AWS Route53 API to manage DNS01 challenge records.
307    #[serde(default, skip_serializing_if = "Option::is_none")]
308    pub route53: Option<IssuerAcmeSolversDns01Route53>,
309    /// Configure an external webhook based DNS01 challenge solver to manage
310    /// DNS01 challenge records.
311    #[serde(default, skip_serializing_if = "Option::is_none")]
312    pub webhook: Option<IssuerAcmeSolversDns01Webhook>,
313}
314
315/// Use the 'ACME DNS' (https://github.com/joohoi/acme-dns) API to manage
316/// DNS01 challenge records.
317#[derive(Serialize, Deserialize, Clone, Debug, Default)]
318pub struct IssuerAcmeSolversDns01AcmeDns {
319    /// A reference to a specific 'key' within a Secret resource.
320    /// In some instances, `key` is a required field.
321    #[serde(rename = "accountSecretRef")]
322    pub account_secret_ref: IssuerAcmeSolversDns01AcmeDnsAccountSecretRef,
323    pub host: String,
324}
325
326/// A reference to a specific 'key' within a Secret resource.
327/// In some instances, `key` is a required field.
328#[derive(Serialize, Deserialize, Clone, Debug, Default)]
329pub struct IssuerAcmeSolversDns01AcmeDnsAccountSecretRef {
330    /// The key of the entry in the Secret resource's `data` field to be used.
331    /// Some instances of this field may be defaulted, in others it may be
332    /// required.
333    #[serde(default, skip_serializing_if = "Option::is_none")]
334    pub key: Option<String>,
335    /// Name of the resource being referred to.
336    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
337    pub name: String,
338}
339
340/// Use the Akamai DNS zone management API to manage DNS01 challenge records.
341#[derive(Serialize, Deserialize, Clone, Debug, Default)]
342pub struct IssuerAcmeSolversDns01Akamai {
343    /// A reference to a specific 'key' within a Secret resource.
344    /// In some instances, `key` is a required field.
345    #[serde(rename = "accessTokenSecretRef")]
346    pub access_token_secret_ref: IssuerAcmeSolversDns01AkamaiAccessTokenSecretRef,
347    /// A reference to a specific 'key' within a Secret resource.
348    /// In some instances, `key` is a required field.
349    #[serde(rename = "clientSecretSecretRef")]
350    pub client_secret_secret_ref: IssuerAcmeSolversDns01AkamaiClientSecretSecretRef,
351    /// A reference to a specific 'key' within a Secret resource.
352    /// In some instances, `key` is a required field.
353    #[serde(rename = "clientTokenSecretRef")]
354    pub client_token_secret_ref: IssuerAcmeSolversDns01AkamaiClientTokenSecretRef,
355    #[serde(rename = "serviceConsumerDomain")]
356    pub service_consumer_domain: String,
357}
358
359/// A reference to a specific 'key' within a Secret resource.
360/// In some instances, `key` is a required field.
361#[derive(Serialize, Deserialize, Clone, Debug, Default)]
362pub struct IssuerAcmeSolversDns01AkamaiAccessTokenSecretRef {
363    /// The key of the entry in the Secret resource's `data` field to be used.
364    /// Some instances of this field may be defaulted, in others it may be
365    /// required.
366    #[serde(default, skip_serializing_if = "Option::is_none")]
367    pub key: Option<String>,
368    /// Name of the resource being referred to.
369    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
370    pub name: String,
371}
372
373/// A reference to a specific 'key' within a Secret resource.
374/// In some instances, `key` is a required field.
375#[derive(Serialize, Deserialize, Clone, Debug, Default)]
376pub struct IssuerAcmeSolversDns01AkamaiClientSecretSecretRef {
377    /// The key of the entry in the Secret resource's `data` field to be used.
378    /// Some instances of this field may be defaulted, in others it may be
379    /// required.
380    #[serde(default, skip_serializing_if = "Option::is_none")]
381    pub key: Option<String>,
382    /// Name of the resource being referred to.
383    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
384    pub name: String,
385}
386
387/// A reference to a specific 'key' within a Secret resource.
388/// In some instances, `key` is a required field.
389#[derive(Serialize, Deserialize, Clone, Debug, Default)]
390pub struct IssuerAcmeSolversDns01AkamaiClientTokenSecretRef {
391    /// The key of the entry in the Secret resource's `data` field to be used.
392    /// Some instances of this field may be defaulted, in others it may be
393    /// required.
394    #[serde(default, skip_serializing_if = "Option::is_none")]
395    pub key: Option<String>,
396    /// Name of the resource being referred to.
397    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
398    pub name: String,
399}
400
401/// Use the Microsoft Azure DNS API to manage DNS01 challenge records.
402#[derive(Serialize, Deserialize, Clone, Debug, Default)]
403pub struct IssuerAcmeSolversDns01AzureDns {
404    /// Auth: Azure Service Principal:
405    /// The ClientID of the Azure Service Principal used to authenticate with Azure DNS.
406    /// If set, ClientSecret and TenantID must also be set.
407    #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientID")]
408    pub client_id: Option<String>,
409    /// Auth: Azure Service Principal:
410    /// A reference to a Secret containing the password associated with the Service Principal.
411    /// If set, ClientID and TenantID must also be set.
412    #[serde(
413        default,
414        skip_serializing_if = "Option::is_none",
415        rename = "clientSecretSecretRef"
416    )]
417    pub client_secret_secret_ref: Option<IssuerAcmeSolversDns01AzureDnsClientSecretSecretRef>,
418    /// name of the Azure environment (default AzurePublicCloud)
419    #[serde(default, skip_serializing_if = "Option::is_none")]
420    pub environment: Option<IssuerAcmeSolversDns01AzureDnsEnvironment>,
421    /// name of the DNS zone that should be used
422    #[serde(
423        default,
424        skip_serializing_if = "Option::is_none",
425        rename = "hostedZoneName"
426    )]
427    pub hosted_zone_name: Option<String>,
428    /// Auth: Azure Workload Identity or Azure Managed Service Identity:
429    /// Settings to enable Azure Workload Identity or Azure Managed Service Identity
430    /// If set, ClientID, ClientSecret and TenantID must not be set.
431    #[serde(
432        default,
433        skip_serializing_if = "Option::is_none",
434        rename = "managedIdentity"
435    )]
436    pub managed_identity: Option<IssuerAcmeSolversDns01AzureDnsManagedIdentity>,
437    /// resource group the DNS zone is located in
438    #[serde(rename = "resourceGroupName")]
439    pub resource_group_name: String,
440    /// ID of the Azure subscription
441    #[serde(rename = "subscriptionID")]
442    pub subscription_id: String,
443    /// Auth: Azure Service Principal:
444    /// The TenantID of the Azure Service Principal used to authenticate with Azure DNS.
445    /// If set, ClientID and ClientSecret must also be set.
446    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tenantID")]
447    pub tenant_id: Option<String>,
448}
449
450/// Auth: Azure Service Principal:
451/// A reference to a Secret containing the password associated with the Service Principal.
452/// If set, ClientID and TenantID must also be set.
453#[derive(Serialize, Deserialize, Clone, Debug, Default)]
454pub struct IssuerAcmeSolversDns01AzureDnsClientSecretSecretRef {
455    /// The key of the entry in the Secret resource's `data` field to be used.
456    /// Some instances of this field may be defaulted, in others it may be
457    /// required.
458    #[serde(default, skip_serializing_if = "Option::is_none")]
459    pub key: Option<String>,
460    /// Name of the resource being referred to.
461    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
462    pub name: String,
463}
464
465/// Use the Microsoft Azure DNS API to manage DNS01 challenge records.
466#[derive(Serialize, Deserialize, Clone, Debug)]
467pub enum IssuerAcmeSolversDns01AzureDnsEnvironment {
468    AzurePublicCloud,
469    AzureChinaCloud,
470    AzureGermanCloud,
471    #[serde(rename = "AzureUSGovernmentCloud")]
472    AzureUsGovernmentCloud,
473}
474
475/// Auth: Azure Workload Identity or Azure Managed Service Identity:
476/// Settings to enable Azure Workload Identity or Azure Managed Service Identity
477/// If set, ClientID, ClientSecret and TenantID must not be set.
478#[derive(Serialize, Deserialize, Clone, Debug, Default)]
479pub struct IssuerAcmeSolversDns01AzureDnsManagedIdentity {
480    /// client ID of the managed identity, can not be used at the same time as resourceID
481    #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientID")]
482    pub client_id: Option<String>,
483    /// resource ID of the managed identity, can not be used at the same time as clientID
484    /// Cannot be used for Azure Managed Service Identity
485    #[serde(
486        default,
487        skip_serializing_if = "Option::is_none",
488        rename = "resourceID"
489    )]
490    pub resource_id: Option<String>,
491}
492
493/// Use the Google Cloud DNS API to manage DNS01 challenge records.
494#[derive(Serialize, Deserialize, Clone, Debug, Default)]
495pub struct IssuerAcmeSolversDns01CloudDns {
496    /// HostedZoneName is an optional field that tells cert-manager in which
497    /// Cloud DNS zone the challenge record has to be created.
498    /// If left empty cert-manager will automatically choose a zone.
499    #[serde(
500        default,
501        skip_serializing_if = "Option::is_none",
502        rename = "hostedZoneName"
503    )]
504    pub hosted_zone_name: Option<String>,
505    pub project: String,
506    /// A reference to a specific 'key' within a Secret resource.
507    /// In some instances, `key` is a required field.
508    #[serde(
509        default,
510        skip_serializing_if = "Option::is_none",
511        rename = "serviceAccountSecretRef"
512    )]
513    pub service_account_secret_ref: Option<IssuerAcmeSolversDns01CloudDnsServiceAccountSecretRef>,
514}
515
516/// A reference to a specific 'key' within a Secret resource.
517/// In some instances, `key` is a required field.
518#[derive(Serialize, Deserialize, Clone, Debug, Default)]
519pub struct IssuerAcmeSolversDns01CloudDnsServiceAccountSecretRef {
520    /// The key of the entry in the Secret resource's `data` field to be used.
521    /// Some instances of this field may be defaulted, in others it may be
522    /// required.
523    #[serde(default, skip_serializing_if = "Option::is_none")]
524    pub key: Option<String>,
525    /// Name of the resource being referred to.
526    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
527    pub name: String,
528}
529
530/// Use the Cloudflare API to manage DNS01 challenge records.
531#[derive(Serialize, Deserialize, Clone, Debug, Default)]
532pub struct IssuerAcmeSolversDns01Cloudflare {
533    /// API key to use to authenticate with Cloudflare.
534    /// Note: using an API token to authenticate is now the recommended method
535    /// as it allows greater control of permissions.
536    #[serde(
537        default,
538        skip_serializing_if = "Option::is_none",
539        rename = "apiKeySecretRef"
540    )]
541    pub api_key_secret_ref: Option<IssuerAcmeSolversDns01CloudflareApiKeySecretRef>,
542    /// API token used to authenticate with Cloudflare.
543    #[serde(
544        default,
545        skip_serializing_if = "Option::is_none",
546        rename = "apiTokenSecretRef"
547    )]
548    pub api_token_secret_ref: Option<IssuerAcmeSolversDns01CloudflareApiTokenSecretRef>,
549    /// Email of the account, only required when using API key based authentication.
550    #[serde(default, skip_serializing_if = "Option::is_none")]
551    pub email: Option<String>,
552}
553
554/// API key to use to authenticate with Cloudflare.
555/// Note: using an API token to authenticate is now the recommended method
556/// as it allows greater control of permissions.
557#[derive(Serialize, Deserialize, Clone, Debug, Default)]
558pub struct IssuerAcmeSolversDns01CloudflareApiKeySecretRef {
559    /// The key of the entry in the Secret resource's `data` field to be used.
560    /// Some instances of this field may be defaulted, in others it may be
561    /// required.
562    #[serde(default, skip_serializing_if = "Option::is_none")]
563    pub key: Option<String>,
564    /// Name of the resource being referred to.
565    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
566    pub name: String,
567}
568
569/// API token used to authenticate with Cloudflare.
570#[derive(Serialize, Deserialize, Clone, Debug, Default)]
571pub struct IssuerAcmeSolversDns01CloudflareApiTokenSecretRef {
572    /// The key of the entry in the Secret resource's `data` field to be used.
573    /// Some instances of this field may be defaulted, in others it may be
574    /// required.
575    #[serde(default, skip_serializing_if = "Option::is_none")]
576    pub key: Option<String>,
577    /// Name of the resource being referred to.
578    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
579    pub name: String,
580}
581
582/// Configures cert-manager to attempt to complete authorizations by
583/// performing the DNS01 challenge flow.
584#[derive(Serialize, Deserialize, Clone, Debug)]
585pub enum IssuerAcmeSolversDns01CnameStrategy {
586    None,
587    Follow,
588}
589
590/// Use the DigitalOcean DNS API to manage DNS01 challenge records.
591#[derive(Serialize, Deserialize, Clone, Debug, Default)]
592pub struct IssuerAcmeSolversDns01Digitalocean {
593    /// A reference to a specific 'key' within a Secret resource.
594    /// In some instances, `key` is a required field.
595    #[serde(rename = "tokenSecretRef")]
596    pub token_secret_ref: IssuerAcmeSolversDns01DigitaloceanTokenSecretRef,
597}
598
599/// A reference to a specific 'key' within a Secret resource.
600/// In some instances, `key` is a required field.
601#[derive(Serialize, Deserialize, Clone, Debug, Default)]
602pub struct IssuerAcmeSolversDns01DigitaloceanTokenSecretRef {
603    /// The key of the entry in the Secret resource's `data` field to be used.
604    /// Some instances of this field may be defaulted, in others it may be
605    /// required.
606    #[serde(default, skip_serializing_if = "Option::is_none")]
607    pub key: Option<String>,
608    /// Name of the resource being referred to.
609    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
610    pub name: String,
611}
612
613/// Use RFC2136 ("Dynamic Updates in the Domain Name System") (https://datatracker.ietf.org/doc/rfc2136/)
614/// to manage DNS01 challenge records.
615#[derive(Serialize, Deserialize, Clone, Debug, Default)]
616pub struct IssuerAcmeSolversDns01Rfc2136 {
617    /// The IP address or hostname of an authoritative DNS server supporting
618    /// RFC2136 in the form host:port. If the host is an IPv6 address it must be
619    /// enclosed in square brackets (e.g [2001:db8::1]) ; port is optional.
620    /// This field is required.
621    pub nameserver: String,
622    /// The TSIG Algorithm configured in the DNS supporting RFC2136. Used only
623    /// when ``tsigSecretSecretRef`` and ``tsigKeyName`` are defined.
624    /// Supported values are (case-insensitive): ``HMACMD5`` (default),
625    /// ``HMACSHA1``, ``HMACSHA256`` or ``HMACSHA512``.
626    #[serde(
627        default,
628        skip_serializing_if = "Option::is_none",
629        rename = "tsigAlgorithm"
630    )]
631    pub tsig_algorithm: Option<String>,
632    /// The TSIG Key name configured in the DNS.
633    /// If ``tsigSecretSecretRef`` is defined, this field is required.
634    #[serde(
635        default,
636        skip_serializing_if = "Option::is_none",
637        rename = "tsigKeyName"
638    )]
639    pub tsig_key_name: Option<String>,
640    /// The name of the secret containing the TSIG value.
641    /// If ``tsigKeyName`` is defined, this field is required.
642    #[serde(
643        default,
644        skip_serializing_if = "Option::is_none",
645        rename = "tsigSecretSecretRef"
646    )]
647    pub tsig_secret_secret_ref: Option<IssuerAcmeSolversDns01Rfc2136TsigSecretSecretRef>,
648}
649
650/// The name of the secret containing the TSIG value.
651/// If ``tsigKeyName`` is defined, this field is required.
652#[derive(Serialize, Deserialize, Clone, Debug, Default)]
653pub struct IssuerAcmeSolversDns01Rfc2136TsigSecretSecretRef {
654    /// The key of the entry in the Secret resource's `data` field to be used.
655    /// Some instances of this field may be defaulted, in others it may be
656    /// required.
657    #[serde(default, skip_serializing_if = "Option::is_none")]
658    pub key: Option<String>,
659    /// Name of the resource being referred to.
660    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
661    pub name: String,
662}
663
664/// Use the AWS Route53 API to manage DNS01 challenge records.
665#[derive(Serialize, Deserialize, Clone, Debug, Default)]
666pub struct IssuerAcmeSolversDns01Route53 {
667    /// The AccessKeyID is used for authentication.
668    /// Cannot be set when SecretAccessKeyID is set.
669    /// If neither the Access Key nor Key ID are set, we fall-back to using env
670    /// vars, shared credentials file or AWS Instance metadata,
671    /// see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials
672    #[serde(
673        default,
674        skip_serializing_if = "Option::is_none",
675        rename = "accessKeyID"
676    )]
677    pub access_key_id: Option<String>,
678    /// The SecretAccessKey is used for authentication. If set, pull the AWS
679    /// access key ID from a key within a Kubernetes Secret.
680    /// Cannot be set when AccessKeyID is set.
681    /// If neither the Access Key nor Key ID are set, we fall-back to using env
682    /// vars, shared credentials file or AWS Instance metadata,
683    /// see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials
684    #[serde(
685        default,
686        skip_serializing_if = "Option::is_none",
687        rename = "accessKeyIDSecretRef"
688    )]
689    pub access_key_id_secret_ref: Option<IssuerAcmeSolversDns01Route53AccessKeyIdSecretRef>,
690    /// Auth configures how cert-manager authenticates.
691    #[serde(default, skip_serializing_if = "Option::is_none")]
692    pub auth: Option<IssuerAcmeSolversDns01Route53Auth>,
693    /// If set, the provider will manage only this zone in Route53 and will not do a lookup using the route53:ListHostedZonesByName api call.
694    #[serde(
695        default,
696        skip_serializing_if = "Option::is_none",
697        rename = "hostedZoneID"
698    )]
699    pub hosted_zone_id: Option<String>,
700    /// Override the AWS region.
701    ///
702    /// Route53 is a global service and does not have regional endpoints but the
703    /// region specified here (or via environment variables) is used as a hint to
704    /// help compute the correct AWS credential scope and partition when it
705    /// connects to Route53. See:
706    /// - [Amazon Route 53 endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/r53.html)
707    /// - [Global services](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/global-services.html)
708    ///
709    /// If you omit this region field, cert-manager will use the region from
710    /// AWS_REGION and AWS_DEFAULT_REGION environment variables, if they are set
711    /// in the cert-manager controller Pod.
712    ///
713    /// The `region` field is not needed if you use [IAM Roles for Service Accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).
714    /// Instead an AWS_REGION environment variable is added to the cert-manager controller Pod by:
715    /// [Amazon EKS Pod Identity Webhook](https://github.com/aws/amazon-eks-pod-identity-webhook).
716    /// In this case this `region` field value is ignored.
717    ///
718    /// The `region` field is not needed if you use [EKS Pod Identities](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html).
719    /// Instead an AWS_REGION environment variable is added to the cert-manager controller Pod by:
720    /// [Amazon EKS Pod Identity Agent](https://github.com/aws/eks-pod-identity-agent),
721    /// In this case this `region` field value is ignored.
722    #[serde(default, skip_serializing_if = "Option::is_none")]
723    pub region: Option<String>,
724    /// Role is a Role ARN which the Route53 provider will assume using either the explicit credentials AccessKeyID/SecretAccessKey
725    /// or the inferred credentials from environment variables, shared credentials file or AWS Instance metadata
726    #[serde(default, skip_serializing_if = "Option::is_none")]
727    pub role: Option<String>,
728    /// The SecretAccessKey is used for authentication.
729    /// If neither the Access Key nor Key ID are set, we fall-back to using env
730    /// vars, shared credentials file or AWS Instance metadata,
731    /// see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials
732    #[serde(
733        default,
734        skip_serializing_if = "Option::is_none",
735        rename = "secretAccessKeySecretRef"
736    )]
737    pub secret_access_key_secret_ref: Option<IssuerAcmeSolversDns01Route53SecretAccessKeySecretRef>,
738}
739
740/// The SecretAccessKey is used for authentication. If set, pull the AWS
741/// access key ID from a key within a Kubernetes Secret.
742/// Cannot be set when AccessKeyID is set.
743/// If neither the Access Key nor Key ID are set, we fall-back to using env
744/// vars, shared credentials file or AWS Instance metadata,
745/// see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials
746#[derive(Serialize, Deserialize, Clone, Debug, Default)]
747pub struct IssuerAcmeSolversDns01Route53AccessKeyIdSecretRef {
748    /// The key of the entry in the Secret resource's `data` field to be used.
749    /// Some instances of this field may be defaulted, in others it may be
750    /// required.
751    #[serde(default, skip_serializing_if = "Option::is_none")]
752    pub key: Option<String>,
753    /// Name of the resource being referred to.
754    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
755    pub name: String,
756}
757
758/// Auth configures how cert-manager authenticates.
759#[derive(Serialize, Deserialize, Clone, Debug, Default)]
760pub struct IssuerAcmeSolversDns01Route53Auth {
761    /// Kubernetes authenticates with Route53 using AssumeRoleWithWebIdentity
762    /// by passing a bound ServiceAccount token.
763    pub kubernetes: IssuerAcmeSolversDns01Route53AuthKubernetes,
764}
765
766/// Kubernetes authenticates with Route53 using AssumeRoleWithWebIdentity
767/// by passing a bound ServiceAccount token.
768#[derive(Serialize, Deserialize, Clone, Debug, Default)]
769pub struct IssuerAcmeSolversDns01Route53AuthKubernetes {
770    /// A reference to a service account that will be used to request a bound
771    /// token (also known as "projected token"). To use this field, you must
772    /// configure an RBAC rule to let cert-manager request a token.
773    #[serde(rename = "serviceAccountRef")]
774    pub service_account_ref: IssuerAcmeSolversDns01Route53AuthKubernetesServiceAccountRef,
775}
776
777/// A reference to a service account that will be used to request a bound
778/// token (also known as "projected token"). To use this field, you must
779/// configure an RBAC rule to let cert-manager request a token.
780#[derive(Serialize, Deserialize, Clone, Debug, Default)]
781pub struct IssuerAcmeSolversDns01Route53AuthKubernetesServiceAccountRef {
782    /// TokenAudiences is an optional list of audiences to include in the
783    /// token passed to AWS. The default token consisting of the issuer's namespace
784    /// and name is always included.
785    /// If unset the audience defaults to `sts.amazonaws.com`.
786    #[serde(default, skip_serializing_if = "Option::is_none")]
787    pub audiences: Option<Vec<String>>,
788    /// Name of the ServiceAccount used to request a token.
789    pub name: String,
790}
791
792/// The SecretAccessKey is used for authentication.
793/// If neither the Access Key nor Key ID are set, we fall-back to using env
794/// vars, shared credentials file or AWS Instance metadata,
795/// see: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-credentials
796#[derive(Serialize, Deserialize, Clone, Debug, Default)]
797pub struct IssuerAcmeSolversDns01Route53SecretAccessKeySecretRef {
798    /// The key of the entry in the Secret resource's `data` field to be used.
799    /// Some instances of this field may be defaulted, in others it may be
800    /// required.
801    #[serde(default, skip_serializing_if = "Option::is_none")]
802    pub key: Option<String>,
803    /// Name of the resource being referred to.
804    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
805    pub name: String,
806}
807
808/// Configure an external webhook based DNS01 challenge solver to manage
809/// DNS01 challenge records.
810#[derive(Serialize, Deserialize, Clone, Debug, Default)]
811pub struct IssuerAcmeSolversDns01Webhook {
812    /// Additional configuration that should be passed to the webhook apiserver
813    /// when challenges are processed.
814    /// This can contain arbitrary JSON data.
815    /// Secret values should not be specified in this stanza.
816    /// If secret values are needed (e.g. credentials for a DNS service), you
817    /// should use a SecretKeySelector to reference a Secret resource.
818    /// For details on the schema of this field, consult the webhook provider
819    /// implementation's documentation.
820    #[serde(default, skip_serializing_if = "Option::is_none")]
821    pub config: Option<serde_json::Value>,
822    /// The API group name that should be used when POSTing ChallengePayload
823    /// resources to the webhook apiserver.
824    /// This should be the same as the GroupName specified in the webhook
825    /// provider implementation.
826    #[serde(rename = "groupName")]
827    pub group_name: String,
828    /// The name of the solver to use, as defined in the webhook provider
829    /// implementation.
830    /// This will typically be the name of the provider, e.g. 'cloudflare'.
831    #[serde(rename = "solverName")]
832    pub solver_name: String,
833}
834
835/// Configures cert-manager to attempt to complete authorizations by
836/// performing the HTTP01 challenge flow.
837/// It is not possible to obtain certificates for wildcard domain names
838/// (e.g. `*.example.com`) using the HTTP01 challenge mechanism.
839#[derive(Serialize, Deserialize, Clone, Debug, Default)]
840pub struct IssuerAcmeSolversHttp01 {
841    /// The Gateway API is a sig-network community API that models service networking
842    /// in Kubernetes (https://gateway-api.sigs.k8s.io/). The Gateway solver will
843    /// create HTTPRoutes with the specified labels in the same namespace as the challenge.
844    /// This solver is experimental, and fields / behaviour may change in the future.
845    #[serde(
846        default,
847        skip_serializing_if = "Option::is_none",
848        rename = "gatewayHTTPRoute"
849    )]
850    pub gateway_http_route: Option<IssuerAcmeSolversHttp01GatewayHttpRoute>,
851    /// The ingress based HTTP01 challenge solver will solve challenges by
852    /// creating or modifying Ingress resources in order to route requests for
853    /// '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are
854    /// provisioned by cert-manager for each Challenge to be completed.
855    #[serde(default, skip_serializing_if = "Option::is_none")]
856    pub ingress: Option<IssuerAcmeSolversHttp01Ingress>,
857}
858
859/// The Gateway API is a sig-network community API that models service networking
860/// in Kubernetes (https://gateway-api.sigs.k8s.io/). The Gateway solver will
861/// create HTTPRoutes with the specified labels in the same namespace as the challenge.
862/// This solver is experimental, and fields / behaviour may change in the future.
863#[derive(Serialize, Deserialize, Clone, Debug, Default)]
864pub struct IssuerAcmeSolversHttp01GatewayHttpRoute {
865    /// Custom labels that will be applied to HTTPRoutes created by cert-manager
866    /// while solving HTTP-01 challenges.
867    #[serde(default, skip_serializing_if = "Option::is_none")]
868    pub labels: Option<BTreeMap<String, String>>,
869    /// When solving an HTTP-01 challenge, cert-manager creates an HTTPRoute.
870    /// cert-manager needs to know which parentRefs should be used when creating
871    /// the HTTPRoute. Usually, the parentRef references a Gateway. See:
872    /// https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways
873    #[serde(
874        default,
875        skip_serializing_if = "Option::is_none",
876        rename = "parentRefs"
877    )]
878    pub parent_refs: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRouteParentRefs>>,
879    /// Optional pod template used to configure the ACME challenge solver pods
880    /// used for HTTP01 challenges.
881    #[serde(
882        default,
883        skip_serializing_if = "Option::is_none",
884        rename = "podTemplate"
885    )]
886    pub pod_template: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplate>,
887    /// Optional service type for Kubernetes solver service. Supported values
888    /// are NodePort or ClusterIP. If unset, defaults to NodePort.
889    #[serde(
890        default,
891        skip_serializing_if = "Option::is_none",
892        rename = "serviceType"
893    )]
894    pub service_type: Option<String>,
895}
896
897/// ParentReference identifies an API object (usually a Gateway) that can be considered
898/// a parent of this resource (usually a route). There are two kinds of parent resources
899/// with "Core" support:
900///
901/// * Gateway (Gateway conformance profile)
902/// * Service (Mesh conformance profile, ClusterIP Services only)
903///
904/// This API may be extended in the future to support additional kinds of parent
905/// resources.
906///
907/// The API object must be valid in the cluster; the Group and Kind must
908/// be registered in the cluster for this reference to be valid.
909#[derive(Serialize, Deserialize, Clone, Debug, Default)]
910pub struct IssuerAcmeSolversHttp01GatewayHttpRouteParentRefs {
911    /// Group is the group of the referent.
912    /// When unspecified, "gateway.networking.k8s.io" is inferred.
913    /// To set the core API group (such as for a "Service" kind referent),
914    /// Group must be explicitly set to "" (empty string).
915    ///
916    /// Support: Core
917    #[serde(default, skip_serializing_if = "Option::is_none")]
918    pub group: Option<String>,
919    /// Kind is kind of the referent.
920    ///
921    /// There are two kinds of parent resources with "Core" support:
922    ///
923    /// * Gateway (Gateway conformance profile)
924    /// * Service (Mesh conformance profile, ClusterIP Services only)
925    ///
926    /// Support for other resources is Implementation-Specific.
927    #[serde(default, skip_serializing_if = "Option::is_none")]
928    pub kind: Option<String>,
929    /// Name is the name of the referent.
930    ///
931    /// Support: Core
932    pub name: String,
933    /// Namespace is the namespace of the referent. When unspecified, this refers
934    /// to the local namespace of the Route.
935    ///
936    /// Note that there are specific rules for ParentRefs which cross namespace
937    /// boundaries. Cross-namespace references are only valid if they are explicitly
938    /// allowed by something in the namespace they are referring to. For example:
939    /// Gateway has the AllowedRoutes field, and ReferenceGrant provides a
940    /// generic way to enable any other kind of cross-namespace reference.
941    ///
942    /// <gateway:experimental:description>
943    /// ParentRefs from a Route to a Service in the same namespace are "producer"
944    /// routes, which apply default routing rules to inbound connections from
945    /// any namespace to the Service.
946    ///
947    /// ParentRefs from a Route to a Service in a different namespace are
948    /// "consumer" routes, and these routing rules are only applied to outbound
949    /// connections originating from the same namespace as the Route, for which
950    /// the intended destination of the connections are a Service targeted as a
951    /// ParentRef of the Route.
952    /// </gateway:experimental:description>
953    ///
954    /// Support: Core
955    #[serde(default, skip_serializing_if = "Option::is_none")]
956    pub namespace: Option<String>,
957    /// Port is the network port this Route targets. It can be interpreted
958    /// differently based on the type of parent resource.
959    ///
960    /// When the parent resource is a Gateway, this targets all listeners
961    /// listening on the specified port that also support this kind of Route(and
962    /// select this Route). It's not recommended to set `Port` unless the
963    /// networking behaviors specified in a Route must apply to a specific port
964    /// as opposed to a listener(s) whose port(s) may be changed. When both Port
965    /// and SectionName are specified, the name and port of the selected listener
966    /// must match both specified values.
967    ///
968    /// <gateway:experimental:description>
969    /// When the parent resource is a Service, this targets a specific port in the
970    /// Service spec. When both Port (experimental) and SectionName are specified,
971    /// the name and port of the selected port must match both specified values.
972    /// </gateway:experimental:description>
973    ///
974    /// Implementations MAY choose to support other parent resources.
975    /// Implementations supporting other types of parent resources MUST clearly
976    /// document how/if Port is interpreted.
977    ///
978    /// For the purpose of status, an attachment is considered successful as
979    /// long as the parent resource accepts it partially. For example, Gateway
980    /// listeners can restrict which Routes can attach to them by Route kind,
981    /// namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
982    /// from the referencing Route, the Route MUST be considered successfully
983    /// attached. If no Gateway listeners accept attachment from this Route,
984    /// the Route MUST be considered detached from the Gateway.
985    ///
986    /// Support: Extended
987    #[serde(default, skip_serializing_if = "Option::is_none")]
988    pub port: Option<i32>,
989    /// SectionName is the name of a section within the target resource. In the
990    /// following resources, SectionName is interpreted as the following:
991    ///
992    /// * Gateway: Listener name. When both Port (experimental) and SectionName
993    /// are specified, the name and port of the selected listener must match
994    /// both specified values.
995    /// * Service: Port name. When both Port (experimental) and SectionName
996    /// are specified, the name and port of the selected listener must match
997    /// both specified values.
998    ///
999    /// Implementations MAY choose to support attaching Routes to other resources.
1000    /// If that is the case, they MUST clearly document how SectionName is
1001    /// interpreted.
1002    ///
1003    /// When unspecified (empty string), this will reference the entire resource.
1004    /// For the purpose of status, an attachment is considered successful if at
1005    /// least one section in the parent resource accepts it. For example, Gateway
1006    /// listeners can restrict which Routes can attach to them by Route kind,
1007    /// namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
1008    /// the referencing Route, the Route MUST be considered successfully
1009    /// attached. If no Gateway listeners accept attachment from this Route, the
1010    /// Route MUST be considered detached from the Gateway.
1011    ///
1012    /// Support: Core
1013    #[serde(
1014        default,
1015        skip_serializing_if = "Option::is_none",
1016        rename = "sectionName"
1017    )]
1018    pub section_name: Option<String>,
1019}
1020
1021/// Optional pod template used to configure the ACME challenge solver pods
1022/// used for HTTP01 challenges.
1023#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1024pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplate {
1025    /// ObjectMeta overrides for the pod used to solve HTTP01 challenges.
1026    /// Only the 'labels' and 'annotations' fields may be set.
1027    /// If labels or annotations overlap with in-built values, the values here
1028    /// will override the in-built values.
1029    #[serde(default, skip_serializing_if = "Option::is_none")]
1030    pub metadata: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateMetadata>,
1031    /// PodSpec defines overrides for the HTTP01 challenge solver pod.
1032    /// Check ACMEChallengeSolverHTTP01IngressPodSpec to find out currently supported fields.
1033    /// All other fields will be ignored.
1034    #[serde(default, skip_serializing_if = "Option::is_none")]
1035    pub spec: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpec>,
1036}
1037
1038/// ObjectMeta overrides for the pod used to solve HTTP01 challenges.
1039/// Only the 'labels' and 'annotations' fields may be set.
1040/// If labels or annotations overlap with in-built values, the values here
1041/// will override the in-built values.
1042#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1043pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateMetadata {
1044    /// Annotations that should be added to the created ACME HTTP01 solver pods.
1045    #[serde(default, skip_serializing_if = "Option::is_none")]
1046    pub annotations: Option<BTreeMap<String, String>>,
1047    /// Labels that should be added to the created ACME HTTP01 solver pods.
1048    #[serde(default, skip_serializing_if = "Option::is_none")]
1049    pub labels: Option<BTreeMap<String, String>>,
1050}
1051
1052/// PodSpec defines overrides for the HTTP01 challenge solver pod.
1053/// Check ACMEChallengeSolverHTTP01IngressPodSpec to find out currently supported fields.
1054/// All other fields will be ignored.
1055#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1056pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpec {
1057    /// If specified, the pod's scheduling constraints
1058    #[serde(default, skip_serializing_if = "Option::is_none")]
1059    pub affinity: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinity>,
1060    /// If specified, the pod's imagePullSecrets
1061    #[serde(
1062        default,
1063        skip_serializing_if = "Option::is_none",
1064        rename = "imagePullSecrets"
1065    )]
1066    pub image_pull_secrets:
1067        Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecImagePullSecrets>>,
1068    /// NodeSelector is a selector which must be true for the pod to fit on a node.
1069    /// Selector which must match a node's labels for the pod to be scheduled on that node.
1070    /// More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
1071    #[serde(
1072        default,
1073        skip_serializing_if = "Option::is_none",
1074        rename = "nodeSelector"
1075    )]
1076    pub node_selector: Option<BTreeMap<String, String>>,
1077    /// If specified, the pod's priorityClassName.
1078    #[serde(
1079        default,
1080        skip_serializing_if = "Option::is_none",
1081        rename = "priorityClassName"
1082    )]
1083    pub priority_class_name: Option<String>,
1084    /// If specified, the pod's security context
1085    #[serde(
1086        default,
1087        skip_serializing_if = "Option::is_none",
1088        rename = "securityContext"
1089    )]
1090    pub security_context:
1091        Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContext>,
1092    /// If specified, the pod's service account
1093    #[serde(
1094        default,
1095        skip_serializing_if = "Option::is_none",
1096        rename = "serviceAccountName"
1097    )]
1098    pub service_account_name: Option<String>,
1099    /// If specified, the pod's tolerations.
1100    #[serde(default, skip_serializing_if = "Option::is_none")]
1101    pub tolerations: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecTolerations>>,
1102}
1103
1104/// If specified, the pod's scheduling constraints
1105#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1106pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinity {
1107    /// Describes node affinity scheduling rules for the pod.
1108    #[serde(
1109        default,
1110        skip_serializing_if = "Option::is_none",
1111        rename = "nodeAffinity"
1112    )]
1113    pub node_affinity:
1114        Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinity>,
1115    /// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
1116    #[serde(
1117        default,
1118        skip_serializing_if = "Option::is_none",
1119        rename = "podAffinity"
1120    )]
1121    pub pod_affinity:
1122        Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinity>,
1123    /// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
1124    #[serde(
1125        default,
1126        skip_serializing_if = "Option::is_none",
1127        rename = "podAntiAffinity"
1128    )]
1129    pub pod_anti_affinity:
1130        Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinity>,
1131}
1132
1133/// Describes node affinity scheduling rules for the pod.
1134#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1135pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinity {
1136    /// The scheduler will prefer to schedule pods to nodes that satisfy
1137    /// the affinity expressions specified by this field, but it may choose
1138    /// a node that violates one or more of the expressions. The node that is
1139    /// most preferred is the one with the greatest sum of weights, i.e.
1140    /// for each node that meets all of the scheduling requirements (resource
1141    /// request, requiredDuringScheduling affinity expressions, etc.),
1142    /// compute a sum by iterating through the elements of this field and adding
1143    /// "weight" to the sum if the node matches the corresponding matchExpressions; the
1144    /// node(s) with the highest sum are the most preferred.
1145    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")]
1146    pub preferred_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
1147    /// If the affinity requirements specified by this field are not met at
1148    /// scheduling time, the pod will not be scheduled onto the node.
1149    /// If the affinity requirements specified by this field cease to be met
1150    /// at some point during pod execution (e.g. due to an update), the system
1151    /// may or may not try to eventually evict the pod from its node.
1152    #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")]
1153    pub required_during_scheduling_ignored_during_execution: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution>,
1154}
1155
1156/// An empty preferred scheduling term matches all objects with implicit weight 0
1157/// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
1158#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1159pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution {
1160    /// A node selector term, associated with the corresponding weight.
1161    pub preference: IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference,
1162    /// Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
1163    pub weight: i32,
1164}
1165
1166/// A node selector term, associated with the corresponding weight.
1167#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1168pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference {
1169    /// A list of node selector requirements by node's labels.
1170    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1171    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions>>,
1172    /// A list of node selector requirements by node's fields.
1173    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")]
1174    pub match_fields: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields>>,
1175}
1176
1177/// A node selector requirement is a selector that contains values, a key, and an operator
1178/// that relates the key and values.
1179#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1180pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions
1181{
1182    /// The label key that the selector applies to.
1183    pub key: String,
1184    /// Represents a key's relationship to a set of values.
1185    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
1186    pub operator: String,
1187    /// An array of string values. If the operator is In or NotIn,
1188    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1189    /// the values array must be empty. If the operator is Gt or Lt, the values
1190    /// array must have a single element, which will be interpreted as an integer.
1191    /// This array is replaced during a strategic merge patch.
1192    #[serde(default, skip_serializing_if = "Option::is_none")]
1193    pub values: Option<Vec<String>>,
1194}
1195
1196/// A node selector requirement is a selector that contains values, a key, and an operator
1197/// that relates the key and values.
1198#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1199pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields
1200{
1201    /// The label key that the selector applies to.
1202    pub key: String,
1203    /// Represents a key's relationship to a set of values.
1204    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
1205    pub operator: String,
1206    /// An array of string values. If the operator is In or NotIn,
1207    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1208    /// the values array must be empty. If the operator is Gt or Lt, the values
1209    /// array must have a single element, which will be interpreted as an integer.
1210    /// This array is replaced during a strategic merge patch.
1211    #[serde(default, skip_serializing_if = "Option::is_none")]
1212    pub values: Option<Vec<String>>,
1213}
1214
1215/// If the affinity requirements specified by this field are not met at
1216/// scheduling time, the pod will not be scheduled onto the node.
1217/// If the affinity requirements specified by this field cease to be met
1218/// at some point during pod execution (e.g. due to an update), the system
1219/// may or may not try to eventually evict the pod from its node.
1220#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1221pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution {
1222    /// Required. A list of node selector terms. The terms are ORed.
1223    #[serde(rename = "nodeSelectorTerms")]
1224    pub node_selector_terms: Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms>,
1225}
1226
1227/// A null or empty node selector term matches no objects. The requirements of
1228/// them are ANDed.
1229/// The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
1230#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1231pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms {
1232    /// A list of node selector requirements by node's labels.
1233    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1234    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions>>,
1235    /// A list of node selector requirements by node's fields.
1236    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")]
1237    pub match_fields: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields>>,
1238}
1239
1240/// A node selector requirement is a selector that contains values, a key, and an operator
1241/// that relates the key and values.
1242#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1243pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions
1244{
1245    /// The label key that the selector applies to.
1246    pub key: String,
1247    /// Represents a key's relationship to a set of values.
1248    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
1249    pub operator: String,
1250    /// An array of string values. If the operator is In or NotIn,
1251    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1252    /// the values array must be empty. If the operator is Gt or Lt, the values
1253    /// array must have a single element, which will be interpreted as an integer.
1254    /// This array is replaced during a strategic merge patch.
1255    #[serde(default, skip_serializing_if = "Option::is_none")]
1256    pub values: Option<Vec<String>>,
1257}
1258
1259/// A node selector requirement is a selector that contains values, a key, and an operator
1260/// that relates the key and values.
1261#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1262pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields
1263{
1264    /// The label key that the selector applies to.
1265    pub key: String,
1266    /// Represents a key's relationship to a set of values.
1267    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
1268    pub operator: String,
1269    /// An array of string values. If the operator is In or NotIn,
1270    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1271    /// the values array must be empty. If the operator is Gt or Lt, the values
1272    /// array must have a single element, which will be interpreted as an integer.
1273    /// This array is replaced during a strategic merge patch.
1274    #[serde(default, skip_serializing_if = "Option::is_none")]
1275    pub values: Option<Vec<String>>,
1276}
1277
1278/// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
1279#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1280pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinity {
1281    /// The scheduler will prefer to schedule pods to nodes that satisfy
1282    /// the affinity expressions specified by this field, but it may choose
1283    /// a node that violates one or more of the expressions. The node that is
1284    /// most preferred is the one with the greatest sum of weights, i.e.
1285    /// for each node that meets all of the scheduling requirements (resource
1286    /// request, requiredDuringScheduling affinity expressions, etc.),
1287    /// compute a sum by iterating through the elements of this field and adding
1288    /// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
1289    /// node(s) with the highest sum are the most preferred.
1290    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")]
1291    pub preferred_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
1292    /// If the affinity requirements specified by this field are not met at
1293    /// scheduling time, the pod will not be scheduled onto the node.
1294    /// If the affinity requirements specified by this field cease to be met
1295    /// at some point during pod execution (e.g. due to a pod label update), the
1296    /// system may or may not try to eventually evict the pod from its node.
1297    /// When there are multiple elements, the lists of nodes corresponding to each
1298    /// podAffinityTerm are intersected, i.e. all terms must be satisfied.
1299    #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")]
1300    pub required_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution>>,
1301}
1302
1303/// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
1304#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1305pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution {
1306    /// Required. A pod affinity term, associated with the corresponding weight.
1307    #[serde(rename = "podAffinityTerm")]
1308    pub pod_affinity_term: IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm,
1309    /// weight associated with matching the corresponding podAffinityTerm,
1310    /// in the range 1-100.
1311    pub weight: i32,
1312}
1313
1314/// Required. A pod affinity term, associated with the corresponding weight.
1315#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1316pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm {
1317    /// A label query over a set of resources, in this case pods.
1318    /// If it's null, this PodAffinityTerm matches with no Pods.
1319    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
1320    pub label_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector>,
1321    /// MatchLabelKeys is a set of pod label keys to select which pods will
1322    /// be taken into consideration. The keys are used to lookup values from the
1323    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
1324    /// to select the group of existing pods which pods will be taken into consideration
1325    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1326    /// pod labels will be ignored. The default value is empty.
1327    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
1328    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
1329    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1330    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
1331    pub match_label_keys: Option<Vec<String>>,
1332    /// MismatchLabelKeys is a set of pod label keys to select which pods will
1333    /// be taken into consideration. The keys are used to lookup values from the
1334    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
1335    /// to select the group of existing pods which pods will be taken into consideration
1336    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1337    /// pod labels will be ignored. The default value is empty.
1338    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
1339    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
1340    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1341    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
1342    pub mismatch_label_keys: Option<Vec<String>>,
1343    /// A label query over the set of namespaces that the term applies to.
1344    /// The term is applied to the union of the namespaces selected by this field
1345    /// and the ones listed in the namespaces field.
1346    /// null selector and null or empty namespaces list means "this pod's namespace".
1347    /// An empty selector ({}) matches all namespaces.
1348    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
1349    pub namespace_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector>,
1350    /// namespaces specifies a static list of namespace names that the term applies to.
1351    /// The term is applied to the union of the namespaces listed in this field
1352    /// and the ones selected by namespaceSelector.
1353    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
1354    #[serde(default, skip_serializing_if = "Option::is_none")]
1355    pub namespaces: Option<Vec<String>>,
1356    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
1357    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
1358    /// whose value of the label with key topologyKey matches that of any node on which any of the
1359    /// selected pods is running.
1360    /// Empty topologyKey is not allowed.
1361    #[serde(rename = "topologyKey")]
1362    pub topology_key: String,
1363}
1364
1365/// A label query over a set of resources, in this case pods.
1366/// If it's null, this PodAffinityTerm matches with no Pods.
1367#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1368pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector {
1369    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1370    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1371    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions>>,
1372    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1373    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1374    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1375    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1376    pub match_labels: Option<BTreeMap<String, String>>,
1377}
1378
1379/// A label selector requirement is a selector that contains values, a key, and an operator that
1380/// relates the key and values.
1381#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1382pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
1383{
1384    /// key is the label key that the selector applies to.
1385    pub key: String,
1386    /// operator represents a key's relationship to a set of values.
1387    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1388    pub operator: String,
1389    /// values is an array of string values. If the operator is In or NotIn,
1390    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1391    /// the values array must be empty. This array is replaced during a strategic
1392    /// merge patch.
1393    #[serde(default, skip_serializing_if = "Option::is_none")]
1394    pub values: Option<Vec<String>>,
1395}
1396
1397/// A label query over the set of namespaces that the term applies to.
1398/// The term is applied to the union of the namespaces selected by this field
1399/// and the ones listed in the namespaces field.
1400/// null selector and null or empty namespaces list means "this pod's namespace".
1401/// An empty selector ({}) matches all namespaces.
1402#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1403pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector {
1404    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1405    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1406    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions>>,
1407    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1408    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1409    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1410    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1411    pub match_labels: Option<BTreeMap<String, String>>,
1412}
1413
1414/// A label selector requirement is a selector that contains values, a key, and an operator that
1415/// relates the key and values.
1416#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1417pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
1418{
1419    /// key is the label key that the selector applies to.
1420    pub key: String,
1421    /// operator represents a key's relationship to a set of values.
1422    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1423    pub operator: String,
1424    /// values is an array of string values. If the operator is In or NotIn,
1425    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1426    /// the values array must be empty. This array is replaced during a strategic
1427    /// merge patch.
1428    #[serde(default, skip_serializing_if = "Option::is_none")]
1429    pub values: Option<Vec<String>>,
1430}
1431
1432/// Defines a set of pods (namely those matching the labelSelector
1433/// relative to the given namespace(s)) that this pod should be
1434/// co-located (affinity) or not co-located (anti-affinity) with,
1435/// where co-located is defined as running on a node whose value of
1436/// the label with key <topologyKey> matches that of any node on which
1437/// a pod of the set of pods is running
1438#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1439pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution {
1440    /// A label query over a set of resources, in this case pods.
1441    /// If it's null, this PodAffinityTerm matches with no Pods.
1442    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
1443    pub label_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector>,
1444    /// MatchLabelKeys is a set of pod label keys to select which pods will
1445    /// be taken into consideration. The keys are used to lookup values from the
1446    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
1447    /// to select the group of existing pods which pods will be taken into consideration
1448    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1449    /// pod labels will be ignored. The default value is empty.
1450    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
1451    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
1452    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1453    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
1454    pub match_label_keys: Option<Vec<String>>,
1455    /// MismatchLabelKeys is a set of pod label keys to select which pods will
1456    /// be taken into consideration. The keys are used to lookup values from the
1457    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
1458    /// to select the group of existing pods which pods will be taken into consideration
1459    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1460    /// pod labels will be ignored. The default value is empty.
1461    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
1462    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
1463    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1464    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
1465    pub mismatch_label_keys: Option<Vec<String>>,
1466    /// A label query over the set of namespaces that the term applies to.
1467    /// The term is applied to the union of the namespaces selected by this field
1468    /// and the ones listed in the namespaces field.
1469    /// null selector and null or empty namespaces list means "this pod's namespace".
1470    /// An empty selector ({}) matches all namespaces.
1471    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
1472    pub namespace_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector>,
1473    /// namespaces specifies a static list of namespace names that the term applies to.
1474    /// The term is applied to the union of the namespaces listed in this field
1475    /// and the ones selected by namespaceSelector.
1476    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
1477    #[serde(default, skip_serializing_if = "Option::is_none")]
1478    pub namespaces: Option<Vec<String>>,
1479    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
1480    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
1481    /// whose value of the label with key topologyKey matches that of any node on which any of the
1482    /// selected pods is running.
1483    /// Empty topologyKey is not allowed.
1484    #[serde(rename = "topologyKey")]
1485    pub topology_key: String,
1486}
1487
1488/// A label query over a set of resources, in this case pods.
1489/// If it's null, this PodAffinityTerm matches with no Pods.
1490#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1491pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector {
1492    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1493    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1494    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions>>,
1495    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1496    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1497    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1498    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1499    pub match_labels: Option<BTreeMap<String, String>>,
1500}
1501
1502/// A label selector requirement is a selector that contains values, a key, and an operator that
1503/// relates the key and values.
1504#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1505pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
1506{
1507    /// key is the label key that the selector applies to.
1508    pub key: String,
1509    /// operator represents a key's relationship to a set of values.
1510    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1511    pub operator: String,
1512    /// values is an array of string values. If the operator is In or NotIn,
1513    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1514    /// the values array must be empty. This array is replaced during a strategic
1515    /// merge patch.
1516    #[serde(default, skip_serializing_if = "Option::is_none")]
1517    pub values: Option<Vec<String>>,
1518}
1519
1520/// A label query over the set of namespaces that the term applies to.
1521/// The term is applied to the union of the namespaces selected by this field
1522/// and the ones listed in the namespaces field.
1523/// null selector and null or empty namespaces list means "this pod's namespace".
1524/// An empty selector ({}) matches all namespaces.
1525#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1526pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector {
1527    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1528    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1529    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions>>,
1530    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1531    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1532    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1533    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1534    pub match_labels: Option<BTreeMap<String, String>>,
1535}
1536
1537/// A label selector requirement is a selector that contains values, a key, and an operator that
1538/// relates the key and values.
1539#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1540pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
1541{
1542    /// key is the label key that the selector applies to.
1543    pub key: String,
1544    /// operator represents a key's relationship to a set of values.
1545    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1546    pub operator: String,
1547    /// values is an array of string values. If the operator is In or NotIn,
1548    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1549    /// the values array must be empty. This array is replaced during a strategic
1550    /// merge patch.
1551    #[serde(default, skip_serializing_if = "Option::is_none")]
1552    pub values: Option<Vec<String>>,
1553}
1554
1555/// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
1556#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1557pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinity {
1558    /// The scheduler will prefer to schedule pods to nodes that satisfy
1559    /// the anti-affinity expressions specified by this field, but it may choose
1560    /// a node that violates one or more of the expressions. The node that is
1561    /// most preferred is the one with the greatest sum of weights, i.e.
1562    /// for each node that meets all of the scheduling requirements (resource
1563    /// request, requiredDuringScheduling anti-affinity expressions, etc.),
1564    /// compute a sum by iterating through the elements of this field and adding
1565    /// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
1566    /// node(s) with the highest sum are the most preferred.
1567    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")]
1568    pub preferred_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
1569    /// If the anti-affinity requirements specified by this field are not met at
1570    /// scheduling time, the pod will not be scheduled onto the node.
1571    /// If the anti-affinity requirements specified by this field cease to be met
1572    /// at some point during pod execution (e.g. due to a pod label update), the
1573    /// system may or may not try to eventually evict the pod from its node.
1574    /// When there are multiple elements, the lists of nodes corresponding to each
1575    /// podAffinityTerm are intersected, i.e. all terms must be satisfied.
1576    #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")]
1577    pub required_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution>>,
1578}
1579
1580/// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
1581#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1582pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution {
1583    /// Required. A pod affinity term, associated with the corresponding weight.
1584    #[serde(rename = "podAffinityTerm")]
1585    pub pod_affinity_term: IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm,
1586    /// weight associated with matching the corresponding podAffinityTerm,
1587    /// in the range 1-100.
1588    pub weight: i32,
1589}
1590
1591/// Required. A pod affinity term, associated with the corresponding weight.
1592#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1593pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm {
1594    /// A label query over a set of resources, in this case pods.
1595    /// If it's null, this PodAffinityTerm matches with no Pods.
1596    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
1597    pub label_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector>,
1598    /// MatchLabelKeys is a set of pod label keys to select which pods will
1599    /// be taken into consideration. The keys are used to lookup values from the
1600    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
1601    /// to select the group of existing pods which pods will be taken into consideration
1602    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1603    /// pod labels will be ignored. The default value is empty.
1604    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
1605    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
1606    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1607    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
1608    pub match_label_keys: Option<Vec<String>>,
1609    /// MismatchLabelKeys is a set of pod label keys to select which pods will
1610    /// be taken into consideration. The keys are used to lookup values from the
1611    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
1612    /// to select the group of existing pods which pods will be taken into consideration
1613    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1614    /// pod labels will be ignored. The default value is empty.
1615    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
1616    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
1617    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1618    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
1619    pub mismatch_label_keys: Option<Vec<String>>,
1620    /// A label query over the set of namespaces that the term applies to.
1621    /// The term is applied to the union of the namespaces selected by this field
1622    /// and the ones listed in the namespaces field.
1623    /// null selector and null or empty namespaces list means "this pod's namespace".
1624    /// An empty selector ({}) matches all namespaces.
1625    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
1626    pub namespace_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector>,
1627    /// namespaces specifies a static list of namespace names that the term applies to.
1628    /// The term is applied to the union of the namespaces listed in this field
1629    /// and the ones selected by namespaceSelector.
1630    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
1631    #[serde(default, skip_serializing_if = "Option::is_none")]
1632    pub namespaces: Option<Vec<String>>,
1633    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
1634    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
1635    /// whose value of the label with key topologyKey matches that of any node on which any of the
1636    /// selected pods is running.
1637    /// Empty topologyKey is not allowed.
1638    #[serde(rename = "topologyKey")]
1639    pub topology_key: String,
1640}
1641
1642/// A label query over a set of resources, in this case pods.
1643/// If it's null, this PodAffinityTerm matches with no Pods.
1644#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1645pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector {
1646    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1647    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1648    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions>>,
1649    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1650    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1651    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1652    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1653    pub match_labels: Option<BTreeMap<String, String>>,
1654}
1655
1656/// A label selector requirement is a selector that contains values, a key, and an operator that
1657/// relates the key and values.
1658#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1659pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
1660{
1661    /// key is the label key that the selector applies to.
1662    pub key: String,
1663    /// operator represents a key's relationship to a set of values.
1664    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1665    pub operator: String,
1666    /// values is an array of string values. If the operator is In or NotIn,
1667    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1668    /// the values array must be empty. This array is replaced during a strategic
1669    /// merge patch.
1670    #[serde(default, skip_serializing_if = "Option::is_none")]
1671    pub values: Option<Vec<String>>,
1672}
1673
1674/// A label query over the set of namespaces that the term applies to.
1675/// The term is applied to the union of the namespaces selected by this field
1676/// and the ones listed in the namespaces field.
1677/// null selector and null or empty namespaces list means "this pod's namespace".
1678/// An empty selector ({}) matches all namespaces.
1679#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1680pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector {
1681    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1682    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1683    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions>>,
1684    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1685    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1686    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1687    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1688    pub match_labels: Option<BTreeMap<String, String>>,
1689}
1690
1691/// A label selector requirement is a selector that contains values, a key, and an operator that
1692/// relates the key and values.
1693#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1694pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
1695{
1696    /// key is the label key that the selector applies to.
1697    pub key: String,
1698    /// operator represents a key's relationship to a set of values.
1699    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1700    pub operator: String,
1701    /// values is an array of string values. If the operator is In or NotIn,
1702    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1703    /// the values array must be empty. This array is replaced during a strategic
1704    /// merge patch.
1705    #[serde(default, skip_serializing_if = "Option::is_none")]
1706    pub values: Option<Vec<String>>,
1707}
1708
1709/// Defines a set of pods (namely those matching the labelSelector
1710/// relative to the given namespace(s)) that this pod should be
1711/// co-located (affinity) or not co-located (anti-affinity) with,
1712/// where co-located is defined as running on a node whose value of
1713/// the label with key <topologyKey> matches that of any node on which
1714/// a pod of the set of pods is running
1715#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1716pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution {
1717    /// A label query over a set of resources, in this case pods.
1718    /// If it's null, this PodAffinityTerm matches with no Pods.
1719    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
1720    pub label_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector>,
1721    /// MatchLabelKeys is a set of pod label keys to select which pods will
1722    /// be taken into consideration. The keys are used to lookup values from the
1723    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
1724    /// to select the group of existing pods which pods will be taken into consideration
1725    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1726    /// pod labels will be ignored. The default value is empty.
1727    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
1728    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
1729    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1730    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
1731    pub match_label_keys: Option<Vec<String>>,
1732    /// MismatchLabelKeys is a set of pod label keys to select which pods will
1733    /// be taken into consideration. The keys are used to lookup values from the
1734    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
1735    /// to select the group of existing pods which pods will be taken into consideration
1736    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
1737    /// pod labels will be ignored. The default value is empty.
1738    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
1739    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
1740    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
1741    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
1742    pub mismatch_label_keys: Option<Vec<String>>,
1743    /// A label query over the set of namespaces that the term applies to.
1744    /// The term is applied to the union of the namespaces selected by this field
1745    /// and the ones listed in the namespaces field.
1746    /// null selector and null or empty namespaces list means "this pod's namespace".
1747    /// An empty selector ({}) matches all namespaces.
1748    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
1749    pub namespace_selector: Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector>,
1750    /// namespaces specifies a static list of namespace names that the term applies to.
1751    /// The term is applied to the union of the namespaces listed in this field
1752    /// and the ones selected by namespaceSelector.
1753    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
1754    #[serde(default, skip_serializing_if = "Option::is_none")]
1755    pub namespaces: Option<Vec<String>>,
1756    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
1757    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
1758    /// whose value of the label with key topologyKey matches that of any node on which any of the
1759    /// selected pods is running.
1760    /// Empty topologyKey is not allowed.
1761    #[serde(rename = "topologyKey")]
1762    pub topology_key: String,
1763}
1764
1765/// A label query over a set of resources, in this case pods.
1766/// If it's null, this PodAffinityTerm matches with no Pods.
1767#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1768pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector {
1769    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1770    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1771    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions>>,
1772    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1773    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1774    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1775    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1776    pub match_labels: Option<BTreeMap<String, String>>,
1777}
1778
1779/// A label selector requirement is a selector that contains values, a key, and an operator that
1780/// relates the key and values.
1781#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1782pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
1783{
1784    /// key is the label key that the selector applies to.
1785    pub key: String,
1786    /// operator represents a key's relationship to a set of values.
1787    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1788    pub operator: String,
1789    /// values is an array of string values. If the operator is In or NotIn,
1790    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1791    /// the values array must be empty. This array is replaced during a strategic
1792    /// merge patch.
1793    #[serde(default, skip_serializing_if = "Option::is_none")]
1794    pub values: Option<Vec<String>>,
1795}
1796
1797/// A label query over the set of namespaces that the term applies to.
1798/// The term is applied to the union of the namespaces selected by this field
1799/// and the ones listed in the namespaces field.
1800/// null selector and null or empty namespaces list means "this pod's namespace".
1801/// An empty selector ({}) matches all namespaces.
1802#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1803pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector {
1804    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
1805    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
1806    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions>>,
1807    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
1808    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
1809    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
1810    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
1811    pub match_labels: Option<BTreeMap<String, String>>,
1812}
1813
1814/// A label selector requirement is a selector that contains values, a key, and an operator that
1815/// relates the key and values.
1816#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1817pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
1818{
1819    /// key is the label key that the selector applies to.
1820    pub key: String,
1821    /// operator represents a key's relationship to a set of values.
1822    /// Valid operators are In, NotIn, Exists and DoesNotExist.
1823    pub operator: String,
1824    /// values is an array of string values. If the operator is In or NotIn,
1825    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
1826    /// the values array must be empty. This array is replaced during a strategic
1827    /// merge patch.
1828    #[serde(default, skip_serializing_if = "Option::is_none")]
1829    pub values: Option<Vec<String>>,
1830}
1831
1832/// LocalObjectReference contains enough information to let you locate the
1833/// referenced object inside the same namespace.
1834#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1835pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecImagePullSecrets {
1836    /// Name of the referent.
1837    /// This field is effectively required, but due to backwards compatibility is
1838    /// allowed to be empty. Instances of this type with an empty value here are
1839    /// almost certainly wrong.
1840    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
1841    #[serde(default, skip_serializing_if = "Option::is_none")]
1842    pub name: Option<String>,
1843}
1844
1845/// If specified, the pod's security context
1846#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1847pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContext {
1848    /// A special supplemental group that applies to all containers in a pod.
1849    /// Some volume types allow the Kubelet to change the ownership of that volume
1850    /// to be owned by the pod:
1851    ///
1852    /// 1. The owning GID will be the FSGroup
1853    /// 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
1854    /// 3. The permission bits are OR'd with rw-rw----
1855    ///
1856    /// If unset, the Kubelet will not modify the ownership and permissions of any volume.
1857    /// Note that this field cannot be set when spec.os.name is windows.
1858    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")]
1859    pub fs_group: Option<i64>,
1860    /// fsGroupChangePolicy defines behavior of changing ownership and permission of the volume
1861    /// before being exposed inside Pod. This field will only apply to
1862    /// volume types which support fsGroup based ownership(and permissions).
1863    /// It will have no effect on ephemeral volume types such as: secret, configmaps
1864    /// and emptydir.
1865    /// Valid values are "OnRootMismatch" and "Always". If not specified, "Always" is used.
1866    /// Note that this field cannot be set when spec.os.name is windows.
1867    #[serde(
1868        default,
1869        skip_serializing_if = "Option::is_none",
1870        rename = "fsGroupChangePolicy"
1871    )]
1872    pub fs_group_change_policy: Option<String>,
1873    /// The GID to run the entrypoint of the container process.
1874    /// Uses runtime default if unset.
1875    /// May also be set in SecurityContext.  If set in both SecurityContext and
1876    /// PodSecurityContext, the value specified in SecurityContext takes precedence
1877    /// for that container.
1878    /// Note that this field cannot be set when spec.os.name is windows.
1879    #[serde(
1880        default,
1881        skip_serializing_if = "Option::is_none",
1882        rename = "runAsGroup"
1883    )]
1884    pub run_as_group: Option<i64>,
1885    /// Indicates that the container must run as a non-root user.
1886    /// If true, the Kubelet will validate the image at runtime to ensure that it
1887    /// does not run as UID 0 (root) and fail to start the container if it does.
1888    /// If unset or false, no such validation will be performed.
1889    /// May also be set in SecurityContext.  If set in both SecurityContext and
1890    /// PodSecurityContext, the value specified in SecurityContext takes precedence.
1891    #[serde(
1892        default,
1893        skip_serializing_if = "Option::is_none",
1894        rename = "runAsNonRoot"
1895    )]
1896    pub run_as_non_root: Option<bool>,
1897    /// The UID to run the entrypoint of the container process.
1898    /// Defaults to user specified in image metadata if unspecified.
1899    /// May also be set in SecurityContext.  If set in both SecurityContext and
1900    /// PodSecurityContext, the value specified in SecurityContext takes precedence
1901    /// for that container.
1902    /// Note that this field cannot be set when spec.os.name is windows.
1903    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")]
1904    pub run_as_user: Option<i64>,
1905    /// The SELinux context to be applied to all containers.
1906    /// If unspecified, the container runtime will allocate a random SELinux context for each
1907    /// container.  May also be set in SecurityContext.  If set in
1908    /// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
1909    /// takes precedence for that container.
1910    /// Note that this field cannot be set when spec.os.name is windows.
1911    #[serde(
1912        default,
1913        skip_serializing_if = "Option::is_none",
1914        rename = "seLinuxOptions"
1915    )]
1916    pub se_linux_options:
1917        Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContextSeLinuxOptions>,
1918    /// The seccomp options to use by the containers in this pod.
1919    /// Note that this field cannot be set when spec.os.name is windows.
1920    #[serde(
1921        default,
1922        skip_serializing_if = "Option::is_none",
1923        rename = "seccompProfile"
1924    )]
1925    pub seccomp_profile:
1926        Option<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContextSeccompProfile>,
1927    /// A list of groups applied to the first process run in each container, in addition
1928    /// to the container's primary GID, the fsGroup (if specified), and group memberships
1929    /// defined in the container image for the uid of the container process. If unspecified,
1930    /// no additional groups are added to any container. Note that group memberships
1931    /// defined in the container image for the uid of the container process are still effective,
1932    /// even if they are not included in this list.
1933    /// Note that this field cannot be set when spec.os.name is windows.
1934    #[serde(
1935        default,
1936        skip_serializing_if = "Option::is_none",
1937        rename = "supplementalGroups"
1938    )]
1939    pub supplemental_groups: Option<Vec<i64>>,
1940    /// Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
1941    /// sysctls (by the container runtime) might fail to launch.
1942    /// Note that this field cannot be set when spec.os.name is windows.
1943    #[serde(default, skip_serializing_if = "Option::is_none")]
1944    pub sysctls:
1945        Option<Vec<IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContextSysctls>>,
1946}
1947
1948/// The SELinux context to be applied to all containers.
1949/// If unspecified, the container runtime will allocate a random SELinux context for each
1950/// container.  May also be set in SecurityContext.  If set in
1951/// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
1952/// takes precedence for that container.
1953/// Note that this field cannot be set when spec.os.name is windows.
1954#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1955pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContextSeLinuxOptions {
1956    /// Level is SELinux level label that applies to the container.
1957    #[serde(default, skip_serializing_if = "Option::is_none")]
1958    pub level: Option<String>,
1959    /// Role is a SELinux role label that applies to the container.
1960    #[serde(default, skip_serializing_if = "Option::is_none")]
1961    pub role: Option<String>,
1962    /// Type is a SELinux type label that applies to the container.
1963    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
1964    pub r#type: Option<String>,
1965    /// User is a SELinux user label that applies to the container.
1966    #[serde(default, skip_serializing_if = "Option::is_none")]
1967    pub user: Option<String>,
1968}
1969
1970/// The seccomp options to use by the containers in this pod.
1971/// Note that this field cannot be set when spec.os.name is windows.
1972#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1973pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContextSeccompProfile {
1974    /// localhostProfile indicates a profile defined in a file on the node should be used.
1975    /// The profile must be preconfigured on the node to work.
1976    /// Must be a descending path, relative to the kubelet's configured seccomp profile location.
1977    /// Must be set if type is "Localhost". Must NOT be set for any other type.
1978    #[serde(
1979        default,
1980        skip_serializing_if = "Option::is_none",
1981        rename = "localhostProfile"
1982    )]
1983    pub localhost_profile: Option<String>,
1984    /// type indicates which kind of seccomp profile will be applied.
1985    /// Valid options are:
1986    ///
1987    /// Localhost - a profile defined in a file on the node should be used.
1988    /// RuntimeDefault - the container runtime default profile should be used.
1989    /// Unconfined - no profile should be applied.
1990    #[serde(rename = "type")]
1991    pub r#type: String,
1992}
1993
1994/// Sysctl defines a kernel parameter to be set
1995#[derive(Serialize, Deserialize, Clone, Debug, Default)]
1996pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecSecurityContextSysctls {
1997    /// Name of a property to set
1998    pub name: String,
1999    /// Value of a property to set
2000    pub value: String,
2001}
2002
2003/// The pod this Toleration is attached to tolerates any taint that matches
2004/// the triple <key,value,effect> using the matching operator <operator>.
2005#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2006pub struct IssuerAcmeSolversHttp01GatewayHttpRoutePodTemplateSpecTolerations {
2007    /// Effect indicates the taint effect to match. Empty means match all taint effects.
2008    /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
2009    #[serde(default, skip_serializing_if = "Option::is_none")]
2010    pub effect: Option<String>,
2011    /// Key is the taint key that the toleration applies to. Empty means match all taint keys.
2012    /// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
2013    #[serde(default, skip_serializing_if = "Option::is_none")]
2014    pub key: Option<String>,
2015    /// Operator represents a key's relationship to the value.
2016    /// Valid operators are Exists and Equal. Defaults to Equal.
2017    /// Exists is equivalent to wildcard for value, so that a pod can
2018    /// tolerate all taints of a particular category.
2019    #[serde(default, skip_serializing_if = "Option::is_none")]
2020    pub operator: Option<String>,
2021    /// TolerationSeconds represents the period of time the toleration (which must be
2022    /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
2023    /// it is not set, which means tolerate the taint forever (do not evict). Zero and
2024    /// negative values will be treated as 0 (evict immediately) by the system.
2025    #[serde(
2026        default,
2027        skip_serializing_if = "Option::is_none",
2028        rename = "tolerationSeconds"
2029    )]
2030    pub toleration_seconds: Option<i64>,
2031    /// Value is the taint value the toleration matches to.
2032    /// If the operator is Exists, the value should be empty, otherwise just a regular string.
2033    #[serde(default, skip_serializing_if = "Option::is_none")]
2034    pub value: Option<String>,
2035}
2036
2037/// The ingress based HTTP01 challenge solver will solve challenges by
2038/// creating or modifying Ingress resources in order to route requests for
2039/// '/.well-known/acme-challenge/XYZ' to 'challenge solver' pods that are
2040/// provisioned by cert-manager for each Challenge to be completed.
2041#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2042pub struct IssuerAcmeSolversHttp01Ingress {
2043    /// This field configures the annotation `kubernetes.io/ingress.class` when
2044    /// creating Ingress resources to solve ACME challenges that use this
2045    /// challenge solver. Only one of `class`, `name` or `ingressClassName` may
2046    /// be specified.
2047    #[serde(default, skip_serializing_if = "Option::is_none")]
2048    pub class: Option<String>,
2049    /// This field configures the field `ingressClassName` on the created Ingress
2050    /// resources used to solve ACME challenges that use this challenge solver.
2051    /// This is the recommended way of configuring the ingress class. Only one of
2052    /// `class`, `name` or `ingressClassName` may be specified.
2053    #[serde(
2054        default,
2055        skip_serializing_if = "Option::is_none",
2056        rename = "ingressClassName"
2057    )]
2058    pub ingress_class_name: Option<String>,
2059    /// Optional ingress template used to configure the ACME challenge solver
2060    /// ingress used for HTTP01 challenges.
2061    #[serde(
2062        default,
2063        skip_serializing_if = "Option::is_none",
2064        rename = "ingressTemplate"
2065    )]
2066    pub ingress_template: Option<IssuerAcmeSolversHttp01IngressIngressTemplate>,
2067    /// The name of the ingress resource that should have ACME challenge solving
2068    /// routes inserted into it in order to solve HTTP01 challenges.
2069    /// This is typically used in conjunction with ingress controllers like
2070    /// ingress-gce, which maintains a 1:1 mapping between external IPs and
2071    /// ingress resources. Only one of `class`, `name` or `ingressClassName` may
2072    /// be specified.
2073    #[serde(default, skip_serializing_if = "Option::is_none")]
2074    pub name: Option<String>,
2075    /// Optional pod template used to configure the ACME challenge solver pods
2076    /// used for HTTP01 challenges.
2077    #[serde(
2078        default,
2079        skip_serializing_if = "Option::is_none",
2080        rename = "podTemplate"
2081    )]
2082    pub pod_template: Option<IssuerAcmeSolversHttp01IngressPodTemplate>,
2083    /// Optional service type for Kubernetes solver service. Supported values
2084    /// are NodePort or ClusterIP. If unset, defaults to NodePort.
2085    #[serde(
2086        default,
2087        skip_serializing_if = "Option::is_none",
2088        rename = "serviceType"
2089    )]
2090    pub service_type: Option<String>,
2091}
2092
2093/// Optional ingress template used to configure the ACME challenge solver
2094/// ingress used for HTTP01 challenges.
2095#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2096pub struct IssuerAcmeSolversHttp01IngressIngressTemplate {
2097    /// ObjectMeta overrides for the ingress used to solve HTTP01 challenges.
2098    /// Only the 'labels' and 'annotations' fields may be set.
2099    /// If labels or annotations overlap with in-built values, the values here
2100    /// will override the in-built values.
2101    #[serde(default, skip_serializing_if = "Option::is_none")]
2102    pub metadata: Option<IssuerAcmeSolversHttp01IngressIngressTemplateMetadata>,
2103}
2104
2105/// ObjectMeta overrides for the ingress used to solve HTTP01 challenges.
2106/// Only the 'labels' and 'annotations' fields may be set.
2107/// If labels or annotations overlap with in-built values, the values here
2108/// will override the in-built values.
2109#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2110pub struct IssuerAcmeSolversHttp01IngressIngressTemplateMetadata {
2111    /// Annotations that should be added to the created ACME HTTP01 solver ingress.
2112    #[serde(default, skip_serializing_if = "Option::is_none")]
2113    pub annotations: Option<BTreeMap<String, String>>,
2114    /// Labels that should be added to the created ACME HTTP01 solver ingress.
2115    #[serde(default, skip_serializing_if = "Option::is_none")]
2116    pub labels: Option<BTreeMap<String, String>>,
2117}
2118
2119/// Optional pod template used to configure the ACME challenge solver pods
2120/// used for HTTP01 challenges.
2121#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2122pub struct IssuerAcmeSolversHttp01IngressPodTemplate {
2123    /// ObjectMeta overrides for the pod used to solve HTTP01 challenges.
2124    /// Only the 'labels' and 'annotations' fields may be set.
2125    /// If labels or annotations overlap with in-built values, the values here
2126    /// will override the in-built values.
2127    #[serde(default, skip_serializing_if = "Option::is_none")]
2128    pub metadata: Option<IssuerAcmeSolversHttp01IngressPodTemplateMetadata>,
2129    /// PodSpec defines overrides for the HTTP01 challenge solver pod.
2130    /// Check ACMEChallengeSolverHTTP01IngressPodSpec to find out currently supported fields.
2131    /// All other fields will be ignored.
2132    #[serde(default, skip_serializing_if = "Option::is_none")]
2133    pub spec: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpec>,
2134}
2135
2136/// ObjectMeta overrides for the pod used to solve HTTP01 challenges.
2137/// Only the 'labels' and 'annotations' fields may be set.
2138/// If labels or annotations overlap with in-built values, the values here
2139/// will override the in-built values.
2140#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2141pub struct IssuerAcmeSolversHttp01IngressPodTemplateMetadata {
2142    /// Annotations that should be added to the created ACME HTTP01 solver pods.
2143    #[serde(default, skip_serializing_if = "Option::is_none")]
2144    pub annotations: Option<BTreeMap<String, String>>,
2145    /// Labels that should be added to the created ACME HTTP01 solver pods.
2146    #[serde(default, skip_serializing_if = "Option::is_none")]
2147    pub labels: Option<BTreeMap<String, String>>,
2148}
2149
2150/// PodSpec defines overrides for the HTTP01 challenge solver pod.
2151/// Check ACMEChallengeSolverHTTP01IngressPodSpec to find out currently supported fields.
2152/// All other fields will be ignored.
2153#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2154pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpec {
2155    /// If specified, the pod's scheduling constraints
2156    #[serde(default, skip_serializing_if = "Option::is_none")]
2157    pub affinity: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinity>,
2158    /// If specified, the pod's imagePullSecrets
2159    #[serde(
2160        default,
2161        skip_serializing_if = "Option::is_none",
2162        rename = "imagePullSecrets"
2163    )]
2164    pub image_pull_secrets:
2165        Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecImagePullSecrets>>,
2166    /// NodeSelector is a selector which must be true for the pod to fit on a node.
2167    /// Selector which must match a node's labels for the pod to be scheduled on that node.
2168    /// More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
2169    #[serde(
2170        default,
2171        skip_serializing_if = "Option::is_none",
2172        rename = "nodeSelector"
2173    )]
2174    pub node_selector: Option<BTreeMap<String, String>>,
2175    /// If specified, the pod's priorityClassName.
2176    #[serde(
2177        default,
2178        skip_serializing_if = "Option::is_none",
2179        rename = "priorityClassName"
2180    )]
2181    pub priority_class_name: Option<String>,
2182    /// If specified, the pod's security context
2183    #[serde(
2184        default,
2185        skip_serializing_if = "Option::is_none",
2186        rename = "securityContext"
2187    )]
2188    pub security_context: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContext>,
2189    /// If specified, the pod's service account
2190    #[serde(
2191        default,
2192        skip_serializing_if = "Option::is_none",
2193        rename = "serviceAccountName"
2194    )]
2195    pub service_account_name: Option<String>,
2196    /// If specified, the pod's tolerations.
2197    #[serde(default, skip_serializing_if = "Option::is_none")]
2198    pub tolerations: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecTolerations>>,
2199}
2200
2201/// If specified, the pod's scheduling constraints
2202#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2203pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinity {
2204    /// Describes node affinity scheduling rules for the pod.
2205    #[serde(
2206        default,
2207        skip_serializing_if = "Option::is_none",
2208        rename = "nodeAffinity"
2209    )]
2210    pub node_affinity: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinity>,
2211    /// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
2212    #[serde(
2213        default,
2214        skip_serializing_if = "Option::is_none",
2215        rename = "podAffinity"
2216    )]
2217    pub pod_affinity: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinity>,
2218    /// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
2219    #[serde(
2220        default,
2221        skip_serializing_if = "Option::is_none",
2222        rename = "podAntiAffinity"
2223    )]
2224    pub pod_anti_affinity:
2225        Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinity>,
2226}
2227
2228/// Describes node affinity scheduling rules for the pod.
2229#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2230pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinity {
2231    /// The scheduler will prefer to schedule pods to nodes that satisfy
2232    /// the affinity expressions specified by this field, but it may choose
2233    /// a node that violates one or more of the expressions. The node that is
2234    /// most preferred is the one with the greatest sum of weights, i.e.
2235    /// for each node that meets all of the scheduling requirements (resource
2236    /// request, requiredDuringScheduling affinity expressions, etc.),
2237    /// compute a sum by iterating through the elements of this field and adding
2238    /// "weight" to the sum if the node matches the corresponding matchExpressions; the
2239    /// node(s) with the highest sum are the most preferred.
2240    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")]
2241    pub preferred_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
2242    /// If the affinity requirements specified by this field are not met at
2243    /// scheduling time, the pod will not be scheduled onto the node.
2244    /// If the affinity requirements specified by this field cease to be met
2245    /// at some point during pod execution (e.g. due to an update), the system
2246    /// may or may not try to eventually evict the pod from its node.
2247    #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")]
2248    pub required_during_scheduling_ignored_during_execution: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution>,
2249}
2250
2251/// An empty preferred scheduling term matches all objects with implicit weight 0
2252/// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
2253#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2254pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution {
2255    /// A node selector term, associated with the corresponding weight.
2256    pub preference: IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference,
2257    /// Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
2258    pub weight: i32,
2259}
2260
2261/// A node selector term, associated with the corresponding weight.
2262#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2263pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreference {
2264    /// A list of node selector requirements by node's labels.
2265    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2266    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions>>,
2267    /// A list of node selector requirements by node's fields.
2268    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")]
2269    pub match_fields: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields>>,
2270}
2271
2272/// A node selector requirement is a selector that contains values, a key, and an operator
2273/// that relates the key and values.
2274#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2275pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchExpressions
2276{
2277    /// The label key that the selector applies to.
2278    pub key: String,
2279    /// Represents a key's relationship to a set of values.
2280    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
2281    pub operator: String,
2282    /// An array of string values. If the operator is In or NotIn,
2283    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2284    /// the values array must be empty. If the operator is Gt or Lt, the values
2285    /// array must have a single element, which will be interpreted as an integer.
2286    /// This array is replaced during a strategic merge patch.
2287    #[serde(default, skip_serializing_if = "Option::is_none")]
2288    pub values: Option<Vec<String>>,
2289}
2290
2291/// A node selector requirement is a selector that contains values, a key, and an operator
2292/// that relates the key and values.
2293#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2294pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecutionPreferenceMatchFields
2295{
2296    /// The label key that the selector applies to.
2297    pub key: String,
2298    /// Represents a key's relationship to a set of values.
2299    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
2300    pub operator: String,
2301    /// An array of string values. If the operator is In or NotIn,
2302    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2303    /// the values array must be empty. If the operator is Gt or Lt, the values
2304    /// array must have a single element, which will be interpreted as an integer.
2305    /// This array is replaced during a strategic merge patch.
2306    #[serde(default, skip_serializing_if = "Option::is_none")]
2307    pub values: Option<Vec<String>>,
2308}
2309
2310/// If the affinity requirements specified by this field are not met at
2311/// scheduling time, the pod will not be scheduled onto the node.
2312/// If the affinity requirements specified by this field cease to be met
2313/// at some point during pod execution (e.g. due to an update), the system
2314/// may or may not try to eventually evict the pod from its node.
2315#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2316pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution {
2317    /// Required. A list of node selector terms. The terms are ORed.
2318    #[serde(rename = "nodeSelectorTerms")]
2319    pub node_selector_terms: Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms>,
2320}
2321
2322/// A null or empty node selector term matches no objects. The requirements of
2323/// them are ANDed.
2324/// The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
2325#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2326pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTerms {
2327    /// A list of node selector requirements by node's labels.
2328    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2329    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions>>,
2330    /// A list of node selector requirements by node's fields.
2331    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchFields")]
2332    pub match_fields: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields>>,
2333}
2334
2335/// A node selector requirement is a selector that contains values, a key, and an operator
2336/// that relates the key and values.
2337#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2338pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchExpressions
2339{
2340    /// The label key that the selector applies to.
2341    pub key: String,
2342    /// Represents a key's relationship to a set of values.
2343    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
2344    pub operator: String,
2345    /// An array of string values. If the operator is In or NotIn,
2346    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2347    /// the values array must be empty. If the operator is Gt or Lt, the values
2348    /// array must have a single element, which will be interpreted as an integer.
2349    /// This array is replaced during a strategic merge patch.
2350    #[serde(default, skip_serializing_if = "Option::is_none")]
2351    pub values: Option<Vec<String>>,
2352}
2353
2354/// A node selector requirement is a selector that contains values, a key, and an operator
2355/// that relates the key and values.
2356#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2357pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecutionNodeSelectorTermsMatchFields
2358{
2359    /// The label key that the selector applies to.
2360    pub key: String,
2361    /// Represents a key's relationship to a set of values.
2362    /// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
2363    pub operator: String,
2364    /// An array of string values. If the operator is In or NotIn,
2365    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2366    /// the values array must be empty. If the operator is Gt or Lt, the values
2367    /// array must have a single element, which will be interpreted as an integer.
2368    /// This array is replaced during a strategic merge patch.
2369    #[serde(default, skip_serializing_if = "Option::is_none")]
2370    pub values: Option<Vec<String>>,
2371}
2372
2373/// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
2374#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2375pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinity {
2376    /// The scheduler will prefer to schedule pods to nodes that satisfy
2377    /// the affinity expressions specified by this field, but it may choose
2378    /// a node that violates one or more of the expressions. The node that is
2379    /// most preferred is the one with the greatest sum of weights, i.e.
2380    /// for each node that meets all of the scheduling requirements (resource
2381    /// request, requiredDuringScheduling affinity expressions, etc.),
2382    /// compute a sum by iterating through the elements of this field and adding
2383    /// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
2384    /// node(s) with the highest sum are the most preferred.
2385    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")]
2386    pub preferred_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
2387    /// If the affinity requirements specified by this field are not met at
2388    /// scheduling time, the pod will not be scheduled onto the node.
2389    /// If the affinity requirements specified by this field cease to be met
2390    /// at some point during pod execution (e.g. due to a pod label update), the
2391    /// system may or may not try to eventually evict the pod from its node.
2392    /// When there are multiple elements, the lists of nodes corresponding to each
2393    /// podAffinityTerm are intersected, i.e. all terms must be satisfied.
2394    #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")]
2395    pub required_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution>>,
2396}
2397
2398/// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
2399#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2400pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecution {
2401    /// Required. A pod affinity term, associated with the corresponding weight.
2402    #[serde(rename = "podAffinityTerm")]
2403    pub pod_affinity_term: IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm,
2404    /// weight associated with matching the corresponding podAffinityTerm,
2405    /// in the range 1-100.
2406    pub weight: i32,
2407}
2408
2409/// Required. A pod affinity term, associated with the corresponding weight.
2410#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2411pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm {
2412    /// A label query over a set of resources, in this case pods.
2413    /// If it's null, this PodAffinityTerm matches with no Pods.
2414    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
2415    pub label_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector>,
2416    /// MatchLabelKeys is a set of pod label keys to select which pods will
2417    /// be taken into consideration. The keys are used to lookup values from the
2418    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
2419    /// to select the group of existing pods which pods will be taken into consideration
2420    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2421    /// pod labels will be ignored. The default value is empty.
2422    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
2423    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
2424    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2425    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
2426    pub match_label_keys: Option<Vec<String>>,
2427    /// MismatchLabelKeys is a set of pod label keys to select which pods will
2428    /// be taken into consideration. The keys are used to lookup values from the
2429    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
2430    /// to select the group of existing pods which pods will be taken into consideration
2431    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2432    /// pod labels will be ignored. The default value is empty.
2433    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
2434    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
2435    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2436    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
2437    pub mismatch_label_keys: Option<Vec<String>>,
2438    /// A label query over the set of namespaces that the term applies to.
2439    /// The term is applied to the union of the namespaces selected by this field
2440    /// and the ones listed in the namespaces field.
2441    /// null selector and null or empty namespaces list means "this pod's namespace".
2442    /// An empty selector ({}) matches all namespaces.
2443    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
2444    pub namespace_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector>,
2445    /// namespaces specifies a static list of namespace names that the term applies to.
2446    /// The term is applied to the union of the namespaces listed in this field
2447    /// and the ones selected by namespaceSelector.
2448    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
2449    #[serde(default, skip_serializing_if = "Option::is_none")]
2450    pub namespaces: Option<Vec<String>>,
2451    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
2452    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
2453    /// whose value of the label with key topologyKey matches that of any node on which any of the
2454    /// selected pods is running.
2455    /// Empty topologyKey is not allowed.
2456    #[serde(rename = "topologyKey")]
2457    pub topology_key: String,
2458}
2459
2460/// A label query over a set of resources, in this case pods.
2461/// If it's null, this PodAffinityTerm matches with no Pods.
2462#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2463pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector {
2464    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2465    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2466    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions>>,
2467    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2468    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2469    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2470    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2471    pub match_labels: Option<BTreeMap<String, String>>,
2472}
2473
2474/// A label selector requirement is a selector that contains values, a key, and an operator that
2475/// relates the key and values.
2476#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2477pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
2478{
2479    /// key is the label key that the selector applies to.
2480    pub key: String,
2481    /// operator represents a key's relationship to a set of values.
2482    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2483    pub operator: String,
2484    /// values is an array of string values. If the operator is In or NotIn,
2485    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2486    /// the values array must be empty. This array is replaced during a strategic
2487    /// merge patch.
2488    #[serde(default, skip_serializing_if = "Option::is_none")]
2489    pub values: Option<Vec<String>>,
2490}
2491
2492/// A label query over the set of namespaces that the term applies to.
2493/// The term is applied to the union of the namespaces selected by this field
2494/// and the ones listed in the namespaces field.
2495/// null selector and null or empty namespaces list means "this pod's namespace".
2496/// An empty selector ({}) matches all namespaces.
2497#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2498pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector {
2499    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2500    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2501    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions>>,
2502    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2503    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2504    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2505    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2506    pub match_labels: Option<BTreeMap<String, String>>,
2507}
2508
2509/// A label selector requirement is a selector that contains values, a key, and an operator that
2510/// relates the key and values.
2511#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2512pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
2513{
2514    /// key is the label key that the selector applies to.
2515    pub key: String,
2516    /// operator represents a key's relationship to a set of values.
2517    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2518    pub operator: String,
2519    /// values is an array of string values. If the operator is In or NotIn,
2520    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2521    /// the values array must be empty. This array is replaced during a strategic
2522    /// merge patch.
2523    #[serde(default, skip_serializing_if = "Option::is_none")]
2524    pub values: Option<Vec<String>>,
2525}
2526
2527/// Defines a set of pods (namely those matching the labelSelector
2528/// relative to the given namespace(s)) that this pod should be
2529/// co-located (affinity) or not co-located (anti-affinity) with,
2530/// where co-located is defined as running on a node whose value of
2531/// the label with key <topologyKey> matches that of any node on which
2532/// a pod of the set of pods is running
2533#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2534pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecution {
2535    /// A label query over a set of resources, in this case pods.
2536    /// If it's null, this PodAffinityTerm matches with no Pods.
2537    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
2538    pub label_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector>,
2539    /// MatchLabelKeys is a set of pod label keys to select which pods will
2540    /// be taken into consideration. The keys are used to lookup values from the
2541    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
2542    /// to select the group of existing pods which pods will be taken into consideration
2543    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2544    /// pod labels will be ignored. The default value is empty.
2545    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
2546    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
2547    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2548    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
2549    pub match_label_keys: Option<Vec<String>>,
2550    /// MismatchLabelKeys is a set of pod label keys to select which pods will
2551    /// be taken into consideration. The keys are used to lookup values from the
2552    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
2553    /// to select the group of existing pods which pods will be taken into consideration
2554    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2555    /// pod labels will be ignored. The default value is empty.
2556    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
2557    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
2558    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2559    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
2560    pub mismatch_label_keys: Option<Vec<String>>,
2561    /// A label query over the set of namespaces that the term applies to.
2562    /// The term is applied to the union of the namespaces selected by this field
2563    /// and the ones listed in the namespaces field.
2564    /// null selector and null or empty namespaces list means "this pod's namespace".
2565    /// An empty selector ({}) matches all namespaces.
2566    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
2567    pub namespace_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector>,
2568    /// namespaces specifies a static list of namespace names that the term applies to.
2569    /// The term is applied to the union of the namespaces listed in this field
2570    /// and the ones selected by namespaceSelector.
2571    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
2572    #[serde(default, skip_serializing_if = "Option::is_none")]
2573    pub namespaces: Option<Vec<String>>,
2574    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
2575    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
2576    /// whose value of the label with key topologyKey matches that of any node on which any of the
2577    /// selected pods is running.
2578    /// Empty topologyKey is not allowed.
2579    #[serde(rename = "topologyKey")]
2580    pub topology_key: String,
2581}
2582
2583/// A label query over a set of resources, in this case pods.
2584/// If it's null, this PodAffinityTerm matches with no Pods.
2585#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2586pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector {
2587    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2588    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2589    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions>>,
2590    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2591    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2592    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2593    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2594    pub match_labels: Option<BTreeMap<String, String>>,
2595}
2596
2597/// A label selector requirement is a selector that contains values, a key, and an operator that
2598/// relates the key and values.
2599#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2600pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
2601{
2602    /// key is the label key that the selector applies to.
2603    pub key: String,
2604    /// operator represents a key's relationship to a set of values.
2605    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2606    pub operator: String,
2607    /// values is an array of string values. If the operator is In or NotIn,
2608    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2609    /// the values array must be empty. This array is replaced during a strategic
2610    /// merge patch.
2611    #[serde(default, skip_serializing_if = "Option::is_none")]
2612    pub values: Option<Vec<String>>,
2613}
2614
2615/// A label query over the set of namespaces that the term applies to.
2616/// The term is applied to the union of the namespaces selected by this field
2617/// and the ones listed in the namespaces field.
2618/// null selector and null or empty namespaces list means "this pod's namespace".
2619/// An empty selector ({}) matches all namespaces.
2620#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2621pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector {
2622    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2623    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2624    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions>>,
2625    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2626    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2627    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2628    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2629    pub match_labels: Option<BTreeMap<String, String>>,
2630}
2631
2632/// A label selector requirement is a selector that contains values, a key, and an operator that
2633/// relates the key and values.
2634#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2635pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
2636{
2637    /// key is the label key that the selector applies to.
2638    pub key: String,
2639    /// operator represents a key's relationship to a set of values.
2640    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2641    pub operator: String,
2642    /// values is an array of string values. If the operator is In or NotIn,
2643    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2644    /// the values array must be empty. This array is replaced during a strategic
2645    /// merge patch.
2646    #[serde(default, skip_serializing_if = "Option::is_none")]
2647    pub values: Option<Vec<String>>,
2648}
2649
2650/// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
2651#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2652pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinity {
2653    /// The scheduler will prefer to schedule pods to nodes that satisfy
2654    /// the anti-affinity expressions specified by this field, but it may choose
2655    /// a node that violates one or more of the expressions. The node that is
2656    /// most preferred is the one with the greatest sum of weights, i.e.
2657    /// for each node that meets all of the scheduling requirements (resource
2658    /// request, requiredDuringScheduling anti-affinity expressions, etc.),
2659    /// compute a sum by iterating through the elements of this field and adding
2660    /// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
2661    /// node(s) with the highest sum are the most preferred.
2662    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preferredDuringSchedulingIgnoredDuringExecution")]
2663    pub preferred_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution>>,
2664    /// If the anti-affinity requirements specified by this field are not met at
2665    /// scheduling time, the pod will not be scheduled onto the node.
2666    /// If the anti-affinity requirements specified by this field cease to be met
2667    /// at some point during pod execution (e.g. due to a pod label update), the
2668    /// system may or may not try to eventually evict the pod from its node.
2669    /// When there are multiple elements, the lists of nodes corresponding to each
2670    /// podAffinityTerm are intersected, i.e. all terms must be satisfied.
2671    #[serde(default, skip_serializing_if = "Option::is_none", rename = "requiredDuringSchedulingIgnoredDuringExecution")]
2672    pub required_during_scheduling_ignored_during_execution: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution>>,
2673}
2674
2675/// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
2676#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2677pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecution {
2678    /// Required. A pod affinity term, associated with the corresponding weight.
2679    #[serde(rename = "podAffinityTerm")]
2680    pub pod_affinity_term: IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm,
2681    /// weight associated with matching the corresponding podAffinityTerm,
2682    /// in the range 1-100.
2683    pub weight: i32,
2684}
2685
2686/// Required. A pod affinity term, associated with the corresponding weight.
2687#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2688pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTerm {
2689    /// A label query over a set of resources, in this case pods.
2690    /// If it's null, this PodAffinityTerm matches with no Pods.
2691    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
2692    pub label_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector>,
2693    /// MatchLabelKeys is a set of pod label keys to select which pods will
2694    /// be taken into consideration. The keys are used to lookup values from the
2695    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
2696    /// to select the group of existing pods which pods will be taken into consideration
2697    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2698    /// pod labels will be ignored. The default value is empty.
2699    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
2700    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
2701    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2702    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
2703    pub match_label_keys: Option<Vec<String>>,
2704    /// MismatchLabelKeys is a set of pod label keys to select which pods will
2705    /// be taken into consideration. The keys are used to lookup values from the
2706    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
2707    /// to select the group of existing pods which pods will be taken into consideration
2708    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2709    /// pod labels will be ignored. The default value is empty.
2710    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
2711    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
2712    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2713    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
2714    pub mismatch_label_keys: Option<Vec<String>>,
2715    /// A label query over the set of namespaces that the term applies to.
2716    /// The term is applied to the union of the namespaces selected by this field
2717    /// and the ones listed in the namespaces field.
2718    /// null selector and null or empty namespaces list means "this pod's namespace".
2719    /// An empty selector ({}) matches all namespaces.
2720    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
2721    pub namespace_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector>,
2722    /// namespaces specifies a static list of namespace names that the term applies to.
2723    /// The term is applied to the union of the namespaces listed in this field
2724    /// and the ones selected by namespaceSelector.
2725    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
2726    #[serde(default, skip_serializing_if = "Option::is_none")]
2727    pub namespaces: Option<Vec<String>>,
2728    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
2729    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
2730    /// whose value of the label with key topologyKey matches that of any node on which any of the
2731    /// selected pods is running.
2732    /// Empty topologyKey is not allowed.
2733    #[serde(rename = "topologyKey")]
2734    pub topology_key: String,
2735}
2736
2737/// A label query over a set of resources, in this case pods.
2738/// If it's null, this PodAffinityTerm matches with no Pods.
2739#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2740pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelector {
2741    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2742    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2743    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions>>,
2744    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2745    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2746    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2747    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2748    pub match_labels: Option<BTreeMap<String, String>>,
2749}
2750
2751/// A label selector requirement is a selector that contains values, a key, and an operator that
2752/// relates the key and values.
2753#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2754pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermLabelSelectorMatchExpressions
2755{
2756    /// key is the label key that the selector applies to.
2757    pub key: String,
2758    /// operator represents a key's relationship to a set of values.
2759    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2760    pub operator: String,
2761    /// values is an array of string values. If the operator is In or NotIn,
2762    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2763    /// the values array must be empty. This array is replaced during a strategic
2764    /// merge patch.
2765    #[serde(default, skip_serializing_if = "Option::is_none")]
2766    pub values: Option<Vec<String>>,
2767}
2768
2769/// A label query over the set of namespaces that the term applies to.
2770/// The term is applied to the union of the namespaces selected by this field
2771/// and the ones listed in the namespaces field.
2772/// null selector and null or empty namespaces list means "this pod's namespace".
2773/// An empty selector ({}) matches all namespaces.
2774#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2775pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelector {
2776    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2777    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2778    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions>>,
2779    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2780    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2781    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2782    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2783    pub match_labels: Option<BTreeMap<String, String>>,
2784}
2785
2786/// A label selector requirement is a selector that contains values, a key, and an operator that
2787/// relates the key and values.
2788#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2789pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityPreferredDuringSchedulingIgnoredDuringExecutionPodAffinityTermNamespaceSelectorMatchExpressions
2790{
2791    /// key is the label key that the selector applies to.
2792    pub key: String,
2793    /// operator represents a key's relationship to a set of values.
2794    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2795    pub operator: String,
2796    /// values is an array of string values. If the operator is In or NotIn,
2797    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2798    /// the values array must be empty. This array is replaced during a strategic
2799    /// merge patch.
2800    #[serde(default, skip_serializing_if = "Option::is_none")]
2801    pub values: Option<Vec<String>>,
2802}
2803
2804/// Defines a set of pods (namely those matching the labelSelector
2805/// relative to the given namespace(s)) that this pod should be
2806/// co-located (affinity) or not co-located (anti-affinity) with,
2807/// where co-located is defined as running on a node whose value of
2808/// the label with key <topologyKey> matches that of any node on which
2809/// a pod of the set of pods is running
2810#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2811pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecution {
2812    /// A label query over a set of resources, in this case pods.
2813    /// If it's null, this PodAffinityTerm matches with no Pods.
2814    #[serde(default, skip_serializing_if = "Option::is_none", rename = "labelSelector")]
2815    pub label_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector>,
2816    /// MatchLabelKeys is a set of pod label keys to select which pods will
2817    /// be taken into consideration. The keys are used to lookup values from the
2818    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)`
2819    /// to select the group of existing pods which pods will be taken into consideration
2820    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2821    /// pod labels will be ignored. The default value is empty.
2822    /// The same key is forbidden to exist in both matchLabelKeys and labelSelector.
2823    /// Also, matchLabelKeys cannot be set when labelSelector isn't set.
2824    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2825    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabelKeys")]
2826    pub match_label_keys: Option<Vec<String>>,
2827    /// MismatchLabelKeys is a set of pod label keys to select which pods will
2828    /// be taken into consideration. The keys are used to lookup values from the
2829    /// incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)`
2830    /// to select the group of existing pods which pods will be taken into consideration
2831    /// for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming
2832    /// pod labels will be ignored. The default value is empty.
2833    /// The same key is forbidden to exist in both mismatchLabelKeys and labelSelector.
2834    /// Also, mismatchLabelKeys cannot be set when labelSelector isn't set.
2835    /// This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).
2836    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mismatchLabelKeys")]
2837    pub mismatch_label_keys: Option<Vec<String>>,
2838    /// A label query over the set of namespaces that the term applies to.
2839    /// The term is applied to the union of the namespaces selected by this field
2840    /// and the ones listed in the namespaces field.
2841    /// null selector and null or empty namespaces list means "this pod's namespace".
2842    /// An empty selector ({}) matches all namespaces.
2843    #[serde(default, skip_serializing_if = "Option::is_none", rename = "namespaceSelector")]
2844    pub namespace_selector: Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector>,
2845    /// namespaces specifies a static list of namespace names that the term applies to.
2846    /// The term is applied to the union of the namespaces listed in this field
2847    /// and the ones selected by namespaceSelector.
2848    /// null or empty namespaces list and null namespaceSelector means "this pod's namespace".
2849    #[serde(default, skip_serializing_if = "Option::is_none")]
2850    pub namespaces: Option<Vec<String>>,
2851    /// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
2852    /// the labelSelector in the specified namespaces, where co-located is defined as running on a node
2853    /// whose value of the label with key topologyKey matches that of any node on which any of the
2854    /// selected pods is running.
2855    /// Empty topologyKey is not allowed.
2856    #[serde(rename = "topologyKey")]
2857    pub topology_key: String,
2858}
2859
2860/// A label query over a set of resources, in this case pods.
2861/// If it's null, this PodAffinityTerm matches with no Pods.
2862#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2863pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelector {
2864    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2865    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2866    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions>>,
2867    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2868    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2869    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2870    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2871    pub match_labels: Option<BTreeMap<String, String>>,
2872}
2873
2874/// A label selector requirement is a selector that contains values, a key, and an operator that
2875/// relates the key and values.
2876#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2877pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionLabelSelectorMatchExpressions
2878{
2879    /// key is the label key that the selector applies to.
2880    pub key: String,
2881    /// operator represents a key's relationship to a set of values.
2882    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2883    pub operator: String,
2884    /// values is an array of string values. If the operator is In or NotIn,
2885    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2886    /// the values array must be empty. This array is replaced during a strategic
2887    /// merge patch.
2888    #[serde(default, skip_serializing_if = "Option::is_none")]
2889    pub values: Option<Vec<String>>,
2890}
2891
2892/// A label query over the set of namespaces that the term applies to.
2893/// The term is applied to the union of the namespaces selected by this field
2894/// and the ones listed in the namespaces field.
2895/// null selector and null or empty namespaces list means "this pod's namespace".
2896/// An empty selector ({}) matches all namespaces.
2897#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2898pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelector {
2899    /// matchExpressions is a list of label selector requirements. The requirements are ANDed.
2900    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchExpressions")]
2901    pub match_expressions: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions>>,
2902    /// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
2903    /// map is equivalent to an element of matchExpressions, whose key field is "key", the
2904    /// operator is "In", and the values array contains only "value". The requirements are ANDed.
2905    #[serde(default, skip_serializing_if = "Option::is_none", rename = "matchLabels")]
2906    pub match_labels: Option<BTreeMap<String, String>>,
2907}
2908
2909/// A label selector requirement is a selector that contains values, a key, and an operator that
2910/// relates the key and values.
2911#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2912pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecAffinityPodAntiAffinityRequiredDuringSchedulingIgnoredDuringExecutionNamespaceSelectorMatchExpressions
2913{
2914    /// key is the label key that the selector applies to.
2915    pub key: String,
2916    /// operator represents a key's relationship to a set of values.
2917    /// Valid operators are In, NotIn, Exists and DoesNotExist.
2918    pub operator: String,
2919    /// values is an array of string values. If the operator is In or NotIn,
2920    /// the values array must be non-empty. If the operator is Exists or DoesNotExist,
2921    /// the values array must be empty. This array is replaced during a strategic
2922    /// merge patch.
2923    #[serde(default, skip_serializing_if = "Option::is_none")]
2924    pub values: Option<Vec<String>>,
2925}
2926
2927/// LocalObjectReference contains enough information to let you locate the
2928/// referenced object inside the same namespace.
2929#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2930pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecImagePullSecrets {
2931    /// Name of the referent.
2932    /// This field is effectively required, but due to backwards compatibility is
2933    /// allowed to be empty. Instances of this type with an empty value here are
2934    /// almost certainly wrong.
2935    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
2936    #[serde(default, skip_serializing_if = "Option::is_none")]
2937    pub name: Option<String>,
2938}
2939
2940/// If specified, the pod's security context
2941#[derive(Serialize, Deserialize, Clone, Debug, Default)]
2942pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContext {
2943    /// A special supplemental group that applies to all containers in a pod.
2944    /// Some volume types allow the Kubelet to change the ownership of that volume
2945    /// to be owned by the pod:
2946    ///
2947    /// 1. The owning GID will be the FSGroup
2948    /// 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
2949    /// 3. The permission bits are OR'd with rw-rw----
2950    ///
2951    /// If unset, the Kubelet will not modify the ownership and permissions of any volume.
2952    /// Note that this field cannot be set when spec.os.name is windows.
2953    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fsGroup")]
2954    pub fs_group: Option<i64>,
2955    /// fsGroupChangePolicy defines behavior of changing ownership and permission of the volume
2956    /// before being exposed inside Pod. This field will only apply to
2957    /// volume types which support fsGroup based ownership(and permissions).
2958    /// It will have no effect on ephemeral volume types such as: secret, configmaps
2959    /// and emptydir.
2960    /// Valid values are "OnRootMismatch" and "Always". If not specified, "Always" is used.
2961    /// Note that this field cannot be set when spec.os.name is windows.
2962    #[serde(
2963        default,
2964        skip_serializing_if = "Option::is_none",
2965        rename = "fsGroupChangePolicy"
2966    )]
2967    pub fs_group_change_policy: Option<String>,
2968    /// The GID to run the entrypoint of the container process.
2969    /// Uses runtime default if unset.
2970    /// May also be set in SecurityContext.  If set in both SecurityContext and
2971    /// PodSecurityContext, the value specified in SecurityContext takes precedence
2972    /// for that container.
2973    /// Note that this field cannot be set when spec.os.name is windows.
2974    #[serde(
2975        default,
2976        skip_serializing_if = "Option::is_none",
2977        rename = "runAsGroup"
2978    )]
2979    pub run_as_group: Option<i64>,
2980    /// Indicates that the container must run as a non-root user.
2981    /// If true, the Kubelet will validate the image at runtime to ensure that it
2982    /// does not run as UID 0 (root) and fail to start the container if it does.
2983    /// If unset or false, no such validation will be performed.
2984    /// May also be set in SecurityContext.  If set in both SecurityContext and
2985    /// PodSecurityContext, the value specified in SecurityContext takes precedence.
2986    #[serde(
2987        default,
2988        skip_serializing_if = "Option::is_none",
2989        rename = "runAsNonRoot"
2990    )]
2991    pub run_as_non_root: Option<bool>,
2992    /// The UID to run the entrypoint of the container process.
2993    /// Defaults to user specified in image metadata if unspecified.
2994    /// May also be set in SecurityContext.  If set in both SecurityContext and
2995    /// PodSecurityContext, the value specified in SecurityContext takes precedence
2996    /// for that container.
2997    /// Note that this field cannot be set when spec.os.name is windows.
2998    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runAsUser")]
2999    pub run_as_user: Option<i64>,
3000    /// The SELinux context to be applied to all containers.
3001    /// If unspecified, the container runtime will allocate a random SELinux context for each
3002    /// container.  May also be set in SecurityContext.  If set in
3003    /// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
3004    /// takes precedence for that container.
3005    /// Note that this field cannot be set when spec.os.name is windows.
3006    #[serde(
3007        default,
3008        skip_serializing_if = "Option::is_none",
3009        rename = "seLinuxOptions"
3010    )]
3011    pub se_linux_options:
3012        Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContextSeLinuxOptions>,
3013    /// The seccomp options to use by the containers in this pod.
3014    /// Note that this field cannot be set when spec.os.name is windows.
3015    #[serde(
3016        default,
3017        skip_serializing_if = "Option::is_none",
3018        rename = "seccompProfile"
3019    )]
3020    pub seccomp_profile:
3021        Option<IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContextSeccompProfile>,
3022    /// A list of groups applied to the first process run in each container, in addition
3023    /// to the container's primary GID, the fsGroup (if specified), and group memberships
3024    /// defined in the container image for the uid of the container process. If unspecified,
3025    /// no additional groups are added to any container. Note that group memberships
3026    /// defined in the container image for the uid of the container process are still effective,
3027    /// even if they are not included in this list.
3028    /// Note that this field cannot be set when spec.os.name is windows.
3029    #[serde(
3030        default,
3031        skip_serializing_if = "Option::is_none",
3032        rename = "supplementalGroups"
3033    )]
3034    pub supplemental_groups: Option<Vec<i64>>,
3035    /// Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
3036    /// sysctls (by the container runtime) might fail to launch.
3037    /// Note that this field cannot be set when spec.os.name is windows.
3038    #[serde(default, skip_serializing_if = "Option::is_none")]
3039    pub sysctls: Option<Vec<IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContextSysctls>>,
3040}
3041
3042/// The SELinux context to be applied to all containers.
3043/// If unspecified, the container runtime will allocate a random SELinux context for each
3044/// container.  May also be set in SecurityContext.  If set in
3045/// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
3046/// takes precedence for that container.
3047/// Note that this field cannot be set when spec.os.name is windows.
3048#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3049pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContextSeLinuxOptions {
3050    /// Level is SELinux level label that applies to the container.
3051    #[serde(default, skip_serializing_if = "Option::is_none")]
3052    pub level: Option<String>,
3053    /// Role is a SELinux role label that applies to the container.
3054    #[serde(default, skip_serializing_if = "Option::is_none")]
3055    pub role: Option<String>,
3056    /// Type is a SELinux type label that applies to the container.
3057    #[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
3058    pub r#type: Option<String>,
3059    /// User is a SELinux user label that applies to the container.
3060    #[serde(default, skip_serializing_if = "Option::is_none")]
3061    pub user: Option<String>,
3062}
3063
3064/// The seccomp options to use by the containers in this pod.
3065/// Note that this field cannot be set when spec.os.name is windows.
3066#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3067pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContextSeccompProfile {
3068    /// localhostProfile indicates a profile defined in a file on the node should be used.
3069    /// The profile must be preconfigured on the node to work.
3070    /// Must be a descending path, relative to the kubelet's configured seccomp profile location.
3071    /// Must be set if type is "Localhost". Must NOT be set for any other type.
3072    #[serde(
3073        default,
3074        skip_serializing_if = "Option::is_none",
3075        rename = "localhostProfile"
3076    )]
3077    pub localhost_profile: Option<String>,
3078    /// type indicates which kind of seccomp profile will be applied.
3079    /// Valid options are:
3080    ///
3081    /// Localhost - a profile defined in a file on the node should be used.
3082    /// RuntimeDefault - the container runtime default profile should be used.
3083    /// Unconfined - no profile should be applied.
3084    #[serde(rename = "type")]
3085    pub r#type: String,
3086}
3087
3088/// Sysctl defines a kernel parameter to be set
3089#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3090pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecSecurityContextSysctls {
3091    /// Name of a property to set
3092    pub name: String,
3093    /// Value of a property to set
3094    pub value: String,
3095}
3096
3097/// The pod this Toleration is attached to tolerates any taint that matches
3098/// the triple <key,value,effect> using the matching operator <operator>.
3099#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3100pub struct IssuerAcmeSolversHttp01IngressPodTemplateSpecTolerations {
3101    /// Effect indicates the taint effect to match. Empty means match all taint effects.
3102    /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
3103    #[serde(default, skip_serializing_if = "Option::is_none")]
3104    pub effect: Option<String>,
3105    /// Key is the taint key that the toleration applies to. Empty means match all taint keys.
3106    /// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
3107    #[serde(default, skip_serializing_if = "Option::is_none")]
3108    pub key: Option<String>,
3109    /// Operator represents a key's relationship to the value.
3110    /// Valid operators are Exists and Equal. Defaults to Equal.
3111    /// Exists is equivalent to wildcard for value, so that a pod can
3112    /// tolerate all taints of a particular category.
3113    #[serde(default, skip_serializing_if = "Option::is_none")]
3114    pub operator: Option<String>,
3115    /// TolerationSeconds represents the period of time the toleration (which must be
3116    /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
3117    /// it is not set, which means tolerate the taint forever (do not evict). Zero and
3118    /// negative values will be treated as 0 (evict immediately) by the system.
3119    #[serde(
3120        default,
3121        skip_serializing_if = "Option::is_none",
3122        rename = "tolerationSeconds"
3123    )]
3124    pub toleration_seconds: Option<i64>,
3125    /// Value is the taint value the toleration matches to.
3126    /// If the operator is Exists, the value should be empty, otherwise just a regular string.
3127    #[serde(default, skip_serializing_if = "Option::is_none")]
3128    pub value: Option<String>,
3129}
3130
3131/// Selector selects a set of DNSNames on the Certificate resource that
3132/// should be solved using this challenge solver.
3133/// If not specified, the solver will be treated as the 'default' solver
3134/// with the lowest priority, i.e. if any other solver has a more specific
3135/// match, it will be used instead.
3136#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3137pub struct IssuerAcmeSolversSelector {
3138    /// List of DNSNames that this solver will be used to solve.
3139    /// If specified and a match is found, a dnsNames selector will take
3140    /// precedence over a dnsZones selector.
3141    /// If multiple solvers match with the same dnsNames value, the solver
3142    /// with the most matching labels in matchLabels will be selected.
3143    /// If neither has more matches, the solver defined earlier in the list
3144    /// will be selected.
3145    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsNames")]
3146    pub dns_names: Option<Vec<String>>,
3147    /// List of DNSZones that this solver will be used to solve.
3148    /// The most specific DNS zone match specified here will take precedence
3149    /// over other DNS zone matches, so a solver specifying sys.example.com
3150    /// will be selected over one specifying example.com for the domain
3151    /// www.sys.example.com.
3152    /// If multiple solvers match with the same dnsZones value, the solver
3153    /// with the most matching labels in matchLabels will be selected.
3154    /// If neither has more matches, the solver defined earlier in the list
3155    /// will be selected.
3156    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dnsZones")]
3157    pub dns_zones: Option<Vec<String>>,
3158    /// A label selector that is used to refine the set of certificate's that
3159    /// this challenge solver will apply to.
3160    #[serde(
3161        default,
3162        skip_serializing_if = "Option::is_none",
3163        rename = "matchLabels"
3164    )]
3165    pub match_labels: Option<BTreeMap<String, String>>,
3166}
3167
3168/// CA configures this issuer to sign certificates using a signing CA keypair
3169/// stored in a Secret resource.
3170/// This is used to build internal PKIs that are managed by cert-manager.
3171#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3172pub struct IssuerCa {
3173    /// The CRL distribution points is an X.509 v3 certificate extension which identifies
3174    /// the location of the CRL from which the revocation of this certificate can be checked.
3175    /// If not set, certificates will be issued without distribution points set.
3176    #[serde(
3177        default,
3178        skip_serializing_if = "Option::is_none",
3179        rename = "crlDistributionPoints"
3180    )]
3181    pub crl_distribution_points: Option<Vec<String>>,
3182    /// IssuingCertificateURLs is a list of URLs which this issuer should embed into certificates
3183    /// it creates. See https://www.rfc-editor.org/rfc/rfc5280#section-4.2.2.1 for more details.
3184    /// As an example, such a URL might be "http://ca.domain.com/ca.crt".
3185    #[serde(
3186        default,
3187        skip_serializing_if = "Option::is_none",
3188        rename = "issuingCertificateURLs"
3189    )]
3190    pub issuing_certificate_ur_ls: Option<Vec<String>>,
3191    /// The OCSP server list is an X.509 v3 extension that defines a list of
3192    /// URLs of OCSP responders. The OCSP responders can be queried for the
3193    /// revocation status of an issued certificate. If not set, the
3194    /// certificate will be issued with no OCSP servers set. For example, an
3195    /// OCSP server URL could be "http://ocsp.int-x3.letsencrypt.org".
3196    #[serde(
3197        default,
3198        skip_serializing_if = "Option::is_none",
3199        rename = "ocspServers"
3200    )]
3201    pub ocsp_servers: Option<Vec<String>>,
3202    /// SecretName is the name of the secret used to sign Certificates issued
3203    /// by this Issuer.
3204    #[serde(rename = "secretName")]
3205    pub secret_name: String,
3206}
3207
3208/// SelfSigned configures this issuer to 'self sign' certificates using the
3209/// private key used to create the CertificateRequest object.
3210#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3211pub struct IssuerSelfSigned {
3212    /// The CRL distribution points is an X.509 v3 certificate extension which identifies
3213    /// the location of the CRL from which the revocation of this certificate can be checked.
3214    /// If not set certificate will be issued without CDP. Values are strings.
3215    #[serde(
3216        default,
3217        skip_serializing_if = "Option::is_none",
3218        rename = "crlDistributionPoints"
3219    )]
3220    pub crl_distribution_points: Option<Vec<String>>,
3221}
3222
3223/// Vault configures this issuer to sign certificates using a HashiCorp Vault
3224/// PKI backend.
3225#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3226pub struct IssuerVault {
3227    /// Auth configures how cert-manager authenticates with the Vault server.
3228    pub auth: IssuerVaultAuth,
3229    /// Base64-encoded bundle of PEM CAs which will be used to validate the certificate
3230    /// chain presented by Vault. Only used if using HTTPS to connect to Vault and
3231    /// ignored for HTTP connections.
3232    /// Mutually exclusive with CABundleSecretRef.
3233    /// If neither CABundle nor CABundleSecretRef are defined, the certificate bundle in
3234    /// the cert-manager controller container is used to validate the TLS connection.
3235    #[serde(default, skip_serializing_if = "Option::is_none", rename = "caBundle")]
3236    pub ca_bundle: Option<String>,
3237    /// Reference to a Secret containing a bundle of PEM-encoded CAs to use when
3238    /// verifying the certificate chain presented by Vault when using HTTPS.
3239    /// Mutually exclusive with CABundle.
3240    /// If neither CABundle nor CABundleSecretRef are defined, the certificate bundle in
3241    /// the cert-manager controller container is used to validate the TLS connection.
3242    /// If no key for the Secret is specified, cert-manager will default to 'ca.crt'.
3243    #[serde(
3244        default,
3245        skip_serializing_if = "Option::is_none",
3246        rename = "caBundleSecretRef"
3247    )]
3248    pub ca_bundle_secret_ref: Option<IssuerVaultCaBundleSecretRef>,
3249    /// Reference to a Secret containing a PEM-encoded Client Certificate to use when the
3250    /// Vault server requires mTLS.
3251    #[serde(
3252        default,
3253        skip_serializing_if = "Option::is_none",
3254        rename = "clientCertSecretRef"
3255    )]
3256    pub client_cert_secret_ref: Option<IssuerVaultClientCertSecretRef>,
3257    /// Reference to a Secret containing a PEM-encoded Client Private Key to use when the
3258    /// Vault server requires mTLS.
3259    #[serde(
3260        default,
3261        skip_serializing_if = "Option::is_none",
3262        rename = "clientKeySecretRef"
3263    )]
3264    pub client_key_secret_ref: Option<IssuerVaultClientKeySecretRef>,
3265    /// Name of the vault namespace. Namespaces is a set of features within Vault Enterprise that allows Vault environments to support Secure Multi-tenancy. e.g: "ns1"
3266    /// More about namespaces can be found here https://www.vaultproject.io/docs/enterprise/namespaces
3267    #[serde(default, skip_serializing_if = "Option::is_none")]
3268    pub namespace: Option<String>,
3269    /// Path is the mount path of the Vault PKI backend's `sign` endpoint, e.g:
3270    /// "my_pki_mount/sign/my-role-name".
3271    pub path: String,
3272    /// Server is the connection address for the Vault server, e.g: "https://vault.example.com:8200".
3273    pub server: String,
3274}
3275
3276/// Auth configures how cert-manager authenticates with the Vault server.
3277#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3278pub struct IssuerVaultAuth {
3279    /// AppRole authenticates with Vault using the App Role auth mechanism,
3280    /// with the role and secret stored in a Kubernetes Secret resource.
3281    #[serde(default, skip_serializing_if = "Option::is_none", rename = "appRole")]
3282    pub app_role: Option<IssuerVaultAuthAppRole>,
3283    /// ClientCertificate authenticates with Vault by presenting a client
3284    /// certificate during the request's TLS handshake.
3285    /// Works only when using HTTPS protocol.
3286    #[serde(
3287        default,
3288        skip_serializing_if = "Option::is_none",
3289        rename = "clientCertificate"
3290    )]
3291    pub client_certificate: Option<IssuerVaultAuthClientCertificate>,
3292    /// Kubernetes authenticates with Vault by passing the ServiceAccount
3293    /// token stored in the named Secret resource to the Vault server.
3294    #[serde(default, skip_serializing_if = "Option::is_none")]
3295    pub kubernetes: Option<IssuerVaultAuthKubernetes>,
3296    /// TokenSecretRef authenticates with Vault by presenting a token.
3297    #[serde(
3298        default,
3299        skip_serializing_if = "Option::is_none",
3300        rename = "tokenSecretRef"
3301    )]
3302    pub token_secret_ref: Option<IssuerVaultAuthTokenSecretRef>,
3303}
3304
3305/// AppRole authenticates with Vault using the App Role auth mechanism,
3306/// with the role and secret stored in a Kubernetes Secret resource.
3307#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3308pub struct IssuerVaultAuthAppRole {
3309    /// Path where the App Role authentication backend is mounted in Vault, e.g:
3310    /// "approle"
3311    pub path: String,
3312    /// RoleID configured in the App Role authentication backend when setting
3313    /// up the authentication backend in Vault.
3314    #[serde(rename = "roleId")]
3315    pub role_id: String,
3316    /// Reference to a key in a Secret that contains the App Role secret used
3317    /// to authenticate with Vault.
3318    /// The `key` field must be specified and denotes which entry within the Secret
3319    /// resource is used as the app role secret.
3320    #[serde(rename = "secretRef")]
3321    pub secret_ref: IssuerVaultAuthAppRoleSecretRef,
3322}
3323
3324/// Reference to a key in a Secret that contains the App Role secret used
3325/// to authenticate with Vault.
3326/// The `key` field must be specified and denotes which entry within the Secret
3327/// resource is used as the app role secret.
3328#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3329pub struct IssuerVaultAuthAppRoleSecretRef {
3330    /// The key of the entry in the Secret resource's `data` field to be used.
3331    /// Some instances of this field may be defaulted, in others it may be
3332    /// required.
3333    #[serde(default, skip_serializing_if = "Option::is_none")]
3334    pub key: Option<String>,
3335    /// Name of the resource being referred to.
3336    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3337    pub name: String,
3338}
3339
3340/// ClientCertificate authenticates with Vault by presenting a client
3341/// certificate during the request's TLS handshake.
3342/// Works only when using HTTPS protocol.
3343#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3344pub struct IssuerVaultAuthClientCertificate {
3345    /// The Vault mountPath here is the mount path to use when authenticating with
3346    /// Vault. For example, setting a value to `/v1/auth/foo`, will use the path
3347    /// `/v1/auth/foo/login` to authenticate with Vault. If unspecified, the
3348    /// default value "/v1/auth/cert" will be used.
3349    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPath")]
3350    pub mount_path: Option<String>,
3351    /// Name of the certificate role to authenticate against.
3352    /// If not set, matching any certificate role, if available.
3353    #[serde(default, skip_serializing_if = "Option::is_none")]
3354    pub name: Option<String>,
3355    /// Reference to Kubernetes Secret of type "kubernetes.io/tls" (hence containing
3356    /// tls.crt and tls.key) used to authenticate to Vault using TLS client
3357    /// authentication.
3358    #[serde(
3359        default,
3360        skip_serializing_if = "Option::is_none",
3361        rename = "secretName"
3362    )]
3363    pub secret_name: Option<String>,
3364}
3365
3366/// Kubernetes authenticates with Vault by passing the ServiceAccount
3367/// token stored in the named Secret resource to the Vault server.
3368#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3369pub struct IssuerVaultAuthKubernetes {
3370    /// The Vault mountPath here is the mount path to use when authenticating with
3371    /// Vault. For example, setting a value to `/v1/auth/foo`, will use the path
3372    /// `/v1/auth/foo/login` to authenticate with Vault. If unspecified, the
3373    /// default value "/v1/auth/kubernetes" will be used.
3374    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountPath")]
3375    pub mount_path: Option<String>,
3376    /// A required field containing the Vault Role to assume. A Role binds a
3377    /// Kubernetes ServiceAccount with a set of Vault policies.
3378    pub role: String,
3379    /// The required Secret field containing a Kubernetes ServiceAccount JWT used
3380    /// for authenticating with Vault. Use of 'ambient credentials' is not
3381    /// supported.
3382    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretRef")]
3383    pub secret_ref: Option<IssuerVaultAuthKubernetesSecretRef>,
3384    /// A reference to a service account that will be used to request a bound
3385    /// token (also known as "projected token"). Compared to using "secretRef",
3386    /// using this field means that you don't rely on statically bound tokens. To
3387    /// use this field, you must configure an RBAC rule to let cert-manager
3388    /// request a token.
3389    #[serde(
3390        default,
3391        skip_serializing_if = "Option::is_none",
3392        rename = "serviceAccountRef"
3393    )]
3394    pub service_account_ref: Option<IssuerVaultAuthKubernetesServiceAccountRef>,
3395}
3396
3397/// The required Secret field containing a Kubernetes ServiceAccount JWT used
3398/// for authenticating with Vault. Use of 'ambient credentials' is not
3399/// supported.
3400#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3401pub struct IssuerVaultAuthKubernetesSecretRef {
3402    /// The key of the entry in the Secret resource's `data` field to be used.
3403    /// Some instances of this field may be defaulted, in others it may be
3404    /// required.
3405    #[serde(default, skip_serializing_if = "Option::is_none")]
3406    pub key: Option<String>,
3407    /// Name of the resource being referred to.
3408    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3409    pub name: String,
3410}
3411
3412/// A reference to a service account that will be used to request a bound
3413/// token (also known as "projected token"). Compared to using "secretRef",
3414/// using this field means that you don't rely on statically bound tokens. To
3415/// use this field, you must configure an RBAC rule to let cert-manager
3416/// request a token.
3417#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3418pub struct IssuerVaultAuthKubernetesServiceAccountRef {
3419    /// TokenAudiences is an optional list of extra audiences to include in the token passed to Vault. The default token
3420    /// consisting of the issuer's namespace and name is always included.
3421    #[serde(default, skip_serializing_if = "Option::is_none")]
3422    pub audiences: Option<Vec<String>>,
3423    /// Name of the ServiceAccount used to request a token.
3424    pub name: String,
3425}
3426
3427/// TokenSecretRef authenticates with Vault by presenting a token.
3428#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3429pub struct IssuerVaultAuthTokenSecretRef {
3430    /// The key of the entry in the Secret resource's `data` field to be used.
3431    /// Some instances of this field may be defaulted, in others it may be
3432    /// required.
3433    #[serde(default, skip_serializing_if = "Option::is_none")]
3434    pub key: Option<String>,
3435    /// Name of the resource being referred to.
3436    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3437    pub name: String,
3438}
3439
3440/// Reference to a Secret containing a bundle of PEM-encoded CAs to use when
3441/// verifying the certificate chain presented by Vault when using HTTPS.
3442/// Mutually exclusive with CABundle.
3443/// If neither CABundle nor CABundleSecretRef are defined, the certificate bundle in
3444/// the cert-manager controller container is used to validate the TLS connection.
3445/// If no key for the Secret is specified, cert-manager will default to 'ca.crt'.
3446#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3447pub struct IssuerVaultCaBundleSecretRef {
3448    /// The key of the entry in the Secret resource's `data` field to be used.
3449    /// Some instances of this field may be defaulted, in others it may be
3450    /// required.
3451    #[serde(default, skip_serializing_if = "Option::is_none")]
3452    pub key: Option<String>,
3453    /// Name of the resource being referred to.
3454    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3455    pub name: String,
3456}
3457
3458/// Reference to a Secret containing a PEM-encoded Client Certificate to use when the
3459/// Vault server requires mTLS.
3460#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3461pub struct IssuerVaultClientCertSecretRef {
3462    /// The key of the entry in the Secret resource's `data` field to be used.
3463    /// Some instances of this field may be defaulted, in others it may be
3464    /// required.
3465    #[serde(default, skip_serializing_if = "Option::is_none")]
3466    pub key: Option<String>,
3467    /// Name of the resource being referred to.
3468    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3469    pub name: String,
3470}
3471
3472/// Reference to a Secret containing a PEM-encoded Client Private Key to use when the
3473/// Vault server requires mTLS.
3474#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3475pub struct IssuerVaultClientKeySecretRef {
3476    /// The key of the entry in the Secret resource's `data` field to be used.
3477    /// Some instances of this field may be defaulted, in others it may be
3478    /// required.
3479    #[serde(default, skip_serializing_if = "Option::is_none")]
3480    pub key: Option<String>,
3481    /// Name of the resource being referred to.
3482    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3483    pub name: String,
3484}
3485
3486/// Venafi configures this issuer to sign certificates using a Venafi TPP
3487/// or Venafi Cloud policy zone.
3488#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3489pub struct IssuerVenafi {
3490    /// Cloud specifies the Venafi cloud configuration settings.
3491    /// Only one of TPP or Cloud may be specified.
3492    #[serde(default, skip_serializing_if = "Option::is_none")]
3493    pub cloud: Option<IssuerVenafiCloud>,
3494    /// TPP specifies Trust Protection Platform configuration settings.
3495    /// Only one of TPP or Cloud may be specified.
3496    #[serde(default, skip_serializing_if = "Option::is_none")]
3497    pub tpp: Option<IssuerVenafiTpp>,
3498    /// Zone is the Venafi Policy Zone to use for this issuer.
3499    /// All requests made to the Venafi platform will be restricted by the named
3500    /// zone policy.
3501    /// This field is required.
3502    pub zone: String,
3503}
3504
3505/// Cloud specifies the Venafi cloud configuration settings.
3506/// Only one of TPP or Cloud may be specified.
3507#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3508pub struct IssuerVenafiCloud {
3509    /// APITokenSecretRef is a secret key selector for the Venafi Cloud API token.
3510    #[serde(rename = "apiTokenSecretRef")]
3511    pub api_token_secret_ref: IssuerVenafiCloudApiTokenSecretRef,
3512    /// URL is the base URL for Venafi Cloud.
3513    /// Defaults to "https://api.venafi.cloud/v1".
3514    #[serde(default, skip_serializing_if = "Option::is_none")]
3515    pub url: Option<String>,
3516}
3517
3518/// APITokenSecretRef is a secret key selector for the Venafi Cloud API token.
3519#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3520pub struct IssuerVenafiCloudApiTokenSecretRef {
3521    /// The key of the entry in the Secret resource's `data` field to be used.
3522    /// Some instances of this field may be defaulted, in others it may be
3523    /// required.
3524    #[serde(default, skip_serializing_if = "Option::is_none")]
3525    pub key: Option<String>,
3526    /// Name of the resource being referred to.
3527    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3528    pub name: String,
3529}
3530
3531/// TPP specifies Trust Protection Platform configuration settings.
3532/// Only one of TPP or Cloud may be specified.
3533#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3534pub struct IssuerVenafiTpp {
3535    /// Base64-encoded bundle of PEM CAs which will be used to validate the certificate
3536    /// chain presented by the TPP server. Only used if using HTTPS; ignored for HTTP.
3537    /// If undefined, the certificate bundle in the cert-manager controller container
3538    /// is used to validate the chain.
3539    #[serde(default, skip_serializing_if = "Option::is_none", rename = "caBundle")]
3540    pub ca_bundle: Option<String>,
3541    /// Reference to a Secret containing a base64-encoded bundle of PEM CAs
3542    /// which will be used to validate the certificate chain presented by the TPP server.
3543    /// Only used if using HTTPS; ignored for HTTP. Mutually exclusive with CABundle.
3544    /// If neither CABundle nor CABundleSecretRef is defined, the certificate bundle in
3545    /// the cert-manager controller container is used to validate the TLS connection.
3546    #[serde(
3547        default,
3548        skip_serializing_if = "Option::is_none",
3549        rename = "caBundleSecretRef"
3550    )]
3551    pub ca_bundle_secret_ref: Option<IssuerVenafiTppCaBundleSecretRef>,
3552    /// CredentialsRef is a reference to a Secret containing the Venafi TPP API credentials.
3553    /// The secret must contain the key 'access-token' for the Access Token Authentication,
3554    /// or two keys, 'username' and 'password' for the API Keys Authentication.
3555    #[serde(rename = "credentialsRef")]
3556    pub credentials_ref: IssuerVenafiTppCredentialsRef,
3557    /// URL is the base URL for the vedsdk endpoint of the Venafi TPP instance,
3558    /// for example: "https://tpp.example.com/vedsdk".
3559    pub url: String,
3560}
3561
3562/// Reference to a Secret containing a base64-encoded bundle of PEM CAs
3563/// which will be used to validate the certificate chain presented by the TPP server.
3564/// Only used if using HTTPS; ignored for HTTP. Mutually exclusive with CABundle.
3565/// If neither CABundle nor CABundleSecretRef is defined, the certificate bundle in
3566/// the cert-manager controller container is used to validate the TLS connection.
3567#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3568pub struct IssuerVenafiTppCaBundleSecretRef {
3569    /// The key of the entry in the Secret resource's `data` field to be used.
3570    /// Some instances of this field may be defaulted, in others it may be
3571    /// required.
3572    #[serde(default, skip_serializing_if = "Option::is_none")]
3573    pub key: Option<String>,
3574    /// Name of the resource being referred to.
3575    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3576    pub name: String,
3577}
3578
3579/// CredentialsRef is a reference to a Secret containing the Venafi TPP API credentials.
3580/// The secret must contain the key 'access-token' for the Access Token Authentication,
3581/// or two keys, 'username' and 'password' for the API Keys Authentication.
3582#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3583pub struct IssuerVenafiTppCredentialsRef {
3584    /// Name of the resource being referred to.
3585    /// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
3586    pub name: String,
3587}
3588
3589/// Status of the Issuer. This is set and managed automatically.
3590#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3591pub struct IssuerStatus {
3592    /// ACME specific status options.
3593    /// This field should only be set if the Issuer is configured to use an ACME
3594    /// server to issue certificates.
3595    #[serde(default, skip_serializing_if = "Option::is_none")]
3596    pub acme: Option<IssuerStatusAcme>,
3597    /// List of status conditions to indicate the status of a CertificateRequest.
3598    /// Known condition types are `Ready`.
3599    #[serde(default, skip_serializing_if = "Option::is_none")]
3600    pub conditions: Option<Vec<Condition>>,
3601}
3602
3603/// ACME specific status options.
3604/// This field should only be set if the Issuer is configured to use an ACME
3605/// server to issue certificates.
3606#[derive(Serialize, Deserialize, Clone, Debug, Default)]
3607pub struct IssuerStatusAcme {
3608    /// LastPrivateKeyHash is a hash of the private key associated with the latest
3609    /// registered ACME account, in order to track changes made to registered account
3610    /// associated with the Issuer
3611    #[serde(
3612        default,
3613        skip_serializing_if = "Option::is_none",
3614        rename = "lastPrivateKeyHash"
3615    )]
3616    pub last_private_key_hash: Option<String>,
3617    /// LastRegisteredEmail is the email associated with the latest registered
3618    /// ACME account, in order to track changes made to registered account
3619    /// associated with the  Issuer
3620    #[serde(
3621        default,
3622        skip_serializing_if = "Option::is_none",
3623        rename = "lastRegisteredEmail"
3624    )]
3625    pub last_registered_email: Option<String>,
3626    /// URI is the unique account identifier, which can also be used to retrieve
3627    /// account details from the CA
3628    #[serde(default, skip_serializing_if = "Option::is_none")]
3629    pub uri: Option<String>,
3630}