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}