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