kcr_org_eclipse_che/v1/
checlusters.rs

1// WARNING: generated by kopium - manual changes will be overwritten
2// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/eclipse-che/che-operator/org.eclipse.che/v1/checlusters.yaml
3// kopium version: 0.22.5
4
5#[allow(unused_imports)]
6mod prelude {
7    pub use kube::CustomResource;
8    pub use serde::{Serialize, Deserialize};
9    pub use std::collections::BTreeMap;
10    pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
11}
12use self::prelude::*;
13
14/// Desired configuration of the Che installation.
15/// Based on these settings, the  Operator automatically creates and maintains
16/// several ConfigMaps that will contain the appropriate environment variables
17/// the various components of the Che installation.
18/// These generated ConfigMaps must NOT be updated manually.
19#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
20#[kube(group = "org.eclipse.che", version = "v1", kind = "CheCluster", plural = "checlusters")]
21#[kube(namespaced)]
22#[kube(status = "CheClusterStatus")]
23#[kube(schema = "disabled")]
24#[kube(derive="Default")]
25#[kube(derive="PartialEq")]
26pub struct CheClusterSpec {
27    /// Configuration settings related to the Authentication used by the Che installation.
28    #[serde(default, skip_serializing_if = "Option::is_none")]
29    pub auth: Option<CheClusterAuth>,
30    /// Configuration settings related to the User Dashboard used by the Che installation.
31    #[serde(default, skip_serializing_if = "Option::is_none")]
32    pub dashboard: Option<CheClusterDashboard>,
33    /// Configuration settings related to the database used by the Che installation.
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub database: Option<CheClusterDatabase>,
36    /// DevWorkspace operator configuration
37    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devWorkspace")]
38    pub dev_workspace: Option<CheClusterDevWorkspace>,
39    /// A configuration that allows users to work with remote Git repositories.
40    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitServices")]
41    pub git_services: Option<CheClusterGitServices>,
42    /// Kubernetes Image Puller configuration
43    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePuller")]
44    pub image_puller: Option<CheClusterImagePuller>,
45    /// Configuration settings specific to Che installations made on upstream Kubernetes.
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub k8s: Option<CheClusterK8s>,
48    /// Configuration settings related to the metrics collection used by the Che installation.
49    #[serde(default, skip_serializing_if = "Option::is_none")]
50    pub metrics: Option<CheClusterMetrics>,
51    /// General configuration settings related to the Che server, the plugin and devfile registries
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub server: Option<CheClusterServer>,
54    /// Configuration settings related to the persistent storage used by the Che installation.
55    #[serde(default, skip_serializing_if = "Option::is_none")]
56    pub storage: Option<CheClusterStorage>,
57}
58
59/// Configuration settings related to the Authentication used by the Che installation.
60#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
61pub struct CheClusterAuth {
62    /// Deprecated. The value of this flag is ignored.
63    /// Debug internal identity provider.
64    #[serde(default, skip_serializing_if = "Option::is_none")]
65    pub debug: Option<bool>,
66    /// Deprecated. The value of this flag is ignored.
67    /// Instructs the Operator on whether or not to deploy a dedicated Identity Provider (Keycloak or RH SSO instance).
68    /// Instructs the Operator on whether to deploy a dedicated Identity Provider (Keycloak or RH-SSO instance).
69    /// By default, a dedicated Identity Provider server is deployed as part of the Che installation. When `externalIdentityProvider` is `true`,
70    /// no dedicated identity provider will be deployed by the Operator and you will need to provide details about the external identity provider you are about to use.
71    /// See also all the other fields starting with: `identityProvider`.
72    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalIdentityProvider")]
73    pub external_identity_provider: Option<bool>,
74    /// Gateway sidecar responsible for authentication when NativeUserMode is enabled.
75    /// See link:<https://github.com/oauth2-proxy/oauth2-proxy[oauth2-proxy]> or link:<https://github.com/openshift/oauth-proxy[openshift/oauth-proxy].>
76    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayAuthenticationSidecarImage")]
77    pub gateway_authentication_sidecar_image: Option<String>,
78    /// Gateway sidecar responsible for authorization when NativeUserMode is enabled.
79    /// See link:<https://github.com/brancz/kube-rbac-proxy[kube-rbac-proxy]> or link:<https://github.com/openshift/kube-rbac-proxy[openshift/kube-rbac-proxy]>
80    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayAuthorizationSidecarImage")]
81    pub gateway_authorization_sidecar_image: Option<String>,
82    /// List of environment variables to set in the Configbump container.
83    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayConfigBumpEnv")]
84    pub gateway_config_bump_env: Option<Vec<CheClusterAuthGatewayConfigBumpEnv>>,
85    /// List of environment variables to set in the Gateway container.
86    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayEnv")]
87    pub gateway_env: Option<Vec<CheClusterAuthGatewayEnv>>,
88    /// Deprecated. The value of this flag is ignored. Sidecar functionality is now implemented in Traefik plugin.
89    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayHeaderRewriteSidecarImage")]
90    pub gateway_header_rewrite_sidecar_image: Option<String>,
91    /// List of environment variables to set in the Kube rbac proxy container.
92    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayKubeRbacProxyEnv")]
93    pub gateway_kube_rbac_proxy_env: Option<Vec<CheClusterAuthGatewayKubeRbacProxyEnv>>,
94    /// List of environment variables to set in the OAuth proxy container.
95    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayOAuthProxyEnv")]
96    pub gateway_o_auth_proxy_env: Option<Vec<CheClusterAuthGatewayOAuthProxyEnv>>,
97    /// Deprecated. The value of this flag is ignored.
98    /// Overrides the name of the Identity Provider administrator user. Defaults to `admin`.
99    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderAdminUserName")]
100    pub identity_provider_admin_user_name: Option<String>,
101    /// Deprecated. The value of this flag is ignored.
102    /// Name of a Identity provider, Keycloak or RH-SSO, `client-id` that is used for Che.
103    /// Override this when an external Identity Provider is in use. See the `externalIdentityProvider` field.
104    /// When omitted or left blank, it is set to the value of the `flavour` field suffixed with `-public`.
105    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderClientId")]
106    pub identity_provider_client_id: Option<String>,
107    /// Deprecated. The value of this flag is ignored.
108    /// Identity provider container custom settings.
109    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderContainerResources")]
110    pub identity_provider_container_resources: Option<CheClusterAuthIdentityProviderContainerResources>,
111    /// Deprecated. The value of this flag is ignored.
112    /// Overrides the container image used in the Identity Provider, Keycloak or RH-SSO, deployment.
113    /// This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator.
114    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderImage")]
115    pub identity_provider_image: Option<String>,
116    /// Deprecated. The value of this flag is ignored.
117    /// Overrides the image pull policy used in the Identity Provider, Keycloak or RH-SSO, deployment.
118    /// Default value is `Always` for `nightly`, `next` or `latest` images, and `IfNotPresent` in other cases.
119    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderImagePullPolicy")]
120    pub identity_provider_image_pull_policy: Option<String>,
121    /// Deprecated. The value of this flag is ignored.
122    /// Ingress custom settings.
123    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderIngress")]
124    pub identity_provider_ingress: Option<CheClusterAuthIdentityProviderIngress>,
125    /// Deprecated. The value of this flag is ignored.
126    /// Overrides the password of Keycloak administrator user.
127    /// Override this when an external Identity Provider is in use. See the `externalIdentityProvider` field.
128    /// When omitted or left blank, it is set to an auto-generated password.
129    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderPassword")]
130    pub identity_provider_password: Option<String>,
131    /// Deprecated. The value of this flag is ignored.
132    /// Password for a Identity Provider, Keycloak or RH-SSO, to connect to the database.
133    /// Override this when an external Identity Provider is in use. See the `externalIdentityProvider` field.
134    /// When omitted or left blank, it is set to an auto-generated password.
135    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderPostgresPassword")]
136    pub identity_provider_postgres_password: Option<String>,
137    /// Deprecated. The value of this flag is ignored.
138    /// The secret that contains `password` for the Identity Provider, Keycloak or RH-SSO, to connect to the database.
139    /// When the secret is defined, the `identityProviderPostgresPassword` is ignored. When the value is omitted or left blank, the one of following scenarios applies:
140    /// 1. `identityProviderPostgresPassword` is defined, then it will be used to connect to the database.
141    /// 2. `identityProviderPostgresPassword` is not defined, then a new secret with the name `che-identity-postgres-secret` will be created with an auto-generated value for `password`.
142    /// The secret must have `app.kubernetes.io/part-of=che.eclipse.org` label.
143    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderPostgresSecret")]
144    pub identity_provider_postgres_secret: Option<String>,
145    /// Deprecated. The value of this flag is ignored.
146    /// Name of a Identity provider, Keycloak or RH-SSO, realm that is used for Che.
147    /// Override this when an external Identity Provider is in use. See the `externalIdentityProvider` field.
148    /// When omitted or left blank, it is set to the value of the `flavour` field.
149    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderRealm")]
150    pub identity_provider_realm: Option<String>,
151    /// Deprecated. The value of this flag is ignored.
152    /// Route custom settings.
153    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderRoute")]
154    pub identity_provider_route: Option<CheClusterAuthIdentityProviderRoute>,
155    /// Deprecated. The value of this flag is ignored.
156    /// The secret that contains `user` and `password` for Identity Provider.
157    /// When the secret is defined, the `identityProviderAdminUserName` and `identityProviderPassword` are ignored.
158    /// When the value is omitted or left blank, the one of following scenarios applies:
159    /// 1. `identityProviderAdminUserName` and `identityProviderPassword` are defined, then they will be used.
160    /// 2. `identityProviderAdminUserName` or `identityProviderPassword` are not defined, then a new secret with the name
161    /// `che-identity-secret` will be created with default value `admin` for `user` and with an auto-generated value for `password`.
162    /// The secret must have `app.kubernetes.io/part-of=che.eclipse.org` label.
163    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderSecret")]
164    pub identity_provider_secret: Option<String>,
165    /// Public URL of the Identity Provider server (Keycloak / RH-SSO server).
166    /// Set this ONLY when a use of an external Identity Provider is needed.
167    /// See the `externalIdentityProvider` field. By default, this will be automatically calculated and set by the Operator.
168    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityProviderURL")]
169    pub identity_provider_url: Option<String>,
170    /// Identity token to be passed to upstream. There are two types of tokens supported: `id_token` and `access_token`.
171    /// Default value is `id_token`.
172    /// This field is specific to Che installations made for Kubernetes only and ignored for OpenShift.
173    #[serde(default, skip_serializing_if = "Option::is_none", rename = "identityToken")]
174    pub identity_token: Option<String>,
175    /// Deprecated. The value of this flag is ignored.
176    /// For operating with the OpenShift OAuth authentication, create a new user account since the kubeadmin can not be used.
177    /// If the value is true, then a new OpenShift OAuth user will be created for the HTPasswd identity provider.
178    /// If the value is false and the user has already been created, then it will be removed.
179    /// If value is an empty, then do nothing.
180    /// The user's credentials are stored in the `openshift-oauth-user-credentials` secret in 'openshift-config' namespace by Operator.
181    /// Note that this solution is Openshift 4 platform-specific.
182    #[serde(default, skip_serializing_if = "Option::is_none", rename = "initialOpenShiftOAuthUser")]
183    pub initial_open_shift_o_auth_user: Option<bool>,
184    /// Deprecated. The value of this flag is ignored.
185    /// Enables native user mode. Currently works only on OpenShift and DevWorkspace engine.
186    /// Native User mode uses OpenShift OAuth directly as identity provider, without Keycloak.
187    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nativeUserMode")]
188    pub native_user_mode: Option<bool>,
189    /// Name of the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated when left blank. See also the `OpenShiftoAuth` field.
190    #[serde(default, skip_serializing_if = "Option::is_none", rename = "oAuthClientName")]
191    pub o_auth_client_name: Option<String>,
192    /// Access Token Scope.
193    /// This field is specific to Che installations made for Kubernetes only and ignored for OpenShift.
194    #[serde(default, skip_serializing_if = "Option::is_none", rename = "oAuthScope")]
195    pub o_auth_scope: Option<String>,
196    /// Name of the secret set in the OpenShift `OAuthClient` resource used to setup identity federation on the OpenShift side. Auto-generated when left blank. See also the `OAuthClientName` field.
197    #[serde(default, skip_serializing_if = "Option::is_none", rename = "oAuthSecret")]
198    pub o_auth_secret: Option<String>,
199    /// Deprecated. The value of this flag is ignored.
200    /// Enables the integration of the identity provider (Keycloak / RHSSO) with OpenShift OAuth.
201    /// Empty value on OpenShift by default. This will allow users to directly login with their OpenShift user through the OpenShift login,
202    /// and have their workspaces created under personal OpenShift namespaces.
203    /// WARNING: the `kubeadmin` user is NOT supported, and logging through it will NOT allow accessing the Che Dashboard.
204    #[serde(default, skip_serializing_if = "Option::is_none", rename = "openShiftoAuth")]
205    pub open_shifto_auth: Option<bool>,
206    /// Deprecated. The value of this flag is ignored.
207    /// Forces the default `admin` Che user to update password on first login. Defaults to `false`.
208    #[serde(default, skip_serializing_if = "Option::is_none", rename = "updateAdminPassword")]
209    pub update_admin_password: Option<bool>,
210}
211
212/// EnvVar represents an environment variable present in a Container.
213#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
214pub struct CheClusterAuthGatewayConfigBumpEnv {
215    /// Name of the environment variable.
216    /// May consist of any printable ASCII characters except '='.
217    pub name: String,
218    /// Variable references $(VAR_NAME) are expanded
219    /// using the previously defined environment variables in the container and
220    /// any service environment variables. If a variable cannot be resolved,
221    /// the reference in the input string will be unchanged. Double $$ are reduced
222    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
223    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
224    /// Escaped references will never be expanded, regardless of whether the variable
225    /// exists or not.
226    /// Defaults to "".
227    #[serde(default, skip_serializing_if = "Option::is_none")]
228    pub value: Option<String>,
229    /// Source for the environment variable's value. Cannot be used if value is not empty.
230    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
231    pub value_from: Option<CheClusterAuthGatewayConfigBumpEnvValueFrom>,
232}
233
234/// Source for the environment variable's value. Cannot be used if value is not empty.
235#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
236pub struct CheClusterAuthGatewayConfigBumpEnvValueFrom {
237    /// Selects a key of a ConfigMap.
238    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
239    pub config_map_key_ref: Option<CheClusterAuthGatewayConfigBumpEnvValueFromConfigMapKeyRef>,
240    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
241    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
242    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
243    pub field_ref: Option<CheClusterAuthGatewayConfigBumpEnvValueFromFieldRef>,
244    /// FileKeyRef selects a key of the env file.
245    /// Requires the EnvFiles feature gate to be enabled.
246    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
247    pub file_key_ref: Option<CheClusterAuthGatewayConfigBumpEnvValueFromFileKeyRef>,
248    /// Selects a resource of the container: only resources limits and requests
249    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
250    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
251    pub resource_field_ref: Option<CheClusterAuthGatewayConfigBumpEnvValueFromResourceFieldRef>,
252    /// Selects a key of a secret in the pod's namespace
253    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
254    pub secret_key_ref: Option<CheClusterAuthGatewayConfigBumpEnvValueFromSecretKeyRef>,
255}
256
257/// Selects a key of a ConfigMap.
258#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
259pub struct CheClusterAuthGatewayConfigBumpEnvValueFromConfigMapKeyRef {
260    /// The key to select.
261    pub key: String,
262    /// Name of the referent.
263    /// This field is effectively required, but due to backwards compatibility is
264    /// allowed to be empty. Instances of this type with an empty value here are
265    /// almost certainly wrong.
266    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
267    #[serde(default, skip_serializing_if = "Option::is_none")]
268    pub name: Option<String>,
269    /// Specify whether the ConfigMap or its key must be defined
270    #[serde(default, skip_serializing_if = "Option::is_none")]
271    pub optional: Option<bool>,
272}
273
274/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
275/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
276#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
277pub struct CheClusterAuthGatewayConfigBumpEnvValueFromFieldRef {
278    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
279    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
280    pub api_version: Option<String>,
281    /// Path of the field to select in the specified API version.
282    #[serde(rename = "fieldPath")]
283    pub field_path: String,
284}
285
286/// FileKeyRef selects a key of the env file.
287/// Requires the EnvFiles feature gate to be enabled.
288#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
289pub struct CheClusterAuthGatewayConfigBumpEnvValueFromFileKeyRef {
290    /// The key within the env file. An invalid key will prevent the pod from starting.
291    /// The keys defined within a source may consist of any printable ASCII characters except '='.
292    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
293    pub key: String,
294    /// Specify whether the file or its key must be defined. If the file or key
295    /// does not exist, then the env var is not published.
296    /// If optional is set to true and the specified key does not exist,
297    /// the environment variable will not be set in the Pod's containers.
298    /// 
299    /// If optional is set to false and the specified key does not exist,
300    /// an error will be returned during Pod creation.
301    #[serde(default, skip_serializing_if = "Option::is_none")]
302    pub optional: Option<bool>,
303    /// The path within the volume from which to select the file.
304    /// Must be relative and may not contain the '..' path or start with '..'.
305    pub path: String,
306    /// The name of the volume mount containing the env file.
307    #[serde(rename = "volumeName")]
308    pub volume_name: String,
309}
310
311/// Selects a resource of the container: only resources limits and requests
312/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
313#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
314pub struct CheClusterAuthGatewayConfigBumpEnvValueFromResourceFieldRef {
315    /// Container name: required for volumes, optional for env vars
316    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
317    pub container_name: Option<String>,
318    /// Specifies the output format of the exposed resources, defaults to "1"
319    #[serde(default, skip_serializing_if = "Option::is_none")]
320    pub divisor: Option<IntOrString>,
321    /// Required: resource to select
322    pub resource: String,
323}
324
325/// Selects a key of a secret in the pod's namespace
326#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
327pub struct CheClusterAuthGatewayConfigBumpEnvValueFromSecretKeyRef {
328    /// The key of the secret to select from.  Must be a valid secret key.
329    pub key: String,
330    /// Name of the referent.
331    /// This field is effectively required, but due to backwards compatibility is
332    /// allowed to be empty. Instances of this type with an empty value here are
333    /// almost certainly wrong.
334    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
335    #[serde(default, skip_serializing_if = "Option::is_none")]
336    pub name: Option<String>,
337    /// Specify whether the Secret or its key must be defined
338    #[serde(default, skip_serializing_if = "Option::is_none")]
339    pub optional: Option<bool>,
340}
341
342/// EnvVar represents an environment variable present in a Container.
343#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
344pub struct CheClusterAuthGatewayEnv {
345    /// Name of the environment variable.
346    /// May consist of any printable ASCII characters except '='.
347    pub name: String,
348    /// Variable references $(VAR_NAME) are expanded
349    /// using the previously defined environment variables in the container and
350    /// any service environment variables. If a variable cannot be resolved,
351    /// the reference in the input string will be unchanged. Double $$ are reduced
352    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
353    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
354    /// Escaped references will never be expanded, regardless of whether the variable
355    /// exists or not.
356    /// Defaults to "".
357    #[serde(default, skip_serializing_if = "Option::is_none")]
358    pub value: Option<String>,
359    /// Source for the environment variable's value. Cannot be used if value is not empty.
360    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
361    pub value_from: Option<CheClusterAuthGatewayEnvValueFrom>,
362}
363
364/// Source for the environment variable's value. Cannot be used if value is not empty.
365#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
366pub struct CheClusterAuthGatewayEnvValueFrom {
367    /// Selects a key of a ConfigMap.
368    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
369    pub config_map_key_ref: Option<CheClusterAuthGatewayEnvValueFromConfigMapKeyRef>,
370    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
371    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
372    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
373    pub field_ref: Option<CheClusterAuthGatewayEnvValueFromFieldRef>,
374    /// FileKeyRef selects a key of the env file.
375    /// Requires the EnvFiles feature gate to be enabled.
376    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
377    pub file_key_ref: Option<CheClusterAuthGatewayEnvValueFromFileKeyRef>,
378    /// Selects a resource of the container: only resources limits and requests
379    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
380    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
381    pub resource_field_ref: Option<CheClusterAuthGatewayEnvValueFromResourceFieldRef>,
382    /// Selects a key of a secret in the pod's namespace
383    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
384    pub secret_key_ref: Option<CheClusterAuthGatewayEnvValueFromSecretKeyRef>,
385}
386
387/// Selects a key of a ConfigMap.
388#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
389pub struct CheClusterAuthGatewayEnvValueFromConfigMapKeyRef {
390    /// The key to select.
391    pub key: String,
392    /// Name of the referent.
393    /// This field is effectively required, but due to backwards compatibility is
394    /// allowed to be empty. Instances of this type with an empty value here are
395    /// almost certainly wrong.
396    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
397    #[serde(default, skip_serializing_if = "Option::is_none")]
398    pub name: Option<String>,
399    /// Specify whether the ConfigMap or its key must be defined
400    #[serde(default, skip_serializing_if = "Option::is_none")]
401    pub optional: Option<bool>,
402}
403
404/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
405/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
406#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
407pub struct CheClusterAuthGatewayEnvValueFromFieldRef {
408    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
409    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
410    pub api_version: Option<String>,
411    /// Path of the field to select in the specified API version.
412    #[serde(rename = "fieldPath")]
413    pub field_path: String,
414}
415
416/// FileKeyRef selects a key of the env file.
417/// Requires the EnvFiles feature gate to be enabled.
418#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
419pub struct CheClusterAuthGatewayEnvValueFromFileKeyRef {
420    /// The key within the env file. An invalid key will prevent the pod from starting.
421    /// The keys defined within a source may consist of any printable ASCII characters except '='.
422    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
423    pub key: String,
424    /// Specify whether the file or its key must be defined. If the file or key
425    /// does not exist, then the env var is not published.
426    /// If optional is set to true and the specified key does not exist,
427    /// the environment variable will not be set in the Pod's containers.
428    /// 
429    /// If optional is set to false and the specified key does not exist,
430    /// an error will be returned during Pod creation.
431    #[serde(default, skip_serializing_if = "Option::is_none")]
432    pub optional: Option<bool>,
433    /// The path within the volume from which to select the file.
434    /// Must be relative and may not contain the '..' path or start with '..'.
435    pub path: String,
436    /// The name of the volume mount containing the env file.
437    #[serde(rename = "volumeName")]
438    pub volume_name: String,
439}
440
441/// Selects a resource of the container: only resources limits and requests
442/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
443#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
444pub struct CheClusterAuthGatewayEnvValueFromResourceFieldRef {
445    /// Container name: required for volumes, optional for env vars
446    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
447    pub container_name: Option<String>,
448    /// Specifies the output format of the exposed resources, defaults to "1"
449    #[serde(default, skip_serializing_if = "Option::is_none")]
450    pub divisor: Option<IntOrString>,
451    /// Required: resource to select
452    pub resource: String,
453}
454
455/// Selects a key of a secret in the pod's namespace
456#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
457pub struct CheClusterAuthGatewayEnvValueFromSecretKeyRef {
458    /// The key of the secret to select from.  Must be a valid secret key.
459    pub key: String,
460    /// Name of the referent.
461    /// This field is effectively required, but due to backwards compatibility is
462    /// allowed to be empty. Instances of this type with an empty value here are
463    /// almost certainly wrong.
464    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
465    #[serde(default, skip_serializing_if = "Option::is_none")]
466    pub name: Option<String>,
467    /// Specify whether the Secret or its key must be defined
468    #[serde(default, skip_serializing_if = "Option::is_none")]
469    pub optional: Option<bool>,
470}
471
472/// EnvVar represents an environment variable present in a Container.
473#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
474pub struct CheClusterAuthGatewayKubeRbacProxyEnv {
475    /// Name of the environment variable.
476    /// May consist of any printable ASCII characters except '='.
477    pub name: String,
478    /// Variable references $(VAR_NAME) are expanded
479    /// using the previously defined environment variables in the container and
480    /// any service environment variables. If a variable cannot be resolved,
481    /// the reference in the input string will be unchanged. Double $$ are reduced
482    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
483    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
484    /// Escaped references will never be expanded, regardless of whether the variable
485    /// exists or not.
486    /// Defaults to "".
487    #[serde(default, skip_serializing_if = "Option::is_none")]
488    pub value: Option<String>,
489    /// Source for the environment variable's value. Cannot be used if value is not empty.
490    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
491    pub value_from: Option<CheClusterAuthGatewayKubeRbacProxyEnvValueFrom>,
492}
493
494/// Source for the environment variable's value. Cannot be used if value is not empty.
495#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
496pub struct CheClusterAuthGatewayKubeRbacProxyEnvValueFrom {
497    /// Selects a key of a ConfigMap.
498    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
499    pub config_map_key_ref: Option<CheClusterAuthGatewayKubeRbacProxyEnvValueFromConfigMapKeyRef>,
500    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
501    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
502    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
503    pub field_ref: Option<CheClusterAuthGatewayKubeRbacProxyEnvValueFromFieldRef>,
504    /// FileKeyRef selects a key of the env file.
505    /// Requires the EnvFiles feature gate to be enabled.
506    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
507    pub file_key_ref: Option<CheClusterAuthGatewayKubeRbacProxyEnvValueFromFileKeyRef>,
508    /// Selects a resource of the container: only resources limits and requests
509    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
510    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
511    pub resource_field_ref: Option<CheClusterAuthGatewayKubeRbacProxyEnvValueFromResourceFieldRef>,
512    /// Selects a key of a secret in the pod's namespace
513    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
514    pub secret_key_ref: Option<CheClusterAuthGatewayKubeRbacProxyEnvValueFromSecretKeyRef>,
515}
516
517/// Selects a key of a ConfigMap.
518#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
519pub struct CheClusterAuthGatewayKubeRbacProxyEnvValueFromConfigMapKeyRef {
520    /// The key to select.
521    pub key: String,
522    /// Name of the referent.
523    /// This field is effectively required, but due to backwards compatibility is
524    /// allowed to be empty. Instances of this type with an empty value here are
525    /// almost certainly wrong.
526    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
527    #[serde(default, skip_serializing_if = "Option::is_none")]
528    pub name: Option<String>,
529    /// Specify whether the ConfigMap or its key must be defined
530    #[serde(default, skip_serializing_if = "Option::is_none")]
531    pub optional: Option<bool>,
532}
533
534/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
535/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
536#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
537pub struct CheClusterAuthGatewayKubeRbacProxyEnvValueFromFieldRef {
538    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
539    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
540    pub api_version: Option<String>,
541    /// Path of the field to select in the specified API version.
542    #[serde(rename = "fieldPath")]
543    pub field_path: String,
544}
545
546/// FileKeyRef selects a key of the env file.
547/// Requires the EnvFiles feature gate to be enabled.
548#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
549pub struct CheClusterAuthGatewayKubeRbacProxyEnvValueFromFileKeyRef {
550    /// The key within the env file. An invalid key will prevent the pod from starting.
551    /// The keys defined within a source may consist of any printable ASCII characters except '='.
552    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
553    pub key: String,
554    /// Specify whether the file or its key must be defined. If the file or key
555    /// does not exist, then the env var is not published.
556    /// If optional is set to true and the specified key does not exist,
557    /// the environment variable will not be set in the Pod's containers.
558    /// 
559    /// If optional is set to false and the specified key does not exist,
560    /// an error will be returned during Pod creation.
561    #[serde(default, skip_serializing_if = "Option::is_none")]
562    pub optional: Option<bool>,
563    /// The path within the volume from which to select the file.
564    /// Must be relative and may not contain the '..' path or start with '..'.
565    pub path: String,
566    /// The name of the volume mount containing the env file.
567    #[serde(rename = "volumeName")]
568    pub volume_name: String,
569}
570
571/// Selects a resource of the container: only resources limits and requests
572/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
573#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
574pub struct CheClusterAuthGatewayKubeRbacProxyEnvValueFromResourceFieldRef {
575    /// Container name: required for volumes, optional for env vars
576    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
577    pub container_name: Option<String>,
578    /// Specifies the output format of the exposed resources, defaults to "1"
579    #[serde(default, skip_serializing_if = "Option::is_none")]
580    pub divisor: Option<IntOrString>,
581    /// Required: resource to select
582    pub resource: String,
583}
584
585/// Selects a key of a secret in the pod's namespace
586#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
587pub struct CheClusterAuthGatewayKubeRbacProxyEnvValueFromSecretKeyRef {
588    /// The key of the secret to select from.  Must be a valid secret key.
589    pub key: String,
590    /// Name of the referent.
591    /// This field is effectively required, but due to backwards compatibility is
592    /// allowed to be empty. Instances of this type with an empty value here are
593    /// almost certainly wrong.
594    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
595    #[serde(default, skip_serializing_if = "Option::is_none")]
596    pub name: Option<String>,
597    /// Specify whether the Secret or its key must be defined
598    #[serde(default, skip_serializing_if = "Option::is_none")]
599    pub optional: Option<bool>,
600}
601
602/// EnvVar represents an environment variable present in a Container.
603#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
604pub struct CheClusterAuthGatewayOAuthProxyEnv {
605    /// Name of the environment variable.
606    /// May consist of any printable ASCII characters except '='.
607    pub name: String,
608    /// Variable references $(VAR_NAME) are expanded
609    /// using the previously defined environment variables in the container and
610    /// any service environment variables. If a variable cannot be resolved,
611    /// the reference in the input string will be unchanged. Double $$ are reduced
612    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
613    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
614    /// Escaped references will never be expanded, regardless of whether the variable
615    /// exists or not.
616    /// Defaults to "".
617    #[serde(default, skip_serializing_if = "Option::is_none")]
618    pub value: Option<String>,
619    /// Source for the environment variable's value. Cannot be used if value is not empty.
620    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
621    pub value_from: Option<CheClusterAuthGatewayOAuthProxyEnvValueFrom>,
622}
623
624/// Source for the environment variable's value. Cannot be used if value is not empty.
625#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
626pub struct CheClusterAuthGatewayOAuthProxyEnvValueFrom {
627    /// Selects a key of a ConfigMap.
628    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
629    pub config_map_key_ref: Option<CheClusterAuthGatewayOAuthProxyEnvValueFromConfigMapKeyRef>,
630    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
631    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
632    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
633    pub field_ref: Option<CheClusterAuthGatewayOAuthProxyEnvValueFromFieldRef>,
634    /// FileKeyRef selects a key of the env file.
635    /// Requires the EnvFiles feature gate to be enabled.
636    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
637    pub file_key_ref: Option<CheClusterAuthGatewayOAuthProxyEnvValueFromFileKeyRef>,
638    /// Selects a resource of the container: only resources limits and requests
639    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
640    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
641    pub resource_field_ref: Option<CheClusterAuthGatewayOAuthProxyEnvValueFromResourceFieldRef>,
642    /// Selects a key of a secret in the pod's namespace
643    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
644    pub secret_key_ref: Option<CheClusterAuthGatewayOAuthProxyEnvValueFromSecretKeyRef>,
645}
646
647/// Selects a key of a ConfigMap.
648#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
649pub struct CheClusterAuthGatewayOAuthProxyEnvValueFromConfigMapKeyRef {
650    /// The key to select.
651    pub key: String,
652    /// Name of the referent.
653    /// This field is effectively required, but due to backwards compatibility is
654    /// allowed to be empty. Instances of this type with an empty value here are
655    /// almost certainly wrong.
656    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
657    #[serde(default, skip_serializing_if = "Option::is_none")]
658    pub name: Option<String>,
659    /// Specify whether the ConfigMap or its key must be defined
660    #[serde(default, skip_serializing_if = "Option::is_none")]
661    pub optional: Option<bool>,
662}
663
664/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
665/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
666#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
667pub struct CheClusterAuthGatewayOAuthProxyEnvValueFromFieldRef {
668    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
669    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
670    pub api_version: Option<String>,
671    /// Path of the field to select in the specified API version.
672    #[serde(rename = "fieldPath")]
673    pub field_path: String,
674}
675
676/// FileKeyRef selects a key of the env file.
677/// Requires the EnvFiles feature gate to be enabled.
678#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
679pub struct CheClusterAuthGatewayOAuthProxyEnvValueFromFileKeyRef {
680    /// The key within the env file. An invalid key will prevent the pod from starting.
681    /// The keys defined within a source may consist of any printable ASCII characters except '='.
682    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
683    pub key: String,
684    /// Specify whether the file or its key must be defined. If the file or key
685    /// does not exist, then the env var is not published.
686    /// If optional is set to true and the specified key does not exist,
687    /// the environment variable will not be set in the Pod's containers.
688    /// 
689    /// If optional is set to false and the specified key does not exist,
690    /// an error will be returned during Pod creation.
691    #[serde(default, skip_serializing_if = "Option::is_none")]
692    pub optional: Option<bool>,
693    /// The path within the volume from which to select the file.
694    /// Must be relative and may not contain the '..' path or start with '..'.
695    pub path: String,
696    /// The name of the volume mount containing the env file.
697    #[serde(rename = "volumeName")]
698    pub volume_name: String,
699}
700
701/// Selects a resource of the container: only resources limits and requests
702/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
703#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
704pub struct CheClusterAuthGatewayOAuthProxyEnvValueFromResourceFieldRef {
705    /// Container name: required for volumes, optional for env vars
706    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
707    pub container_name: Option<String>,
708    /// Specifies the output format of the exposed resources, defaults to "1"
709    #[serde(default, skip_serializing_if = "Option::is_none")]
710    pub divisor: Option<IntOrString>,
711    /// Required: resource to select
712    pub resource: String,
713}
714
715/// Selects a key of a secret in the pod's namespace
716#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
717pub struct CheClusterAuthGatewayOAuthProxyEnvValueFromSecretKeyRef {
718    /// The key of the secret to select from.  Must be a valid secret key.
719    pub key: String,
720    /// Name of the referent.
721    /// This field is effectively required, but due to backwards compatibility is
722    /// allowed to be empty. Instances of this type with an empty value here are
723    /// almost certainly wrong.
724    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
725    #[serde(default, skip_serializing_if = "Option::is_none")]
726    pub name: Option<String>,
727    /// Specify whether the Secret or its key must be defined
728    #[serde(default, skip_serializing_if = "Option::is_none")]
729    pub optional: Option<bool>,
730}
731
732/// Deprecated. The value of this flag is ignored.
733/// Identity provider container custom settings.
734#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
735pub struct CheClusterAuthIdentityProviderContainerResources {
736    /// Limits describes the maximum amount of compute resources allowed.
737    #[serde(default, skip_serializing_if = "Option::is_none")]
738    pub limits: Option<CheClusterAuthIdentityProviderContainerResourcesLimits>,
739    /// Requests describes the minimum amount of compute resources required.
740    #[serde(default, skip_serializing_if = "Option::is_none")]
741    pub request: Option<CheClusterAuthIdentityProviderContainerResourcesRequest>,
742}
743
744/// Limits describes the maximum amount of compute resources allowed.
745#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
746pub struct CheClusterAuthIdentityProviderContainerResourcesLimits {
747    /// CPU, in cores. (500m = .5 cores)
748    #[serde(default, skip_serializing_if = "Option::is_none")]
749    pub cpu: Option<String>,
750    /// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
751    #[serde(default, skip_serializing_if = "Option::is_none")]
752    pub memory: Option<String>,
753}
754
755/// Requests describes the minimum amount of compute resources required.
756#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
757pub struct CheClusterAuthIdentityProviderContainerResourcesRequest {
758    /// CPU, in cores. (500m = .5 cores)
759    #[serde(default, skip_serializing_if = "Option::is_none")]
760    pub cpu: Option<String>,
761    /// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
762    #[serde(default, skip_serializing_if = "Option::is_none")]
763    pub memory: Option<String>,
764}
765
766/// Deprecated. The value of this flag is ignored.
767/// Ingress custom settings.
768#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
769pub struct CheClusterAuthIdentityProviderIngress {
770    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
771    #[serde(default, skip_serializing_if = "Option::is_none")]
772    pub annotations: Option<BTreeMap<String, String>>,
773    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
774    #[serde(default, skip_serializing_if = "Option::is_none")]
775    pub labels: Option<String>,
776}
777
778/// Deprecated. The value of this flag is ignored.
779/// Route custom settings.
780#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
781pub struct CheClusterAuthIdentityProviderRoute {
782    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
783    #[serde(default, skip_serializing_if = "Option::is_none")]
784    pub annotations: Option<BTreeMap<String, String>>,
785    /// Operator uses the domain to generate a hostname for a route.
786    /// In a conjunction with labels it creates a route, which is served by a non-default Ingress controller.
787    /// The generated host name will follow this pattern: `<route-name>-<route-namespace>.<domain>`.
788    #[serde(default, skip_serializing_if = "Option::is_none")]
789    pub domain: Option<String>,
790    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
791    #[serde(default, skip_serializing_if = "Option::is_none")]
792    pub labels: Option<String>,
793}
794
795/// Configuration settings related to the User Dashboard used by the Che installation.
796#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
797pub struct CheClusterDashboard {
798    /// Warning message that will be displayed on the User Dashboard
799    #[serde(default, skip_serializing_if = "Option::is_none")]
800    pub warning: Option<String>,
801}
802
803/// Configuration settings related to the database used by the Che installation.
804#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
805pub struct CheClusterDatabase {
806    /// PostgreSQL container custom settings
807    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresContainerResources")]
808    pub che_postgres_container_resources: Option<CheClusterDatabaseChePostgresContainerResources>,
809    /// PostgreSQL database name that the Che server uses to connect to the DB. Defaults to `dbche`.
810    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresDb")]
811    pub che_postgres_db: Option<String>,
812    /// PostgreSQL Database host name that the Che server uses to connect to.
813    /// Defaults is `postgres`. Override this value ONLY when using an external database. See field `externalDb`.
814    /// In the default case it will be automatically set by the Operator.
815    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresHostName")]
816    pub che_postgres_host_name: Option<String>,
817    /// PostgreSQL password that the Che server uses to connect to the DB. When omitted or left blank, it will be set to an automatically generated value.
818    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresPassword")]
819    pub che_postgres_password: Option<String>,
820    /// PostgreSQL Database port that the Che server uses to connect to. Defaults to 5432.
821    /// Override this value ONLY when using an external database. See field `externalDb`. In the default case it will be automatically set by the Operator.
822    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresPort")]
823    pub che_postgres_port: Option<String>,
824    /// The secret that contains PostgreSQL`user` and `password` that the Che server uses to connect to the DB.
825    /// When the secret is defined, the `chePostgresUser` and `chePostgresPassword` are ignored.
826    /// When the value is omitted or left blank, the one of following scenarios applies:
827    /// 1. `chePostgresUser` and `chePostgresPassword` are defined, then they will be used to connect to the DB.
828    /// 2. `chePostgresUser` or `chePostgresPassword` are not defined, then a new secret with the name `postgres-credentials`
829    /// will be created with default value of `pgche` for `user` and with an auto-generated value for `password`.
830    /// The secret must have `app.kubernetes.io/part-of=che.eclipse.org` label.
831    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresSecret")]
832    pub che_postgres_secret: Option<String>,
833    /// PostgreSQL user that the Che server uses to connect to the DB. Defaults to `pgche`.
834    #[serde(default, skip_serializing_if = "Option::is_none", rename = "chePostgresUser")]
835    pub che_postgres_user: Option<String>,
836    /// Instructs the Operator on whether to deploy a dedicated database.
837    /// By default, a dedicated PostgreSQL database is deployed as part of the Che installation. When `externalDb` is `true`, no dedicated database will be deployed by the
838    /// Operator and you will need to provide connection details to the external DB you are about to use. See also all the fields starting with: `chePostgres`.
839    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalDb")]
840    pub external_db: Option<bool>,
841    /// List of environment variables to set in the PostgreSQL container.
842    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postgresEnv")]
843    pub postgres_env: Option<Vec<CheClusterDatabasePostgresEnv>>,
844    /// Overrides the container image used in the PostgreSQL database deployment. This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator.
845    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postgresImage")]
846    pub postgres_image: Option<String>,
847    /// Overrides the image pull policy used in the PostgreSQL database deployment. Default value is `Always` for `nightly`, `next` or `latest` images, and `IfNotPresent` in other cases.
848    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postgresImagePullPolicy")]
849    pub postgres_image_pull_policy: Option<String>,
850    /// Indicates a PostgreSQL version image to use. Allowed values are: `9.6` and `13.3`.
851    /// Migrate your PostgreSQL database to switch from one version to another.
852    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postgresVersion")]
853    pub postgres_version: Option<String>,
854    /// Size of the persistent volume claim for database. Defaults to `1Gi`.
855    /// To update pvc storageclass that provisions it must support resize when Eclipse Che has been already deployed.
856    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pvcClaimSize")]
857    pub pvc_claim_size: Option<String>,
858}
859
860/// PostgreSQL container custom settings
861#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
862pub struct CheClusterDatabaseChePostgresContainerResources {
863    /// Limits describes the maximum amount of compute resources allowed.
864    #[serde(default, skip_serializing_if = "Option::is_none")]
865    pub limits: Option<CheClusterDatabaseChePostgresContainerResourcesLimits>,
866    /// Requests describes the minimum amount of compute resources required.
867    #[serde(default, skip_serializing_if = "Option::is_none")]
868    pub request: Option<CheClusterDatabaseChePostgresContainerResourcesRequest>,
869}
870
871/// Limits describes the maximum amount of compute resources allowed.
872#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
873pub struct CheClusterDatabaseChePostgresContainerResourcesLimits {
874    /// CPU, in cores. (500m = .5 cores)
875    #[serde(default, skip_serializing_if = "Option::is_none")]
876    pub cpu: Option<String>,
877    /// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
878    #[serde(default, skip_serializing_if = "Option::is_none")]
879    pub memory: Option<String>,
880}
881
882/// Requests describes the minimum amount of compute resources required.
883#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
884pub struct CheClusterDatabaseChePostgresContainerResourcesRequest {
885    /// CPU, in cores. (500m = .5 cores)
886    #[serde(default, skip_serializing_if = "Option::is_none")]
887    pub cpu: Option<String>,
888    /// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
889    #[serde(default, skip_serializing_if = "Option::is_none")]
890    pub memory: Option<String>,
891}
892
893/// EnvVar represents an environment variable present in a Container.
894#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
895pub struct CheClusterDatabasePostgresEnv {
896    /// Name of the environment variable.
897    /// May consist of any printable ASCII characters except '='.
898    pub name: String,
899    /// Variable references $(VAR_NAME) are expanded
900    /// using the previously defined environment variables in the container and
901    /// any service environment variables. If a variable cannot be resolved,
902    /// the reference in the input string will be unchanged. Double $$ are reduced
903    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
904    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
905    /// Escaped references will never be expanded, regardless of whether the variable
906    /// exists or not.
907    /// Defaults to "".
908    #[serde(default, skip_serializing_if = "Option::is_none")]
909    pub value: Option<String>,
910    /// Source for the environment variable's value. Cannot be used if value is not empty.
911    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
912    pub value_from: Option<CheClusterDatabasePostgresEnvValueFrom>,
913}
914
915/// Source for the environment variable's value. Cannot be used if value is not empty.
916#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
917pub struct CheClusterDatabasePostgresEnvValueFrom {
918    /// Selects a key of a ConfigMap.
919    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
920    pub config_map_key_ref: Option<CheClusterDatabasePostgresEnvValueFromConfigMapKeyRef>,
921    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
922    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
923    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
924    pub field_ref: Option<CheClusterDatabasePostgresEnvValueFromFieldRef>,
925    /// FileKeyRef selects a key of the env file.
926    /// Requires the EnvFiles feature gate to be enabled.
927    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
928    pub file_key_ref: Option<CheClusterDatabasePostgresEnvValueFromFileKeyRef>,
929    /// Selects a resource of the container: only resources limits and requests
930    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
931    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
932    pub resource_field_ref: Option<CheClusterDatabasePostgresEnvValueFromResourceFieldRef>,
933    /// Selects a key of a secret in the pod's namespace
934    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
935    pub secret_key_ref: Option<CheClusterDatabasePostgresEnvValueFromSecretKeyRef>,
936}
937
938/// Selects a key of a ConfigMap.
939#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
940pub struct CheClusterDatabasePostgresEnvValueFromConfigMapKeyRef {
941    /// The key to select.
942    pub key: String,
943    /// Name of the referent.
944    /// This field is effectively required, but due to backwards compatibility is
945    /// allowed to be empty. Instances of this type with an empty value here are
946    /// almost certainly wrong.
947    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
948    #[serde(default, skip_serializing_if = "Option::is_none")]
949    pub name: Option<String>,
950    /// Specify whether the ConfigMap or its key must be defined
951    #[serde(default, skip_serializing_if = "Option::is_none")]
952    pub optional: Option<bool>,
953}
954
955/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
956/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
957#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
958pub struct CheClusterDatabasePostgresEnvValueFromFieldRef {
959    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
960    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
961    pub api_version: Option<String>,
962    /// Path of the field to select in the specified API version.
963    #[serde(rename = "fieldPath")]
964    pub field_path: String,
965}
966
967/// FileKeyRef selects a key of the env file.
968/// Requires the EnvFiles feature gate to be enabled.
969#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
970pub struct CheClusterDatabasePostgresEnvValueFromFileKeyRef {
971    /// The key within the env file. An invalid key will prevent the pod from starting.
972    /// The keys defined within a source may consist of any printable ASCII characters except '='.
973    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
974    pub key: String,
975    /// Specify whether the file or its key must be defined. If the file or key
976    /// does not exist, then the env var is not published.
977    /// If optional is set to true and the specified key does not exist,
978    /// the environment variable will not be set in the Pod's containers.
979    /// 
980    /// If optional is set to false and the specified key does not exist,
981    /// an error will be returned during Pod creation.
982    #[serde(default, skip_serializing_if = "Option::is_none")]
983    pub optional: Option<bool>,
984    /// The path within the volume from which to select the file.
985    /// Must be relative and may not contain the '..' path or start with '..'.
986    pub path: String,
987    /// The name of the volume mount containing the env file.
988    #[serde(rename = "volumeName")]
989    pub volume_name: String,
990}
991
992/// Selects a resource of the container: only resources limits and requests
993/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
994#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
995pub struct CheClusterDatabasePostgresEnvValueFromResourceFieldRef {
996    /// Container name: required for volumes, optional for env vars
997    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
998    pub container_name: Option<String>,
999    /// Specifies the output format of the exposed resources, defaults to "1"
1000    #[serde(default, skip_serializing_if = "Option::is_none")]
1001    pub divisor: Option<IntOrString>,
1002    /// Required: resource to select
1003    pub resource: String,
1004}
1005
1006/// Selects a key of a secret in the pod's namespace
1007#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1008pub struct CheClusterDatabasePostgresEnvValueFromSecretKeyRef {
1009    /// The key of the secret to select from.  Must be a valid secret key.
1010    pub key: String,
1011    /// Name of the referent.
1012    /// This field is effectively required, but due to backwards compatibility is
1013    /// allowed to be empty. Instances of this type with an empty value here are
1014    /// almost certainly wrong.
1015    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1016    #[serde(default, skip_serializing_if = "Option::is_none")]
1017    pub name: Option<String>,
1018    /// Specify whether the Secret or its key must be defined
1019    #[serde(default, skip_serializing_if = "Option::is_none")]
1020    pub optional: Option<bool>,
1021}
1022
1023/// DevWorkspace operator configuration
1024#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1025pub struct CheClusterDevWorkspace {
1026    /// Overrides the container image used in the DevWorkspace controller deployment.
1027    /// This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator.
1028    #[serde(default, skip_serializing_if = "Option::is_none", rename = "controllerImage")]
1029    pub controller_image: Option<String>,
1030    /// Deploys the DevWorkspace Operator in the cluster.
1031    /// Does nothing when a matching version of the Operator is already installed.
1032    /// Fails when a non-matching version of the Operator is already installed.
1033    pub enable: bool,
1034    /// List of environment variables to set in the DevWorkspace container.
1035    #[serde(default, skip_serializing_if = "Option::is_none")]
1036    pub env: Option<Vec<CheClusterDevWorkspaceEnv>>,
1037    /// Maximum number of the running workspaces per user.
1038    #[serde(default, skip_serializing_if = "Option::is_none", rename = "runningLimit")]
1039    pub running_limit: Option<String>,
1040    /// Idle timeout for workspaces in seconds.
1041    /// This timeout is the duration after which a workspace will be idled if there is no activity.
1042    /// To disable workspace idling due to inactivity, set this value to -1.
1043    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secondsOfInactivityBeforeIdling")]
1044    pub seconds_of_inactivity_before_idling: Option<i32>,
1045    /// Run timeout for workspaces in seconds.
1046    /// This timeout is the maximum duration a workspace runs.
1047    /// To disable workspace run timeout, set this value to -1.
1048    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secondsOfRunBeforeIdling")]
1049    pub seconds_of_run_before_idling: Option<i32>,
1050}
1051
1052/// EnvVar represents an environment variable present in a Container.
1053#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1054pub struct CheClusterDevWorkspaceEnv {
1055    /// Name of the environment variable.
1056    /// May consist of any printable ASCII characters except '='.
1057    pub name: String,
1058    /// Variable references $(VAR_NAME) are expanded
1059    /// using the previously defined environment variables in the container and
1060    /// any service environment variables. If a variable cannot be resolved,
1061    /// the reference in the input string will be unchanged. Double $$ are reduced
1062    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
1063    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
1064    /// Escaped references will never be expanded, regardless of whether the variable
1065    /// exists or not.
1066    /// Defaults to "".
1067    #[serde(default, skip_serializing_if = "Option::is_none")]
1068    pub value: Option<String>,
1069    /// Source for the environment variable's value. Cannot be used if value is not empty.
1070    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
1071    pub value_from: Option<CheClusterDevWorkspaceEnvValueFrom>,
1072}
1073
1074/// Source for the environment variable's value. Cannot be used if value is not empty.
1075#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1076pub struct CheClusterDevWorkspaceEnvValueFrom {
1077    /// Selects a key of a ConfigMap.
1078    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
1079    pub config_map_key_ref: Option<CheClusterDevWorkspaceEnvValueFromConfigMapKeyRef>,
1080    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1081    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1082    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
1083    pub field_ref: Option<CheClusterDevWorkspaceEnvValueFromFieldRef>,
1084    /// FileKeyRef selects a key of the env file.
1085    /// Requires the EnvFiles feature gate to be enabled.
1086    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
1087    pub file_key_ref: Option<CheClusterDevWorkspaceEnvValueFromFileKeyRef>,
1088    /// Selects a resource of the container: only resources limits and requests
1089    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1090    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
1091    pub resource_field_ref: Option<CheClusterDevWorkspaceEnvValueFromResourceFieldRef>,
1092    /// Selects a key of a secret in the pod's namespace
1093    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
1094    pub secret_key_ref: Option<CheClusterDevWorkspaceEnvValueFromSecretKeyRef>,
1095}
1096
1097/// Selects a key of a ConfigMap.
1098#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1099pub struct CheClusterDevWorkspaceEnvValueFromConfigMapKeyRef {
1100    /// The key to select.
1101    pub key: String,
1102    /// Name of the referent.
1103    /// This field is effectively required, but due to backwards compatibility is
1104    /// allowed to be empty. Instances of this type with an empty value here are
1105    /// almost certainly wrong.
1106    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1107    #[serde(default, skip_serializing_if = "Option::is_none")]
1108    pub name: Option<String>,
1109    /// Specify whether the ConfigMap or its key must be defined
1110    #[serde(default, skip_serializing_if = "Option::is_none")]
1111    pub optional: Option<bool>,
1112}
1113
1114/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1115/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1116#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1117pub struct CheClusterDevWorkspaceEnvValueFromFieldRef {
1118    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
1119    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
1120    pub api_version: Option<String>,
1121    /// Path of the field to select in the specified API version.
1122    #[serde(rename = "fieldPath")]
1123    pub field_path: String,
1124}
1125
1126/// FileKeyRef selects a key of the env file.
1127/// Requires the EnvFiles feature gate to be enabled.
1128#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1129pub struct CheClusterDevWorkspaceEnvValueFromFileKeyRef {
1130    /// The key within the env file. An invalid key will prevent the pod from starting.
1131    /// The keys defined within a source may consist of any printable ASCII characters except '='.
1132    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
1133    pub key: String,
1134    /// Specify whether the file or its key must be defined. If the file or key
1135    /// does not exist, then the env var is not published.
1136    /// If optional is set to true and the specified key does not exist,
1137    /// the environment variable will not be set in the Pod's containers.
1138    /// 
1139    /// If optional is set to false and the specified key does not exist,
1140    /// an error will be returned during Pod creation.
1141    #[serde(default, skip_serializing_if = "Option::is_none")]
1142    pub optional: Option<bool>,
1143    /// The path within the volume from which to select the file.
1144    /// Must be relative and may not contain the '..' path or start with '..'.
1145    pub path: String,
1146    /// The name of the volume mount containing the env file.
1147    #[serde(rename = "volumeName")]
1148    pub volume_name: String,
1149}
1150
1151/// Selects a resource of the container: only resources limits and requests
1152/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1153#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1154pub struct CheClusterDevWorkspaceEnvValueFromResourceFieldRef {
1155    /// Container name: required for volumes, optional for env vars
1156    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
1157    pub container_name: Option<String>,
1158    /// Specifies the output format of the exposed resources, defaults to "1"
1159    #[serde(default, skip_serializing_if = "Option::is_none")]
1160    pub divisor: Option<IntOrString>,
1161    /// Required: resource to select
1162    pub resource: String,
1163}
1164
1165/// Selects a key of a secret in the pod's namespace
1166#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1167pub struct CheClusterDevWorkspaceEnvValueFromSecretKeyRef {
1168    /// The key of the secret to select from.  Must be a valid secret key.
1169    pub key: String,
1170    /// Name of the referent.
1171    /// This field is effectively required, but due to backwards compatibility is
1172    /// allowed to be empty. Instances of this type with an empty value here are
1173    /// almost certainly wrong.
1174    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1175    #[serde(default, skip_serializing_if = "Option::is_none")]
1176    pub name: Option<String>,
1177    /// Specify whether the Secret or its key must be defined
1178    #[serde(default, skip_serializing_if = "Option::is_none")]
1179    pub optional: Option<bool>,
1180}
1181
1182/// A configuration that allows users to work with remote Git repositories.
1183#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1184pub struct CheClusterGitServices {
1185    /// Enables users to work with repositories hosted on Bitbucket (bitbucket.org or self-hosted).
1186    #[serde(default, skip_serializing_if = "Option::is_none")]
1187    pub bitbucket: Option<Vec<CheClusterGitServicesBitbucket>>,
1188    /// Enables users to work with repositories hosted on GitHub (github.com or GitHub Enterprise).
1189    #[serde(default, skip_serializing_if = "Option::is_none")]
1190    pub github: Option<Vec<CheClusterGitServicesGithub>>,
1191    /// Enables users to work with repositories hosted on GitLab (gitlab.com or self-hosted).
1192    #[serde(default, skip_serializing_if = "Option::is_none")]
1193    pub gitlab: Option<Vec<CheClusterGitServicesGitlab>>,
1194}
1195
1196/// BitBucketService enables users to work with repositories hosted on Bitbucket (bitbucket.org or self-hosted).
1197#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1198pub struct CheClusterGitServicesBitbucket {
1199    /// Bitbucket server endpoint URL.
1200    /// Deprecated in favor of `che.eclipse.org/scm-server-endpoint` annotation.
1201    /// See the following page: <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-1-for-a-bitbucket-server/.>
1202    #[serde(default, skip_serializing_if = "Option::is_none")]
1203    pub endpoint: Option<String>,
1204    /// Kubernetes secret, that contains Base64-encoded Bitbucket OAuth 1.0 or OAuth 2.0 data.
1205    /// See the following pages for details: <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-1-for-a-bitbucket-server/>
1206    /// and <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-2-for-the-bitbucket-cloud/.>
1207    #[serde(rename = "secretName")]
1208    pub secret_name: String,
1209}
1210
1211/// GitHubService enables users to work with repositories hosted on GitHub (GitHub.com or GitHub Enterprise).
1212#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1213pub struct CheClusterGitServicesGithub {
1214    /// GitHub server endpoint URL.
1215    /// Deprecated in favor of `che.eclipse.org/scm-server-endpoint` annotation.
1216    /// See the following page for details: <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-2-for-github/.>
1217    #[serde(default, skip_serializing_if = "Option::is_none")]
1218    pub endpoint: Option<String>,
1219    /// Kubernetes secret, that contains Base64-encoded GitHub OAuth Client id and GitHub OAuth Client secret.
1220    /// See the following page for details: <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-2-for-github/.>
1221    #[serde(rename = "secretName")]
1222    pub secret_name: String,
1223}
1224
1225/// GitLabService enables users to work with repositories hosted on GitLab (gitlab.com or self-hosted).
1226#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1227pub struct CheClusterGitServicesGitlab {
1228    /// GitLab server endpoint URL.
1229    /// Deprecated in favor of `che.eclipse.org/scm-server-endpoint` annotation.
1230    /// See the following page: <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-2-for-gitlab/.>
1231    #[serde(default, skip_serializing_if = "Option::is_none")]
1232    pub endpoint: Option<String>,
1233    /// Kubernetes secret, that contains Base64-encoded GitHub Application id and GitLab Application Client secret.
1234    /// See the following page: <https://www.eclipse.org/che/docs/stable/administration-guide/configuring-oauth-2-for-gitlab/.>
1235    #[serde(rename = "secretName")]
1236    pub secret_name: String,
1237}
1238
1239/// Kubernetes Image Puller configuration
1240#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1241pub struct CheClusterImagePuller {
1242    /// Install and configure the Community Supported Kubernetes Image Puller Operator. When set to `true` and no spec is provided,
1243    /// it will create a default KubernetesImagePuller object to be managed by the Operator.
1244    /// When set to `false`, the KubernetesImagePuller object will be deleted, and the Operator will be uninstalled,
1245    /// regardless of whether a spec is provided.
1246    /// If the `spec.images` field is empty, a set of recommended workspace-related images will be automatically detected and
1247    /// pre-pulled after installation.
1248    /// Note that while this Operator and its behavior is community-supported, its payload may be commercially-supported
1249    /// for pulling commercially-supported images.
1250    pub enable: bool,
1251    /// A KubernetesImagePullerSpec to configure the image puller in the CheCluster
1252    #[serde(default, skip_serializing_if = "Option::is_none")]
1253    pub spec: Option<CheClusterImagePullerSpec>,
1254}
1255
1256/// A KubernetesImagePullerSpec to configure the image puller in the CheCluster
1257#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1258pub struct CheClusterImagePullerSpec {
1259    #[serde(default, skip_serializing_if = "Option::is_none")]
1260    pub affinity: Option<String>,
1261    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingCPULimit")]
1262    pub caching_cpu_limit: Option<String>,
1263    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingCPURequest")]
1264    pub caching_cpu_request: Option<String>,
1265    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingIntervalHours")]
1266    pub caching_interval_hours: Option<String>,
1267    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMemoryLimit")]
1268    pub caching_memory_limit: Option<String>,
1269    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cachingMemoryRequest")]
1270    pub caching_memory_request: Option<String>,
1271    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapName")]
1272    pub config_map_name: Option<String>,
1273    #[serde(default, skip_serializing_if = "Option::is_none", rename = "daemonsetName")]
1274    pub daemonset_name: Option<String>,
1275    #[serde(default, skip_serializing_if = "Option::is_none", rename = "deploymentName")]
1276    pub deployment_name: Option<String>,
1277    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullSecrets")]
1278    pub image_pull_secrets: Option<String>,
1279    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imagePullerImage")]
1280    pub image_puller_image: Option<String>,
1281    #[serde(default, skip_serializing_if = "Option::is_none")]
1282    pub images: Option<String>,
1283    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nodeSelector")]
1284    pub node_selector: Option<String>,
1285}
1286
1287/// Configuration settings specific to Che installations made on upstream Kubernetes.
1288#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1289pub struct CheClusterK8s {
1290    /// Ingress class that will define the which controller will manage ingresses. Defaults to `nginx`.
1291    /// NB: This drives the `kubernetes.io/ingress.class` annotation on Che-related ingresses.
1292    #[serde(default, skip_serializing_if = "Option::is_none", rename = "ingressClass")]
1293    pub ingress_class: Option<String>,
1294    /// Global ingress domain for a Kubernetes cluster. This MUST be explicitly specified: there are no defaults.
1295    #[serde(default, skip_serializing_if = "Option::is_none", rename = "ingressDomain")]
1296    pub ingress_domain: Option<String>,
1297    /// Deprecated. The value of this flag is ignored.
1298    /// Strategy for ingress creation. Options are: `multi-host` (host is explicitly provided in ingress),
1299    /// `single-host` (host is provided, path-based rules) and `default-host` (no host is provided, path-based rules).
1300    /// Defaults to `multi-host` Deprecated in favor of `serverExposureStrategy` in the `server` section,
1301    /// which defines this regardless of the cluster type. When both are defined, the `serverExposureStrategy` option takes precedence.
1302    #[serde(default, skip_serializing_if = "Option::is_none", rename = "ingressStrategy")]
1303    pub ingress_strategy: Option<String>,
1304    /// The FSGroup in which the Che Pod and workspace Pods containers runs in. Default value is `1724`.
1305    #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContextFsGroup")]
1306    pub security_context_fs_group: Option<String>,
1307    /// ID of the user the Che Pod and workspace Pods containers run as. Default value is `1724`.
1308    #[serde(default, skip_serializing_if = "Option::is_none", rename = "securityContextRunAsUser")]
1309    pub security_context_run_as_user: Option<String>,
1310    /// Deprecated. The value of this flag is ignored.
1311    /// When the serverExposureStrategy is set to `single-host`, the way the server, registries and workspaces are exposed is further configured by this property.
1312    /// The possible values are `native`, which means that the server and workspaces are exposed using ingresses on K8s
1313    /// or `gateway` where the server and workspaces are exposed using a custom gateway based on link:<https://doc.traefik.io/traefik/[Traefik].>
1314    /// All the endpoints whether backed by the ingress or gateway `route` always point to the subpaths on the same domain. Defaults to `native`.
1315    #[serde(default, skip_serializing_if = "Option::is_none", rename = "singleHostExposureType")]
1316    pub single_host_exposure_type: Option<String>,
1317    /// Name of a secret that will be used to setup ingress TLS termination when TLS is enabled.
1318    /// When the field is empty string, the default cluster certificate will be used. See also the `tlsSupport` field.
1319    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsSecretName")]
1320    pub tls_secret_name: Option<String>,
1321}
1322
1323/// Configuration settings related to the metrics collection used by the Che installation.
1324#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1325pub struct CheClusterMetrics {
1326    /// Enables `metrics` the Che server endpoint. Default to `true`.
1327    #[serde(default, skip_serializing_if = "Option::is_none")]
1328    pub enable: Option<bool>,
1329}
1330
1331/// General configuration settings related to the Che server, the plugin and devfile registries
1332#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1333pub struct CheClusterServer {
1334    /// Optional host name, or URL, to an alternate container registry to pull images from.
1335    /// This value overrides the container registry host name defined in all the default container images involved in a Che deployment.
1336    /// This is particularly useful to install Che in a restricted environment.
1337    #[serde(default, skip_serializing_if = "Option::is_none", rename = "airGapContainerRegistryHostname")]
1338    pub air_gap_container_registry_hostname: Option<String>,
1339    /// Optional repository name of an alternate container registry to pull images from.
1340    /// This value overrides the container registry organization defined in all the default container images involved in a Che deployment.
1341    /// This is particularly useful to install Eclipse Che in a restricted environment.
1342    #[serde(default, skip_serializing_if = "Option::is_none", rename = "airGapContainerRegistryOrganization")]
1343    pub air_gap_container_registry_organization: Option<String>,
1344    /// Indicates if is allowed to automatically create a user namespace.
1345    /// If it set to false, then user namespace must be pre-created by a cluster administrator.
1346    #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowAutoProvisionUserNamespace")]
1347    pub allow_auto_provision_user_namespace: Option<bool>,
1348    /// Deprecated. The value of this flag is ignored.
1349    /// Defines that a user is allowed to specify a Kubernetes namespace, or an OpenShift project, which differs from the default.
1350    /// It's NOT RECOMMENDED to set to `true` without OpenShift OAuth configured. The OpenShift infrastructure also uses this property.
1351    #[serde(default, skip_serializing_if = "Option::is_none", rename = "allowUserDefinedWorkspaceNamespaces")]
1352    pub allow_user_defined_workspace_namespaces: Option<bool>,
1353    /// A comma-separated list of ClusterRoles that will be assigned to Che ServiceAccount.
1354    /// Each role must have `app.kubernetes.io/part-of=che.eclipse.org` label.
1355    /// Be aware that the Che Operator has to already have all permissions in these ClusterRoles to grant them.
1356    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheClusterRoles")]
1357    pub che_cluster_roles: Option<String>,
1358    /// Enables the debug mode for Che server. Defaults to `false`.
1359    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheDebug")]
1360    pub che_debug: Option<String>,
1361    /// Deprecated. The value of this flag is ignored.
1362    /// Specifies a variation of the installation. The options are  `che` for upstream Che installations or
1363    /// `devspaces` for Red Hat OpenShift Dev Spaces (formerly Red Hat CodeReady Workspaces) installation
1364    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheFlavor")]
1365    pub che_flavor: Option<String>,
1366    /// Public host name of the installed Che server. When value is omitted, the value it will be automatically set by the Operator.
1367    /// See the `cheHostTLSSecret` field.
1368    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheHost")]
1369    pub che_host: Option<String>,
1370    /// Name of a secret containing certificates to secure ingress or route for the custom host name of the installed Che server.
1371    /// The secret must have `app.kubernetes.io/part-of=che.eclipse.org` label.
1372    /// See the `cheHost` field.
1373    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheHostTLSSecret")]
1374    pub che_host_tls_secret: Option<String>,
1375    /// Overrides the container image used in Che deployment. This does NOT include the container image tag.
1376    /// Omit it or leave it empty to use the default container image provided by the Operator.
1377    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheImage")]
1378    pub che_image: Option<String>,
1379    /// Overrides the image pull policy used in Che deployment.
1380    /// Default value is `Always` for `nightly`, `next` or `latest` images, and `IfNotPresent` in other cases.
1381    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheImagePullPolicy")]
1382    pub che_image_pull_policy: Option<String>,
1383    /// Overrides the tag of the container image used in Che deployment.
1384    /// Omit it or leave it empty to use the default image tag provided by the Operator.
1385    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheImageTag")]
1386    pub che_image_tag: Option<String>,
1387    /// Log level for the Che server: `INFO` or `DEBUG`. Defaults to `INFO`.
1388    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheLogLevel")]
1389    pub che_log_level: Option<String>,
1390    /// List of environment variables to set in the Che server container.
1391    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheServerEnv")]
1392    pub che_server_env: Option<Vec<CheClusterServerCheServerEnv>>,
1393    /// The Che server ingress custom settings.
1394    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheServerIngress")]
1395    pub che_server_ingress: Option<CheClusterServerCheServerIngress>,
1396    /// The Che server route custom settings.
1397    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheServerRoute")]
1398    pub che_server_route: Option<CheClusterServerCheServerRoute>,
1399    /// Custom cluster role bound to the user for the Che workspaces.
1400    /// The role must have `app.kubernetes.io/part-of=che.eclipse.org` label.
1401    /// The default roles are used when omitted or left blank.
1402    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheWorkspaceClusterRole")]
1403    pub che_workspace_cluster_role: Option<String>,
1404    /// Map of additional environment variables that will be applied in the generated `che` ConfigMap to be used by the Che server,
1405    /// in addition to the values already generated from other fields of the `CheCluster` custom resource (CR).
1406    /// When `customCheProperties` contains a property that would be normally generated in `che` ConfigMap from other CR fields,
1407    /// the value defined in the `customCheProperties` is used instead.
1408    #[serde(default, skip_serializing_if = "Option::is_none", rename = "customCheProperties")]
1409    pub custom_che_properties: Option<BTreeMap<String, String>>,
1410    /// Overrides the CPU limit used in the dashboard deployment.
1411    /// In cores. (500m = .5 cores). Default to 500m.
1412    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardCpuLimit")]
1413    pub dashboard_cpu_limit: Option<String>,
1414    /// Overrides the CPU request used in the dashboard deployment.
1415    /// In cores. (500m = .5 cores). Default to 100m.
1416    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardCpuRequest")]
1417    pub dashboard_cpu_request: Option<String>,
1418    /// List of environment variables to set in the dashboard container.
1419    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardEnv")]
1420    pub dashboard_env: Option<Vec<CheClusterServerDashboardEnv>>,
1421    /// Overrides the container image used in the dashboard deployment.
1422    /// This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator.
1423    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardImage")]
1424    pub dashboard_image: Option<String>,
1425    /// Overrides the image pull policy used in the dashboard deployment.
1426    /// Default value is `Always` for `nightly`, `next` or `latest` images, and `IfNotPresent` in other cases.
1427    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardImagePullPolicy")]
1428    pub dashboard_image_pull_policy: Option<String>,
1429    /// Deprecated. The value of this flag is ignored.
1430    /// Dashboard ingress custom settings.
1431    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardIngress")]
1432    pub dashboard_ingress: Option<CheClusterServerDashboardIngress>,
1433    /// Overrides the memory limit used in the dashboard deployment. Defaults to 256Mi.
1434    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardMemoryLimit")]
1435    pub dashboard_memory_limit: Option<String>,
1436    /// Overrides the memory request used in the dashboard deployment. Defaults to 16Mi.
1437    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardMemoryRequest")]
1438    pub dashboard_memory_request: Option<String>,
1439    /// Deprecated. The value of this flag is ignored.
1440    /// Dashboard route custom settings.
1441    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dashboardRoute")]
1442    pub dashboard_route: Option<CheClusterServerDashboardRoute>,
1443    /// Overrides the CPU limit used in the devfile registry deployment.
1444    /// In cores. (500m = .5 cores). Default to 500m.
1445    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryCpuLimit")]
1446    pub devfile_registry_cpu_limit: Option<String>,
1447    /// Overrides the CPU request used in the devfile registry deployment.
1448    /// In cores. (500m = .5 cores). Default to 100m.
1449    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryCpuRequest")]
1450    pub devfile_registry_cpu_request: Option<String>,
1451    /// List of environment variables to set in the plugin registry container.
1452    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryEnv")]
1453    pub devfile_registry_env: Option<Vec<CheClusterServerDevfileRegistryEnv>>,
1454    /// Overrides the container image used in the devfile registry deployment.
1455    /// This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator.
1456    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryImage")]
1457    pub devfile_registry_image: Option<String>,
1458    /// Deprecated. The value of this flag is ignored.
1459    /// The devfile registry ingress custom settings.
1460    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryIngress")]
1461    pub devfile_registry_ingress: Option<CheClusterServerDevfileRegistryIngress>,
1462    /// Overrides the memory limit used in the devfile registry deployment. Defaults to 256Mi.
1463    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryMemoryLimit")]
1464    pub devfile_registry_memory_limit: Option<String>,
1465    /// Overrides the memory request used in the devfile registry deployment. Defaults to 16Mi.
1466    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryMemoryRequest")]
1467    pub devfile_registry_memory_request: Option<String>,
1468    /// Overrides the image pull policy used in the devfile registry deployment.
1469    /// Default value is `Always` for `nightly`, `next` or `latest` images, and `IfNotPresent` in other cases.
1470    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryPullPolicy")]
1471    pub devfile_registry_pull_policy: Option<String>,
1472    /// Deprecated. The value of this flag is ignored.
1473    /// The devfile registry route custom settings.
1474    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryRoute")]
1475    pub devfile_registry_route: Option<CheClusterServerDevfileRegistryRoute>,
1476    /// Deprecated in favor of `externalDevfileRegistries` fields.
1477    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryUrl")]
1478    pub devfile_registry_url: Option<String>,
1479    /// Deprecated. The value of this flag is ignored.
1480    /// Disable internal cluster SVC names usage to communicate between components to speed up the traffic and avoid proxy issues.
1481    #[serde(default, skip_serializing_if = "Option::is_none", rename = "disableInternalClusterSVCNames")]
1482    pub disable_internal_cluster_svc_names: Option<bool>,
1483    /// External devfile registries, that serves sample, ready-to-use devfiles.
1484    /// Configure this in addition to a dedicated devfile registry (when `externalDevfileRegistry` is `false`)
1485    /// or instead of it (when `externalDevfileRegistry` is `true`)
1486    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalDevfileRegistries")]
1487    pub external_devfile_registries: Option<Vec<CheClusterServerExternalDevfileRegistries>>,
1488    /// Instructs the Operator on whether to deploy a dedicated devfile registry server.
1489    /// By default, a dedicated devfile registry server is started. When `externalDevfileRegistry` is `true`,
1490    /// no such dedicated server will be started by the Operator and configure at least one
1491    /// devfile registry with `externalDevfileRegistries` field.
1492    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalDevfileRegistry")]
1493    pub external_devfile_registry: Option<bool>,
1494    /// Instructs the Operator on whether to deploy a dedicated plugin registry server.
1495    /// By default, a dedicated plugin registry server is started. When `externalPluginRegistry` is `true`, no such dedicated server
1496    /// will be started by the Operator and you will have to manually set the `pluginRegistryUrl` field.
1497    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalPluginRegistry")]
1498    pub external_plugin_registry: Option<bool>,
1499    /// When enabled, the certificate from `che-git-self-signed-cert` ConfigMap will be propagated to the Che components and provide particular configuration for Git.
1500    /// Note, the `che-git-self-signed-cert` ConfigMap must have `app.kubernetes.io/part-of=che.eclipse.org` label.
1501    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitSelfSignedCert")]
1502    pub git_self_signed_cert: Option<bool>,
1503    /// List of hosts that will be reached directly, bypassing the proxy.
1504    /// Specify wild card domain use the following form `.<DOMAIN>` and `|` as delimiter, for example: `localhost|.my.host.com|123.42.12.32`
1505    /// Only use when configuring a proxy is required. Operator respects OpenShift cluster wide proxy configuration and no additional configuration is required,
1506    /// but defining `nonProxyHosts` in a custom resource leads to merging non proxy hosts lists from the cluster proxy configuration and ones defined in the custom resources.
1507    /// See the doc <https://docs.openshift.com/container-platform/4.4/networking/enable-cluster-wide-proxy.html.> See also the `proxyURL` fields.
1508    #[serde(default, skip_serializing_if = "Option::is_none", rename = "nonProxyHosts")]
1509    pub non_proxy_hosts: Option<String>,
1510    /// Open VSX registry URL. If omitted an embedded instance will be used.
1511    #[serde(default, skip_serializing_if = "Option::is_none", rename = "openVSXRegistryURL")]
1512    pub open_vsx_registry_url: Option<String>,
1513    /// Overrides the CPU limit used in the plugin registry deployment.
1514    /// In cores. (500m = .5 cores). Default to 500m.
1515    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryCpuLimit")]
1516    pub plugin_registry_cpu_limit: Option<String>,
1517    /// Overrides the CPU request used in the plugin registry deployment.
1518    /// In cores. (500m = .5 cores). Default to 100m.
1519    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryCpuRequest")]
1520    pub plugin_registry_cpu_request: Option<String>,
1521    /// List of environment variables to set in the devfile registry container.
1522    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryEnv")]
1523    pub plugin_registry_env: Option<Vec<CheClusterServerPluginRegistryEnv>>,
1524    /// Overrides the container image used in the plugin registry deployment.
1525    /// This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator.
1526    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryImage")]
1527    pub plugin_registry_image: Option<String>,
1528    /// Deprecated. The value of this flag is ignored.
1529    /// Plugin registry ingress custom settings.
1530    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryIngress")]
1531    pub plugin_registry_ingress: Option<CheClusterServerPluginRegistryIngress>,
1532    /// Overrides the memory limit used in the plugin registry deployment. Defaults to 1536Mi.
1533    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryMemoryLimit")]
1534    pub plugin_registry_memory_limit: Option<String>,
1535    /// Overrides the memory request used in the plugin registry deployment. Defaults to 16Mi.
1536    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryMemoryRequest")]
1537    pub plugin_registry_memory_request: Option<String>,
1538    /// Overrides the image pull policy used in the plugin registry deployment.
1539    /// Default value is `Always` for `nightly`, `next` or `latest` images, and `IfNotPresent` in other cases.
1540    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryPullPolicy")]
1541    pub plugin_registry_pull_policy: Option<String>,
1542    /// Deprecated. The value of this flag is ignored.
1543    /// Plugin registry route custom settings.
1544    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryRoute")]
1545    pub plugin_registry_route: Option<CheClusterServerPluginRegistryRoute>,
1546    /// Public URL of the plugin registry that serves sample ready-to-use devfiles.
1547    /// Set this ONLY when a use of an external devfile registry is needed.
1548    /// See the `externalPluginRegistry` field. By default, this will be automatically calculated by the Operator.
1549    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryUrl")]
1550    pub plugin_registry_url: Option<String>,
1551    /// Password of the proxy server.
1552    /// Only use when proxy configuration is required. See the `proxyURL`, `proxyUser` and `proxySecret` fields.
1553    #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyPassword")]
1554    pub proxy_password: Option<String>,
1555    /// Port of the proxy server. Only use when configuring a proxy is required. See also the `proxyURL` and `nonProxyHosts` fields.
1556    #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyPort")]
1557    pub proxy_port: Option<String>,
1558    /// The secret that contains `user` and `password` for a proxy server. When the secret is defined, the `proxyUser` and `proxyPassword` are ignored.
1559    /// The secret must have `app.kubernetes.io/part-of=che.eclipse.org` label.
1560    #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxySecret")]
1561    pub proxy_secret: Option<String>,
1562    /// URL (protocol+host name) of the proxy server. This drives the appropriate changes in the `JAVA_OPTS` and `https(s)_proxy` variables
1563    /// in the Che server and workspaces containers.
1564    /// Only use when configuring a proxy is required. Operator respects OpenShift cluster wide proxy configuration
1565    /// and no additional configuration is required, but defining `proxyUrl` in a custom resource leads to overrides the cluster proxy configuration
1566    /// with fields `proxyUrl`, `proxyPort`, `proxyUser` and `proxyPassword` from the custom resource.
1567    /// See the doc <https://docs.openshift.com/container-platform/4.4/networking/enable-cluster-wide-proxy.html.> See also the `proxyPort` and `nonProxyHosts` fields.
1568    #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyURL")]
1569    pub proxy_url: Option<String>,
1570    /// User name of the proxy server. Only use when configuring a proxy is required. See also the `proxyURL`, `proxyPassword` and `proxySecret` fields.
1571    #[serde(default, skip_serializing_if = "Option::is_none", rename = "proxyUser")]
1572    pub proxy_user: Option<String>,
1573    /// Deprecated. The value of this flag is ignored.
1574    /// The Che Operator will automatically detect whether the router certificate is self-signed and propagate it to other components, such as the Che server.
1575    #[serde(default, skip_serializing_if = "Option::is_none", rename = "selfSignedCert")]
1576    pub self_signed_cert: Option<bool>,
1577    /// Overrides the CPU limit used in the Che server deployment
1578    /// In cores. (500m = .5 cores). Default to 1.
1579    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverCpuLimit")]
1580    pub server_cpu_limit: Option<String>,
1581    /// Overrides the CPU request used in the Che server deployment
1582    /// In cores. (500m = .5 cores). Default to 100m.
1583    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverCpuRequest")]
1584    pub server_cpu_request: Option<String>,
1585    /// Deprecated. The value of this flag is ignored.
1586    /// Sets the server and workspaces exposure type.
1587    /// Possible values are `multi-host`, `single-host`, `default-host`. Defaults to `multi-host`, which creates a separate ingress, or OpenShift routes, for every required endpoint.
1588    /// `single-host` makes Che exposed on a single host name with workspaces exposed on subpaths.
1589    /// Read the docs to learn about the limitations of this approach.
1590    /// Also consult the `singleHostExposureType` property to further configure how the Operator and the Che server make that happen on Kubernetes.
1591    /// `default-host` exposes the Che server on the host of the cluster. Read the docs to learn about the limitations of this approach.
1592    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverExposureStrategy")]
1593    pub server_exposure_strategy: Option<String>,
1594    /// Overrides the memory limit used in the Che server deployment. Defaults to 1Gi.
1595    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverMemoryLimit")]
1596    pub server_memory_limit: Option<String>,
1597    /// Overrides the memory request used in the Che server deployment. Defaults to 512Mi.
1598    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverMemoryRequest")]
1599    pub server_memory_request: Option<String>,
1600    /// Name of the ConfigMap with public certificates to add to Java trust store of the Che server.
1601    /// This is often required when adding the OpenShift OAuth provider, which has HTTPS endpoint signed with self-signed cert.
1602    /// The Che server must be aware of its CA cert to be able to request it. This is disabled by default.
1603    /// The Config Map must have `app.kubernetes.io/part-of=che.eclipse.org` label.
1604    #[serde(default, skip_serializing_if = "Option::is_none", rename = "serverTrustStoreConfigMapName")]
1605    pub server_trust_store_config_map_name: Option<String>,
1606    /// The labels that need to be present in the ConfigMaps representing the gateway configuration.
1607    #[serde(default, skip_serializing_if = "Option::is_none", rename = "singleHostGatewayConfigMapLabels")]
1608    pub single_host_gateway_config_map_labels: Option<BTreeMap<String, String>>,
1609    /// The image used for the gateway sidecar that provides configuration to the gateway. Omit it or leave it empty to use the default container image provided by the Operator.
1610    #[serde(default, skip_serializing_if = "Option::is_none", rename = "singleHostGatewayConfigSidecarImage")]
1611    pub single_host_gateway_config_sidecar_image: Option<String>,
1612    /// The image used for the gateway in the single host mode. Omit it or leave it empty to use the default container image provided by the Operator.
1613    #[serde(default, skip_serializing_if = "Option::is_none", rename = "singleHostGatewayImage")]
1614    pub single_host_gateway_image: Option<String>,
1615    /// Deprecated. Instructs the Operator to deploy Che in TLS mode. This is enabled by default. Disabling TLS sometimes cause malfunction of some Che components.
1616    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsSupport")]
1617    pub tls_support: Option<bool>,
1618    /// Deprecated in favor of `disableInternalClusterSVCNames`.
1619    #[serde(default, skip_serializing_if = "Option::is_none", rename = "useInternalClusterSVCNames")]
1620    pub use_internal_cluster_svc_names: Option<bool>,
1621    /// Default components applied to DevWorkspaces.
1622    /// These default components are meant to be used when a Devfile does not contain any components.
1623    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspaceDefaultComponents")]
1624    pub workspace_default_components: Option<Vec<CheClusterServerWorkspaceDefaultComponents>>,
1625    /// The default editor to workspace create with. It could be a plugin ID or a URI.
1626    /// The plugin ID must have `publisher/plugin/version`.
1627    /// The URI must start from `http`.
1628    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspaceDefaultEditor")]
1629    pub workspace_default_editor: Option<String>,
1630    /// Defines Kubernetes default namespace in which user's workspaces are created for a case when a user does not override it.
1631    /// It's possible to use `<username>`, `<userid>` and `<workspaceid>` placeholders, such as che-workspace-<username>.
1632    /// In that case, a new namespace will be created for each user or workspace.
1633    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspaceNamespaceDefault")]
1634    pub workspace_namespace_default: Option<String>,
1635    /// The node selector that limits the nodes that can run the workspace pods.
1636    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspacePodNodeSelector")]
1637    pub workspace_pod_node_selector: Option<BTreeMap<String, String>>,
1638    /// The pod tolerations put on the workspace pods to limit where the workspace pods can run.
1639    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspacePodTolerations")]
1640    pub workspace_pod_tolerations: Option<Vec<CheClusterServerWorkspacePodTolerations>>,
1641    /// Default plug-ins applied to Devworkspaces.
1642    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspacesDefaultPlugins")]
1643    pub workspaces_default_plugins: Option<Vec<CheClusterServerWorkspacesDefaultPlugins>>,
1644}
1645
1646/// EnvVar represents an environment variable present in a Container.
1647#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1648pub struct CheClusterServerCheServerEnv {
1649    /// Name of the environment variable.
1650    /// May consist of any printable ASCII characters except '='.
1651    pub name: String,
1652    /// Variable references $(VAR_NAME) are expanded
1653    /// using the previously defined environment variables in the container and
1654    /// any service environment variables. If a variable cannot be resolved,
1655    /// the reference in the input string will be unchanged. Double $$ are reduced
1656    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
1657    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
1658    /// Escaped references will never be expanded, regardless of whether the variable
1659    /// exists or not.
1660    /// Defaults to "".
1661    #[serde(default, skip_serializing_if = "Option::is_none")]
1662    pub value: Option<String>,
1663    /// Source for the environment variable's value. Cannot be used if value is not empty.
1664    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
1665    pub value_from: Option<CheClusterServerCheServerEnvValueFrom>,
1666}
1667
1668/// Source for the environment variable's value. Cannot be used if value is not empty.
1669#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1670pub struct CheClusterServerCheServerEnvValueFrom {
1671    /// Selects a key of a ConfigMap.
1672    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
1673    pub config_map_key_ref: Option<CheClusterServerCheServerEnvValueFromConfigMapKeyRef>,
1674    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1675    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1676    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
1677    pub field_ref: Option<CheClusterServerCheServerEnvValueFromFieldRef>,
1678    /// FileKeyRef selects a key of the env file.
1679    /// Requires the EnvFiles feature gate to be enabled.
1680    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
1681    pub file_key_ref: Option<CheClusterServerCheServerEnvValueFromFileKeyRef>,
1682    /// Selects a resource of the container: only resources limits and requests
1683    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1684    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
1685    pub resource_field_ref: Option<CheClusterServerCheServerEnvValueFromResourceFieldRef>,
1686    /// Selects a key of a secret in the pod's namespace
1687    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
1688    pub secret_key_ref: Option<CheClusterServerCheServerEnvValueFromSecretKeyRef>,
1689}
1690
1691/// Selects a key of a ConfigMap.
1692#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1693pub struct CheClusterServerCheServerEnvValueFromConfigMapKeyRef {
1694    /// The key to select.
1695    pub key: String,
1696    /// Name of the referent.
1697    /// This field is effectively required, but due to backwards compatibility is
1698    /// allowed to be empty. Instances of this type with an empty value here are
1699    /// almost certainly wrong.
1700    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1701    #[serde(default, skip_serializing_if = "Option::is_none")]
1702    pub name: Option<String>,
1703    /// Specify whether the ConfigMap or its key must be defined
1704    #[serde(default, skip_serializing_if = "Option::is_none")]
1705    pub optional: Option<bool>,
1706}
1707
1708/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1709/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1710#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1711pub struct CheClusterServerCheServerEnvValueFromFieldRef {
1712    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
1713    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
1714    pub api_version: Option<String>,
1715    /// Path of the field to select in the specified API version.
1716    #[serde(rename = "fieldPath")]
1717    pub field_path: String,
1718}
1719
1720/// FileKeyRef selects a key of the env file.
1721/// Requires the EnvFiles feature gate to be enabled.
1722#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1723pub struct CheClusterServerCheServerEnvValueFromFileKeyRef {
1724    /// The key within the env file. An invalid key will prevent the pod from starting.
1725    /// The keys defined within a source may consist of any printable ASCII characters except '='.
1726    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
1727    pub key: String,
1728    /// Specify whether the file or its key must be defined. If the file or key
1729    /// does not exist, then the env var is not published.
1730    /// If optional is set to true and the specified key does not exist,
1731    /// the environment variable will not be set in the Pod's containers.
1732    /// 
1733    /// If optional is set to false and the specified key does not exist,
1734    /// an error will be returned during Pod creation.
1735    #[serde(default, skip_serializing_if = "Option::is_none")]
1736    pub optional: Option<bool>,
1737    /// The path within the volume from which to select the file.
1738    /// Must be relative and may not contain the '..' path or start with '..'.
1739    pub path: String,
1740    /// The name of the volume mount containing the env file.
1741    #[serde(rename = "volumeName")]
1742    pub volume_name: String,
1743}
1744
1745/// Selects a resource of the container: only resources limits and requests
1746/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1747#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1748pub struct CheClusterServerCheServerEnvValueFromResourceFieldRef {
1749    /// Container name: required for volumes, optional for env vars
1750    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
1751    pub container_name: Option<String>,
1752    /// Specifies the output format of the exposed resources, defaults to "1"
1753    #[serde(default, skip_serializing_if = "Option::is_none")]
1754    pub divisor: Option<IntOrString>,
1755    /// Required: resource to select
1756    pub resource: String,
1757}
1758
1759/// Selects a key of a secret in the pod's namespace
1760#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1761pub struct CheClusterServerCheServerEnvValueFromSecretKeyRef {
1762    /// The key of the secret to select from.  Must be a valid secret key.
1763    pub key: String,
1764    /// Name of the referent.
1765    /// This field is effectively required, but due to backwards compatibility is
1766    /// allowed to be empty. Instances of this type with an empty value here are
1767    /// almost certainly wrong.
1768    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1769    #[serde(default, skip_serializing_if = "Option::is_none")]
1770    pub name: Option<String>,
1771    /// Specify whether the Secret or its key must be defined
1772    #[serde(default, skip_serializing_if = "Option::is_none")]
1773    pub optional: Option<bool>,
1774}
1775
1776/// The Che server ingress custom settings.
1777#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1778pub struct CheClusterServerCheServerIngress {
1779    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
1780    #[serde(default, skip_serializing_if = "Option::is_none")]
1781    pub annotations: Option<BTreeMap<String, String>>,
1782    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
1783    #[serde(default, skip_serializing_if = "Option::is_none")]
1784    pub labels: Option<String>,
1785}
1786
1787/// The Che server route custom settings.
1788#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1789pub struct CheClusterServerCheServerRoute {
1790    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
1791    #[serde(default, skip_serializing_if = "Option::is_none")]
1792    pub annotations: Option<BTreeMap<String, String>>,
1793    /// Operator uses the domain to generate a hostname for a route.
1794    /// In a conjunction with labels it creates a route, which is served by a non-default Ingress controller.
1795    /// The generated host name will follow this pattern: `<route-name>-<route-namespace>.<domain>`.
1796    #[serde(default, skip_serializing_if = "Option::is_none")]
1797    pub domain: Option<String>,
1798    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
1799    #[serde(default, skip_serializing_if = "Option::is_none")]
1800    pub labels: Option<String>,
1801}
1802
1803/// EnvVar represents an environment variable present in a Container.
1804#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1805pub struct CheClusterServerDashboardEnv {
1806    /// Name of the environment variable.
1807    /// May consist of any printable ASCII characters except '='.
1808    pub name: String,
1809    /// Variable references $(VAR_NAME) are expanded
1810    /// using the previously defined environment variables in the container and
1811    /// any service environment variables. If a variable cannot be resolved,
1812    /// the reference in the input string will be unchanged. Double $$ are reduced
1813    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
1814    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
1815    /// Escaped references will never be expanded, regardless of whether the variable
1816    /// exists or not.
1817    /// Defaults to "".
1818    #[serde(default, skip_serializing_if = "Option::is_none")]
1819    pub value: Option<String>,
1820    /// Source for the environment variable's value. Cannot be used if value is not empty.
1821    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
1822    pub value_from: Option<CheClusterServerDashboardEnvValueFrom>,
1823}
1824
1825/// Source for the environment variable's value. Cannot be used if value is not empty.
1826#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1827pub struct CheClusterServerDashboardEnvValueFrom {
1828    /// Selects a key of a ConfigMap.
1829    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
1830    pub config_map_key_ref: Option<CheClusterServerDashboardEnvValueFromConfigMapKeyRef>,
1831    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1832    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1833    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
1834    pub field_ref: Option<CheClusterServerDashboardEnvValueFromFieldRef>,
1835    /// FileKeyRef selects a key of the env file.
1836    /// Requires the EnvFiles feature gate to be enabled.
1837    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
1838    pub file_key_ref: Option<CheClusterServerDashboardEnvValueFromFileKeyRef>,
1839    /// Selects a resource of the container: only resources limits and requests
1840    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1841    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
1842    pub resource_field_ref: Option<CheClusterServerDashboardEnvValueFromResourceFieldRef>,
1843    /// Selects a key of a secret in the pod's namespace
1844    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
1845    pub secret_key_ref: Option<CheClusterServerDashboardEnvValueFromSecretKeyRef>,
1846}
1847
1848/// Selects a key of a ConfigMap.
1849#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1850pub struct CheClusterServerDashboardEnvValueFromConfigMapKeyRef {
1851    /// The key to select.
1852    pub key: String,
1853    /// Name of the referent.
1854    /// This field is effectively required, but due to backwards compatibility is
1855    /// allowed to be empty. Instances of this type with an empty value here are
1856    /// almost certainly wrong.
1857    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1858    #[serde(default, skip_serializing_if = "Option::is_none")]
1859    pub name: Option<String>,
1860    /// Specify whether the ConfigMap or its key must be defined
1861    #[serde(default, skip_serializing_if = "Option::is_none")]
1862    pub optional: Option<bool>,
1863}
1864
1865/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1866/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1867#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1868pub struct CheClusterServerDashboardEnvValueFromFieldRef {
1869    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
1870    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
1871    pub api_version: Option<String>,
1872    /// Path of the field to select in the specified API version.
1873    #[serde(rename = "fieldPath")]
1874    pub field_path: String,
1875}
1876
1877/// FileKeyRef selects a key of the env file.
1878/// Requires the EnvFiles feature gate to be enabled.
1879#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1880pub struct CheClusterServerDashboardEnvValueFromFileKeyRef {
1881    /// The key within the env file. An invalid key will prevent the pod from starting.
1882    /// The keys defined within a source may consist of any printable ASCII characters except '='.
1883    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
1884    pub key: String,
1885    /// Specify whether the file or its key must be defined. If the file or key
1886    /// does not exist, then the env var is not published.
1887    /// If optional is set to true and the specified key does not exist,
1888    /// the environment variable will not be set in the Pod's containers.
1889    /// 
1890    /// If optional is set to false and the specified key does not exist,
1891    /// an error will be returned during Pod creation.
1892    #[serde(default, skip_serializing_if = "Option::is_none")]
1893    pub optional: Option<bool>,
1894    /// The path within the volume from which to select the file.
1895    /// Must be relative and may not contain the '..' path or start with '..'.
1896    pub path: String,
1897    /// The name of the volume mount containing the env file.
1898    #[serde(rename = "volumeName")]
1899    pub volume_name: String,
1900}
1901
1902/// Selects a resource of the container: only resources limits and requests
1903/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1904#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1905pub struct CheClusterServerDashboardEnvValueFromResourceFieldRef {
1906    /// Container name: required for volumes, optional for env vars
1907    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
1908    pub container_name: Option<String>,
1909    /// Specifies the output format of the exposed resources, defaults to "1"
1910    #[serde(default, skip_serializing_if = "Option::is_none")]
1911    pub divisor: Option<IntOrString>,
1912    /// Required: resource to select
1913    pub resource: String,
1914}
1915
1916/// Selects a key of a secret in the pod's namespace
1917#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1918pub struct CheClusterServerDashboardEnvValueFromSecretKeyRef {
1919    /// The key of the secret to select from.  Must be a valid secret key.
1920    pub key: String,
1921    /// Name of the referent.
1922    /// This field is effectively required, but due to backwards compatibility is
1923    /// allowed to be empty. Instances of this type with an empty value here are
1924    /// almost certainly wrong.
1925    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
1926    #[serde(default, skip_serializing_if = "Option::is_none")]
1927    pub name: Option<String>,
1928    /// Specify whether the Secret or its key must be defined
1929    #[serde(default, skip_serializing_if = "Option::is_none")]
1930    pub optional: Option<bool>,
1931}
1932
1933/// Deprecated. The value of this flag is ignored.
1934/// Dashboard ingress custom settings.
1935#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1936pub struct CheClusterServerDashboardIngress {
1937    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
1938    #[serde(default, skip_serializing_if = "Option::is_none")]
1939    pub annotations: Option<BTreeMap<String, String>>,
1940    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
1941    #[serde(default, skip_serializing_if = "Option::is_none")]
1942    pub labels: Option<String>,
1943}
1944
1945/// Deprecated. The value of this flag is ignored.
1946/// Dashboard route custom settings.
1947#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1948pub struct CheClusterServerDashboardRoute {
1949    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
1950    #[serde(default, skip_serializing_if = "Option::is_none")]
1951    pub annotations: Option<BTreeMap<String, String>>,
1952    /// Operator uses the domain to generate a hostname for a route.
1953    /// In a conjunction with labels it creates a route, which is served by a non-default Ingress controller.
1954    /// The generated host name will follow this pattern: `<route-name>-<route-namespace>.<domain>`.
1955    #[serde(default, skip_serializing_if = "Option::is_none")]
1956    pub domain: Option<String>,
1957    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
1958    #[serde(default, skip_serializing_if = "Option::is_none")]
1959    pub labels: Option<String>,
1960}
1961
1962/// EnvVar represents an environment variable present in a Container.
1963#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1964pub struct CheClusterServerDevfileRegistryEnv {
1965    /// Name of the environment variable.
1966    /// May consist of any printable ASCII characters except '='.
1967    pub name: String,
1968    /// Variable references $(VAR_NAME) are expanded
1969    /// using the previously defined environment variables in the container and
1970    /// any service environment variables. If a variable cannot be resolved,
1971    /// the reference in the input string will be unchanged. Double $$ are reduced
1972    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
1973    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
1974    /// Escaped references will never be expanded, regardless of whether the variable
1975    /// exists or not.
1976    /// Defaults to "".
1977    #[serde(default, skip_serializing_if = "Option::is_none")]
1978    pub value: Option<String>,
1979    /// Source for the environment variable's value. Cannot be used if value is not empty.
1980    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
1981    pub value_from: Option<CheClusterServerDevfileRegistryEnvValueFrom>,
1982}
1983
1984/// Source for the environment variable's value. Cannot be used if value is not empty.
1985#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
1986pub struct CheClusterServerDevfileRegistryEnvValueFrom {
1987    /// Selects a key of a ConfigMap.
1988    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
1989    pub config_map_key_ref: Option<CheClusterServerDevfileRegistryEnvValueFromConfigMapKeyRef>,
1990    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1991    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1992    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
1993    pub field_ref: Option<CheClusterServerDevfileRegistryEnvValueFromFieldRef>,
1994    /// FileKeyRef selects a key of the env file.
1995    /// Requires the EnvFiles feature gate to be enabled.
1996    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
1997    pub file_key_ref: Option<CheClusterServerDevfileRegistryEnvValueFromFileKeyRef>,
1998    /// Selects a resource of the container: only resources limits and requests
1999    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
2000    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
2001    pub resource_field_ref: Option<CheClusterServerDevfileRegistryEnvValueFromResourceFieldRef>,
2002    /// Selects a key of a secret in the pod's namespace
2003    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
2004    pub secret_key_ref: Option<CheClusterServerDevfileRegistryEnvValueFromSecretKeyRef>,
2005}
2006
2007/// Selects a key of a ConfigMap.
2008#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2009pub struct CheClusterServerDevfileRegistryEnvValueFromConfigMapKeyRef {
2010    /// The key to select.
2011    pub key: String,
2012    /// Name of the referent.
2013    /// This field is effectively required, but due to backwards compatibility is
2014    /// allowed to be empty. Instances of this type with an empty value here are
2015    /// almost certainly wrong.
2016    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
2017    #[serde(default, skip_serializing_if = "Option::is_none")]
2018    pub name: Option<String>,
2019    /// Specify whether the ConfigMap or its key must be defined
2020    #[serde(default, skip_serializing_if = "Option::is_none")]
2021    pub optional: Option<bool>,
2022}
2023
2024/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
2025/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
2026#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2027pub struct CheClusterServerDevfileRegistryEnvValueFromFieldRef {
2028    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
2029    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
2030    pub api_version: Option<String>,
2031    /// Path of the field to select in the specified API version.
2032    #[serde(rename = "fieldPath")]
2033    pub field_path: String,
2034}
2035
2036/// FileKeyRef selects a key of the env file.
2037/// Requires the EnvFiles feature gate to be enabled.
2038#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2039pub struct CheClusterServerDevfileRegistryEnvValueFromFileKeyRef {
2040    /// The key within the env file. An invalid key will prevent the pod from starting.
2041    /// The keys defined within a source may consist of any printable ASCII characters except '='.
2042    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
2043    pub key: String,
2044    /// Specify whether the file or its key must be defined. If the file or key
2045    /// does not exist, then the env var is not published.
2046    /// If optional is set to true and the specified key does not exist,
2047    /// the environment variable will not be set in the Pod's containers.
2048    /// 
2049    /// If optional is set to false and the specified key does not exist,
2050    /// an error will be returned during Pod creation.
2051    #[serde(default, skip_serializing_if = "Option::is_none")]
2052    pub optional: Option<bool>,
2053    /// The path within the volume from which to select the file.
2054    /// Must be relative and may not contain the '..' path or start with '..'.
2055    pub path: String,
2056    /// The name of the volume mount containing the env file.
2057    #[serde(rename = "volumeName")]
2058    pub volume_name: String,
2059}
2060
2061/// Selects a resource of the container: only resources limits and requests
2062/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
2063#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2064pub struct CheClusterServerDevfileRegistryEnvValueFromResourceFieldRef {
2065    /// Container name: required for volumes, optional for env vars
2066    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
2067    pub container_name: Option<String>,
2068    /// Specifies the output format of the exposed resources, defaults to "1"
2069    #[serde(default, skip_serializing_if = "Option::is_none")]
2070    pub divisor: Option<IntOrString>,
2071    /// Required: resource to select
2072    pub resource: String,
2073}
2074
2075/// Selects a key of a secret in the pod's namespace
2076#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2077pub struct CheClusterServerDevfileRegistryEnvValueFromSecretKeyRef {
2078    /// The key of the secret to select from.  Must be a valid secret key.
2079    pub key: String,
2080    /// Name of the referent.
2081    /// This field is effectively required, but due to backwards compatibility is
2082    /// allowed to be empty. Instances of this type with an empty value here are
2083    /// almost certainly wrong.
2084    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
2085    #[serde(default, skip_serializing_if = "Option::is_none")]
2086    pub name: Option<String>,
2087    /// Specify whether the Secret or its key must be defined
2088    #[serde(default, skip_serializing_if = "Option::is_none")]
2089    pub optional: Option<bool>,
2090}
2091
2092/// Deprecated. The value of this flag is ignored.
2093/// The devfile registry ingress custom settings.
2094#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2095pub struct CheClusterServerDevfileRegistryIngress {
2096    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
2097    #[serde(default, skip_serializing_if = "Option::is_none")]
2098    pub annotations: Option<BTreeMap<String, String>>,
2099    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
2100    #[serde(default, skip_serializing_if = "Option::is_none")]
2101    pub labels: Option<String>,
2102}
2103
2104/// Deprecated. The value of this flag is ignored.
2105/// The devfile registry route custom settings.
2106#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2107pub struct CheClusterServerDevfileRegistryRoute {
2108    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
2109    #[serde(default, skip_serializing_if = "Option::is_none")]
2110    pub annotations: Option<BTreeMap<String, String>>,
2111    /// Operator uses the domain to generate a hostname for a route.
2112    /// In a conjunction with labels it creates a route, which is served by a non-default Ingress controller.
2113    /// The generated host name will follow this pattern: `<route-name>-<route-namespace>.<domain>`.
2114    #[serde(default, skip_serializing_if = "Option::is_none")]
2115    pub domain: Option<String>,
2116    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
2117    #[serde(default, skip_serializing_if = "Option::is_none")]
2118    pub labels: Option<String>,
2119}
2120
2121/// Settings for a configuration of the external devfile registries.
2122#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2123pub struct CheClusterServerExternalDevfileRegistries {
2124    /// Public URL of the devfile registry.
2125    #[serde(default, skip_serializing_if = "Option::is_none")]
2126    pub url: Option<String>,
2127}
2128
2129/// EnvVar represents an environment variable present in a Container.
2130#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2131pub struct CheClusterServerPluginRegistryEnv {
2132    /// Name of the environment variable.
2133    /// May consist of any printable ASCII characters except '='.
2134    pub name: String,
2135    /// Variable references $(VAR_NAME) are expanded
2136    /// using the previously defined environment variables in the container and
2137    /// any service environment variables. If a variable cannot be resolved,
2138    /// the reference in the input string will be unchanged. Double $$ are reduced
2139    /// to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.
2140    /// "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)".
2141    /// Escaped references will never be expanded, regardless of whether the variable
2142    /// exists or not.
2143    /// Defaults to "".
2144    #[serde(default, skip_serializing_if = "Option::is_none")]
2145    pub value: Option<String>,
2146    /// Source for the environment variable's value. Cannot be used if value is not empty.
2147    #[serde(default, skip_serializing_if = "Option::is_none", rename = "valueFrom")]
2148    pub value_from: Option<CheClusterServerPluginRegistryEnvValueFrom>,
2149}
2150
2151/// Source for the environment variable's value. Cannot be used if value is not empty.
2152#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2153pub struct CheClusterServerPluginRegistryEnvValueFrom {
2154    /// Selects a key of a ConfigMap.
2155    #[serde(default, skip_serializing_if = "Option::is_none", rename = "configMapKeyRef")]
2156    pub config_map_key_ref: Option<CheClusterServerPluginRegistryEnvValueFromConfigMapKeyRef>,
2157    /// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
2158    /// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
2159    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fieldRef")]
2160    pub field_ref: Option<CheClusterServerPluginRegistryEnvValueFromFieldRef>,
2161    /// FileKeyRef selects a key of the env file.
2162    /// Requires the EnvFiles feature gate to be enabled.
2163    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileKeyRef")]
2164    pub file_key_ref: Option<CheClusterServerPluginRegistryEnvValueFromFileKeyRef>,
2165    /// Selects a resource of the container: only resources limits and requests
2166    /// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
2167    #[serde(default, skip_serializing_if = "Option::is_none", rename = "resourceFieldRef")]
2168    pub resource_field_ref: Option<CheClusterServerPluginRegistryEnvValueFromResourceFieldRef>,
2169    /// Selects a key of a secret in the pod's namespace
2170    #[serde(default, skip_serializing_if = "Option::is_none", rename = "secretKeyRef")]
2171    pub secret_key_ref: Option<CheClusterServerPluginRegistryEnvValueFromSecretKeyRef>,
2172}
2173
2174/// Selects a key of a ConfigMap.
2175#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2176pub struct CheClusterServerPluginRegistryEnvValueFromConfigMapKeyRef {
2177    /// The key to select.
2178    pub key: String,
2179    /// Name of the referent.
2180    /// This field is effectively required, but due to backwards compatibility is
2181    /// allowed to be empty. Instances of this type with an empty value here are
2182    /// almost certainly wrong.
2183    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
2184    #[serde(default, skip_serializing_if = "Option::is_none")]
2185    pub name: Option<String>,
2186    /// Specify whether the ConfigMap or its key must be defined
2187    #[serde(default, skip_serializing_if = "Option::is_none")]
2188    pub optional: Option<bool>,
2189}
2190
2191/// Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
2192/// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
2193#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2194pub struct CheClusterServerPluginRegistryEnvValueFromFieldRef {
2195    /// Version of the schema the FieldPath is written in terms of, defaults to "v1".
2196    #[serde(default, skip_serializing_if = "Option::is_none", rename = "apiVersion")]
2197    pub api_version: Option<String>,
2198    /// Path of the field to select in the specified API version.
2199    #[serde(rename = "fieldPath")]
2200    pub field_path: String,
2201}
2202
2203/// FileKeyRef selects a key of the env file.
2204/// Requires the EnvFiles feature gate to be enabled.
2205#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2206pub struct CheClusterServerPluginRegistryEnvValueFromFileKeyRef {
2207    /// The key within the env file. An invalid key will prevent the pod from starting.
2208    /// The keys defined within a source may consist of any printable ASCII characters except '='.
2209    /// During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.
2210    pub key: String,
2211    /// Specify whether the file or its key must be defined. If the file or key
2212    /// does not exist, then the env var is not published.
2213    /// If optional is set to true and the specified key does not exist,
2214    /// the environment variable will not be set in the Pod's containers.
2215    /// 
2216    /// If optional is set to false and the specified key does not exist,
2217    /// an error will be returned during Pod creation.
2218    #[serde(default, skip_serializing_if = "Option::is_none")]
2219    pub optional: Option<bool>,
2220    /// The path within the volume from which to select the file.
2221    /// Must be relative and may not contain the '..' path or start with '..'.
2222    pub path: String,
2223    /// The name of the volume mount containing the env file.
2224    #[serde(rename = "volumeName")]
2225    pub volume_name: String,
2226}
2227
2228/// Selects a resource of the container: only resources limits and requests
2229/// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
2230#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2231pub struct CheClusterServerPluginRegistryEnvValueFromResourceFieldRef {
2232    /// Container name: required for volumes, optional for env vars
2233    #[serde(default, skip_serializing_if = "Option::is_none", rename = "containerName")]
2234    pub container_name: Option<String>,
2235    /// Specifies the output format of the exposed resources, defaults to "1"
2236    #[serde(default, skip_serializing_if = "Option::is_none")]
2237    pub divisor: Option<IntOrString>,
2238    /// Required: resource to select
2239    pub resource: String,
2240}
2241
2242/// Selects a key of a secret in the pod's namespace
2243#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2244pub struct CheClusterServerPluginRegistryEnvValueFromSecretKeyRef {
2245    /// The key of the secret to select from.  Must be a valid secret key.
2246    pub key: String,
2247    /// Name of the referent.
2248    /// This field is effectively required, but due to backwards compatibility is
2249    /// allowed to be empty. Instances of this type with an empty value here are
2250    /// almost certainly wrong.
2251    /// More info: <https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names>
2252    #[serde(default, skip_serializing_if = "Option::is_none")]
2253    pub name: Option<String>,
2254    /// Specify whether the Secret or its key must be defined
2255    #[serde(default, skip_serializing_if = "Option::is_none")]
2256    pub optional: Option<bool>,
2257}
2258
2259/// Deprecated. The value of this flag is ignored.
2260/// Plugin registry ingress custom settings.
2261#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2262pub struct CheClusterServerPluginRegistryIngress {
2263    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
2264    #[serde(default, skip_serializing_if = "Option::is_none")]
2265    pub annotations: Option<BTreeMap<String, String>>,
2266    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
2267    #[serde(default, skip_serializing_if = "Option::is_none")]
2268    pub labels: Option<String>,
2269}
2270
2271/// Deprecated. The value of this flag is ignored.
2272/// Plugin registry route custom settings.
2273#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2274pub struct CheClusterServerPluginRegistryRoute {
2275    /// Unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
2276    #[serde(default, skip_serializing_if = "Option::is_none")]
2277    pub annotations: Option<BTreeMap<String, String>>,
2278    /// Operator uses the domain to generate a hostname for a route.
2279    /// In a conjunction with labels it creates a route, which is served by a non-default Ingress controller.
2280    /// The generated host name will follow this pattern: `<route-name>-<route-namespace>.<domain>`.
2281    #[serde(default, skip_serializing_if = "Option::is_none")]
2282    pub domain: Option<String>,
2283    /// Comma separated list of labels that can be used to organize and categorize objects by scoping and selecting.
2284    #[serde(default, skip_serializing_if = "Option::is_none")]
2285    pub labels: Option<String>,
2286}
2287
2288#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2289pub struct CheClusterServerWorkspaceDefaultComponents {
2290    /// Map of implementation-dependant free-form YAML attributes.
2291    #[serde(default, skip_serializing_if = "Option::is_none")]
2292    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
2293    /// Type of component
2294    #[serde(default, skip_serializing_if = "Option::is_none", rename = "componentType")]
2295    pub component_type: Option<CheClusterServerWorkspaceDefaultComponentsComponentType>,
2296    /// Allows adding and configuring devworkspace-related containers
2297    #[serde(default, skip_serializing_if = "Option::is_none")]
2298    pub container: Option<CheClusterServerWorkspaceDefaultComponentsContainer>,
2299    /// Custom component whose logic is implementation-dependant
2300    /// and should be provided by the user
2301    /// possibly through some dedicated controller
2302    #[serde(default, skip_serializing_if = "Option::is_none")]
2303    pub custom: Option<CheClusterServerWorkspaceDefaultComponentsCustom>,
2304    /// Allows specifying the definition of an image for outer loop builds
2305    #[serde(default, skip_serializing_if = "Option::is_none")]
2306    pub image: Option<CheClusterServerWorkspaceDefaultComponentsImage>,
2307    /// Allows importing into the devworkspace the Kubernetes resources
2308    /// defined in a given manifest. For example this allows reusing the Kubernetes
2309    /// definitions used to deploy some runtime components in production.
2310    #[serde(default, skip_serializing_if = "Option::is_none")]
2311    pub kubernetes: Option<CheClusterServerWorkspaceDefaultComponentsKubernetes>,
2312    /// Mandatory name that allows referencing the component
2313    /// from other elements (such as commands) or from an external
2314    /// devfile that may reference this component through a parent or a plugin.
2315    pub name: String,
2316    /// Allows importing into the devworkspace the OpenShift resources
2317    /// defined in a given manifest. For example this allows reusing the OpenShift
2318    /// definitions used to deploy some runtime components in production.
2319    #[serde(default, skip_serializing_if = "Option::is_none")]
2320    pub openshift: Option<CheClusterServerWorkspaceDefaultComponentsOpenshift>,
2321    /// Allows importing a plugin.
2322    /// 
2323    /// Plugins are mainly imported devfiles that contribute components, commands
2324    /// and events as a consistent single unit. They are defined in either YAML files
2325    /// following the devfile syntax,
2326    /// or as `DevWorkspaceTemplate` Kubernetes Custom Resources
2327    #[serde(default, skip_serializing_if = "Option::is_none")]
2328    pub plugin: Option<CheClusterServerWorkspaceDefaultComponentsPlugin>,
2329    /// Allows specifying the definition of a volume
2330    /// shared by several other components
2331    #[serde(default, skip_serializing_if = "Option::is_none")]
2332    pub volume: Option<CheClusterServerWorkspaceDefaultComponentsVolume>,
2333}
2334
2335#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2336pub enum CheClusterServerWorkspaceDefaultComponentsComponentType {
2337    Container,
2338    Kubernetes,
2339    Openshift,
2340    Volume,
2341    Image,
2342    Plugin,
2343    Custom,
2344}
2345
2346/// Allows adding and configuring devworkspace-related containers
2347#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2348pub struct CheClusterServerWorkspaceDefaultComponentsContainer {
2349    /// Annotations that should be added to specific resources for this container
2350    #[serde(default, skip_serializing_if = "Option::is_none")]
2351    pub annotation: Option<CheClusterServerWorkspaceDefaultComponentsContainerAnnotation>,
2352    /// The arguments to supply to the command running the dockerimage component. The arguments are supplied either to the default command provided in the image or to the overridden command.
2353    /// 
2354    /// Defaults to an empty array, meaning use whatever is defined in the image.
2355    #[serde(default, skip_serializing_if = "Option::is_none")]
2356    pub args: Option<Vec<String>>,
2357    /// The command to run in the dockerimage component instead of the default one provided in the image.
2358    /// 
2359    /// Defaults to an empty array, meaning use whatever is defined in the image.
2360    #[serde(default, skip_serializing_if = "Option::is_none")]
2361    pub command: Option<Vec<String>>,
2362    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cpuLimit")]
2363    pub cpu_limit: Option<String>,
2364    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cpuRequest")]
2365    pub cpu_request: Option<String>,
2366    /// Specify if a container should run in its own separated pod,
2367    /// instead of running as part of the main development environment pod.
2368    /// 
2369    /// Default value is `false`
2370    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dedicatedPod")]
2371    pub dedicated_pod: Option<bool>,
2372    #[serde(default, skip_serializing_if = "Option::is_none")]
2373    pub endpoints: Option<Vec<CheClusterServerWorkspaceDefaultComponentsContainerEndpoints>>,
2374    /// Environment variables used in this container.
2375    /// 
2376    /// The following variables are reserved and cannot be overridden via env:
2377    /// 
2378    ///  - `$PROJECTS_ROOT`
2379    /// 
2380    ///  - `$PROJECT_SOURCE`
2381    #[serde(default, skip_serializing_if = "Option::is_none")]
2382    pub env: Option<Vec<CheClusterServerWorkspaceDefaultComponentsContainerEnv>>,
2383    pub image: String,
2384    #[serde(default, skip_serializing_if = "Option::is_none", rename = "memoryLimit")]
2385    pub memory_limit: Option<String>,
2386    #[serde(default, skip_serializing_if = "Option::is_none", rename = "memoryRequest")]
2387    pub memory_request: Option<String>,
2388    /// Toggles whether or not the project source code should
2389    /// be mounted in the component.
2390    /// 
2391    /// Defaults to true for all component types except plugins and components that set `dedicatedPod` to true.
2392    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountSources")]
2393    pub mount_sources: Option<bool>,
2394    /// Optional specification of the path in the container where
2395    /// project sources should be transferred/mounted when `mountSources` is `true`.
2396    /// When omitted, the default value of /projects is used.
2397    #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceMapping")]
2398    pub source_mapping: Option<String>,
2399    /// List of volumes mounts that should be mounted is this container.
2400    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")]
2401    pub volume_mounts: Option<Vec<CheClusterServerWorkspaceDefaultComponentsContainerVolumeMounts>>,
2402}
2403
2404/// Annotations that should be added to specific resources for this container
2405#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2406pub struct CheClusterServerWorkspaceDefaultComponentsContainerAnnotation {
2407    /// Annotations to be added to deployment
2408    #[serde(default, skip_serializing_if = "Option::is_none")]
2409    pub deployment: Option<BTreeMap<String, String>>,
2410    /// Annotations to be added to service
2411    #[serde(default, skip_serializing_if = "Option::is_none")]
2412    pub service: Option<BTreeMap<String, String>>,
2413}
2414
2415#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2416pub struct CheClusterServerWorkspaceDefaultComponentsContainerEndpoints {
2417    /// Annotations to be added to Kubernetes Ingress or Openshift Route
2418    #[serde(default, skip_serializing_if = "Option::is_none")]
2419    pub annotation: Option<BTreeMap<String, String>>,
2420    /// Map of implementation-dependant string-based free-form attributes.
2421    /// 
2422    /// Examples of Che-specific attributes:
2423    /// 
2424    /// - cookiesAuthEnabled: "true" / "false",
2425    /// 
2426    /// - type: "terminal" / "ide" / "ide-dev",
2427    #[serde(default, skip_serializing_if = "Option::is_none")]
2428    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
2429    /// Describes how the endpoint should be exposed on the network.
2430    /// 
2431    /// - `public` means that the endpoint will be exposed on the public network, typically through
2432    /// a K8S ingress or an OpenShift route.
2433    /// 
2434    /// - `internal` means that the endpoint will be exposed internally outside of the main devworkspace POD,
2435    /// typically by K8S services, to be consumed by other elements running
2436    /// on the same cloud internal network.
2437    /// 
2438    /// - `none` means that the endpoint will not be exposed and will only be accessible
2439    /// inside the main devworkspace POD, on a local address.
2440    /// 
2441    /// Default value is `public`
2442    #[serde(default, skip_serializing_if = "Option::is_none")]
2443    pub exposure: Option<CheClusterServerWorkspaceDefaultComponentsContainerEndpointsExposure>,
2444    pub name: String,
2445    /// Path of the endpoint URL
2446    #[serde(default, skip_serializing_if = "Option::is_none")]
2447    pub path: Option<String>,
2448    /// Describes the application and transport protocols of the traffic that will go through this endpoint.
2449    /// 
2450    /// - `http`: Endpoint will have `http` traffic, typically on a TCP connection.
2451    /// It will be automaticaly promoted to `https` when the `secure` field is set to `true`.
2452    /// 
2453    /// - `https`: Endpoint will have `https` traffic, typically on a TCP connection.
2454    /// 
2455    /// - `ws`: Endpoint will have `ws` traffic, typically on a TCP connection.
2456    /// It will be automaticaly promoted to `wss` when the `secure` field is set to `true`.
2457    /// 
2458    /// - `wss`: Endpoint will have `wss` traffic, typically on a TCP connection.
2459    /// 
2460    /// - `tcp`: Endpoint will have traffic on a TCP connection, without specifying an application protocol.
2461    /// 
2462    /// - `udp`: Endpoint will have traffic on an UDP connection, without specifying an application protocol.
2463    /// 
2464    /// Default value is `http`
2465    #[serde(default, skip_serializing_if = "Option::is_none")]
2466    pub protocol: Option<CheClusterServerWorkspaceDefaultComponentsContainerEndpointsProtocol>,
2467    /// Describes whether the endpoint should be secured and protected by some
2468    /// authentication process. This requires a protocol of `https` or `wss`.
2469    #[serde(default, skip_serializing_if = "Option::is_none")]
2470    pub secure: Option<bool>,
2471    /// Port number to be used within the container component. The same port cannot
2472    /// be used by two different container components.
2473    #[serde(rename = "targetPort")]
2474    pub target_port: i64,
2475}
2476
2477#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2478pub enum CheClusterServerWorkspaceDefaultComponentsContainerEndpointsExposure {
2479    #[serde(rename = "public")]
2480    Public,
2481    #[serde(rename = "internal")]
2482    Internal,
2483    #[serde(rename = "none")]
2484    None,
2485}
2486
2487#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2488pub enum CheClusterServerWorkspaceDefaultComponentsContainerEndpointsProtocol {
2489    #[serde(rename = "http")]
2490    Http,
2491    #[serde(rename = "https")]
2492    Https,
2493    #[serde(rename = "ws")]
2494    Ws,
2495    #[serde(rename = "wss")]
2496    Wss,
2497    #[serde(rename = "tcp")]
2498    Tcp,
2499    #[serde(rename = "udp")]
2500    Udp,
2501}
2502
2503#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2504pub struct CheClusterServerWorkspaceDefaultComponentsContainerEnv {
2505    pub name: String,
2506    pub value: String,
2507}
2508
2509/// Volume that should be mounted to a component container
2510#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2511pub struct CheClusterServerWorkspaceDefaultComponentsContainerVolumeMounts {
2512    /// The volume mount name is the name of an existing `Volume` component.
2513    /// If several containers mount the same volume name
2514    /// then they will reuse the same volume and will be able to access to the same files.
2515    pub name: String,
2516    /// The path in the component container where the volume should be mounted.
2517    /// If not path is mentioned, default path is the is `/<name>`.
2518    #[serde(default, skip_serializing_if = "Option::is_none")]
2519    pub path: Option<String>,
2520}
2521
2522/// Custom component whose logic is implementation-dependant
2523/// and should be provided by the user
2524/// possibly through some dedicated controller
2525#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2526pub struct CheClusterServerWorkspaceDefaultComponentsCustom {
2527    /// Class of component that the associated implementation controller
2528    /// should use to process this command with the appropriate logic
2529    #[serde(rename = "componentClass")]
2530    pub component_class: String,
2531    /// Additional free-form configuration for this custom component
2532    /// that the implementation controller will know how to use
2533    #[serde(rename = "embeddedResource")]
2534    pub embedded_resource: BTreeMap<String, serde_json::Value>,
2535}
2536
2537/// Allows specifying the definition of an image for outer loop builds
2538#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2539pub struct CheClusterServerWorkspaceDefaultComponentsImage {
2540    /// Defines if the image should be built during startup.
2541    /// 
2542    /// Default value is `false`
2543    #[serde(default, skip_serializing_if = "Option::is_none", rename = "autoBuild")]
2544    pub auto_build: Option<bool>,
2545    /// Allows specifying dockerfile type build
2546    #[serde(default, skip_serializing_if = "Option::is_none")]
2547    pub dockerfile: Option<CheClusterServerWorkspaceDefaultComponentsImageDockerfile>,
2548    /// Name of the image for the resulting outerloop build
2549    #[serde(rename = "imageName")]
2550    pub image_name: String,
2551    /// Type of image
2552    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imageType")]
2553    pub image_type: Option<CheClusterServerWorkspaceDefaultComponentsImageImageType>,
2554}
2555
2556/// Allows specifying dockerfile type build
2557#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2558pub struct CheClusterServerWorkspaceDefaultComponentsImageDockerfile {
2559    /// The arguments to supply to the dockerfile build.
2560    #[serde(default, skip_serializing_if = "Option::is_none")]
2561    pub args: Option<Vec<String>>,
2562    /// Path of source directory to establish build context. Defaults to ${PROJECT_SOURCE} in the container
2563    #[serde(default, skip_serializing_if = "Option::is_none", rename = "buildContext")]
2564    pub build_context: Option<String>,
2565    /// Dockerfile's Devfile Registry source
2566    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistry")]
2567    pub devfile_registry: Option<CheClusterServerWorkspaceDefaultComponentsImageDockerfileDevfileRegistry>,
2568    /// Dockerfile's Git source
2569    #[serde(default, skip_serializing_if = "Option::is_none")]
2570    pub git: Option<CheClusterServerWorkspaceDefaultComponentsImageDockerfileGit>,
2571    /// Specify if a privileged builder pod is required.
2572    /// 
2573    /// Default value is `false`
2574    #[serde(default, skip_serializing_if = "Option::is_none", rename = "rootRequired")]
2575    pub root_required: Option<bool>,
2576    /// Type of Dockerfile src
2577    #[serde(default, skip_serializing_if = "Option::is_none", rename = "srcType")]
2578    pub src_type: Option<CheClusterServerWorkspaceDefaultComponentsImageDockerfileSrcType>,
2579    /// URI Reference of a Dockerfile.
2580    /// It can be a full URL or a relative URI from the current devfile as the base URI.
2581    #[serde(default, skip_serializing_if = "Option::is_none")]
2582    pub uri: Option<String>,
2583}
2584
2585/// Dockerfile's Devfile Registry source
2586#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2587pub struct CheClusterServerWorkspaceDefaultComponentsImageDockerfileDevfileRegistry {
2588    /// Id in a devfile registry that contains a Dockerfile. The src in the OCI registry
2589    /// required for the Dockerfile build will be downloaded for building the image.
2590    pub id: String,
2591    /// Devfile Registry URL to pull the Dockerfile from when using the Devfile Registry as Dockerfile src.
2592    /// To ensure the Dockerfile gets resolved consistently in different environments,
2593    /// it is recommended to always specify the `devfileRegistryUrl` when `Id` is used.
2594    #[serde(default, skip_serializing_if = "Option::is_none", rename = "registryUrl")]
2595    pub registry_url: Option<String>,
2596}
2597
2598/// Dockerfile's Git source
2599#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2600pub struct CheClusterServerWorkspaceDefaultComponentsImageDockerfileGit {
2601    /// Defines from what the project should be checked out. Required if there are more than one remote configured
2602    #[serde(default, skip_serializing_if = "Option::is_none", rename = "checkoutFrom")]
2603    pub checkout_from: Option<CheClusterServerWorkspaceDefaultComponentsImageDockerfileGitCheckoutFrom>,
2604    /// Location of the Dockerfile in the Git repository when using git as Dockerfile src.
2605    /// Defaults to Dockerfile.
2606    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileLocation")]
2607    pub file_location: Option<String>,
2608    /// The remotes map which should be initialized in the git project.
2609    /// Projects must have at least one remote configured while StarterProjects & Image Component's Git source can only have at most one remote configured.
2610    pub remotes: BTreeMap<String, String>,
2611}
2612
2613/// Defines from what the project should be checked out. Required if there are more than one remote configured
2614#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2615pub struct CheClusterServerWorkspaceDefaultComponentsImageDockerfileGitCheckoutFrom {
2616    /// The remote name should be used as init. Required if there are more than one remote configured
2617    #[serde(default, skip_serializing_if = "Option::is_none")]
2618    pub remote: Option<String>,
2619    /// The revision to checkout from. Should be branch name, tag or commit id.
2620    /// Default branch is used if missing or specified revision is not found.
2621    #[serde(default, skip_serializing_if = "Option::is_none")]
2622    pub revision: Option<String>,
2623}
2624
2625/// Allows specifying dockerfile type build
2626#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2627pub enum CheClusterServerWorkspaceDefaultComponentsImageDockerfileSrcType {
2628    Uri,
2629    DevfileRegistry,
2630    Git,
2631}
2632
2633/// Allows specifying the definition of an image for outer loop builds
2634#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2635pub enum CheClusterServerWorkspaceDefaultComponentsImageImageType {
2636    Dockerfile,
2637}
2638
2639/// Allows importing into the devworkspace the Kubernetes resources
2640/// defined in a given manifest. For example this allows reusing the Kubernetes
2641/// definitions used to deploy some runtime components in production.
2642#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2643pub struct CheClusterServerWorkspaceDefaultComponentsKubernetes {
2644    /// Defines if the component should be deployed during startup.
2645    /// 
2646    /// Default value is `false`
2647    #[serde(default, skip_serializing_if = "Option::is_none", rename = "deployByDefault")]
2648    pub deploy_by_default: Option<bool>,
2649    #[serde(default, skip_serializing_if = "Option::is_none")]
2650    pub endpoints: Option<Vec<CheClusterServerWorkspaceDefaultComponentsKubernetesEndpoints>>,
2651    /// Inlined manifest
2652    #[serde(default, skip_serializing_if = "Option::is_none")]
2653    pub inlined: Option<String>,
2654    /// Type of Kubernetes-like location
2655    #[serde(default, skip_serializing_if = "Option::is_none", rename = "locationType")]
2656    pub location_type: Option<CheClusterServerWorkspaceDefaultComponentsKubernetesLocationType>,
2657    /// Location in a file fetched from a uri.
2658    #[serde(default, skip_serializing_if = "Option::is_none")]
2659    pub uri: Option<String>,
2660}
2661
2662#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2663pub struct CheClusterServerWorkspaceDefaultComponentsKubernetesEndpoints {
2664    /// Annotations to be added to Kubernetes Ingress or Openshift Route
2665    #[serde(default, skip_serializing_if = "Option::is_none")]
2666    pub annotation: Option<BTreeMap<String, String>>,
2667    /// Map of implementation-dependant string-based free-form attributes.
2668    /// 
2669    /// Examples of Che-specific attributes:
2670    /// 
2671    /// - cookiesAuthEnabled: "true" / "false",
2672    /// 
2673    /// - type: "terminal" / "ide" / "ide-dev",
2674    #[serde(default, skip_serializing_if = "Option::is_none")]
2675    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
2676    /// Describes how the endpoint should be exposed on the network.
2677    /// 
2678    /// - `public` means that the endpoint will be exposed on the public network, typically through
2679    /// a K8S ingress or an OpenShift route.
2680    /// 
2681    /// - `internal` means that the endpoint will be exposed internally outside of the main devworkspace POD,
2682    /// typically by K8S services, to be consumed by other elements running
2683    /// on the same cloud internal network.
2684    /// 
2685    /// - `none` means that the endpoint will not be exposed and will only be accessible
2686    /// inside the main devworkspace POD, on a local address.
2687    /// 
2688    /// Default value is `public`
2689    #[serde(default, skip_serializing_if = "Option::is_none")]
2690    pub exposure: Option<CheClusterServerWorkspaceDefaultComponentsKubernetesEndpointsExposure>,
2691    pub name: String,
2692    /// Path of the endpoint URL
2693    #[serde(default, skip_serializing_if = "Option::is_none")]
2694    pub path: Option<String>,
2695    /// Describes the application and transport protocols of the traffic that will go through this endpoint.
2696    /// 
2697    /// - `http`: Endpoint will have `http` traffic, typically on a TCP connection.
2698    /// It will be automaticaly promoted to `https` when the `secure` field is set to `true`.
2699    /// 
2700    /// - `https`: Endpoint will have `https` traffic, typically on a TCP connection.
2701    /// 
2702    /// - `ws`: Endpoint will have `ws` traffic, typically on a TCP connection.
2703    /// It will be automaticaly promoted to `wss` when the `secure` field is set to `true`.
2704    /// 
2705    /// - `wss`: Endpoint will have `wss` traffic, typically on a TCP connection.
2706    /// 
2707    /// - `tcp`: Endpoint will have traffic on a TCP connection, without specifying an application protocol.
2708    /// 
2709    /// - `udp`: Endpoint will have traffic on an UDP connection, without specifying an application protocol.
2710    /// 
2711    /// Default value is `http`
2712    #[serde(default, skip_serializing_if = "Option::is_none")]
2713    pub protocol: Option<CheClusterServerWorkspaceDefaultComponentsKubernetesEndpointsProtocol>,
2714    /// Describes whether the endpoint should be secured and protected by some
2715    /// authentication process. This requires a protocol of `https` or `wss`.
2716    #[serde(default, skip_serializing_if = "Option::is_none")]
2717    pub secure: Option<bool>,
2718    /// Port number to be used within the container component. The same port cannot
2719    /// be used by two different container components.
2720    #[serde(rename = "targetPort")]
2721    pub target_port: i64,
2722}
2723
2724#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2725pub enum CheClusterServerWorkspaceDefaultComponentsKubernetesEndpointsExposure {
2726    #[serde(rename = "public")]
2727    Public,
2728    #[serde(rename = "internal")]
2729    Internal,
2730    #[serde(rename = "none")]
2731    None,
2732}
2733
2734#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2735pub enum CheClusterServerWorkspaceDefaultComponentsKubernetesEndpointsProtocol {
2736    #[serde(rename = "http")]
2737    Http,
2738    #[serde(rename = "https")]
2739    Https,
2740    #[serde(rename = "ws")]
2741    Ws,
2742    #[serde(rename = "wss")]
2743    Wss,
2744    #[serde(rename = "tcp")]
2745    Tcp,
2746    #[serde(rename = "udp")]
2747    Udp,
2748}
2749
2750/// Allows importing into the devworkspace the Kubernetes resources
2751/// defined in a given manifest. For example this allows reusing the Kubernetes
2752/// definitions used to deploy some runtime components in production.
2753#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2754pub enum CheClusterServerWorkspaceDefaultComponentsKubernetesLocationType {
2755    Uri,
2756    Inlined,
2757}
2758
2759/// Allows importing into the devworkspace the OpenShift resources
2760/// defined in a given manifest. For example this allows reusing the OpenShift
2761/// definitions used to deploy some runtime components in production.
2762#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2763pub struct CheClusterServerWorkspaceDefaultComponentsOpenshift {
2764    /// Defines if the component should be deployed during startup.
2765    /// 
2766    /// Default value is `false`
2767    #[serde(default, skip_serializing_if = "Option::is_none", rename = "deployByDefault")]
2768    pub deploy_by_default: Option<bool>,
2769    #[serde(default, skip_serializing_if = "Option::is_none")]
2770    pub endpoints: Option<Vec<CheClusterServerWorkspaceDefaultComponentsOpenshiftEndpoints>>,
2771    /// Inlined manifest
2772    #[serde(default, skip_serializing_if = "Option::is_none")]
2773    pub inlined: Option<String>,
2774    /// Type of Kubernetes-like location
2775    #[serde(default, skip_serializing_if = "Option::is_none", rename = "locationType")]
2776    pub location_type: Option<CheClusterServerWorkspaceDefaultComponentsOpenshiftLocationType>,
2777    /// Location in a file fetched from a uri.
2778    #[serde(default, skip_serializing_if = "Option::is_none")]
2779    pub uri: Option<String>,
2780}
2781
2782#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2783pub struct CheClusterServerWorkspaceDefaultComponentsOpenshiftEndpoints {
2784    /// Annotations to be added to Kubernetes Ingress or Openshift Route
2785    #[serde(default, skip_serializing_if = "Option::is_none")]
2786    pub annotation: Option<BTreeMap<String, String>>,
2787    /// Map of implementation-dependant string-based free-form attributes.
2788    /// 
2789    /// Examples of Che-specific attributes:
2790    /// 
2791    /// - cookiesAuthEnabled: "true" / "false",
2792    /// 
2793    /// - type: "terminal" / "ide" / "ide-dev",
2794    #[serde(default, skip_serializing_if = "Option::is_none")]
2795    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
2796    /// Describes how the endpoint should be exposed on the network.
2797    /// 
2798    /// - `public` means that the endpoint will be exposed on the public network, typically through
2799    /// a K8S ingress or an OpenShift route.
2800    /// 
2801    /// - `internal` means that the endpoint will be exposed internally outside of the main devworkspace POD,
2802    /// typically by K8S services, to be consumed by other elements running
2803    /// on the same cloud internal network.
2804    /// 
2805    /// - `none` means that the endpoint will not be exposed and will only be accessible
2806    /// inside the main devworkspace POD, on a local address.
2807    /// 
2808    /// Default value is `public`
2809    #[serde(default, skip_serializing_if = "Option::is_none")]
2810    pub exposure: Option<CheClusterServerWorkspaceDefaultComponentsOpenshiftEndpointsExposure>,
2811    pub name: String,
2812    /// Path of the endpoint URL
2813    #[serde(default, skip_serializing_if = "Option::is_none")]
2814    pub path: Option<String>,
2815    /// Describes the application and transport protocols of the traffic that will go through this endpoint.
2816    /// 
2817    /// - `http`: Endpoint will have `http` traffic, typically on a TCP connection.
2818    /// It will be automaticaly promoted to `https` when the `secure` field is set to `true`.
2819    /// 
2820    /// - `https`: Endpoint will have `https` traffic, typically on a TCP connection.
2821    /// 
2822    /// - `ws`: Endpoint will have `ws` traffic, typically on a TCP connection.
2823    /// It will be automaticaly promoted to `wss` when the `secure` field is set to `true`.
2824    /// 
2825    /// - `wss`: Endpoint will have `wss` traffic, typically on a TCP connection.
2826    /// 
2827    /// - `tcp`: Endpoint will have traffic on a TCP connection, without specifying an application protocol.
2828    /// 
2829    /// - `udp`: Endpoint will have traffic on an UDP connection, without specifying an application protocol.
2830    /// 
2831    /// Default value is `http`
2832    #[serde(default, skip_serializing_if = "Option::is_none")]
2833    pub protocol: Option<CheClusterServerWorkspaceDefaultComponentsOpenshiftEndpointsProtocol>,
2834    /// Describes whether the endpoint should be secured and protected by some
2835    /// authentication process. This requires a protocol of `https` or `wss`.
2836    #[serde(default, skip_serializing_if = "Option::is_none")]
2837    pub secure: Option<bool>,
2838    /// Port number to be used within the container component. The same port cannot
2839    /// be used by two different container components.
2840    #[serde(rename = "targetPort")]
2841    pub target_port: i64,
2842}
2843
2844#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2845pub enum CheClusterServerWorkspaceDefaultComponentsOpenshiftEndpointsExposure {
2846    #[serde(rename = "public")]
2847    Public,
2848    #[serde(rename = "internal")]
2849    Internal,
2850    #[serde(rename = "none")]
2851    None,
2852}
2853
2854#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2855pub enum CheClusterServerWorkspaceDefaultComponentsOpenshiftEndpointsProtocol {
2856    #[serde(rename = "http")]
2857    Http,
2858    #[serde(rename = "https")]
2859    Https,
2860    #[serde(rename = "ws")]
2861    Ws,
2862    #[serde(rename = "wss")]
2863    Wss,
2864    #[serde(rename = "tcp")]
2865    Tcp,
2866    #[serde(rename = "udp")]
2867    Udp,
2868}
2869
2870/// Allows importing into the devworkspace the OpenShift resources
2871/// defined in a given manifest. For example this allows reusing the OpenShift
2872/// definitions used to deploy some runtime components in production.
2873#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2874pub enum CheClusterServerWorkspaceDefaultComponentsOpenshiftLocationType {
2875    Uri,
2876    Inlined,
2877}
2878
2879/// Allows importing a plugin.
2880/// 
2881/// Plugins are mainly imported devfiles that contribute components, commands
2882/// and events as a consistent single unit. They are defined in either YAML files
2883/// following the devfile syntax,
2884/// or as `DevWorkspaceTemplate` Kubernetes Custom Resources
2885#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2886pub struct CheClusterServerWorkspaceDefaultComponentsPlugin {
2887    /// Overrides of commands encapsulated in a parent devfile or a plugin.
2888    /// Overriding is done according to K8S strategic merge patch standard rules.
2889    #[serde(default, skip_serializing_if = "Option::is_none")]
2890    pub commands: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginCommands>>,
2891    /// Overrides of components encapsulated in a parent devfile or a plugin.
2892    /// Overriding is done according to K8S strategic merge patch standard rules.
2893    #[serde(default, skip_serializing_if = "Option::is_none")]
2894    pub components: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginComponents>>,
2895    /// Id in a registry that contains a Devfile yaml file
2896    #[serde(default, skip_serializing_if = "Option::is_none")]
2897    pub id: Option<String>,
2898    /// type of location from where the referenced template structure should be retrieved
2899    #[serde(default, skip_serializing_if = "Option::is_none", rename = "importReferenceType")]
2900    pub import_reference_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginImportReferenceType>,
2901    /// Reference to a Kubernetes CRD of type DevWorkspaceTemplate
2902    #[serde(default, skip_serializing_if = "Option::is_none")]
2903    pub kubernetes: Option<CheClusterServerWorkspaceDefaultComponentsPluginKubernetes>,
2904    /// Registry URL to pull the parent devfile from when using id in the parent reference.
2905    /// To ensure the parent devfile gets resolved consistently in different environments,
2906    /// it is recommended to always specify the `registryUrl` when `id` is used.
2907    #[serde(default, skip_serializing_if = "Option::is_none", rename = "registryUrl")]
2908    pub registry_url: Option<String>,
2909    /// URI Reference of a parent devfile YAML file.
2910    /// It can be a full URL or a relative URI with the current devfile as the base URI.
2911    #[serde(default, skip_serializing_if = "Option::is_none")]
2912    pub uri: Option<String>,
2913    /// Specific stack/sample version to pull the parent devfile from, when using id in the parent reference.
2914    /// To specify `version`, `id` must be defined and used as the import reference source.
2915    /// `version` can be either a specific stack version, or `latest`.
2916    /// If no `version` specified, default version will be used.
2917    #[serde(default, skip_serializing_if = "Option::is_none")]
2918    pub version: Option<String>,
2919}
2920
2921#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2922pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommands {
2923    /// Command that consists in applying a given component definition,
2924    /// typically bound to a devworkspace event.
2925    /// 
2926    /// For example, when an `apply` command is bound to a `preStart` event,
2927    /// and references a `container` component, it will start the container as a
2928    /// K8S initContainer in the devworkspace POD, unless the component has its
2929    /// `dedicatedPod` field set to `true`.
2930    /// 
2931    /// When no `apply` command exist for a given component,
2932    /// it is assumed the component will be applied at devworkspace start
2933    /// by default, unless `deployByDefault` for that component is set to false.
2934    #[serde(default, skip_serializing_if = "Option::is_none")]
2935    pub apply: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsApply>,
2936    /// Map of implementation-dependant free-form YAML attributes.
2937    #[serde(default, skip_serializing_if = "Option::is_none")]
2938    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
2939    /// Type of devworkspace command
2940    #[serde(default, skip_serializing_if = "Option::is_none", rename = "commandType")]
2941    pub command_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsCommandType>,
2942    /// Composite command that allows executing several sub-commands
2943    /// either sequentially or concurrently
2944    #[serde(default, skip_serializing_if = "Option::is_none")]
2945    pub composite: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsComposite>,
2946    /// CLI Command executed in an existing component container
2947    #[serde(default, skip_serializing_if = "Option::is_none")]
2948    pub exec: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsExec>,
2949    /// Mandatory identifier that allows referencing
2950    /// this command in composite commands, from
2951    /// a parent, or in events.
2952    pub id: String,
2953}
2954
2955/// Command that consists in applying a given component definition,
2956/// typically bound to a devworkspace event.
2957/// 
2958/// For example, when an `apply` command is bound to a `preStart` event,
2959/// and references a `container` component, it will start the container as a
2960/// K8S initContainer in the devworkspace POD, unless the component has its
2961/// `dedicatedPod` field set to `true`.
2962/// 
2963/// When no `apply` command exist for a given component,
2964/// it is assumed the component will be applied at devworkspace start
2965/// by default, unless `deployByDefault` for that component is set to false.
2966#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2967pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsApply {
2968    /// Describes component that will be applied
2969    #[serde(default, skip_serializing_if = "Option::is_none")]
2970    pub component: Option<String>,
2971    /// Defines the group this command is part of
2972    #[serde(default, skip_serializing_if = "Option::is_none")]
2973    pub group: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsApplyGroup>,
2974    /// Optional label that provides a label for this command
2975    /// to be used in Editor UI menus for example
2976    #[serde(default, skip_serializing_if = "Option::is_none")]
2977    pub label: Option<String>,
2978}
2979
2980/// Defines the group this command is part of
2981#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
2982pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsApplyGroup {
2983    /// Identifies the default command for a given group kind
2984    #[serde(default, skip_serializing_if = "Option::is_none", rename = "isDefault")]
2985    pub is_default: Option<bool>,
2986    /// Kind of group the command is part of
2987    #[serde(default, skip_serializing_if = "Option::is_none")]
2988    pub kind: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsApplyGroupKind>,
2989}
2990
2991/// Defines the group this command is part of
2992#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
2993pub enum CheClusterServerWorkspaceDefaultComponentsPluginCommandsApplyGroupKind {
2994    #[serde(rename = "build")]
2995    Build,
2996    #[serde(rename = "run")]
2997    Run,
2998    #[serde(rename = "test")]
2999    Test,
3000    #[serde(rename = "debug")]
3001    Debug,
3002    #[serde(rename = "deploy")]
3003    Deploy,
3004}
3005
3006#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3007pub enum CheClusterServerWorkspaceDefaultComponentsPluginCommandsCommandType {
3008    Exec,
3009    Apply,
3010    Composite,
3011}
3012
3013/// Composite command that allows executing several sub-commands
3014/// either sequentially or concurrently
3015#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3016pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsComposite {
3017    /// The commands that comprise this composite command
3018    #[serde(default, skip_serializing_if = "Option::is_none")]
3019    pub commands: Option<Vec<String>>,
3020    /// Defines the group this command is part of
3021    #[serde(default, skip_serializing_if = "Option::is_none")]
3022    pub group: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsCompositeGroup>,
3023    /// Optional label that provides a label for this command
3024    /// to be used in Editor UI menus for example
3025    #[serde(default, skip_serializing_if = "Option::is_none")]
3026    pub label: Option<String>,
3027    /// Indicates if the sub-commands should be executed concurrently
3028    #[serde(default, skip_serializing_if = "Option::is_none")]
3029    pub parallel: Option<bool>,
3030}
3031
3032/// Defines the group this command is part of
3033#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3034pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsCompositeGroup {
3035    /// Identifies the default command for a given group kind
3036    #[serde(default, skip_serializing_if = "Option::is_none", rename = "isDefault")]
3037    pub is_default: Option<bool>,
3038    /// Kind of group the command is part of
3039    #[serde(default, skip_serializing_if = "Option::is_none")]
3040    pub kind: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsCompositeGroupKind>,
3041}
3042
3043/// Defines the group this command is part of
3044#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3045pub enum CheClusterServerWorkspaceDefaultComponentsPluginCommandsCompositeGroupKind {
3046    #[serde(rename = "build")]
3047    Build,
3048    #[serde(rename = "run")]
3049    Run,
3050    #[serde(rename = "test")]
3051    Test,
3052    #[serde(rename = "debug")]
3053    Debug,
3054    #[serde(rename = "deploy")]
3055    Deploy,
3056}
3057
3058/// CLI Command executed in an existing component container
3059#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3060pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsExec {
3061    /// The actual command-line string
3062    /// 
3063    /// Special variables that can be used:
3064    /// 
3065    ///  - `$PROJECTS_ROOT`: A path where projects sources are mounted as defined by container component's sourceMapping.
3066    /// 
3067    ///  - `$PROJECT_SOURCE`: A path to a project source ($PROJECTS_ROOT/<project-name>). If there are multiple projects, this will point to the directory of the first one.
3068    #[serde(default, skip_serializing_if = "Option::is_none", rename = "commandLine")]
3069    pub command_line: Option<String>,
3070    /// Describes component to which given action relates
3071    #[serde(default, skip_serializing_if = "Option::is_none")]
3072    pub component: Option<String>,
3073    /// Optional list of environment variables that have to be set
3074    /// before running the command
3075    #[serde(default, skip_serializing_if = "Option::is_none")]
3076    pub env: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginCommandsExecEnv>>,
3077    /// Defines the group this command is part of
3078    #[serde(default, skip_serializing_if = "Option::is_none")]
3079    pub group: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsExecGroup>,
3080    /// Specify whether the command is restarted or not when the source code changes.
3081    /// If set to `true` the command won't be restarted.
3082    /// A *hotReloadCapable* `run` or `debug` command is expected to handle file changes on its own and won't be restarted.
3083    /// A *hotReloadCapable* `build` command is expected to be executed only once and won't be executed again.
3084    /// This field is taken into account only for commands `build`, `run` and `debug` with `isDefault` set to `true`.
3085    /// 
3086    /// Default value is `false`
3087    #[serde(default, skip_serializing_if = "Option::is_none", rename = "hotReloadCapable")]
3088    pub hot_reload_capable: Option<bool>,
3089    /// Optional label that provides a label for this command
3090    /// to be used in Editor UI menus for example
3091    #[serde(default, skip_serializing_if = "Option::is_none")]
3092    pub label: Option<String>,
3093    /// Working directory where the command should be executed
3094    /// 
3095    /// Special variables that can be used:
3096    /// 
3097    ///  - `$PROJECTS_ROOT`: A path where projects sources are mounted as defined by container component's sourceMapping.
3098    /// 
3099    ///  - `$PROJECT_SOURCE`: A path to a project source ($PROJECTS_ROOT/<project-name>). If there are multiple projects, this will point to the directory of the first one.
3100    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workingDir")]
3101    pub working_dir: Option<String>,
3102}
3103
3104#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3105pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsExecEnv {
3106    pub name: String,
3107    #[serde(default, skip_serializing_if = "Option::is_none")]
3108    pub value: Option<String>,
3109}
3110
3111/// Defines the group this command is part of
3112#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3113pub struct CheClusterServerWorkspaceDefaultComponentsPluginCommandsExecGroup {
3114    /// Identifies the default command for a given group kind
3115    #[serde(default, skip_serializing_if = "Option::is_none", rename = "isDefault")]
3116    pub is_default: Option<bool>,
3117    /// Kind of group the command is part of
3118    #[serde(default, skip_serializing_if = "Option::is_none")]
3119    pub kind: Option<CheClusterServerWorkspaceDefaultComponentsPluginCommandsExecGroupKind>,
3120}
3121
3122/// Defines the group this command is part of
3123#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3124pub enum CheClusterServerWorkspaceDefaultComponentsPluginCommandsExecGroupKind {
3125    #[serde(rename = "build")]
3126    Build,
3127    #[serde(rename = "run")]
3128    Run,
3129    #[serde(rename = "test")]
3130    Test,
3131    #[serde(rename = "debug")]
3132    Debug,
3133    #[serde(rename = "deploy")]
3134    Deploy,
3135}
3136
3137#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3138pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponents {
3139    /// Map of implementation-dependant free-form YAML attributes.
3140    #[serde(default, skip_serializing_if = "Option::is_none")]
3141    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
3142    /// Type of component
3143    #[serde(default, skip_serializing_if = "Option::is_none", rename = "componentType")]
3144    pub component_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsComponentType>,
3145    /// Allows adding and configuring devworkspace-related containers
3146    #[serde(default, skip_serializing_if = "Option::is_none")]
3147    pub container: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainer>,
3148    /// Allows specifying the definition of an image for outer loop builds
3149    #[serde(default, skip_serializing_if = "Option::is_none")]
3150    pub image: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImage>,
3151    /// Allows importing into the devworkspace the Kubernetes resources
3152    /// defined in a given manifest. For example this allows reusing the Kubernetes
3153    /// definitions used to deploy some runtime components in production.
3154    #[serde(default, skip_serializing_if = "Option::is_none")]
3155    pub kubernetes: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetes>,
3156    /// Mandatory name that allows referencing the component
3157    /// from other elements (such as commands) or from an external
3158    /// devfile that may reference this component through a parent or a plugin.
3159    pub name: String,
3160    /// Allows importing into the devworkspace the OpenShift resources
3161    /// defined in a given manifest. For example this allows reusing the OpenShift
3162    /// definitions used to deploy some runtime components in production.
3163    #[serde(default, skip_serializing_if = "Option::is_none")]
3164    pub openshift: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshift>,
3165    /// Allows specifying the definition of a volume
3166    /// shared by several other components
3167    #[serde(default, skip_serializing_if = "Option::is_none")]
3168    pub volume: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsVolume>,
3169}
3170
3171#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3172pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsComponentType {
3173    Container,
3174    Kubernetes,
3175    Openshift,
3176    Volume,
3177    Image,
3178}
3179
3180/// Allows adding and configuring devworkspace-related containers
3181#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3182pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainer {
3183    /// Annotations that should be added to specific resources for this container
3184    #[serde(default, skip_serializing_if = "Option::is_none")]
3185    pub annotation: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerAnnotation>,
3186    /// The arguments to supply to the command running the dockerimage component. The arguments are supplied either to the default command provided in the image or to the overridden command.
3187    /// 
3188    /// Defaults to an empty array, meaning use whatever is defined in the image.
3189    #[serde(default, skip_serializing_if = "Option::is_none")]
3190    pub args: Option<Vec<String>>,
3191    /// The command to run in the dockerimage component instead of the default one provided in the image.
3192    /// 
3193    /// Defaults to an empty array, meaning use whatever is defined in the image.
3194    #[serde(default, skip_serializing_if = "Option::is_none")]
3195    pub command: Option<Vec<String>>,
3196    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cpuLimit")]
3197    pub cpu_limit: Option<String>,
3198    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cpuRequest")]
3199    pub cpu_request: Option<String>,
3200    /// Specify if a container should run in its own separated pod,
3201    /// instead of running as part of the main development environment pod.
3202    /// 
3203    /// Default value is `false`
3204    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dedicatedPod")]
3205    pub dedicated_pod: Option<bool>,
3206    #[serde(default, skip_serializing_if = "Option::is_none")]
3207    pub endpoints: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEndpoints>>,
3208    /// Environment variables used in this container.
3209    /// 
3210    /// The following variables are reserved and cannot be overridden via env:
3211    /// 
3212    ///  - `$PROJECTS_ROOT`
3213    /// 
3214    ///  - `$PROJECT_SOURCE`
3215    #[serde(default, skip_serializing_if = "Option::is_none")]
3216    pub env: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEnv>>,
3217    #[serde(default, skip_serializing_if = "Option::is_none")]
3218    pub image: Option<String>,
3219    #[serde(default, skip_serializing_if = "Option::is_none", rename = "memoryLimit")]
3220    pub memory_limit: Option<String>,
3221    #[serde(default, skip_serializing_if = "Option::is_none", rename = "memoryRequest")]
3222    pub memory_request: Option<String>,
3223    /// Toggles whether or not the project source code should
3224    /// be mounted in the component.
3225    /// 
3226    /// Defaults to true for all component types except plugins and components that set `dedicatedPod` to true.
3227    #[serde(default, skip_serializing_if = "Option::is_none", rename = "mountSources")]
3228    pub mount_sources: Option<bool>,
3229    /// Optional specification of the path in the container where
3230    /// project sources should be transferred/mounted when `mountSources` is `true`.
3231    /// When omitted, the default value of /projects is used.
3232    #[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceMapping")]
3233    pub source_mapping: Option<String>,
3234    /// List of volumes mounts that should be mounted is this container.
3235    #[serde(default, skip_serializing_if = "Option::is_none", rename = "volumeMounts")]
3236    pub volume_mounts: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerVolumeMounts>>,
3237}
3238
3239/// Annotations that should be added to specific resources for this container
3240#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3241pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerAnnotation {
3242    /// Annotations to be added to deployment
3243    #[serde(default, skip_serializing_if = "Option::is_none")]
3244    pub deployment: Option<BTreeMap<String, String>>,
3245    /// Annotations to be added to service
3246    #[serde(default, skip_serializing_if = "Option::is_none")]
3247    pub service: Option<BTreeMap<String, String>>,
3248}
3249
3250#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3251pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEndpoints {
3252    /// Annotations to be added to Kubernetes Ingress or Openshift Route
3253    #[serde(default, skip_serializing_if = "Option::is_none")]
3254    pub annotation: Option<BTreeMap<String, String>>,
3255    /// Map of implementation-dependant string-based free-form attributes.
3256    /// 
3257    /// Examples of Che-specific attributes:
3258    /// 
3259    /// - cookiesAuthEnabled: "true" / "false",
3260    /// 
3261    /// - type: "terminal" / "ide" / "ide-dev",
3262    #[serde(default, skip_serializing_if = "Option::is_none")]
3263    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
3264    /// Describes how the endpoint should be exposed on the network.
3265    /// 
3266    /// - `public` means that the endpoint will be exposed on the public network, typically through
3267    /// a K8S ingress or an OpenShift route.
3268    /// 
3269    /// - `internal` means that the endpoint will be exposed internally outside of the main devworkspace POD,
3270    /// typically by K8S services, to be consumed by other elements running
3271    /// on the same cloud internal network.
3272    /// 
3273    /// - `none` means that the endpoint will not be exposed and will only be accessible
3274    /// inside the main devworkspace POD, on a local address.
3275    /// 
3276    /// Default value is `public`
3277    #[serde(default, skip_serializing_if = "Option::is_none")]
3278    pub exposure: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEndpointsExposure>,
3279    pub name: String,
3280    /// Path of the endpoint URL
3281    #[serde(default, skip_serializing_if = "Option::is_none")]
3282    pub path: Option<String>,
3283    /// Describes the application and transport protocols of the traffic that will go through this endpoint.
3284    /// 
3285    /// - `http`: Endpoint will have `http` traffic, typically on a TCP connection.
3286    /// It will be automaticaly promoted to `https` when the `secure` field is set to `true`.
3287    /// 
3288    /// - `https`: Endpoint will have `https` traffic, typically on a TCP connection.
3289    /// 
3290    /// - `ws`: Endpoint will have `ws` traffic, typically on a TCP connection.
3291    /// It will be automaticaly promoted to `wss` when the `secure` field is set to `true`.
3292    /// 
3293    /// - `wss`: Endpoint will have `wss` traffic, typically on a TCP connection.
3294    /// 
3295    /// - `tcp`: Endpoint will have traffic on a TCP connection, without specifying an application protocol.
3296    /// 
3297    /// - `udp`: Endpoint will have traffic on an UDP connection, without specifying an application protocol.
3298    /// 
3299    /// Default value is `http`
3300    #[serde(default, skip_serializing_if = "Option::is_none")]
3301    pub protocol: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEndpointsProtocol>,
3302    /// Describes whether the endpoint should be secured and protected by some
3303    /// authentication process. This requires a protocol of `https` or `wss`.
3304    #[serde(default, skip_serializing_if = "Option::is_none")]
3305    pub secure: Option<bool>,
3306    /// Port number to be used within the container component. The same port cannot
3307    /// be used by two different container components.
3308    #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")]
3309    pub target_port: Option<i64>,
3310}
3311
3312#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3313pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEndpointsExposure {
3314    #[serde(rename = "public")]
3315    Public,
3316    #[serde(rename = "internal")]
3317    Internal,
3318    #[serde(rename = "none")]
3319    None,
3320}
3321
3322#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3323pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEndpointsProtocol {
3324    #[serde(rename = "http")]
3325    Http,
3326    #[serde(rename = "https")]
3327    Https,
3328    #[serde(rename = "ws")]
3329    Ws,
3330    #[serde(rename = "wss")]
3331    Wss,
3332    #[serde(rename = "tcp")]
3333    Tcp,
3334    #[serde(rename = "udp")]
3335    Udp,
3336}
3337
3338#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3339pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerEnv {
3340    pub name: String,
3341    #[serde(default, skip_serializing_if = "Option::is_none")]
3342    pub value: Option<String>,
3343}
3344
3345/// Volume that should be mounted to a component container
3346#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3347pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsContainerVolumeMounts {
3348    /// The volume mount name is the name of an existing `Volume` component.
3349    /// If several containers mount the same volume name
3350    /// then they will reuse the same volume and will be able to access to the same files.
3351    pub name: String,
3352    /// The path in the component container where the volume should be mounted.
3353    /// If not path is mentioned, default path is the is `/<name>`.
3354    #[serde(default, skip_serializing_if = "Option::is_none")]
3355    pub path: Option<String>,
3356}
3357
3358/// Allows specifying the definition of an image for outer loop builds
3359#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3360pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsImage {
3361    /// Defines if the image should be built during startup.
3362    /// 
3363    /// Default value is `false`
3364    #[serde(default, skip_serializing_if = "Option::is_none", rename = "autoBuild")]
3365    pub auto_build: Option<bool>,
3366    /// Allows specifying dockerfile type build
3367    #[serde(default, skip_serializing_if = "Option::is_none")]
3368    pub dockerfile: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfile>,
3369    /// Name of the image for the resulting outerloop build
3370    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imageName")]
3371    pub image_name: Option<String>,
3372    /// Type of image
3373    #[serde(default, skip_serializing_if = "Option::is_none", rename = "imageType")]
3374    pub image_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageImageType>,
3375}
3376
3377/// Allows specifying dockerfile type build
3378#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3379pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfile {
3380    /// The arguments to supply to the dockerfile build.
3381    #[serde(default, skip_serializing_if = "Option::is_none")]
3382    pub args: Option<Vec<String>>,
3383    /// Path of source directory to establish build context. Defaults to ${PROJECT_SOURCE} in the container
3384    #[serde(default, skip_serializing_if = "Option::is_none", rename = "buildContext")]
3385    pub build_context: Option<String>,
3386    /// Dockerfile's Devfile Registry source
3387    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistry")]
3388    pub devfile_registry: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileDevfileRegistry>,
3389    /// Dockerfile's Git source
3390    #[serde(default, skip_serializing_if = "Option::is_none")]
3391    pub git: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileGit>,
3392    /// Specify if a privileged builder pod is required.
3393    /// 
3394    /// Default value is `false`
3395    #[serde(default, skip_serializing_if = "Option::is_none", rename = "rootRequired")]
3396    pub root_required: Option<bool>,
3397    /// Type of Dockerfile src
3398    #[serde(default, skip_serializing_if = "Option::is_none", rename = "srcType")]
3399    pub src_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileSrcType>,
3400    /// URI Reference of a Dockerfile.
3401    /// It can be a full URL or a relative URI from the current devfile as the base URI.
3402    #[serde(default, skip_serializing_if = "Option::is_none")]
3403    pub uri: Option<String>,
3404}
3405
3406/// Dockerfile's Devfile Registry source
3407#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3408pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileDevfileRegistry {
3409    /// Id in a devfile registry that contains a Dockerfile. The src in the OCI registry
3410    /// required for the Dockerfile build will be downloaded for building the image.
3411    #[serde(default, skip_serializing_if = "Option::is_none")]
3412    pub id: Option<String>,
3413    /// Devfile Registry URL to pull the Dockerfile from when using the Devfile Registry as Dockerfile src.
3414    /// To ensure the Dockerfile gets resolved consistently in different environments,
3415    /// it is recommended to always specify the `devfileRegistryUrl` when `Id` is used.
3416    #[serde(default, skip_serializing_if = "Option::is_none", rename = "registryUrl")]
3417    pub registry_url: Option<String>,
3418}
3419
3420/// Dockerfile's Git source
3421#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3422pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileGit {
3423    /// Defines from what the project should be checked out. Required if there are more than one remote configured
3424    #[serde(default, skip_serializing_if = "Option::is_none", rename = "checkoutFrom")]
3425    pub checkout_from: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileGitCheckoutFrom>,
3426    /// Location of the Dockerfile in the Git repository when using git as Dockerfile src.
3427    /// Defaults to Dockerfile.
3428    #[serde(default, skip_serializing_if = "Option::is_none", rename = "fileLocation")]
3429    pub file_location: Option<String>,
3430    /// The remotes map which should be initialized in the git project.
3431    /// Projects must have at least one remote configured while StarterProjects & Image Component's Git source can only have at most one remote configured.
3432    #[serde(default, skip_serializing_if = "Option::is_none")]
3433    pub remotes: Option<BTreeMap<String, String>>,
3434}
3435
3436/// Defines from what the project should be checked out. Required if there are more than one remote configured
3437#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3438pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileGitCheckoutFrom {
3439    /// The remote name should be used as init. Required if there are more than one remote configured
3440    #[serde(default, skip_serializing_if = "Option::is_none")]
3441    pub remote: Option<String>,
3442    /// The revision to checkout from. Should be branch name, tag or commit id.
3443    /// Default branch is used if missing or specified revision is not found.
3444    #[serde(default, skip_serializing_if = "Option::is_none")]
3445    pub revision: Option<String>,
3446}
3447
3448/// Allows specifying dockerfile type build
3449#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3450pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageDockerfileSrcType {
3451    Uri,
3452    DevfileRegistry,
3453    Git,
3454}
3455
3456/// Allows specifying the definition of an image for outer loop builds
3457#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3458pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsImageImageType {
3459    Dockerfile,
3460    AutoBuild,
3461}
3462
3463/// Allows importing into the devworkspace the Kubernetes resources
3464/// defined in a given manifest. For example this allows reusing the Kubernetes
3465/// definitions used to deploy some runtime components in production.
3466#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3467pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetes {
3468    /// Defines if the component should be deployed during startup.
3469    /// 
3470    /// Default value is `false`
3471    #[serde(default, skip_serializing_if = "Option::is_none", rename = "deployByDefault")]
3472    pub deploy_by_default: Option<bool>,
3473    #[serde(default, skip_serializing_if = "Option::is_none")]
3474    pub endpoints: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesEndpoints>>,
3475    /// Inlined manifest
3476    #[serde(default, skip_serializing_if = "Option::is_none")]
3477    pub inlined: Option<String>,
3478    /// Type of Kubernetes-like location
3479    #[serde(default, skip_serializing_if = "Option::is_none", rename = "locationType")]
3480    pub location_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesLocationType>,
3481    /// Location in a file fetched from a uri.
3482    #[serde(default, skip_serializing_if = "Option::is_none")]
3483    pub uri: Option<String>,
3484}
3485
3486#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3487pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesEndpoints {
3488    /// Annotations to be added to Kubernetes Ingress or Openshift Route
3489    #[serde(default, skip_serializing_if = "Option::is_none")]
3490    pub annotation: Option<BTreeMap<String, String>>,
3491    /// Map of implementation-dependant string-based free-form attributes.
3492    /// 
3493    /// Examples of Che-specific attributes:
3494    /// 
3495    /// - cookiesAuthEnabled: "true" / "false",
3496    /// 
3497    /// - type: "terminal" / "ide" / "ide-dev",
3498    #[serde(default, skip_serializing_if = "Option::is_none")]
3499    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
3500    /// Describes how the endpoint should be exposed on the network.
3501    /// 
3502    /// - `public` means that the endpoint will be exposed on the public network, typically through
3503    /// a K8S ingress or an OpenShift route.
3504    /// 
3505    /// - `internal` means that the endpoint will be exposed internally outside of the main devworkspace POD,
3506    /// typically by K8S services, to be consumed by other elements running
3507    /// on the same cloud internal network.
3508    /// 
3509    /// - `none` means that the endpoint will not be exposed and will only be accessible
3510    /// inside the main devworkspace POD, on a local address.
3511    /// 
3512    /// Default value is `public`
3513    #[serde(default, skip_serializing_if = "Option::is_none")]
3514    pub exposure: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesEndpointsExposure>,
3515    pub name: String,
3516    /// Path of the endpoint URL
3517    #[serde(default, skip_serializing_if = "Option::is_none")]
3518    pub path: Option<String>,
3519    /// Describes the application and transport protocols of the traffic that will go through this endpoint.
3520    /// 
3521    /// - `http`: Endpoint will have `http` traffic, typically on a TCP connection.
3522    /// It will be automaticaly promoted to `https` when the `secure` field is set to `true`.
3523    /// 
3524    /// - `https`: Endpoint will have `https` traffic, typically on a TCP connection.
3525    /// 
3526    /// - `ws`: Endpoint will have `ws` traffic, typically on a TCP connection.
3527    /// It will be automaticaly promoted to `wss` when the `secure` field is set to `true`.
3528    /// 
3529    /// - `wss`: Endpoint will have `wss` traffic, typically on a TCP connection.
3530    /// 
3531    /// - `tcp`: Endpoint will have traffic on a TCP connection, without specifying an application protocol.
3532    /// 
3533    /// - `udp`: Endpoint will have traffic on an UDP connection, without specifying an application protocol.
3534    /// 
3535    /// Default value is `http`
3536    #[serde(default, skip_serializing_if = "Option::is_none")]
3537    pub protocol: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesEndpointsProtocol>,
3538    /// Describes whether the endpoint should be secured and protected by some
3539    /// authentication process. This requires a protocol of `https` or `wss`.
3540    #[serde(default, skip_serializing_if = "Option::is_none")]
3541    pub secure: Option<bool>,
3542    /// Port number to be used within the container component. The same port cannot
3543    /// be used by two different container components.
3544    #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")]
3545    pub target_port: Option<i64>,
3546}
3547
3548#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3549pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesEndpointsExposure {
3550    #[serde(rename = "public")]
3551    Public,
3552    #[serde(rename = "internal")]
3553    Internal,
3554    #[serde(rename = "none")]
3555    None,
3556}
3557
3558#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3559pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesEndpointsProtocol {
3560    #[serde(rename = "http")]
3561    Http,
3562    #[serde(rename = "https")]
3563    Https,
3564    #[serde(rename = "ws")]
3565    Ws,
3566    #[serde(rename = "wss")]
3567    Wss,
3568    #[serde(rename = "tcp")]
3569    Tcp,
3570    #[serde(rename = "udp")]
3571    Udp,
3572}
3573
3574/// Allows importing into the devworkspace the Kubernetes resources
3575/// defined in a given manifest. For example this allows reusing the Kubernetes
3576/// definitions used to deploy some runtime components in production.
3577#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3578pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsKubernetesLocationType {
3579    Uri,
3580    Inlined,
3581}
3582
3583/// Allows importing into the devworkspace the OpenShift resources
3584/// defined in a given manifest. For example this allows reusing the OpenShift
3585/// definitions used to deploy some runtime components in production.
3586#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3587pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshift {
3588    /// Defines if the component should be deployed during startup.
3589    /// 
3590    /// Default value is `false`
3591    #[serde(default, skip_serializing_if = "Option::is_none", rename = "deployByDefault")]
3592    pub deploy_by_default: Option<bool>,
3593    #[serde(default, skip_serializing_if = "Option::is_none")]
3594    pub endpoints: Option<Vec<CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftEndpoints>>,
3595    /// Inlined manifest
3596    #[serde(default, skip_serializing_if = "Option::is_none")]
3597    pub inlined: Option<String>,
3598    /// Type of Kubernetes-like location
3599    #[serde(default, skip_serializing_if = "Option::is_none", rename = "locationType")]
3600    pub location_type: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftLocationType>,
3601    /// Location in a file fetched from a uri.
3602    #[serde(default, skip_serializing_if = "Option::is_none")]
3603    pub uri: Option<String>,
3604}
3605
3606#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3607pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftEndpoints {
3608    /// Annotations to be added to Kubernetes Ingress or Openshift Route
3609    #[serde(default, skip_serializing_if = "Option::is_none")]
3610    pub annotation: Option<BTreeMap<String, String>>,
3611    /// Map of implementation-dependant string-based free-form attributes.
3612    /// 
3613    /// Examples of Che-specific attributes:
3614    /// 
3615    /// - cookiesAuthEnabled: "true" / "false",
3616    /// 
3617    /// - type: "terminal" / "ide" / "ide-dev",
3618    #[serde(default, skip_serializing_if = "Option::is_none")]
3619    pub attributes: Option<BTreeMap<String, serde_json::Value>>,
3620    /// Describes how the endpoint should be exposed on the network.
3621    /// 
3622    /// - `public` means that the endpoint will be exposed on the public network, typically through
3623    /// a K8S ingress or an OpenShift route.
3624    /// 
3625    /// - `internal` means that the endpoint will be exposed internally outside of the main devworkspace POD,
3626    /// typically by K8S services, to be consumed by other elements running
3627    /// on the same cloud internal network.
3628    /// 
3629    /// - `none` means that the endpoint will not be exposed and will only be accessible
3630    /// inside the main devworkspace POD, on a local address.
3631    /// 
3632    /// Default value is `public`
3633    #[serde(default, skip_serializing_if = "Option::is_none")]
3634    pub exposure: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftEndpointsExposure>,
3635    pub name: String,
3636    /// Path of the endpoint URL
3637    #[serde(default, skip_serializing_if = "Option::is_none")]
3638    pub path: Option<String>,
3639    /// Describes the application and transport protocols of the traffic that will go through this endpoint.
3640    /// 
3641    /// - `http`: Endpoint will have `http` traffic, typically on a TCP connection.
3642    /// It will be automaticaly promoted to `https` when the `secure` field is set to `true`.
3643    /// 
3644    /// - `https`: Endpoint will have `https` traffic, typically on a TCP connection.
3645    /// 
3646    /// - `ws`: Endpoint will have `ws` traffic, typically on a TCP connection.
3647    /// It will be automaticaly promoted to `wss` when the `secure` field is set to `true`.
3648    /// 
3649    /// - `wss`: Endpoint will have `wss` traffic, typically on a TCP connection.
3650    /// 
3651    /// - `tcp`: Endpoint will have traffic on a TCP connection, without specifying an application protocol.
3652    /// 
3653    /// - `udp`: Endpoint will have traffic on an UDP connection, without specifying an application protocol.
3654    /// 
3655    /// Default value is `http`
3656    #[serde(default, skip_serializing_if = "Option::is_none")]
3657    pub protocol: Option<CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftEndpointsProtocol>,
3658    /// Describes whether the endpoint should be secured and protected by some
3659    /// authentication process. This requires a protocol of `https` or `wss`.
3660    #[serde(default, skip_serializing_if = "Option::is_none")]
3661    pub secure: Option<bool>,
3662    /// Port number to be used within the container component. The same port cannot
3663    /// be used by two different container components.
3664    #[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")]
3665    pub target_port: Option<i64>,
3666}
3667
3668#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3669pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftEndpointsExposure {
3670    #[serde(rename = "public")]
3671    Public,
3672    #[serde(rename = "internal")]
3673    Internal,
3674    #[serde(rename = "none")]
3675    None,
3676}
3677
3678#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3679pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftEndpointsProtocol {
3680    #[serde(rename = "http")]
3681    Http,
3682    #[serde(rename = "https")]
3683    Https,
3684    #[serde(rename = "ws")]
3685    Ws,
3686    #[serde(rename = "wss")]
3687    Wss,
3688    #[serde(rename = "tcp")]
3689    Tcp,
3690    #[serde(rename = "udp")]
3691    Udp,
3692}
3693
3694/// Allows importing into the devworkspace the OpenShift resources
3695/// defined in a given manifest. For example this allows reusing the OpenShift
3696/// definitions used to deploy some runtime components in production.
3697#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3698pub enum CheClusterServerWorkspaceDefaultComponentsPluginComponentsOpenshiftLocationType {
3699    Uri,
3700    Inlined,
3701}
3702
3703/// Allows specifying the definition of a volume
3704/// shared by several other components
3705#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3706pub struct CheClusterServerWorkspaceDefaultComponentsPluginComponentsVolume {
3707    /// Ephemeral volumes are not stored persistently across restarts. Defaults
3708    /// to false
3709    #[serde(default, skip_serializing_if = "Option::is_none")]
3710    pub ephemeral: Option<bool>,
3711    /// Size of the volume
3712    #[serde(default, skip_serializing_if = "Option::is_none")]
3713    pub size: Option<String>,
3714}
3715
3716/// Allows importing a plugin.
3717/// 
3718/// Plugins are mainly imported devfiles that contribute components, commands
3719/// and events as a consistent single unit. They are defined in either YAML files
3720/// following the devfile syntax,
3721/// or as `DevWorkspaceTemplate` Kubernetes Custom Resources
3722#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
3723pub enum CheClusterServerWorkspaceDefaultComponentsPluginImportReferenceType {
3724    Uri,
3725    Id,
3726    Kubernetes,
3727}
3728
3729/// Reference to a Kubernetes CRD of type DevWorkspaceTemplate
3730#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3731pub struct CheClusterServerWorkspaceDefaultComponentsPluginKubernetes {
3732    pub name: String,
3733    #[serde(default, skip_serializing_if = "Option::is_none")]
3734    pub namespace: Option<String>,
3735}
3736
3737/// Allows specifying the definition of a volume
3738/// shared by several other components
3739#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3740pub struct CheClusterServerWorkspaceDefaultComponentsVolume {
3741    /// Ephemeral volumes are not stored persistently across restarts. Defaults
3742    /// to false
3743    #[serde(default, skip_serializing_if = "Option::is_none")]
3744    pub ephemeral: Option<bool>,
3745    /// Size of the volume
3746    #[serde(default, skip_serializing_if = "Option::is_none")]
3747    pub size: Option<String>,
3748}
3749
3750/// The pod this Toleration is attached to tolerates any taint that matches
3751/// the triple <key,value,effect> using the matching operator <operator>.
3752#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3753pub struct CheClusterServerWorkspacePodTolerations {
3754    /// Effect indicates the taint effect to match. Empty means match all taint effects.
3755    /// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
3756    #[serde(default, skip_serializing_if = "Option::is_none")]
3757    pub effect: Option<String>,
3758    /// Key is the taint key that the toleration applies to. Empty means match all taint keys.
3759    /// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
3760    #[serde(default, skip_serializing_if = "Option::is_none")]
3761    pub key: Option<String>,
3762    /// Operator represents a key's relationship to the value.
3763    /// Valid operators are Exists and Equal. Defaults to Equal.
3764    /// Exists is equivalent to wildcard for value, so that a pod can
3765    /// tolerate all taints of a particular category.
3766    #[serde(default, skip_serializing_if = "Option::is_none")]
3767    pub operator: Option<String>,
3768    /// TolerationSeconds represents the period of time the toleration (which must be
3769    /// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
3770    /// it is not set, which means tolerate the taint forever (do not evict). Zero and
3771    /// negative values will be treated as 0 (evict immediately) by the system.
3772    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tolerationSeconds")]
3773    pub toleration_seconds: Option<i64>,
3774    /// Value is the taint value the toleration matches to.
3775    /// If the operator is Exists, the value should be empty, otherwise just a regular string.
3776    #[serde(default, skip_serializing_if = "Option::is_none")]
3777    pub value: Option<String>,
3778}
3779
3780#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3781pub struct CheClusterServerWorkspacesDefaultPlugins {
3782    /// The editor id to specify default plug-ins for.
3783    #[serde(default, skip_serializing_if = "Option::is_none")]
3784    pub editor: Option<String>,
3785    /// Default plug-in uris for the specified editor.
3786    #[serde(default, skip_serializing_if = "Option::is_none")]
3787    pub plugins: Option<Vec<String>>,
3788}
3789
3790/// Configuration settings related to the persistent storage used by the Che installation.
3791#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3792pub struct CheClusterStorage {
3793    /// Storage class for the Persistent Volume Claims dedicated to the Che workspaces. When omitted or left blank, a default storage class is used.
3794    #[serde(default, skip_serializing_if = "Option::is_none", rename = "perWorkspaceStrategyPVCStorageClassName")]
3795    pub per_workspace_strategy_pvc_storage_class_name: Option<String>,
3796    /// Size of the persistent volume claim for workspaces.
3797    #[serde(default, skip_serializing_if = "Option::is_none", rename = "perWorkspaceStrategyPvcClaimSize")]
3798    pub per_workspace_strategy_pvc_claim_size: Option<String>,
3799    /// Storage class for the Persistent Volume Claim dedicated to the PostgreSQL database. When omitted or left blank, a default storage class is used.
3800    #[serde(default, skip_serializing_if = "Option::is_none", rename = "postgresPVCStorageClassName")]
3801    pub postgres_pvc_storage_class_name: Option<String>,
3802    /// Instructs the Che server to start a special Pod to pre-create a sub-path in the Persistent Volumes.
3803    /// Defaults to `false`, however it will need to enable it according to the configuration of your Kubernetes cluster.
3804    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preCreateSubPaths")]
3805    pub pre_create_sub_paths: Option<bool>,
3806    /// Size of the persistent volume claim for workspaces. Defaults to `10Gi`.
3807    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pvcClaimSize")]
3808    pub pvc_claim_size: Option<String>,
3809    /// Overrides the container image used to create sub-paths in the Persistent Volumes.
3810    /// This includes the image tag. Omit it or leave it empty to use the default container image provided by the Operator. See also the `preCreateSubPaths` field.
3811    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pvcJobsImage")]
3812    pub pvc_jobs_image: Option<String>,
3813    /// Persistent volume claim strategy for the Che server. This Can be:`common` (all workspaces PVCs in one volume),
3814    /// `per-workspace` (one PVC per workspace for all declared volumes) and `unique` (one PVC per declared volume). Defaults to `common`.
3815    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pvcStrategy")]
3816    pub pvc_strategy: Option<String>,
3817    /// Storage class for the Persistent Volume Claims dedicated to the Che workspaces. When omitted or left blank, a default storage class is used.
3818    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspacePVCStorageClassName")]
3819    pub workspace_pvc_storage_class_name: Option<String>,
3820}
3821
3822/// CheClusterStatus defines the observed state of Che installation
3823#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3824pub struct CheClusterStatus {
3825    /// Status of a Che installation. Can be `Available`, `Unavailable`, or `Available, Rolling Update in Progress`.
3826    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheClusterRunning")]
3827    pub che_cluster_running: Option<String>,
3828    /// Public URL to the Che server.
3829    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheURL")]
3830    pub che_url: Option<String>,
3831    /// Current installed Che version.
3832    #[serde(default, skip_serializing_if = "Option::is_none", rename = "cheVersion")]
3833    pub che_version: Option<String>,
3834    /// Indicates that a PostgreSQL instance has been correctly provisioned or not.
3835    #[serde(default, skip_serializing_if = "Option::is_none", rename = "dbProvisioned")]
3836    pub db_provisioned: Option<bool>,
3837    /// Public URL to the devfile registry.
3838    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devfileRegistryURL")]
3839    pub devfile_registry_url: Option<String>,
3840    /// The status of the Devworkspace subsystem
3841    #[serde(default, skip_serializing_if = "Option::is_none", rename = "devworkspaceStatus")]
3842    pub devworkspace_status: Option<CheClusterStatusDevworkspaceStatus>,
3843    /// Indicates whether an Identity Provider instance, Keycloak or RH-SSO, has been configured to integrate with the GitHub OAuth.
3844    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitHubOAuthProvisioned")]
3845    pub git_hub_o_auth_provisioned: Option<bool>,
3846    /// The ConfigMap containing certificates to propagate to the Che components and to provide particular configuration for Git.
3847    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gitServerTLSCertificateConfigMapName")]
3848    pub git_server_tls_certificate_config_map_name: Option<String>,
3849    /// A URL that points to some URL where to find help related to the current Operator status.
3850    #[serde(default, skip_serializing_if = "Option::is_none", rename = "helpLink")]
3851    pub help_link: Option<String>,
3852    /// Indicates whether an Identity Provider instance, Keycloak or RH-SSO, has been provisioned with realm, client and user.
3853    #[serde(default, skip_serializing_if = "Option::is_none", rename = "keycloakProvisioned")]
3854    pub keycloak_provisioned: Option<bool>,
3855    /// Public URL to the Identity Provider server, Keycloak or RH-SSO,.
3856    #[serde(default, skip_serializing_if = "Option::is_none", rename = "keycloakURL")]
3857    pub keycloak_url: Option<String>,
3858    /// A human readable message indicating details about why the Pod is in this condition.
3859    #[serde(default, skip_serializing_if = "Option::is_none")]
3860    pub message: Option<String>,
3861    /// OpenShift OAuth secret in `openshift-config` namespace that contains user credentials for HTPasswd identity provider.
3862    #[serde(default, skip_serializing_if = "Option::is_none", rename = "openShiftOAuthUserCredentialsSecret")]
3863    pub open_shift_o_auth_user_credentials_secret: Option<String>,
3864    /// Indicates whether an Identity Provider instance, Keycloak or RH-SSO, has been configured to integrate with the OpenShift OAuth.
3865    #[serde(default, skip_serializing_if = "Option::is_none", rename = "openShiftoAuthProvisioned")]
3866    pub open_shifto_auth_provisioned: Option<bool>,
3867    /// Public URL to the plugin registry.
3868    #[serde(default, skip_serializing_if = "Option::is_none", rename = "pluginRegistryURL")]
3869    pub plugin_registry_url: Option<String>,
3870    /// A brief CamelCase message indicating details about why the Pod is in this state.
3871    #[serde(default, skip_serializing_if = "Option::is_none")]
3872    pub reason: Option<String>,
3873}
3874
3875/// The status of the Devworkspace subsystem
3876#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
3877pub struct CheClusterStatusDevworkspaceStatus {
3878    /// GatewayHost is the resolved host of the ingress/route. This is equal to the Host in the spec
3879    /// on Kubernetes but contains the actual host name of the route if Host is unspecified on OpenShift.
3880    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayHost")]
3881    pub gateway_host: Option<String>,
3882    /// GatewayPhase specifies the phase in which the gateway deployment currently is.
3883    /// If the gateway is disabled, the phase is "Inactive".
3884    #[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayPhase")]
3885    pub gateway_phase: Option<String>,
3886    /// Message contains further human-readable info for why the Che cluster is in the phase it currently is.
3887    #[serde(default, skip_serializing_if = "Option::is_none")]
3888    pub message: Option<String>,
3889    /// Phase is the phase in which the Che cluster as a whole finds itself in.
3890    #[serde(default, skip_serializing_if = "Option::is_none")]
3891    pub phase: Option<String>,
3892    /// A brief CamelCase message indicating details about why the Che cluster is in this state.
3893    #[serde(default, skip_serializing_if = "Option::is_none")]
3894    pub reason: Option<String>,
3895    /// The resolved workspace base domain. This is either the copy of the explicitly defined property of the
3896    /// same name in the spec or, if it is undefined in the spec and we're running on OpenShift, the automatically
3897    /// resolved basedomain for routes.
3898    #[serde(default, skip_serializing_if = "Option::is_none", rename = "workspaceBaseDomain")]
3899    pub workspace_base_domain: Option<String>,
3900}
3901