diff --git a/.golangci.yaml b/.golangci.yaml
index 770e32597..d6986ffd4 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -43,6 +43,8 @@ linters-settings:
alias: sharedApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1
alias: schedulerApi
+ - pkg: github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/profiles
+ alias: schedulerProfiles
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container
alias: schedulerContainerApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container/resources
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d85a3ea8..7d801fceb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- (Bugfix) Wait for ImageStatus in ImageDiscover
- (Bugfix) Fix Image Error Propagation
- (Feature) JobScheduler Coverage
+- (Feature) JobScheduler Volumes, Probes, Lifecycle and Ports integration
## [1.2.38](https://github.com/arangodb/kube-arangodb/tree/1.2.38) (2024-02-22)
- (Feature) Extract GRPC Server
diff --git a/docs/api/ArangoMLExtension.V1Alpha1.md b/docs/api/ArangoMLExtension.V1Alpha1.md
index 6eca867bc..d1ade8165 100644
--- a/docs/api/ArangoMLExtension.V1Alpha1.md
+++ b/docs/api/ArangoMLExtension.V1Alpha1.md
@@ -130,6 +130,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.deployment.prediction.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.deployment.prediction.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.deployment.prediction.port
Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/ml/v1alpha1/extension_spec_deployment_component.go#L34)
@@ -138,6 +158,29 @@ Port defines on which port the container will be listening for connections
***
+### .spec.deployment.prediction.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.deployment.prediction.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.deployment.prediction.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -160,6 +203,29 @@ Links:
***
+### .spec.deployment.prediction.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
+### .spec.deployment.prediction.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
### .spec.deployment.project.env
Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36)
@@ -218,6 +284,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.deployment.project.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.deployment.project.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.deployment.project.port
Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/ml/v1alpha1/extension_spec_deployment_component.go#L34)
@@ -226,6 +312,29 @@ Port defines on which port the container will be listening for connections
***
+### .spec.deployment.project.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.deployment.project.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.deployment.project.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -248,6 +357,29 @@ Links:
***
+### .spec.deployment.project.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
+### .spec.deployment.project.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
### .spec.deployment.replicas
Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L56)
@@ -368,6 +500,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.deployment.training.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.deployment.training.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.deployment.training.port
Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/ml/v1alpha1/extension_spec_deployment_component.go#L34)
@@ -376,6 +528,29 @@ Port defines on which port the container will be listening for connections
***
+### .spec.deployment.training.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.deployment.training.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.deployment.training.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -398,6 +573,40 @@ Links:
***
+### .spec.deployment.training.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
+### .spec.deployment.training.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.deployment.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.image
Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L37)
@@ -514,6 +723,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.init.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.init.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.init.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -536,6 +765,29 @@ Links:
***
+### .spec.init.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.init.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.init.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -582,6 +834,21 @@ Default Value: `false`
***
+### .spec.init.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.init.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -593,6 +860,25 @@ Links:
***
+### .spec.init.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.init.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.jobsTemplates.featurization.cpu.affinity
Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44)
@@ -683,6 +969,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.jobsTemplates.featurization.cpu.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.jobsTemplates.featurization.cpu.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.featurization.cpu.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -705,6 +1011,29 @@ Links:
***
+### .spec.jobsTemplates.featurization.cpu.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.jobsTemplates.featurization.cpu.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.featurization.cpu.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -751,6 +1080,21 @@ Default Value: `false`
***
+### .spec.jobsTemplates.featurization.cpu.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.featurization.cpu.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -762,6 +1106,25 @@ Links:
***
+### .spec.jobsTemplates.featurization.cpu.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.jobsTemplates.featurization.cpu.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.jobsTemplates.featurization.gpu.affinity
Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44)
@@ -852,6 +1215,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.jobsTemplates.featurization.gpu.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.jobsTemplates.featurization.gpu.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.featurization.gpu.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -874,6 +1257,29 @@ Links:
***
+### .spec.jobsTemplates.featurization.gpu.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.jobsTemplates.featurization.gpu.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.featurization.gpu.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -920,6 +1326,21 @@ Default Value: `false`
***
+### .spec.jobsTemplates.featurization.gpu.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.featurization.gpu.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -931,6 +1352,25 @@ Links:
***
+### .spec.jobsTemplates.featurization.gpu.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.jobsTemplates.featurization.gpu.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.jobsTemplates.prediction.cpu.affinity
Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44)
@@ -1021,6 +1461,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.jobsTemplates.prediction.cpu.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.jobsTemplates.prediction.cpu.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.prediction.cpu.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -1043,6 +1503,29 @@ Links:
***
+### .spec.jobsTemplates.prediction.cpu.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.jobsTemplates.prediction.cpu.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.prediction.cpu.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -1089,6 +1572,21 @@ Default Value: `false`
***
+### .spec.jobsTemplates.prediction.cpu.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.prediction.cpu.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -1100,6 +1598,25 @@ Links:
***
+### .spec.jobsTemplates.prediction.cpu.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.jobsTemplates.prediction.cpu.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.jobsTemplates.prediction.gpu.affinity
Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44)
@@ -1190,6 +1707,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.jobsTemplates.prediction.gpu.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.jobsTemplates.prediction.gpu.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.prediction.gpu.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -1212,6 +1749,29 @@ Links:
***
+### .spec.jobsTemplates.prediction.gpu.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.jobsTemplates.prediction.gpu.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.prediction.gpu.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -1258,6 +1818,21 @@ Default Value: `false`
***
+### .spec.jobsTemplates.prediction.gpu.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.prediction.gpu.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -1269,6 +1844,25 @@ Links:
***
+### .spec.jobsTemplates.prediction.gpu.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.jobsTemplates.prediction.gpu.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.jobsTemplates.training.cpu.affinity
Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44)
@@ -1359,6 +1953,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.jobsTemplates.training.cpu.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.jobsTemplates.training.cpu.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.training.cpu.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -1381,6 +1995,29 @@ Links:
***
+### .spec.jobsTemplates.training.cpu.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.jobsTemplates.training.cpu.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.training.cpu.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -1427,6 +2064,21 @@ Default Value: `false`
***
+### .spec.jobsTemplates.training.cpu.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.training.cpu.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -1438,6 +2090,25 @@ Links:
***
+### .spec.jobsTemplates.training.cpu.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.jobsTemplates.training.cpu.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.jobsTemplates.training.gpu.affinity
Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44)
@@ -1528,6 +2199,26 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.jobsTemplates.training.gpu.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
+### .spec.jobsTemplates.training.gpu.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.training.gpu.nodeSelector
Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39)
@@ -1550,6 +2241,29 @@ Links:
***
+### .spec.jobsTemplates.training.gpu.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.jobsTemplates.training.gpu.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.training.gpu.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -1596,6 +2310,21 @@ Default Value: `false`
***
+### .spec.jobsTemplates.training.gpu.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.jobsTemplates.training.gpu.tolerations
Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49)
@@ -1607,6 +2336,25 @@ Links:
***
+### .spec.jobsTemplates.training.gpu.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
+***
+
+### .spec.jobsTemplates.training.gpu.volumes
+
+Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36)
+
+Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/storage/volumes)
+
+***
+
### .spec.metadataService.local.arangoMLFeatureStore
Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/ml/v1alpha1/extension_spec_metadata_service.go#L65)
diff --git a/docs/api/ArangoMLStorage.V1Alpha1.md b/docs/api/ArangoMLStorage.V1Alpha1.md
index 9f28b303d..3cec412e0 100644
--- a/docs/api/ArangoMLStorage.V1Alpha1.md
+++ b/docs/api/ArangoMLStorage.V1Alpha1.md
@@ -162,6 +162,14 @@ ImagePullSecrets define Secrets used to pull Image from registry
***
+### .spec.mode.sidecar.lifecycle
+
+Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35)
+
+Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+
+***
+
### .spec.mode.sidecar.listenPort
Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/ml/v1alpha1/storage_spec_mode_sidecar.go#L32)
@@ -172,6 +180,41 @@ Default Value: `9201`
***
+### .spec.mode.sidecar.livenessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37)
+
+LivenessProbe keeps configuration of periodic probe of container liveness.
+Container will be restarted if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
+### .spec.mode.sidecar.ports
+
+Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39)
+
+Ports contains list of ports to expose from the container. Not specifying a port here
+DOES NOT prevent that port from being exposed. Any port which is
+listening on the default "0.0.0.0" address inside a container will be
+accessible from the network.
+
+***
+
+### .spec.mode.sidecar.readinessProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42)
+
+ReadinessProbe keeps configuration of periodic probe of container service readiness.
+Container will be removed from service endpoints if the probe fails.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
### .spec.mode.sidecar.resources
Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37)
@@ -192,6 +235,29 @@ SecurityContext holds container-level security attributes and common container s
Links:
* [Kubernetes docs](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
+***
+
+### .spec.mode.sidecar.startupProbe
+
+Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50)
+
+StartupProbe indicates that the Pod has successfully initialized.
+If specified, no other probes are executed until this completes successfully.
+If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+when it might take a long time to load data or warm a cache, than during steady-state operation.
+
+Links:
+* [Kubernetes docs](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes)
+
+***
+
+### .spec.mode.sidecar.volumeMounts
+
+Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.38/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35)
+
+VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+
## Status
### .status.conditions
diff --git a/pkg/apis/scheduler/v1alpha1/container/definition.go b/pkg/apis/scheduler/v1alpha1/container/definition.go
index 581723c01..cac954d26 100644
--- a/pkg/apis/scheduler/v1alpha1/container/definition.go
+++ b/pkg/apis/scheduler/v1alpha1/container/definition.go
@@ -110,11 +110,23 @@ type Container struct {
// Environments keeps the environment variables for Container
*schedulerContainerResourcesApi.Environments `json:",inline"`
- // Image define default image used for the job
+ // Image define default image used for the Container
*schedulerContainerResourcesApi.Image `json:",inline"`
- // Resources define resources assigned to the pod
+ // Resources define resources assigned to the Container
*schedulerContainerResourcesApi.Resources `json:",inline"`
+
+ // VolumeMounts define volume mounts assigned to the Container
+ *schedulerContainerResourcesApi.VolumeMounts `json:",inline"`
+
+ // Probes define probes assigned to the Container
+ *schedulerContainerResourcesApi.Probes `json:",inline"`
+
+ // Networking define networking assigned to the Container
+ *schedulerContainerResourcesApi.Networking `json:",inline"`
+
+ // Lifecycle define lifecycle assigned to the Container
+ *schedulerContainerResourcesApi.Lifecycle `json:",inline"`
}
func (c *Container) Apply(template *core.PodTemplateSpec, container *core.Container) error {
@@ -127,6 +139,10 @@ func (c *Container) Apply(template *core.PodTemplateSpec, container *core.Contai
c.Environments.Apply(template, container),
c.Image.Apply(template, container),
c.Resources.Apply(template, container),
+ c.VolumeMounts.Apply(template, container),
+ c.Probes.Apply(template, container),
+ c.Networking.Apply(template, container),
+ c.Lifecycle.Apply(template, container),
)
}
@@ -162,6 +178,38 @@ func (c *Container) GetEnvironments() *schedulerContainerResourcesApi.Environmen
return c.Environments
}
+func (c *Container) GetVolumeMounts() *schedulerContainerResourcesApi.VolumeMounts {
+ if c == nil || c.VolumeMounts == nil {
+ return nil
+ }
+
+ return c.VolumeMounts
+}
+
+func (c *Container) GetProbes() *schedulerContainerResourcesApi.Probes {
+ if c == nil || c.Probes == nil {
+ return nil
+ }
+
+ return c.Probes
+}
+
+func (c *Container) GetNetworking() *schedulerContainerResourcesApi.Networking {
+ if c == nil || c.Networking == nil {
+ return nil
+ }
+
+ return c.Networking
+}
+
+func (c *Container) GetLifecycle() *schedulerContainerResourcesApi.Lifecycle {
+ if c == nil || c.Lifecycle == nil {
+ return nil
+ }
+
+ return c.Lifecycle
+}
+
func (c *Container) With(other *Container) *Container {
if c == nil && other == nil {
return nil
@@ -180,6 +228,10 @@ func (c *Container) With(other *Container) *Container {
Environments: c.Environments.With(other.Environments),
Image: c.Image.With(other.Image),
Resources: c.Resources.With(other.Resources),
+ VolumeMounts: c.VolumeMounts.With(other.VolumeMounts),
+ Lifecycle: c.Lifecycle.With(other.Lifecycle),
+ Networking: c.Networking.With(other.Networking),
+ Probes: c.Probes.With(other.Probes),
}
}
@@ -193,5 +245,9 @@ func (c *Container) Validate() error {
shared.PrefixResourceErrors("containerEnvironments", c.Environments.Validate()),
shared.PrefixResourceErrors("containerResources", c.Image.Validate()),
shared.PrefixResourceErrors("containerImage", c.Resources.Validate()),
+ shared.PrefixResourceErrors("volumeMounts", c.VolumeMounts.Validate()),
+ shared.PrefixResourceErrors("lifecycle", c.Lifecycle.Validate()),
+ shared.PrefixResourceErrors("networking", c.Networking.Validate()),
+ shared.PrefixResourceErrors("probes", c.Probes.Validate()),
)
}
diff --git a/pkg/apis/scheduler/v1alpha1/container/definition_container_test.go b/pkg/apis/scheduler/v1alpha1/container/definition_container_test.go
index 73a922fba..4eab6cc5f 100644
--- a/pkg/apis/scheduler/v1alpha1/container/definition_container_test.go
+++ b/pkg/apis/scheduler/v1alpha1/container/definition_container_test.go
@@ -129,6 +129,46 @@ func Test_Container(t *testing.T) {
},
},
},
+ VolumeMounts: &schedulerContainerResourcesApi.VolumeMounts{
+ VolumeMounts: []core.VolumeMount{
+ {
+ Name: "TEST",
+ MountPath: "/data",
+ },
+ },
+ },
+ Probes: &schedulerContainerResourcesApi.Probes{
+ LivenessProbe: &core.Probe{
+ InitialDelaySeconds: 1,
+ },
+ ReadinessProbe: &core.Probe{
+ InitialDelaySeconds: 2,
+ },
+ StartupProbe: &core.Probe{
+ InitialDelaySeconds: 3,
+ },
+ },
+ Lifecycle: &schedulerContainerResourcesApi.Lifecycle{
+ Lifecycle: &core.Lifecycle{
+ PostStart: &core.LifecycleHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "test1",
+ },
+ },
+ PreStop: &core.LifecycleHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "test2",
+ },
+ },
+ },
+ },
+ Networking: &schedulerContainerResourcesApi.Networking{
+ Ports: []core.ContainerPort{
+ {
+ Name: "TEST",
+ },
+ },
+ },
})(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container, spec *Container) {
// Spec
require.NotNil(t, spec.Resources)
@@ -149,6 +189,31 @@ func Test_Container(t *testing.T) {
require.Len(t, spec.Environments.Env, 1)
require.EqualValues(t, "key1", spec.Environments.Env[0].Name)
require.EqualValues(t, "value1", spec.Environments.Env[0].Value)
+
+ require.NotNil(t, spec.VolumeMounts)
+ require.Len(t, spec.VolumeMounts.VolumeMounts, 1)
+ require.EqualValues(t, "TEST", spec.VolumeMounts.VolumeMounts[0].Name)
+
+ require.NotNil(t, spec.Probes)
+ require.NotNil(t, spec.Probes.LivenessProbe)
+ require.EqualValues(t, 1, spec.Probes.LivenessProbe.InitialDelaySeconds)
+ require.NotNil(t, spec.Probes.ReadinessProbe)
+ require.EqualValues(t, 2, spec.Probes.ReadinessProbe.InitialDelaySeconds)
+ require.NotNil(t, spec.Probes.StartupProbe)
+ require.EqualValues(t, 3, spec.Probes.StartupProbe.InitialDelaySeconds)
+
+ require.NotNil(t, spec.Lifecycle)
+ require.NotNil(t, spec.Lifecycle.Lifecycle)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PostStart)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PostStart.HTTPGet)
+ require.EqualValues(t, "test1", spec.Lifecycle.Lifecycle.PostStart.HTTPGet.Path)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PreStop)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PreStop.HTTPGet)
+ require.EqualValues(t, "test2", spec.Lifecycle.Lifecycle.PreStop.HTTPGet.Path)
+
+ require.NotNil(t, spec.Networking)
+ require.Len(t, spec.Networking.Ports, 1)
+ require.EqualValues(t, "TEST", spec.Networking.Ports[0].Name)
})
})
}
@@ -169,6 +234,29 @@ image: test
resources:
limits:
cpu: 1
+
+volumeMounts:
+ - name: TEST
+
+livenessProbe:
+ initialDelaySeconds: 1
+
+readinessProbe:
+ initialDelaySeconds: 2
+
+startupProbe:
+ initialDelaySeconds: 3
+
+lifecycle:
+ postStart:
+ httpGet:
+ path: test1
+ preStop:
+ httpGet:
+ path: test2
+
+ports:
+ - name: TEST
`, `
---
@@ -194,6 +282,31 @@ securityContext:
require.Len(t, spec.Environments.Env, 1)
require.EqualValues(t, "key1", spec.Environments.Env[0].Name)
require.EqualValues(t, "value1", spec.Environments.Env[0].Value)
+
+ require.NotNil(t, spec.VolumeMounts)
+ require.Len(t, spec.VolumeMounts.VolumeMounts, 1)
+ require.EqualValues(t, "TEST", spec.VolumeMounts.VolumeMounts[0].Name)
+
+ require.NotNil(t, spec.Probes)
+ require.NotNil(t, spec.Probes.LivenessProbe)
+ require.EqualValues(t, 1, spec.Probes.LivenessProbe.InitialDelaySeconds)
+ require.NotNil(t, spec.Probes.ReadinessProbe)
+ require.EqualValues(t, 2, spec.Probes.ReadinessProbe.InitialDelaySeconds)
+ require.NotNil(t, spec.Probes.StartupProbe)
+ require.EqualValues(t, 3, spec.Probes.StartupProbe.InitialDelaySeconds)
+
+ require.NotNil(t, spec.Lifecycle)
+ require.NotNil(t, spec.Lifecycle.Lifecycle)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PostStart)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PostStart.HTTPGet)
+ require.EqualValues(t, "test1", spec.Lifecycle.Lifecycle.PostStart.HTTPGet.Path)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PreStop)
+ require.NotNil(t, spec.Lifecycle.Lifecycle.PreStop.HTTPGet)
+ require.EqualValues(t, "test2", spec.Lifecycle.Lifecycle.PreStop.HTTPGet.Path)
+
+ require.NotNil(t, spec.Networking)
+ require.Len(t, spec.Networking.Ports, 1)
+ require.EqualValues(t, "TEST", spec.Networking.Ports[0].Name)
})
})
t.Run("With fields", func(t *testing.T) {
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/environments.go b/pkg/apis/scheduler/v1alpha1/container/resources/environments.go
index 79bdb300f..bd45fa833 100644
--- a/pkg/apis/scheduler/v1alpha1/container/resources/environments.go
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/environments.go
@@ -24,7 +24,7 @@ import (
core "k8s.io/api/core/v1"
"github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
- "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/envs"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources"
)
var _ interfaces.Container[Environments] = &Environments{}
@@ -46,8 +46,8 @@ func (e *Environments) Apply(_ *core.PodTemplateSpec, container *core.Container)
return nil
}
- container.Env = envs.MergeEnvs(container.Env, e.Env...)
- container.EnvFrom = envs.MergeEnvFrom(container.EnvFrom, e.EnvFrom...)
+ container.Env = resources.MergeEnvs(container.Env, e.Env...)
+ container.EnvFrom = resources.MergeEnvFrom(container.EnvFrom, e.EnvFrom...)
return nil
}
@@ -66,8 +66,8 @@ func (e *Environments) With(other *Environments) *Environments {
}
return &Environments{
- Env: envs.MergeEnvs(e.Env, other.Env...),
- EnvFrom: envs.MergeEnvFrom(e.EnvFrom, other.EnvFrom...),
+ Env: resources.MergeEnvs(e.Env, other.Env...),
+ EnvFrom: resources.MergeEnvFrom(e.EnvFrom, other.EnvFrom...),
}
}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go b/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go
new file mode 100644
index 000000000..e3c5a0d2f
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go
@@ -0,0 +1,68 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources"
+)
+
+var _ interfaces.Container[Lifecycle] = &Lifecycle{}
+
+type Lifecycle struct {
+ // Lifecycle keeps actions that the management system should take in response to container lifecycle events.
+ // +doc/type: core.Lifecycle
+ Lifecycle *core.Lifecycle `json:"lifecycle,omitempty"`
+}
+
+func (n *Lifecycle) Apply(_ *core.PodTemplateSpec, template *core.Container) error {
+ if n == nil {
+ return nil
+ }
+
+ template.Lifecycle = n.Lifecycle.DeepCopy()
+
+ return nil
+}
+
+func (n *Lifecycle) With(newResources *Lifecycle) *Lifecycle {
+ if n == nil && newResources == nil {
+ return nil
+ }
+
+ if n == nil {
+ return newResources.DeepCopy()
+ }
+
+ if newResources == nil {
+ return n.DeepCopy()
+ }
+
+ return &Lifecycle{
+ Lifecycle: resources.MergeLifecycle(n.Lifecycle, newResources.Lifecycle),
+ }
+}
+
+func (n *Lifecycle) Validate() error {
+ return nil
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle_test.go b/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle_test.go
new file mode 100644
index 000000000..2d22563f8
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle_test.go
@@ -0,0 +1,181 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ core "k8s.io/api/core/v1"
+)
+
+func applyLifecycle(t *testing.T, template *core.PodTemplateSpec, container *core.Container, ns ...*Lifecycle) func(in func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container)) {
+ var i *Lifecycle
+
+ for _, n := range ns {
+ require.NoError(t, n.Validate())
+
+ i = i.With(n)
+
+ require.NoError(t, i.Validate())
+ }
+
+ template = template.DeepCopy()
+
+ if template == nil {
+ template = &core.PodTemplateSpec{}
+ }
+
+ container = container.DeepCopy()
+ if container == nil {
+ container = &core.Container{}
+ }
+
+ template.Spec.Containers = append(template.Spec.Containers, *container)
+
+ container = &template.Spec.Containers[0]
+
+ require.NoError(t, i.Apply(template, container))
+
+ return func(in func(t *testing.T, spec *core.PodTemplateSpec, container *core.Container)) {
+ t.Run("Validate", func(t *testing.T) {
+ in(t, template, container)
+ })
+ }
+}
+
+func Test_Lifecycle(t *testing.T) {
+ t.Run("With Nil", func(t *testing.T) {
+ applyLifecycle(t, nil, nil)(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Nil(t, container.Lifecycle)
+ })
+ })
+ t.Run("With Empty", func(t *testing.T) {
+ applyLifecycle(t, &core.PodTemplateSpec{}, &core.Container{})(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Nil(t, container.Lifecycle)
+ })
+ })
+ t.Run("With lifecycles", func(t *testing.T) {
+ applyLifecycle(t, &core.PodTemplateSpec{}, &core.Container{}, &Lifecycle{
+ Lifecycle: &core.Lifecycle{
+ PostStart: &core.LifecycleHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ PreStop: &core.LifecycleHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.NotNil(t, container.Lifecycle)
+
+ require.NotNil(t, container.Lifecycle.PostStart)
+ require.NotNil(t, container.Lifecycle.PostStart.Exec)
+ require.Nil(t, container.Lifecycle.PostStart.HTTPGet)
+ require.Len(t, container.Lifecycle.PostStart.Exec.Command, 1)
+ require.EqualValues(t, "test", container.Lifecycle.PostStart.Exec.Command[0])
+
+ require.NotNil(t, container.Lifecycle.PreStop)
+ require.Nil(t, container.Lifecycle.PreStop.Exec)
+ require.NotNil(t, container.Lifecycle.PreStop.HTTPGet)
+ require.EqualValues(t, "/test", container.Lifecycle.PreStop.HTTPGet.Path)
+ })
+ })
+ t.Run("With merge", func(t *testing.T) {
+ applyLifecycle(t, &core.PodTemplateSpec{}, &core.Container{},
+ &Lifecycle{
+ Lifecycle: &core.Lifecycle{
+ PostStart: &core.LifecycleHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ },
+ },
+ &Lifecycle{
+ Lifecycle: &core.Lifecycle{
+ PreStop: &core.LifecycleHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.NotNil(t, container.Lifecycle)
+
+ require.NotNil(t, container.Lifecycle.PostStart)
+ require.NotNil(t, container.Lifecycle.PostStart.Exec)
+ require.Nil(t, container.Lifecycle.PostStart.HTTPGet)
+ require.Len(t, container.Lifecycle.PostStart.Exec.Command, 1)
+ require.EqualValues(t, "test", container.Lifecycle.PostStart.Exec.Command[0])
+
+ require.NotNil(t, container.Lifecycle.PreStop)
+ require.Nil(t, container.Lifecycle.PreStop.Exec)
+ require.NotNil(t, container.Lifecycle.PreStop.HTTPGet)
+ require.EqualValues(t, "/test", container.Lifecycle.PreStop.HTTPGet.Path)
+ })
+ })
+ t.Run("With override", func(t *testing.T) {
+ applyLifecycle(t, &core.PodTemplateSpec{}, &core.Container{}, &Lifecycle{
+ Lifecycle: &core.Lifecycle{
+ PostStart: &core.LifecycleHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ PreStop: &core.LifecycleHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ },
+ }, &Lifecycle{
+ Lifecycle: &core.Lifecycle{
+ PostStart: &core.LifecycleHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ PreStop: &core.LifecycleHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.NotNil(t, container.Lifecycle)
+
+ require.NotNil(t, container.Lifecycle.PreStop)
+ require.NotNil(t, container.Lifecycle.PreStop.Exec)
+ require.Nil(t, container.Lifecycle.PreStop.HTTPGet)
+ require.Len(t, container.Lifecycle.PreStop.Exec.Command, 1)
+ require.EqualValues(t, "test", container.Lifecycle.PreStop.Exec.Command[0])
+
+ require.NotNil(t, container.Lifecycle.PostStart)
+ require.Nil(t, container.Lifecycle.PostStart.Exec)
+ require.NotNil(t, container.Lifecycle.PostStart.HTTPGet)
+ require.EqualValues(t, "/test", container.Lifecycle.PostStart.HTTPGet.Path)
+ })
+ })
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/networking.go b/pkg/apis/scheduler/v1alpha1/container/resources/networking.go
new file mode 100644
index 000000000..8716f8c0d
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/networking.go
@@ -0,0 +1,86 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
+ "github.com/arangodb/kube-arangodb/pkg/util/errors"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources"
+)
+
+var _ interfaces.Container[Networking] = &Networking{}
+
+type Networking struct {
+ // Ports contains list of ports to expose from the container. Not specifying a port here
+ // DOES NOT prevent that port from being exposed. Any port which is
+ // listening on the default "0.0.0.0" address inside a container will be
+ // accessible from the network.
+ // +doc/type: []core.ContainerPort
+ Ports []core.ContainerPort `json:"ports,omitempty"`
+}
+
+func (n *Networking) Apply(pod *core.PodTemplateSpec, template *core.Container) error {
+ if n == nil {
+ return nil
+ }
+
+ for _, port := range n.Ports {
+ if port.Name == "" {
+ continue
+ }
+
+ for _, container := range pod.Spec.Containers {
+ for _, existingPort := range container.Ports {
+ if port.Name == existingPort.Name {
+ return errors.Errorf("Port with name `%s` already exposed in container `%s`", port.Name, container.Name)
+ }
+ }
+ }
+ }
+
+ obj := n.DeepCopy()
+
+ template.Ports = obj.Ports
+
+ return nil
+}
+
+func (n *Networking) With(newResources *Networking) *Networking {
+ if n == nil && newResources == nil {
+ return nil
+ }
+
+ if n == nil {
+ return newResources.DeepCopy()
+ }
+
+ if newResources == nil {
+ return n.DeepCopy()
+ }
+
+ return &Networking{Ports: resources.MergeContainerPorts(n.Ports, newResources.Ports...)}
+}
+
+func (n *Networking) Validate() error {
+ return nil
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/networking_test.go b/pkg/apis/scheduler/v1alpha1/container/resources/networking_test.go
new file mode 100644
index 000000000..18bf3d8d8
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/networking_test.go
@@ -0,0 +1,140 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ core "k8s.io/api/core/v1"
+)
+
+func applyNetworking(t *testing.T, template *core.PodTemplateSpec, container *core.Container, ns ...*Networking) func(in func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container)) {
+ var i *Networking
+
+ for _, n := range ns {
+ require.NoError(t, n.Validate())
+
+ i = i.With(n)
+
+ require.NoError(t, i.Validate())
+ }
+
+ template = template.DeepCopy()
+
+ if template == nil {
+ template = &core.PodTemplateSpec{}
+ }
+
+ container = container.DeepCopy()
+ if container == nil {
+ container = &core.Container{}
+ }
+
+ template.Spec.Containers = append(template.Spec.Containers, *container)
+
+ container = &template.Spec.Containers[0]
+
+ require.NoError(t, i.Apply(template, container))
+
+ return func(in func(t *testing.T, spec *core.PodTemplateSpec, container *core.Container)) {
+ t.Run("Validate", func(t *testing.T) {
+ in(t, template, container)
+ })
+ }
+}
+
+func Test_Networking(t *testing.T) {
+ t.Run("With Nil", func(t *testing.T) {
+ applyNetworking(t, nil, nil)(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.Ports, 0)
+ })
+ })
+ t.Run("With Empty", func(t *testing.T) {
+ applyNetworking(t, &core.PodTemplateSpec{}, &core.Container{})(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.Ports, 0)
+ })
+ })
+ t.Run("With Port", func(t *testing.T) {
+ applyNetworking(t, &core.PodTemplateSpec{}, &core.Container{}, &Networking{
+ Ports: []core.ContainerPort{
+ {
+ Name: "TEST",
+ ContainerPort: 1,
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.Ports, 1)
+
+ require.EqualValues(t, "TEST", container.Ports[0].Name)
+ require.EqualValues(t, 1, container.Ports[0].ContainerPort)
+ })
+ })
+ t.Run("With Port Append", func(t *testing.T) {
+ applyNetworking(t, &core.PodTemplateSpec{}, &core.Container{}, &Networking{
+ Ports: []core.ContainerPort{
+ {
+ Name: "TEST",
+ ContainerPort: 1,
+ },
+ },
+ }, &Networking{
+ Ports: []core.ContainerPort{
+ {
+ Name: "TEST2",
+ ContainerPort: 2,
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.Ports, 2)
+
+ require.EqualValues(t, "TEST", container.Ports[0].Name)
+ require.EqualValues(t, 1, container.Ports[0].ContainerPort)
+
+ require.EqualValues(t, "TEST2", container.Ports[1].Name)
+ require.EqualValues(t, 2, container.Ports[1].ContainerPort)
+ })
+ })
+ t.Run("With Port Update", func(t *testing.T) {
+ applyNetworking(t, &core.PodTemplateSpec{}, &core.Container{}, &Networking{
+ Ports: []core.ContainerPort{
+ {
+ Name: "TEST",
+ ContainerPort: 1,
+ HostIP: "IP",
+ },
+ },
+ }, &Networking{
+ Ports: []core.ContainerPort{
+ {
+ Name: "TEST",
+ ContainerPort: 2,
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.Ports, 1)
+
+ require.EqualValues(t, "TEST", container.Ports[0].Name)
+ require.EqualValues(t, 2, container.Ports[0].ContainerPort)
+ require.EqualValues(t, "", container.Ports[0].HostIP)
+ })
+ })
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/probes.go b/pkg/apis/scheduler/v1alpha1/container/resources/probes.go
new file mode 100644
index 000000000..25db181d7
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/probes.go
@@ -0,0 +1,87 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources"
+)
+
+var _ interfaces.Container[Probes] = &Probes{}
+
+type Probes struct {
+ // LivenessProbe keeps configuration of periodic probe of container liveness.
+ // Container will be restarted if the probe fails.
+ // +doc/type: core.Probe
+ // +doc/link: Kubernetes docs|https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ LivenessProbe *core.Probe `json:"livenessProbe,omitempty"`
+ // ReadinessProbe keeps configuration of periodic probe of container service readiness.
+ // Container will be removed from service endpoints if the probe fails.
+ // +doc/type: core.Probe
+ // +doc/link: Kubernetes docs|https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ ReadinessProbe *core.Probe `json:"readinessProbe,omitempty"`
+ // StartupProbe indicates that the Pod has successfully initialized.
+ // If specified, no other probes are executed until this completes successfully.
+ // If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
+ // This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
+ // when it might take a long time to load data or warm a cache, than during steady-state operation.
+ // +doc/type: core.Probe
+ // +doc/link: Kubernetes docs|https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
+ StartupProbe *core.Probe `json:"startupProbe,omitempty"`
+}
+
+func (n *Probes) Apply(_ *core.PodTemplateSpec, template *core.Container) error {
+ if n == nil {
+ return nil
+ }
+
+ template.LivenessProbe = n.LivenessProbe.DeepCopy()
+ template.StartupProbe = n.StartupProbe.DeepCopy()
+ template.ReadinessProbe = n.ReadinessProbe.DeepCopy()
+
+ return nil
+}
+
+func (n *Probes) With(newResources *Probes) *Probes {
+ if n == nil && newResources == nil {
+ return nil
+ }
+
+ if n == nil {
+ return newResources.DeepCopy()
+ }
+
+ if newResources == nil {
+ return n.DeepCopy()
+ }
+
+ return &Probes{
+ LivenessProbe: resources.MergeProbes(n.LivenessProbe, newResources.LivenessProbe),
+ ReadinessProbe: resources.MergeProbes(n.ReadinessProbe, newResources.ReadinessProbe),
+ StartupProbe: resources.MergeProbes(n.StartupProbe, newResources.StartupProbe),
+ }
+}
+
+func (n *Probes) Validate() error {
+ return nil
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/probes_test.go b/pkg/apis/scheduler/v1alpha1/container/resources/probes_test.go
new file mode 100644
index 000000000..150af55bb
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/probes_test.go
@@ -0,0 +1,271 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ core "k8s.io/api/core/v1"
+)
+
+func applyProbes(t *testing.T, template *core.PodTemplateSpec, container *core.Container, ns ...*Probes) func(in func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container)) {
+ var i *Probes
+
+ for _, n := range ns {
+ require.NoError(t, n.Validate())
+
+ i = i.With(n)
+
+ require.NoError(t, i.Validate())
+ }
+
+ template = template.DeepCopy()
+
+ if template == nil {
+ template = &core.PodTemplateSpec{}
+ }
+
+ container = container.DeepCopy()
+ if container == nil {
+ container = &core.Container{}
+ }
+
+ template.Spec.Containers = append(template.Spec.Containers, *container)
+
+ container = &template.Spec.Containers[0]
+
+ require.NoError(t, i.Apply(template, container))
+
+ return func(in func(t *testing.T, spec *core.PodTemplateSpec, container *core.Container)) {
+ t.Run("Validate", func(t *testing.T) {
+ in(t, template, container)
+ })
+ }
+}
+
+func Test_Probes(t *testing.T) {
+ t.Run("With Nil", func(t *testing.T) {
+ applyProbes(t, nil, nil)(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Nil(t, container.ReadinessProbe)
+ require.Nil(t, container.LivenessProbe)
+ require.Nil(t, container.StartupProbe)
+ })
+ })
+ t.Run("With Empty", func(t *testing.T) {
+ applyProbes(t, &core.PodTemplateSpec{}, &core.Container{})(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Nil(t, container.ReadinessProbe)
+ require.Nil(t, container.LivenessProbe)
+ require.Nil(t, container.StartupProbe)
+ })
+ })
+ t.Run("With Probes", func(t *testing.T) {
+ applyProbes(t, &core.PodTemplateSpec{}, &core.Container{}, &Probes{
+ ReadinessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ InitialDelaySeconds: 10,
+ },
+ LivenessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ InitialDelaySeconds: 15,
+ },
+ StartupProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ GRPC: &core.GRPCAction{
+ Port: 33,
+ },
+ },
+ InitialDelaySeconds: 20,
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.NotNil(t, container.ReadinessProbe)
+ require.EqualValues(t, 10, container.ReadinessProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.ReadinessProbe.TimeoutSeconds)
+ require.Nil(t, container.ReadinessProbe.HTTPGet)
+ require.NotNil(t, container.ReadinessProbe.Exec)
+ require.Nil(t, container.ReadinessProbe.GRPC)
+ require.Len(t, container.ReadinessProbe.Exec.Command, 1)
+ require.EqualValues(t, "test", container.ReadinessProbe.Exec.Command[0])
+
+ require.NotNil(t, container.LivenessProbe)
+ require.EqualValues(t, 15, container.LivenessProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.LivenessProbe.TimeoutSeconds)
+ require.NotNil(t, container.LivenessProbe.HTTPGet)
+ require.Nil(t, container.LivenessProbe.Exec)
+ require.Nil(t, container.LivenessProbe.GRPC)
+ require.EqualValues(t, "/test", container.LivenessProbe.HTTPGet.Path)
+
+ require.NotNil(t, container.StartupProbe)
+ require.EqualValues(t, 20, container.StartupProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.StartupProbe.TimeoutSeconds)
+ require.Nil(t, container.StartupProbe.HTTPGet)
+ require.Nil(t, container.StartupProbe.Exec)
+ require.NotNil(t, container.StartupProbe.GRPC)
+ require.EqualValues(t, 33, container.StartupProbe.GRPC.Port)
+ })
+ })
+ t.Run("With Time Updates", func(t *testing.T) {
+ applyProbes(t, &core.PodTemplateSpec{}, &core.Container{}, &Probes{
+ ReadinessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ InitialDelaySeconds: 10,
+ },
+ LivenessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ InitialDelaySeconds: 15,
+ },
+ StartupProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ GRPC: &core.GRPCAction{
+ Port: 33,
+ },
+ },
+ InitialDelaySeconds: 20,
+ },
+ }, &Probes{
+ ReadinessProbe: &core.Probe{
+ InitialDelaySeconds: 60,
+ },
+ LivenessProbe: &core.Probe{
+ InitialDelaySeconds: 61,
+ },
+ StartupProbe: &core.Probe{
+ TimeoutSeconds: 62,
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.NotNil(t, container.ReadinessProbe)
+ require.EqualValues(t, 60, container.ReadinessProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.ReadinessProbe.TimeoutSeconds)
+ require.Nil(t, container.ReadinessProbe.HTTPGet)
+ require.NotNil(t, container.ReadinessProbe.Exec)
+ require.Nil(t, container.ReadinessProbe.GRPC)
+ require.Len(t, container.ReadinessProbe.Exec.Command, 1)
+ require.EqualValues(t, "test", container.ReadinessProbe.Exec.Command[0])
+
+ require.NotNil(t, container.LivenessProbe)
+ require.EqualValues(t, 61, container.LivenessProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.LivenessProbe.TimeoutSeconds)
+ require.NotNil(t, container.LivenessProbe.HTTPGet)
+ require.Nil(t, container.LivenessProbe.Exec)
+ require.Nil(t, container.LivenessProbe.GRPC)
+ require.EqualValues(t, "/test", container.LivenessProbe.HTTPGet.Path)
+
+ require.NotNil(t, container.StartupProbe)
+ require.EqualValues(t, 20, container.StartupProbe.InitialDelaySeconds)
+ require.EqualValues(t, 62, container.StartupProbe.TimeoutSeconds)
+ require.Nil(t, container.StartupProbe.HTTPGet)
+ require.Nil(t, container.StartupProbe.Exec)
+ require.NotNil(t, container.StartupProbe.GRPC)
+ require.EqualValues(t, 33, container.StartupProbe.GRPC.Port)
+ })
+ })
+ t.Run("With Exec Updates", func(t *testing.T) {
+ applyProbes(t, &core.PodTemplateSpec{}, &core.Container{}, &Probes{
+ ReadinessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ InitialDelaySeconds: 10,
+ },
+ LivenessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ InitialDelaySeconds: 15,
+ },
+ StartupProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ GRPC: &core.GRPCAction{
+ Port: 33,
+ },
+ },
+ InitialDelaySeconds: 20,
+ },
+ }, &Probes{
+ ReadinessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ GRPC: &core.GRPCAction{
+ Port: 33,
+ },
+ },
+ },
+ LivenessProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ Exec: &core.ExecAction{
+ Command: []string{"test"},
+ },
+ },
+ },
+ StartupProbe: &core.Probe{
+ ProbeHandler: core.ProbeHandler{
+ HTTPGet: &core.HTTPGetAction{
+ Path: "/test",
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.NotNil(t, container.ReadinessProbe)
+ require.EqualValues(t, 10, container.ReadinessProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.ReadinessProbe.TimeoutSeconds)
+ require.Nil(t, container.ReadinessProbe.HTTPGet)
+ require.Nil(t, container.ReadinessProbe.Exec)
+ require.NotNil(t, container.ReadinessProbe.GRPC)
+ require.EqualValues(t, 33, container.ReadinessProbe.GRPC.Port)
+
+ require.NotNil(t, container.LivenessProbe)
+ require.EqualValues(t, 15, container.LivenessProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.LivenessProbe.TimeoutSeconds)
+ require.Nil(t, container.LivenessProbe.HTTPGet)
+ require.NotNil(t, container.LivenessProbe.Exec)
+ require.Nil(t, container.LivenessProbe.GRPC)
+ require.Len(t, container.LivenessProbe.Exec.Command, 1)
+ require.EqualValues(t, "test", container.LivenessProbe.Exec.Command[0])
+
+ require.NotNil(t, container.StartupProbe)
+ require.EqualValues(t, 20, container.StartupProbe.InitialDelaySeconds)
+ require.EqualValues(t, 0, container.StartupProbe.TimeoutSeconds)
+ require.NotNil(t, container.StartupProbe.HTTPGet)
+ require.Nil(t, container.StartupProbe.Exec)
+ require.Nil(t, container.StartupProbe.GRPC)
+ require.EqualValues(t, "/test", container.StartupProbe.HTTPGet.Path)
+ })
+ })
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go b/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go
new file mode 100644
index 000000000..37df50957
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go
@@ -0,0 +1,70 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources"
+)
+
+var _ interfaces.Container[VolumeMounts] = &VolumeMounts{}
+
+type VolumeMounts struct {
+ // VolumeMounts keeps list of pod volumes to mount into the container's filesystem.
+ // +doc/type: []core.VolumeMount
+ VolumeMounts []core.VolumeMount `json:"volumeMounts,omitempty"`
+}
+
+func (v *VolumeMounts) Apply(_ *core.PodTemplateSpec, container *core.Container) error {
+ if v == nil {
+ return nil
+ }
+
+ obj := v.DeepCopy()
+
+ container.VolumeMounts = obj.VolumeMounts
+
+ return nil
+}
+
+func (v *VolumeMounts) With(other *VolumeMounts) *VolumeMounts {
+ if v == nil && other == nil {
+ return nil
+ }
+
+ if v == nil {
+ return other.DeepCopy()
+ }
+
+ if other == nil {
+ return v.DeepCopy()
+ }
+
+ return &VolumeMounts{
+ VolumeMounts: resources.MergeVolumeMounts(v.VolumeMounts, other.VolumeMounts...),
+ }
+}
+
+func (v *VolumeMounts) Validate() error {
+ return nil
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts_test.go b/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts_test.go
new file mode 100644
index 000000000..1de913554
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts_test.go
@@ -0,0 +1,145 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ core "k8s.io/api/core/v1"
+)
+
+func applyVolumeMounts(t *testing.T, template *core.PodTemplateSpec, container *core.Container, ns ...*VolumeMounts) func(in func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container)) {
+ var i *VolumeMounts
+
+ for _, n := range ns {
+ require.NoError(t, n.Validate())
+
+ i = i.With(n)
+
+ require.NoError(t, i.Validate())
+ }
+
+ template = template.DeepCopy()
+
+ if template == nil {
+ template = &core.PodTemplateSpec{}
+ }
+
+ container = container.DeepCopy()
+ if container == nil {
+ container = &core.Container{}
+ }
+
+ template.Spec.Containers = append(template.Spec.Containers, *container)
+
+ container = &template.Spec.Containers[0]
+
+ require.NoError(t, i.Apply(template, container))
+
+ return func(in func(t *testing.T, spec *core.PodTemplateSpec, container *core.Container)) {
+ t.Run("Validate", func(t *testing.T) {
+ in(t, template, container)
+ })
+ }
+}
+
+func Test_VolumeMounts(t *testing.T) {
+ t.Run("With Nil", func(t *testing.T) {
+ applyVolumeMounts(t, nil, nil)(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.VolumeMounts, 0)
+ })
+ })
+ t.Run("With Empty", func(t *testing.T) {
+ applyVolumeMounts(t, &core.PodTemplateSpec{}, &core.Container{})(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.VolumeMounts, 0)
+ })
+ })
+ t.Run("Add mount", func(t *testing.T) {
+ applyVolumeMounts(t, &core.PodTemplateSpec{}, &core.Container{}, &VolumeMounts{
+ VolumeMounts: []core.VolumeMount{
+ {
+ Name: "test",
+ ReadOnly: false,
+ MountPath: "/var/test",
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.VolumeMounts, 1)
+
+ require.EqualValues(t, "test", container.VolumeMounts[0].Name)
+ require.EqualValues(t, "/var/test", container.VolumeMounts[0].MountPath)
+ require.False(t, container.VolumeMounts[0].ReadOnly)
+ })
+ })
+ t.Run("Append mount", func(t *testing.T) {
+ applyVolumeMounts(t, &core.PodTemplateSpec{}, &core.Container{}, &VolumeMounts{
+ VolumeMounts: []core.VolumeMount{
+ {
+ Name: "test",
+ ReadOnly: false,
+ MountPath: "/var/test",
+ },
+ {
+ Name: "test2",
+ ReadOnly: true,
+ MountPath: "/var/test2",
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.VolumeMounts, 2)
+
+ require.EqualValues(t, "test", container.VolumeMounts[0].Name)
+ require.EqualValues(t, "/var/test", container.VolumeMounts[0].MountPath)
+ require.False(t, container.VolumeMounts[0].ReadOnly)
+
+ require.EqualValues(t, "test2", container.VolumeMounts[1].Name)
+ require.EqualValues(t, "/var/test2", container.VolumeMounts[1].MountPath)
+ require.True(t, container.VolumeMounts[1].ReadOnly)
+ })
+ })
+ t.Run("Second mount", func(t *testing.T) {
+ applyVolumeMounts(t, &core.PodTemplateSpec{}, &core.Container{}, &VolumeMounts{
+ VolumeMounts: []core.VolumeMount{
+ {
+ Name: "test",
+ ReadOnly: false,
+ MountPath: "/var/test",
+ },
+ {
+ Name: "test",
+ ReadOnly: true,
+ MountPath: "/var/test2",
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec, container *core.Container) {
+ require.Len(t, container.VolumeMounts, 2)
+
+ require.EqualValues(t, "test", container.VolumeMounts[0].Name)
+ require.EqualValues(t, "/var/test", container.VolumeMounts[0].MountPath)
+ require.False(t, container.VolumeMounts[0].ReadOnly)
+
+ require.EqualValues(t, "test", container.VolumeMounts[1].Name)
+ require.EqualValues(t, "/var/test2", container.VolumeMounts[1].MountPath)
+ require.True(t, container.VolumeMounts[1].ReadOnly)
+ })
+ })
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go
index 0bf59ddcc..0fd4b28db 100644
--- a/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go
+++ b/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go
@@ -110,6 +110,79 @@ func (in ImagePullSecrets) DeepCopy() ImagePullSecrets {
return *out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Lifecycle) DeepCopyInto(out *Lifecycle) {
+ *out = *in
+ if in.Lifecycle != nil {
+ in, out := &in.Lifecycle, &out.Lifecycle
+ *out = new(v1.Lifecycle)
+ (*in).DeepCopyInto(*out)
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lifecycle.
+func (in *Lifecycle) DeepCopy() *Lifecycle {
+ if in == nil {
+ return nil
+ }
+ out := new(Lifecycle)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Networking) DeepCopyInto(out *Networking) {
+ *out = *in
+ if in.Ports != nil {
+ in, out := &in.Ports, &out.Ports
+ *out = make([]v1.ContainerPort, len(*in))
+ copy(*out, *in)
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Networking.
+func (in *Networking) DeepCopy() *Networking {
+ if in == nil {
+ return nil
+ }
+ out := new(Networking)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Probes) DeepCopyInto(out *Probes) {
+ *out = *in
+ if in.LivenessProbe != nil {
+ in, out := &in.LivenessProbe, &out.LivenessProbe
+ *out = new(v1.Probe)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.ReadinessProbe != nil {
+ in, out := &in.ReadinessProbe, &out.ReadinessProbe
+ *out = new(v1.Probe)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.StartupProbe != nil {
+ in, out := &in.StartupProbe, &out.StartupProbe
+ *out = new(v1.Probe)
+ (*in).DeepCopyInto(*out)
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Probes.
+func (in *Probes) DeepCopy() *Probes {
+ if in == nil {
+ return nil
+ }
+ out := new(Probes)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Resources) DeepCopyInto(out *Resources) {
*out = *in
@@ -151,3 +224,26 @@ func (in *Security) DeepCopy() *Security {
in.DeepCopyInto(out)
return out
}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *VolumeMounts) DeepCopyInto(out *VolumeMounts) {
+ *out = *in
+ if in.VolumeMounts != nil {
+ in, out := &in.VolumeMounts, &out.VolumeMounts
+ *out = make([]v1.VolumeMount, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeMounts.
+func (in *VolumeMounts) DeepCopy() *VolumeMounts {
+ if in == nil {
+ return nil
+ }
+ out := new(VolumeMounts)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go
index 65c92f4fb..d606f5b8b 100644
--- a/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go
+++ b/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go
@@ -52,6 +52,26 @@ func (in *Container) DeepCopyInto(out *Container) {
*out = new(resources.Resources)
(*in).DeepCopyInto(*out)
}
+ if in.VolumeMounts != nil {
+ in, out := &in.VolumeMounts, &out.VolumeMounts
+ *out = new(resources.VolumeMounts)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Probes != nil {
+ in, out := &in.Probes, &out.Probes
+ *out = new(resources.Probes)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Networking != nil {
+ in, out := &in.Networking, &out.Networking
+ *out = new(resources.Networking)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Lifecycle != nil {
+ in, out := &in.Lifecycle, &out.Lifecycle
+ *out = new(resources.Lifecycle)
+ (*in).DeepCopyInto(*out)
+ }
return
}
diff --git a/pkg/apis/scheduler/v1alpha1/pod/definition.go b/pkg/apis/scheduler/v1alpha1/pod/definition.go
index ba3373ece..7daa08615 100644
--- a/pkg/apis/scheduler/v1alpha1/pod/definition.go
+++ b/pkg/apis/scheduler/v1alpha1/pod/definition.go
@@ -39,6 +39,9 @@ type Pod struct {
// Security keeps the security settings for Pod
*schedulerPodResourcesApi.Security `json:",inline"`
+
+ // Volumes keeps the volumes settings for Pod
+ *schedulerPodResourcesApi.Volumes `json:",inline"`
}
func (a *Pod) With(other *Pod) *Pod {
@@ -58,6 +61,7 @@ func (a *Pod) With(other *Pod) *Pod {
Scheduling: a.Scheduling.With(other.Scheduling),
Namespace: a.Namespace.With(other.Namespace),
Security: a.Security.With(other.Security),
+ Volumes: a.Volumes.With(other.Volumes),
}
}
@@ -70,6 +74,7 @@ func (a *Pod) Apply(template *core.PodTemplateSpec) error {
a.Scheduling.Apply(template),
a.Namespace.Apply(template),
a.Security.Apply(template),
+ a.Volumes.Apply(template),
)
}
@@ -97,6 +102,14 @@ func (a *Pod) GetContainerNamespace() *schedulerPodResourcesApi.Namespace {
return a.Namespace
}
+func (a *Pod) GetVolumes() *schedulerPodResourcesApi.Volumes {
+ if a == nil {
+ return nil
+ }
+
+ return a.Volumes
+}
+
func (a *Pod) Validate() error {
if a == nil {
return nil
@@ -105,5 +118,6 @@ func (a *Pod) Validate() error {
a.Scheduling.Validate(),
a.Namespace.Validate(),
a.Security.Validate(),
+ a.Volumes.Validate(),
)
}
diff --git a/pkg/apis/scheduler/v1alpha1/pod/definition_test.go b/pkg/apis/scheduler/v1alpha1/pod/definition_test.go
index 0b7fb63f4..1c8835f64 100644
--- a/pkg/apis/scheduler/v1alpha1/pod/definition_test.go
+++ b/pkg/apis/scheduler/v1alpha1/pod/definition_test.go
@@ -182,6 +182,9 @@ nodeSelector:
podSecurityContext:
runAsUser: 10
hostPID: true
+volumes:
+ - name: test
+ emptyDir: {}
`)(func(t *testing.T, pod *core.PodTemplateSpec, spec *Pod) {
// Spec
require.NotNil(t, spec.Security)
@@ -195,6 +198,10 @@ hostPID: true
require.NotNil(t, spec.Namespace)
require.NotNil(t, spec.Namespace.HostPID)
require.True(t, *spec.Namespace.HostPID)
+ require.NotNil(t, spec.Volumes)
+ require.Len(t, spec.Volumes.Volumes, 1)
+ require.EqualValues(t, "test", spec.Volumes.Volumes[0].Name)
+ require.NotNil(t, spec.Volumes.Volumes[0].EmptyDir)
// Pod
require.NotNil(t, pod.Spec.SecurityContext)
@@ -207,6 +214,9 @@ hostPID: true
require.Nil(t, pod.Spec.Affinity)
require.NotNil(t, pod.Spec.HostPID)
require.True(t, pod.Spec.HostPID)
+ require.Len(t, pod.Spec.Volumes, 1)
+ require.EqualValues(t, "test", pod.Spec.Volumes[0].Name)
+ require.NotNil(t, pod.Spec.Volumes[0].EmptyDir)
})
})
}
diff --git a/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go b/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go
new file mode 100644
index 000000000..fb734a1dd
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go
@@ -0,0 +1,71 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources"
+)
+
+var _ interfaces.Pod[Volumes] = &Volumes{}
+
+type Volumes struct {
+ // Volumes keeps list of volumes that can be mounted by containers belonging to the pod.
+ // +doc/type: []core.Volume
+ // +doc/link: Kubernetes docs|https://kubernetes.io/docs/concepts/storage/volumes
+ Volumes []core.Volume `json:"volumes,omitempty"`
+}
+
+func (v *Volumes) Apply(template *core.PodTemplateSpec) error {
+ if v == nil {
+ return nil
+ }
+
+ obj := v.DeepCopy()
+
+ template.Spec.Volumes = obj.Volumes
+
+ return nil
+}
+
+func (v *Volumes) With(other *Volumes) *Volumes {
+ if v == nil && other == nil {
+ return nil
+ }
+
+ if v == nil {
+ return other.DeepCopy()
+ }
+
+ if other == nil {
+ return v.DeepCopy()
+ }
+
+ return &Volumes{
+ Volumes: resources.MergeVolumes(v.Volumes, other.Volumes...),
+ }
+}
+
+func (v *Volumes) Validate() error {
+ return nil
+}
diff --git a/pkg/apis/scheduler/v1alpha1/pod/resources/volumes_test.go b/pkg/apis/scheduler/v1alpha1/pod/resources/volumes_test.go
new file mode 100644
index 000000000..381affd40
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/pod/resources/volumes_test.go
@@ -0,0 +1,149 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ core "k8s.io/api/core/v1"
+)
+
+func applyVolumes(t *testing.T, template *core.PodTemplateSpec, ns ...*Volumes) func(in func(t *testing.T, pod *core.PodTemplateSpec)) {
+ var i *Volumes
+
+ for _, n := range ns {
+ require.NoError(t, n.Validate())
+
+ i = i.With(n)
+
+ require.NoError(t, i.Validate())
+ }
+
+ template = template.DeepCopy()
+
+ if template == nil {
+ template = &core.PodTemplateSpec{}
+ }
+
+ require.NoError(t, i.Apply(template))
+
+ return func(in func(t *testing.T, spec *core.PodTemplateSpec)) {
+ t.Run("Validate", func(t *testing.T) {
+ in(t, template)
+ })
+ }
+}
+
+func Test_Volumes(t *testing.T) {
+ t.Run("Nil", func(t *testing.T) {
+ applyVolumes(t, nil)(func(t *testing.T, pod *core.PodTemplateSpec) {
+ require.Len(t, pod.Spec.Volumes, 0)
+ })
+ })
+ t.Run("Empty", func(t *testing.T) {
+ applyVolumes(t, &core.PodTemplateSpec{})(func(t *testing.T, pod *core.PodTemplateSpec) {
+ require.Len(t, pod.Spec.Volumes, 0)
+ })
+ })
+ t.Run("Add volume", func(t *testing.T) {
+ applyVolumes(t, &core.PodTemplateSpec{}, &Volumes{
+ Volumes: []core.Volume{
+ {
+ Name: "test",
+ VolumeSource: core.VolumeSource{
+ EmptyDir: &core.EmptyDirVolumeSource{},
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec) {
+ require.Len(t, pod.Spec.Volumes, 1)
+
+ require.EqualValues(t, "test", pod.Spec.Volumes[0].Name)
+ require.NotNil(t, pod.Spec.Volumes[0].VolumeSource.EmptyDir)
+ require.Nil(t, pod.Spec.Volumes[0].VolumeSource.Secret)
+ })
+ })
+ t.Run("Append volume", func(t *testing.T) {
+ applyVolumes(t, &core.PodTemplateSpec{}, &Volumes{
+ Volumes: []core.Volume{
+ {
+ Name: "test",
+ VolumeSource: core.VolumeSource{
+ EmptyDir: &core.EmptyDirVolumeSource{},
+ },
+ },
+ },
+ }, &Volumes{
+ Volumes: []core.Volume{
+ {
+ Name: "test2",
+ VolumeSource: core.VolumeSource{
+ Secret: &core.SecretVolumeSource{
+ SecretName: "test",
+ },
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec) {
+ require.Len(t, pod.Spec.Volumes, 2)
+
+ require.EqualValues(t, "test", pod.Spec.Volumes[0].Name)
+ require.NotNil(t, pod.Spec.Volumes[0].VolumeSource.EmptyDir)
+ require.Nil(t, pod.Spec.Volumes[0].VolumeSource.Secret)
+
+ require.EqualValues(t, "test2", pod.Spec.Volumes[1].Name)
+ require.Nil(t, pod.Spec.Volumes[1].VolumeSource.EmptyDir)
+ require.NotNil(t, pod.Spec.Volumes[1].VolumeSource.Secret)
+ require.EqualValues(t, "test", pod.Spec.Volumes[1].VolumeSource.Secret.SecretName)
+ })
+ })
+ t.Run("Update volume", func(t *testing.T) {
+ applyVolumes(t, &core.PodTemplateSpec{}, &Volumes{
+ Volumes: []core.Volume{
+ {
+ Name: "test",
+ VolumeSource: core.VolumeSource{
+ EmptyDir: &core.EmptyDirVolumeSource{},
+ },
+ },
+ },
+ }, &Volumes{
+ Volumes: []core.Volume{
+ {
+ Name: "test",
+ VolumeSource: core.VolumeSource{
+ Secret: &core.SecretVolumeSource{
+ SecretName: "test",
+ },
+ },
+ },
+ },
+ })(func(t *testing.T, pod *core.PodTemplateSpec) {
+ require.Len(t, pod.Spec.Volumes, 1)
+
+ require.EqualValues(t, "test", pod.Spec.Volumes[0].Name)
+ require.Nil(t, pod.Spec.Volumes[0].VolumeSource.EmptyDir)
+ require.NotNil(t, pod.Spec.Volumes[0].VolumeSource.Secret)
+ require.EqualValues(t, "test", pod.Spec.Volumes[0].VolumeSource.Secret.SecretName)
+ })
+ })
+}
diff --git a/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go
index 46a17dfe2..22c16a422 100644
--- a/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go
+++ b/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go
@@ -147,3 +147,26 @@ func (in Tolerations) DeepCopy() Tolerations {
in.DeepCopyInto(out)
return *out
}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Volumes) DeepCopyInto(out *Volumes) {
+ *out = *in
+ if in.Volumes != nil {
+ in, out := &in.Volumes, &out.Volumes
+ *out = make([]v1.Volume, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Volumes.
+func (in *Volumes) DeepCopy() *Volumes {
+ if in == nil {
+ return nil
+ }
+ out := new(Volumes)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go
index c8287b6f1..f61d14ab0 100644
--- a/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go
+++ b/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go
@@ -47,6 +47,11 @@ func (in *Pod) DeepCopyInto(out *Pod) {
*out = new(resources.Security)
(*in).DeepCopyInto(*out)
}
+ if in.Volumes != nil {
+ in, out := &in.Volumes, &out.Volumes
+ *out = new(resources.Volumes)
+ (*in).DeepCopyInto(*out)
+ }
return
}
diff --git a/pkg/apis/scheduler/v1alpha1/profile_container_template.go b/pkg/apis/scheduler/v1alpha1/profile_container_template.go
index 4569ba998..18a8a60ec 100644
--- a/pkg/apis/scheduler/v1alpha1/profile_container_template.go
+++ b/pkg/apis/scheduler/v1alpha1/profile_container_template.go
@@ -24,18 +24,31 @@ import (
core "k8s.io/api/core/v1"
schedulerContainerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container"
- "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
)
-var _ interfaces.Pod[ProfileContainerTemplate] = &ProfileContainerTemplate{}
-
type ProfileContainerTemplate struct {
Containers schedulerContainerApi.Containers `json:"containers,omitempty"`
All *schedulerContainerApi.Generic `json:"all,omitempty"`
}
+func (p *ProfileContainerTemplate) ApplyContainers(template *core.PodTemplateSpec) error {
+ if p == nil {
+ return nil
+ }
+
+ return p.Containers.Apply(template)
+}
+
+func (p *ProfileContainerTemplate) ApplyGeneric(template *core.PodTemplateSpec) error {
+ if p == nil {
+ return nil
+ }
+
+ return p.All.Apply(template)
+}
+
func (p *ProfileContainerTemplate) With(other *ProfileContainerTemplate) *ProfileContainerTemplate {
if p == nil && other == nil {
return nil
@@ -65,14 +78,3 @@ func (p *ProfileContainerTemplate) Validate() error {
shared.PrefixResourceErrors("all", p.All.Validate()),
)
}
-
-func (p *ProfileContainerTemplate) Apply(template *core.PodTemplateSpec) error {
- if p == nil {
- return nil
- }
-
- return shared.WithErrors(
- shared.PrefixResourceErrors("containers", p.Containers.Apply(template)),
- shared.PrefixResourceErrors("all", p.All.Apply(template)),
- )
-}
diff --git a/pkg/apis/scheduler/v1alpha1/profile_template.go b/pkg/apis/scheduler/v1alpha1/profile_template.go
index 2d175610b..7aae1f646 100644
--- a/pkg/apis/scheduler/v1alpha1/profile_template.go
+++ b/pkg/apis/scheduler/v1alpha1/profile_template.go
@@ -21,16 +21,10 @@
package v1alpha1
import (
- core "k8s.io/api/core/v1"
-
- "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/interfaces"
schedulerPodApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/pod"
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
- "github.com/arangodb/kube-arangodb/pkg/util"
)
-var _ interfaces.Pod[ProfileTemplate] = &ProfileTemplate{}
-
type ProfileTemplate struct {
Priority *int `json:"priority,omitempty"`
@@ -39,26 +33,6 @@ type ProfileTemplate struct {
Container *ProfileContainerTemplate `json:"container,omitempty"`
}
-func (p *ProfileTemplate) With(other *ProfileTemplate) *ProfileTemplate {
- if p == nil && other == nil {
- return nil
- }
-
- if p == nil {
- return other.DeepCopy()
- }
-
- if other == nil {
- return p.DeepCopy()
- }
-
- return &ProfileTemplate{
- Priority: util.First(other.Priority, p.Priority),
- Pod: p.Pod.With(other.Pod),
- Container: p.Container.With(other.Container),
- }
-}
-
func (p *ProfileTemplate) Validate() error {
if p == nil {
return nil
@@ -69,14 +43,3 @@ func (p *ProfileTemplate) Validate() error {
shared.PrefixResourceErrors("container", p.Container.Validate()),
)
}
-
-func (p *ProfileTemplate) Apply(template *core.PodTemplateSpec) error {
- if p == nil {
- return nil
- }
-
- return shared.WithErrors(
- shared.PrefixResourceErrors("pod", p.Pod.Apply(template)),
- shared.PrefixResourceErrors("container", p.Container.Apply(template)),
- )
-}
diff --git a/pkg/apis/scheduler/v1alpha1/profile_templates.go b/pkg/apis/scheduler/v1alpha1/profile_templates.go
new file mode 100644
index 000000000..de38a0bcf
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/profile_templates.go
@@ -0,0 +1,69 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package v1alpha1
+
+import (
+ "sort"
+
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/util"
+ "github.com/arangodb/kube-arangodb/pkg/util/errors"
+)
+
+type ProfileTemplates []ProfileTemplate
+
+func (p ProfileTemplates) Sort() ProfileTemplates {
+ sort.Slice(p, func(i, j int) bool {
+ if a, b := util.WithDefault(p[i].Priority), util.WithDefault(p[j].Priority); a != b {
+ return a < b
+ }
+
+ return false
+ })
+
+ return p
+}
+
+func (p ProfileTemplates) Render() (*core.PodTemplateSpec, error) {
+ var pod core.PodTemplateSpec
+
+ // Apply Pod Spec
+ for id := range p {
+ if err := p[id].Pod.Apply(&pod); err != nil {
+ return nil, errors.Wrapf(err, "Error while rendering Pod for %d", id)
+ }
+ }
+ // Apply Containers Spec
+ for id := range p {
+ if err := p[id].Container.ApplyContainers(&pod); err != nil {
+ return nil, errors.Wrapf(err, "Error while rendering Pod for %d", id)
+ }
+ }
+ // Apply Generic Containers Spec
+ for id := range p {
+ if err := p[id].Container.ApplyGeneric(&pod); err != nil {
+ return nil, errors.Wrapf(err, "Error while rendering Pod for %d", id)
+ }
+ }
+
+ return pod.DeepCopy(), nil
+}
diff --git a/pkg/apis/scheduler/v1alpha1/profiles/environments.container.kubernetes.go b/pkg/apis/scheduler/v1alpha1/profiles/environments.container.kubernetes.go
new file mode 100644
index 000000000..b48be4da0
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/profiles/environments.container.kubernetes.go
@@ -0,0 +1,76 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package profiles
+
+import (
+ core "k8s.io/api/core/v1"
+
+ schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1"
+ schedulerContainerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container"
+ schedulerContainerResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container/resources"
+)
+
+func ContainerKubernetesEnvironments() *schedulerApi.ProfileTemplate {
+ return containerKubernetesEnvironments.DeepCopy()
+}
+
+var containerKubernetesEnvironments = schedulerApi.ProfileTemplate{
+ Container: &schedulerApi.ProfileContainerTemplate{
+ All: &schedulerContainerApi.Generic{
+ Environments: &schedulerContainerResourcesApi.Environments{
+ Env: []core.EnvVar{
+ {
+ Name: "KUBE_NAMESPACE",
+ ValueFrom: &core.EnvVarSource{
+ FieldRef: &core.ObjectFieldSelector{
+ FieldPath: "metadata.namespace",
+ },
+ },
+ },
+ {
+ Name: "KUBE_NAME",
+ ValueFrom: &core.EnvVarSource{
+ FieldRef: &core.ObjectFieldSelector{
+ FieldPath: "metadata.name",
+ },
+ },
+ },
+ {
+ Name: "KUBE_IP",
+ ValueFrom: &core.EnvVarSource{
+ FieldRef: &core.ObjectFieldSelector{
+ FieldPath: "status.podIP",
+ },
+ },
+ },
+ {
+ Name: "KUBE_SERVICE_ACCOUNT",
+ ValueFrom: &core.EnvVarSource{
+ FieldRef: &core.ObjectFieldSelector{
+ FieldPath: "spec.serviceAccountName",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+}
diff --git a/pkg/apis/scheduler/v1alpha1/profiles/environments.container.resources.go b/pkg/apis/scheduler/v1alpha1/profiles/environments.container.resources.go
new file mode 100644
index 000000000..cc7d1cfb7
--- /dev/null
+++ b/pkg/apis/scheduler/v1alpha1/profiles/environments.container.resources.go
@@ -0,0 +1,86 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package profiles
+
+import (
+ core "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/resource"
+
+ schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1"
+ schedulerContainerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container"
+ schedulerContainerResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1/container/resources"
+)
+
+var (
+ divisor1m = resource.MustParse("1m")
+ divisor1Mi = resource.MustParse("1Mi")
+)
+
+func ContainerResourceEnvironments() *schedulerApi.ProfileTemplate {
+ return containerResourceEnvironments.DeepCopy()
+}
+
+var containerResourceEnvironments = schedulerApi.ProfileTemplate{
+ Container: &schedulerApi.ProfileContainerTemplate{
+ All: &schedulerContainerApi.Generic{
+ Environments: &schedulerContainerResourcesApi.Environments{
+ Env: []core.EnvVar{
+ {
+ Name: "CONTAINER_CPU_REQUESTS",
+ ValueFrom: &core.EnvVarSource{
+ ResourceFieldRef: &core.ResourceFieldSelector{
+ Resource: "requests.cpu",
+ Divisor: divisor1m,
+ },
+ },
+ },
+ {
+ Name: "CONTAINER_MEMORY_REQUESTS",
+ ValueFrom: &core.EnvVarSource{
+ ResourceFieldRef: &core.ResourceFieldSelector{
+ Resource: "requests.memory",
+ Divisor: divisor1Mi,
+ },
+ },
+ },
+ {
+ Name: "CONTAINER_CPU_LIMITS",
+ ValueFrom: &core.EnvVarSource{
+ ResourceFieldRef: &core.ResourceFieldSelector{
+ Resource: "limits.cpu",
+ Divisor: divisor1m,
+ },
+ },
+ },
+ {
+ Name: "CONTAINER_MEMORY_LIMITS",
+ ValueFrom: &core.EnvVarSource{
+ ResourceFieldRef: &core.ResourceFieldSelector{
+ Resource: "limits.memory",
+ Divisor: divisor1Mi,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+}
diff --git a/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go
index 22b1bbf47..3fbf82417 100644
--- a/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go
@@ -88,3 +88,25 @@ func (in *ProfileTemplate) DeepCopy() *ProfileTemplate {
in.DeepCopyInto(out)
return out
}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in ProfileTemplates) DeepCopyInto(out *ProfileTemplates) {
+ {
+ in := &in
+ *out = make(ProfileTemplates, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ return
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProfileTemplates.
+func (in ProfileTemplates) DeepCopy() ProfileTemplates {
+ if in == nil {
+ return nil
+ }
+ out := new(ProfileTemplates)
+ in.DeepCopyInto(out)
+ return *out
+}
diff --git a/pkg/crd/crds/ml-extension.schema.generated.yaml b/pkg/crd/crds/ml-extension.schema.generated.yaml
index a09c4d2b1..41feeb018 100644
--- a/pkg/crd/crds/ml-extension.schema.generated.yaml
+++ b/pkg/crd/crds/ml-extension.schema.generated.yaml
@@ -455,10 +455,238 @@ v1alpha1:
items:
type: string
type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
port:
description: Port defines on which port the container will be listening for connections
format: int32
type: integer
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
resources:
properties:
claims:
@@ -536,6 +764,88 @@ v1alpha1:
type: string
type: object
type: object
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
type: object
project:
description: Project defines how Project workload will be deployed
@@ -618,49 +928,277 @@ v1alpha1:
items:
type: string
type: array
- port:
- description: Port defines on which port the container will be listening for connections
- format: int32
- type: integer
- resources:
+ lifecycle:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- type: object
- type: array
- limits:
- additionalProperties:
- type: string
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
type: object
- requests:
- additionalProperties:
- type: string
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
type: object
type: object
- securityContext:
+ livenessProbe:
properties:
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
+ exec:
properties:
- add:
- items:
- type: string
- type: array
- drop:
+ command:
items:
type: string
type: array
type: object
- privileged:
- type: boolean
- procMount:
- type: string
- readOnlyRootFilesystem:
- type: boolean
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ port:
+ description: Port defines on which port the container will be listening for connections
+ format: int32
+ type: integer
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ securityContext:
+ properties:
+ allowPrivilegeEscalation:
+ type: boolean
+ capabilities:
+ properties:
+ add:
+ items:
+ type: string
+ type: array
+ drop:
+ items:
+ type: string
+ type: array
+ type: object
+ privileged:
+ type: boolean
+ procMount:
+ type: string
+ readOnlyRootFilesystem:
+ type: boolean
runAsGroup:
format: int64
type: integer
@@ -699,6 +1237,88 @@ v1alpha1:
type: string
type: object
type: object
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
type: object
replicas:
description: Replicas defines the number of replicas running specified components. No replicas created if no components are defined.
@@ -817,62 +1437,290 @@ v1alpha1:
items:
type: string
type: array
- port:
- description: Port defines on which port the container will be listening for connections
- format: int32
- type: integer
- resources:
+ lifecycle:
properties:
- claims:
- items:
- properties:
- name:
- type: string
- type: object
- type: array
- limits:
- additionalProperties:
- type: string
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
type: object
- requests:
- additionalProperties:
- type: string
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
type: object
type: object
- securityContext:
+ livenessProbe:
properties:
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
+ exec:
properties:
- add:
- items:
- type: string
- type: array
- drop:
+ command:
items:
type: string
type: array
type: object
- privileged:
- type: boolean
- procMount:
- type: string
- readOnlyRootFilesystem:
- type: boolean
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
+ failureThreshold:
+ format: int32
type: integer
- seLinuxOptions:
+ grpc:
properties:
- level:
+ port:
+ format: int32
+ type: integer
+ service:
type: string
- role:
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ port:
+ description: Port defines on which port the container will be listening for connections
+ format: int32
+ type: integer
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ securityContext:
+ properties:
+ allowPrivilegeEscalation:
+ type: boolean
+ capabilities:
+ properties:
+ add:
+ items:
+ type: string
+ type: array
+ drop:
+ items:
+ type: string
+ type: array
+ type: object
+ privileged:
+ type: boolean
+ procMount:
+ type: string
+ readOnlyRootFilesystem:
+ type: boolean
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
type: string
type:
type: string
@@ -898,234 +1746,366 @@ v1alpha1:
type: string
type: object
type: object
- type: object
- type: object
- image:
- type: string
- imagePullPolicy:
- type: string
- imagePullSecrets:
- items:
- type: string
- type: array
- init:
- description: ArangoMLExtensionTemplate define Init job specification
- properties:
- affinity:
- properties:
- nodeAffinity:
+ startupProbe:
properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
+ exec:
properties:
- nodeSelectorTerms:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
items:
properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
+ name:
+ type: string
+ value:
+ type: string
type: object
type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
type: object
- podAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ type: object
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
type: object
- namespaces:
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
items:
type: string
type: array
- topologyKey:
+ generateName:
type: string
- type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
+ spec:
properties:
- labelSelector:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
properties:
- matchExpressions:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
items:
properties:
- key:
- type: string
- operator:
+ name:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
additionalProperties:
type: string
type: object
type: object
- namespaceSelector:
+ selector:
properties:
matchExpressions:
items:
@@ -1145,26 +2125,401 @@ v1alpha1:
type: string
type: object
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- weight:
- format: int32
- type: integer
type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ image:
+ type: string
+ imagePullPolicy:
+ type: string
+ imagePullSecrets:
+ items:
+ type: string
+ type: array
+ init:
+ description: ArangoMLExtensionTemplate define Init job specification
+ properties:
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
key:
type: string
operator:
@@ -1175,12 +2530,16 @@ v1alpha1:
type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
type: object
- namespaceSelector:
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ properties:
+ nodeSelectorTerms:
+ items:
properties:
matchExpressions:
items:
@@ -1195,23 +2554,248 @@ v1alpha1:
type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
+ type: array
+ type: object
type: object
- type: object
- env:
- items:
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ env:
+ items:
properties:
name:
type: string
@@ -1291,39 +2875,185 @@ v1alpha1:
items:
type: string
type: array
- nodeSelector:
- additionalProperties:
- type: string
- type: object
- podSecurityContext:
+ lifecycle:
properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
- type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
+ postStart:
properties:
- localhostProfile:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ nodeSelector:
+ additionalProperties:
+ type: string
+ type: object
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
type: string
type:
type: string
@@ -1354,6 +3084,88 @@ v1alpha1:
type: string
type: object
type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
resources:
properties:
claims:
@@ -1435,6 +3247,71 @@ v1alpha1:
type: object
shareProcessNamespace:
type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
tolerations:
items:
properties:
@@ -1451,46 +3328,5245 @@ v1alpha1:
type: string
type: object
type: array
- type: object
- jobsTemplates:
- description: JobsTemplates defines templates for jobs
- properties:
- featurization:
- description: Featurization defines template for the featurization job
- properties:
- cpu:
- description: CPU defines templates for CPU jobs
- properties:
- affinity:
- properties:
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
+ items:
+ type: string
+ type: array
+ generateName:
+ type: string
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
+ type: string
+ type: object
+ type: array
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
+ type: object
+ spec:
+ properties:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ jobsTemplates:
+ description: JobsTemplates defines templates for jobs
+ properties:
+ featurization:
+ description: Featurization defines template for the featurization job
+ properties:
+ cpu:
+ description: CPU defines templates for CPU jobs
+ properties:
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ properties:
+ nodeSelectorTerms:
+ items:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ type: array
+ type: object
+ type: object
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ env:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ type: object
+ type: object
+ type: array
+ envFrom:
+ items:
+ properties:
+ configMapRef:
+ properties:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ prefix:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ type: object
+ type: array
+ hostIPC:
+ type: boolean
+ hostNetwork:
+ type: boolean
+ hostPID:
+ type: boolean
+ image:
+ type: string
+ imagePullPolicy:
+ type: string
+ imagePullSecrets:
+ items:
+ type: string
+ type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ nodeSelector:
+ additionalProperties:
+ type: string
+ type: object
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ supplementalGroups:
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ schedulerName:
+ type: string
+ securityContext:
+ properties:
+ allowPrivilegeEscalation:
+ type: boolean
+ capabilities:
+ properties:
+ add:
+ items:
+ type: string
+ type: array
+ drop:
+ items:
+ type: string
+ type: array
+ type: object
+ privileged:
+ type: boolean
+ procMount:
+ type: string
+ readOnlyRootFilesystem:
+ type: boolean
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ shareProcessNamespace:
+ type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ tolerations:
+ items:
+ properties:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
+ items:
+ type: string
+ type: array
+ generateName:
+ type: string
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
+ type: string
+ type: object
+ type: array
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
+ type: object
+ spec:
+ properties:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ gpu:
+ description: GPU defines templates for GPU jobs
+ properties:
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ properties:
+ nodeSelectorTerms:
+ items:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ type: array
+ type: object
+ type: object
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ env:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ type: object
+ type: object
+ type: array
+ envFrom:
+ items:
+ properties:
+ configMapRef:
+ properties:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ prefix:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ type: object
+ type: array
+ hostIPC:
+ type: boolean
+ hostNetwork:
+ type: boolean
+ hostPID:
+ type: boolean
+ image:
+ type: string
+ imagePullPolicy:
+ type: string
+ imagePullSecrets:
+ items:
+ type: string
+ type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ nodeSelector:
+ additionalProperties:
+ type: string
+ type: object
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ supplementalGroups:
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ schedulerName:
+ type: string
+ securityContext:
+ properties:
+ allowPrivilegeEscalation:
+ type: boolean
+ capabilities:
+ properties:
+ add:
+ items:
+ type: string
+ type: array
+ drop:
+ items:
+ type: string
+ type: array
+ type: object
+ privileged:
+ type: boolean
+ procMount:
+ type: string
+ readOnlyRootFilesystem:
+ type: boolean
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ shareProcessNamespace:
+ type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ tolerations:
+ items:
+ properties:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
+ items:
+ type: string
+ type: array
+ generateName:
+ type: string
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
+ type: string
+ type: object
+ type: array
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
+ type: object
+ spec:
+ properties:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ type: object
+ prediction:
+ description: Prediction defines template for the prediction job
+ properties:
+ cpu:
+ description: CPU defines templates for CPU jobs
+ properties:
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ properties:
+ nodeSelectorTerms:
+ items:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ type: array
+ type: object
+ type: object
+ podAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ podAntiAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ podAffinityTerm:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ weight:
+ format: int32
+ type: integer
+ type: object
+ type: array
+ requiredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ labelSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaceSelector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ namespaces:
+ items:
+ type: string
+ type: array
+ topologyKey:
+ type: string
+ type: object
+ type: array
+ type: object
+ type: object
+ env:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ secretKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ type: object
+ type: object
+ type: array
+ envFrom:
+ items:
+ properties:
+ configMapRef:
+ properties:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ prefix:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ type: object
+ type: array
+ hostIPC:
+ type: boolean
+ hostNetwork:
+ type: boolean
+ hostPID:
+ type: boolean
+ image:
+ type: string
+ imagePullPolicy:
+ type: string
+ imagePullSecrets:
+ items:
+ type: string
+ type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ nodeSelector:
+ additionalProperties:
+ type: string
+ type: object
+ podSecurityContext:
+ properties:
+ fsGroup:
+ format: int64
+ type: integer
+ fsGroupChangePolicy:
+ type: string
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ supplementalGroups:
+ items:
+ format: int64
+ type: integer
+ type: array
+ sysctls:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ schedulerName:
+ type: string
+ securityContext:
+ properties:
+ allowPrivilegeEscalation:
+ type: boolean
+ capabilities:
+ properties:
+ add:
+ items:
+ type: string
+ type: array
+ drop:
+ items:
+ type: string
+ type: array
+ type: object
+ privileged:
+ type: boolean
+ procMount:
+ type: string
+ readOnlyRootFilesystem:
+ type: boolean
+ runAsGroup:
+ format: int64
+ type: integer
+ runAsNonRoot:
+ type: boolean
+ runAsUser:
+ format: int64
+ type: integer
+ seLinuxOptions:
+ properties:
+ level:
+ type: string
+ role:
+ type: string
+ type:
+ type: string
+ user:
+ type: string
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ shareProcessNamespace:
+ type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ tolerations:
+ items:
+ properties:
+ effect:
+ type: string
+ key:
+ type: string
+ operator:
+ type: string
+ tolerationSeconds:
+ format: int64
+ type: integer
+ value:
+ type: string
+ type: object
+ type: array
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
+ items:
+ type: string
+ type: array
+ generateName:
+ type: string
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
+ items:
+ properties:
+ apiVersion:
+ type: string
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
+ type: string
+ type: object
+ type: array
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
+ type: object
+ spec:
+ properties:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
+ items:
+ properties:
+ name:
+ type: string
+ type: object
+ type: array
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ selector:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ type: object
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
+ type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ gpu:
+ description: GPU defines templates for GPU jobs
+ properties:
+ affinity:
+ properties:
+ nodeAffinity:
+ properties:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ items:
+ properties:
+ preference:
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ matchFields:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ type: string
+ values:
items:
type: string
type: array
@@ -1841,6 +8917,152 @@ v1alpha1:
items:
type: string
type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
nodeSelector:
additionalProperties:
type: string
@@ -1904,6 +9126,88 @@ v1alpha1:
type: string
type: object
type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
resources:
properties:
claims:
@@ -1985,6 +9289,71 @@ v1alpha1:
type: object
shareProcessNamespace:
type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
tolerations:
items:
properties:
@@ -2001,225 +9370,300 @@ v1alpha1:
type: string
type: object
type: array
- type: object
- gpu:
- description: GPU defines templates for GPU jobs
- properties:
- affinity:
- properties:
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- preference:
+ name:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
+ properties:
+ metadata:
properties:
- matchExpressions:
+ annotations:
+ additionalProperties:
+ type: string
+ type: object
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
+ type: string
type: array
- matchFields:
+ generateName:
+ type: string
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ fieldsType:
type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- properties:
- nodeSelectorTerms:
- items:
- properties:
- matchExpressions:
- items:
- properties:
- key:
+ fieldsV1:
+ type: object
+ manager:
type: string
- operator:
+ operation:
type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
+ subresource:
type: string
- operator:
+ time:
+ format: date-time
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- type: object
- type: array
- type: object
- type: object
- podAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ name:
type: string
- type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
+ namespace:
+ type: string
+ ownerReferences:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
type: object
- namespaceSelector:
+ spec:
properties:
- matchExpressions:
+ accessModes:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
type: string
+ type: array
+ dataSource:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
type: object
- type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
- properties:
- labelSelector:
+ dataSourceRef:
properties:
- matchExpressions:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
+ properties:
+ name:
+ type: string
type: object
type: array
- matchLabels:
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
additionalProperties:
type: string
type: object
type: object
- namespaceSelector:
+ selector:
properties:
matchExpressions:
items:
@@ -2239,316 +9683,368 @@ v1alpha1:
type: string
type: object
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- weight:
- format: int32
- type: integer
type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- labelSelector:
- properties:
- matchExpressions:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
+ items:
+ properties:
+ key:
type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
type: string
- type: object
- type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
- type: object
- type: object
- env:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
properties:
- configMapKeyRef:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- key:
- type: string
name:
type: string
- optional:
- type: boolean
- type: object
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- type: string
- resource:
- type: string
type: object
- secretKeyRef:
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- key:
- type: string
name:
type: string
- optional:
- type: boolean
type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
type: object
- type: object
- type: array
- envFrom:
- items:
- properties:
- configMapRef:
+ secret:
properties:
- name:
- type: string
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
optional:
type: boolean
+ secretName:
+ type: string
type: object
- prefix:
- type: string
- secretRef:
+ storageos:
properties:
- name:
+ fsType:
type: string
- optional:
+ readOnly:
type: boolean
- type: object
- type: object
- type: array
- hostIPC:
- type: boolean
- hostNetwork:
- type: boolean
- hostPID:
- type: boolean
- image:
- type: string
- imagePullPolicy:
- type: string
- imagePullSecrets:
- items:
- type: string
- type: array
- nodeSelector:
- additionalProperties:
- type: string
- type: object
- podSecurityContext:
- properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
- type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- type: object
- supplementalGroups:
- items:
- format: int64
- type: integer
- type: array
- sysctls:
- items:
- properties:
- name:
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
type: string
- value:
+ volumeNamespace:
type: string
type: object
- type: array
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- resources:
- properties:
- claims:
- items:
+ vsphereVolume:
properties:
- name:
+ fsType:
type: string
- type: object
- type: array
- limits:
- additionalProperties:
- type: string
- type: object
- requests:
- additionalProperties:
- type: string
- type: object
- type: object
- schedulerName:
- type: string
- securityContext:
- properties:
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
- properties:
- add:
- items:
+ storagePolicyID:
type: string
- type: array
- drop:
- items:
+ storagePolicyName:
type: string
- type: array
- type: object
- privileged:
- type: boolean
- procMount:
- type: string
- readOnlyRootFilesystem:
- type: boolean
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- type: object
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- shareProcessNamespace:
- type: boolean
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
- type: string
+ volumePath:
+ type: string
+ type: object
type: object
type: array
type: object
type: object
- prediction:
- description: Prediction defines template for the prediction job
+ training:
+ description: Training defines template for the training job
properties:
cpu:
description: CPU defines templates for CPU jobs
@@ -2933,6 +10429,152 @@ v1alpha1:
items:
type: string
type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
nodeSelector:
additionalProperties:
type: string
@@ -2996,6 +10638,88 @@ v1alpha1:
type: string
type: object
type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
resources:
properties:
claims:
@@ -3077,6 +10801,71 @@ v1alpha1:
type: object
shareProcessNamespace:
type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
tolerations:
items:
properties:
@@ -3093,225 +10882,300 @@ v1alpha1:
type: string
type: object
type: array
- type: object
- gpu:
- description: GPU defines templates for GPU jobs
- properties:
- affinity:
- properties:
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- type: object
- weight:
- format: int32
- type: integer
+ name:
+ type: string
type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- properties:
- nodeSelectorTerms:
- items:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- type: object
- type: array
- type: object
- type: object
- podAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- podAffinityTerm:
+ metadata:
properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ annotations:
+ additionalProperties:
+ type: string
type: object
- namespaces:
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
items:
type: string
type: array
- topologyKey:
+ generateName:
type: string
- type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
+ spec:
properties:
- labelSelector:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
properties:
- matchExpressions:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
items:
properties:
- key:
- type: string
- operator:
+ name:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
additionalProperties:
type: string
type: object
type: object
- namespaceSelector:
+ selector:
properties:
matchExpressions:
items:
@@ -3331,319 +11195,367 @@ v1alpha1:
type: string
type: object
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
type: object
- type: array
- type: object
- type: object
- env:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
+ type: object
+ fc:
properties:
- configMapKeyRef:
- properties:
- key:
- type: string
- name:
- type: string
- optional:
- type: boolean
- type: object
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
type: object
- resourceFieldRef:
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- containerName:
- type: string
- divisor:
- type: string
- resource:
+ name:
type: string
type: object
- secretKeyRef:
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- key:
- type: string
name:
type: string
- optional:
- type: boolean
type: object
+ targetPortal:
+ type: string
type: object
- type: object
- type: array
- envFrom:
- items:
- properties:
- configMapRef:
+ name:
+ type: string
+ nfs:
properties:
- name:
+ path:
type: string
- optional:
+ readOnly:
type: boolean
+ server:
+ type: string
type: object
- prefix:
- type: string
- secretRef:
+ persistentVolumeClaim:
properties:
- name:
+ claimName:
type: string
- optional:
+ readOnly:
type: boolean
type: object
- type: object
- type: array
- hostIPC:
- type: boolean
- hostNetwork:
- type: boolean
- hostPID:
- type: boolean
- image:
- type: string
- imagePullPolicy:
- type: string
- imagePullSecrets:
- items:
- type: string
- type: array
- nodeSelector:
- additionalProperties:
- type: string
- type: object
- podSecurityContext:
- properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
- type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- type: object
- supplementalGroups:
- items:
- format: int64
- type: integer
- type: array
- sysctls:
- items:
+ photonPersistentDisk:
properties:
- name:
+ fsType:
type: string
- value:
+ pdID:
type: string
type: object
- type: array
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- resources:
- properties:
- claims:
- items:
+ portworxVolume:
properties:
- name:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
type: string
type: object
- type: array
- limits:
- additionalProperties:
- type: string
- type: object
- requests:
- additionalProperties:
- type: string
- type: object
- type: object
- schedulerName:
- type: string
- securityContext:
- properties:
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
- properties:
- add:
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
+ items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
+ properties:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
+ type: object
+ secret:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ optional:
+ type: boolean
+ secretName:
+ type: string
+ type: object
+ storageos:
+ properties:
+ fsType:
type: string
- type: array
- drop:
- items:
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
type: string
- type: array
- type: object
- privileged:
- type: boolean
- procMount:
- type: string
- readOnlyRootFilesystem:
- type: boolean
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- type: object
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- shareProcessNamespace:
- type: boolean
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
- type: string
+ volumeNamespace:
+ type: string
+ type: object
+ vsphereVolume:
+ properties:
+ fsType:
+ type: string
+ storagePolicyID:
+ type: string
+ storagePolicyName:
+ type: string
+ volumePath:
+ type: string
+ type: object
type: object
type: array
type: object
- type: object
- training:
- description: Training defines template for the training job
- properties:
- cpu:
- description: CPU defines templates for CPU jobs
+ gpu:
+ description: GPU defines templates for GPU jobs
properties:
affinity:
properties:
@@ -4025,6 +11937,152 @@ v1alpha1:
items:
type: string
type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
nodeSelector:
additionalProperties:
type: string
@@ -4088,6 +12146,88 @@ v1alpha1:
type: string
type: object
type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
resources:
properties:
claims:
@@ -4147,28 +12287,93 @@ v1alpha1:
type: string
user:
type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
+ type: object
+ seccompProfile:
+ properties:
+ localhostProfile:
+ type: string
+ type:
+ type: string
+ type: object
+ windowsOptions:
+ properties:
+ gmsaCredentialSpec:
+ type: string
+ gmsaCredentialSpecName:
+ type: string
+ hostProcess:
+ type: boolean
+ runAsUserName:
+ type: string
+ type: object
+ type: object
+ shareProcessNamespace:
+ type: boolean
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
type: string
- type:
+ scheme:
type: string
type: object
- windowsOptions:
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
+ host:
type: string
- hostProcess:
- type: boolean
- runAsUserName:
+ port:
+ format: int-or-string
type: string
type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
type: object
- shareProcessNamespace:
- type: boolean
tolerations:
items:
properties:
@@ -4185,225 +12390,300 @@ v1alpha1:
type: string
type: object
type: array
- type: object
- gpu:
- description: GPU defines templates for GPU jobs
- properties:
- affinity:
- properties:
- nodeAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
+ volumes:
+ items:
+ properties:
+ awsElasticBlockStore:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ azureDisk:
+ properties:
+ cachingMode:
+ type: string
+ diskName:
+ type: string
+ diskURI:
+ type: string
+ fsType:
+ type: string
+ kind:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ azureFile:
+ properties:
+ readOnly:
+ type: boolean
+ secretName:
+ type: string
+ shareName:
+ type: string
+ type: object
+ cephfs:
+ properties:
+ monitors:
+ items:
+ type: string
+ type: array
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ secretFile:
+ type: string
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ user:
+ type: string
+ type: object
+ cinder:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeID:
+ type: string
+ type: object
+ configMap:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
+ type: string
+ optional:
+ type: boolean
+ type: object
+ csi:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ nodePublishSecretRef:
properties:
- preference:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- type: object
- weight:
- format: int32
- type: integer
+ name:
+ type: string
type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- properties:
- nodeSelectorTerms:
- items:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchFields:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- type: object
- type: array
- type: object
- type: object
- podAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
+ readOnly:
+ type: boolean
+ volumeAttributes:
+ additionalProperties:
+ type: string
+ type: object
+ type: object
+ downwardAPI:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ emptyDir:
+ properties:
+ medium:
+ type: string
+ sizeLimit:
+ type: string
+ type: object
+ ephemeral:
+ properties:
+ volumeClaimTemplate:
properties:
- podAffinityTerm:
+ metadata:
properties:
- labelSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ annotations:
+ additionalProperties:
+ type: string
type: object
- namespaces:
+ creationTimestamp:
+ format: date-time
+ type: string
+ deletionGracePeriodSeconds:
+ format: int64
+ type: integer
+ deletionTimestamp:
+ format: date-time
+ type: string
+ finalizers:
items:
type: string
type: array
- topologyKey:
+ generateName:
type: string
- type: object
- weight:
- format: int32
- type: integer
- type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- labelSelector:
- properties:
- matchExpressions:
+ generation:
+ format: int64
+ type: integer
+ labels:
+ additionalProperties:
+ type: string
+ type: object
+ managedFields:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ fieldsType:
+ type: string
+ fieldsV1:
+ type: object
+ manager:
+ type: string
+ operation:
+ type: string
+ subresource:
+ type: string
+ time:
+ format: date-time
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
+ name:
+ type: string
+ namespace:
+ type: string
+ ownerReferences:
items:
properties:
- key:
+ apiVersion:
type: string
- operator:
+ blockOwnerDeletion:
+ type: boolean
+ controller:
+ type: boolean
+ kind:
+ type: string
+ name:
+ type: string
+ uid:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
- additionalProperties:
- type: string
- type: object
+ resourceVersion:
+ type: string
+ selfLink:
+ type: string
+ uid:
+ type: string
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
- type: object
- podAntiAffinity:
- properties:
- preferredDuringSchedulingIgnoredDuringExecution:
- items:
- properties:
- podAffinityTerm:
+ spec:
properties:
- labelSelector:
+ accessModes:
+ items:
+ type: string
+ type: array
+ dataSource:
properties:
- matchExpressions:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ type: object
+ dataSourceRef:
+ properties:
+ apiGroup:
+ type: string
+ kind:
+ type: string
+ name:
+ type: string
+ namespace:
+ type: string
+ type: object
+ resources:
+ properties:
+ claims:
items:
properties:
- key:
- type: string
- operator:
+ name:
type: string
- values:
- items:
- type: string
- type: array
type: object
type: array
- matchLabels:
+ limits:
+ additionalProperties:
+ type: string
+ type: object
+ requests:
additionalProperties:
type: string
type: object
type: object
- namespaceSelector:
+ selector:
properties:
matchExpressions:
items:
@@ -4423,310 +12703,362 @@ v1alpha1:
type: string
type: object
type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
+ storageClassName:
+ type: string
+ volumeMode:
+ type: string
+ volumeName:
type: string
type: object
- weight:
- format: int32
- type: integer
type: object
- type: array
- requiredDuringSchedulingIgnoredDuringExecution:
- items:
+ type: object
+ fc:
+ properties:
+ fsType:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ readOnly:
+ type: boolean
+ targetWWNs:
+ items:
+ type: string
+ type: array
+ wwids:
+ items:
+ type: string
+ type: array
+ type: object
+ flexVolume:
+ properties:
+ driver:
+ type: string
+ fsType:
+ type: string
+ options:
+ additionalProperties:
+ type: string
+ type: object
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- labelSelector:
- properties:
- matchExpressions:
+ name:
+ type: string
+ type: object
+ type: object
+ flocker:
+ properties:
+ datasetName:
+ type: string
+ datasetUUID:
+ type: string
+ type: object
+ gcePersistentDisk:
+ properties:
+ fsType:
+ type: string
+ partition:
+ format: int32
+ type: integer
+ pdName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ gitRepo:
+ properties:
+ directory:
+ type: string
+ repository:
+ type: string
+ revision:
+ type: string
+ type: object
+ glusterfs:
+ properties:
+ endpoints:
+ type: string
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ hostPath:
+ properties:
+ path:
+ type: string
+ type:
+ type: string
+ type: object
+ iscsi:
+ properties:
+ chapAuthDiscovery:
+ type: boolean
+ chapAuthSession:
+ type: boolean
+ fsType:
+ type: string
+ initiatorName:
+ type: string
+ iqn:
+ type: string
+ iscsiInterface:
+ type: string
+ lun:
+ format: int32
+ type: integer
+ portals:
+ items:
+ type: string
+ type: array
+ readOnly:
+ type: boolean
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ targetPortal:
+ type: string
+ type: object
+ name:
+ type: string
+ nfs:
+ properties:
+ path:
+ type: string
+ readOnly:
+ type: boolean
+ server:
+ type: string
+ type: object
+ persistentVolumeClaim:
+ properties:
+ claimName:
+ type: string
+ readOnly:
+ type: boolean
+ type: object
+ photonPersistentDisk:
+ properties:
+ fsType:
+ type: string
+ pdID:
+ type: string
+ type: object
+ portworxVolume:
+ properties:
+ fsType:
+ type: string
+ readOnly:
+ type: boolean
+ volumeID:
+ type: string
+ type: object
+ projected:
+ properties:
+ defaultMode:
+ format: int32
+ type: integer
+ sources:
+ items:
+ properties:
+ configMap:
+ properties:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
+ items:
+ properties:
+ key:
type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
type: string
- type: object
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
+ optional:
+ type: boolean
+ type: object
+ downwardAPI:
+ properties:
items:
- properties:
- key:
- type: string
- operator:
- type: string
- values:
- items:
+ items:
+ properties:
+ fieldRef:
+ properties:
+ apiVersion:
+ type: string
+ fieldPath:
+ type: string
+ type: object
+ mode:
+ format: int32
+ type: integer
+ path:
type: string
- type: array
- type: object
- type: array
- matchLabels:
- additionalProperties:
+ resourceFieldRef:
+ properties:
+ containerName:
+ type: string
+ divisor:
+ type: string
+ resource:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ secret:
+ properties:
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
+ name:
type: string
- type: object
- type: object
- namespaces:
- items:
- type: string
- type: array
- topologyKey:
- type: string
- type: object
- type: array
- type: object
- type: object
- env:
- items:
- properties:
- name:
- type: string
- value:
- type: string
- valueFrom:
+ optional:
+ type: boolean
+ type: object
+ serviceAccountToken:
+ properties:
+ audience:
+ type: string
+ expirationSeconds:
+ format: int64
+ type: integer
+ path:
+ type: string
+ type: object
+ type: object
+ type: array
+ type: object
+ quobyte:
properties:
- configMapKeyRef:
+ group:
+ type: string
+ readOnly:
+ type: boolean
+ registry:
+ type: string
+ tenant:
+ type: string
+ user:
+ type: string
+ volume:
+ type: string
+ type: object
+ rbd:
+ properties:
+ fsType:
+ type: string
+ image:
+ type: string
+ keyring:
+ type: string
+ monitors:
+ items:
+ type: string
+ type: array
+ pool:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- key:
- type: string
name:
type: string
- optional:
- type: boolean
- type: object
- fieldRef:
- properties:
- apiVersion:
- type: string
- fieldPath:
- type: string
- type: object
- resourceFieldRef:
- properties:
- containerName:
- type: string
- divisor:
- type: string
- resource:
- type: string
type: object
- secretKeyRef:
+ user:
+ type: string
+ type: object
+ scaleIO:
+ properties:
+ fsType:
+ type: string
+ gateway:
+ type: string
+ protectionDomain:
+ type: string
+ readOnly:
+ type: boolean
+ secretRef:
properties:
- key:
- type: string
name:
type: string
- optional:
- type: boolean
type: object
+ sslEnabled:
+ type: boolean
+ storageMode:
+ type: string
+ storagePool:
+ type: string
+ system:
+ type: string
+ volumeName:
+ type: string
type: object
- type: object
- type: array
- envFrom:
- items:
- properties:
- configMapRef:
+ secret:
properties:
- name:
- type: string
+ defaultMode:
+ format: int32
+ type: integer
+ items:
+ items:
+ properties:
+ key:
+ type: string
+ mode:
+ format: int32
+ type: integer
+ path:
+ type: string
+ type: object
+ type: array
optional:
type: boolean
+ secretName:
+ type: string
type: object
- prefix:
- type: string
- secretRef:
+ storageos:
properties:
- name:
+ fsType:
type: string
- optional:
+ readOnly:
type: boolean
- type: object
- type: object
- type: array
- hostIPC:
- type: boolean
- hostNetwork:
- type: boolean
- hostPID:
- type: boolean
- image:
- type: string
- imagePullPolicy:
- type: string
- imagePullSecrets:
- items:
- type: string
- type: array
- nodeSelector:
- additionalProperties:
- type: string
- type: object
- podSecurityContext:
- properties:
- fsGroup:
- format: int64
- type: integer
- fsGroupChangePolicy:
- type: string
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- type: object
- supplementalGroups:
- items:
- format: int64
- type: integer
- type: array
- sysctls:
- items:
- properties:
- name:
+ secretRef:
+ properties:
+ name:
+ type: string
+ type: object
+ volumeName:
type: string
- value:
+ volumeNamespace:
type: string
type: object
- type: array
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- resources:
- properties:
- claims:
- items:
+ vsphereVolume:
properties:
- name:
+ fsType:
type: string
- type: object
- type: array
- limits:
- additionalProperties:
- type: string
- type: object
- requests:
- additionalProperties:
- type: string
- type: object
- type: object
- schedulerName:
- type: string
- securityContext:
- properties:
- allowPrivilegeEscalation:
- type: boolean
- capabilities:
- properties:
- add:
- items:
+ storagePolicyID:
type: string
- type: array
- drop:
- items:
+ storagePolicyName:
type: string
- type: array
- type: object
- privileged:
- type: boolean
- procMount:
- type: string
- readOnlyRootFilesystem:
- type: boolean
- runAsGroup:
- format: int64
- type: integer
- runAsNonRoot:
- type: boolean
- runAsUser:
- format: int64
- type: integer
- seLinuxOptions:
- properties:
- level:
- type: string
- role:
- type: string
- type:
- type: string
- user:
- type: string
- type: object
- seccompProfile:
- properties:
- localhostProfile:
- type: string
- type:
- type: string
- type: object
- windowsOptions:
- properties:
- gmsaCredentialSpec:
- type: string
- gmsaCredentialSpecName:
- type: string
- hostProcess:
- type: boolean
- runAsUserName:
- type: string
- type: object
- type: object
- shareProcessNamespace:
- type: boolean
- tolerations:
- items:
- properties:
- effect:
- type: string
- key:
- type: string
- operator:
- type: string
- tolerationSeconds:
- format: int64
- type: integer
- value:
- type: string
+ volumePath:
+ type: string
+ type: object
type: object
type: array
type: object
diff --git a/pkg/crd/crds/ml-storage.schema.generated.yaml b/pkg/crd/crds/ml-storage.schema.generated.yaml
index 633f6780b..125c5aff8 100644
--- a/pkg/crd/crds/ml-storage.schema.generated.yaml
+++ b/pkg/crd/crds/ml-storage.schema.generated.yaml
@@ -147,10 +147,238 @@ v1alpha1:
items:
type: string
type: array
+ lifecycle:
+ properties:
+ postStart:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ preStop:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ type: object
+ type: object
listenPort:
description: ListenPort defines on which port the sidecar container will be listening for connections
format: int32
type: integer
+ livenessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ ports:
+ items:
+ properties:
+ containerPort:
+ format: int32
+ type: integer
+ hostIP:
+ type: string
+ hostPort:
+ format: int32
+ type: integer
+ name:
+ type: string
+ protocol:
+ type: string
+ type: object
+ type: array
+ readinessProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
resources:
properties:
claims:
@@ -228,6 +456,88 @@ v1alpha1:
type: string
type: object
type: object
+ startupProbe:
+ properties:
+ exec:
+ properties:
+ command:
+ items:
+ type: string
+ type: array
+ type: object
+ failureThreshold:
+ format: int32
+ type: integer
+ grpc:
+ properties:
+ port:
+ format: int32
+ type: integer
+ service:
+ type: string
+ type: object
+ httpGet:
+ properties:
+ host:
+ type: string
+ httpHeaders:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ path:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ scheme:
+ type: string
+ type: object
+ initialDelaySeconds:
+ format: int32
+ type: integer
+ periodSeconds:
+ format: int32
+ type: integer
+ successThreshold:
+ format: int32
+ type: integer
+ tcpSocket:
+ properties:
+ host:
+ type: string
+ port:
+ format: int-or-string
+ type: string
+ type: object
+ terminationGracePeriodSeconds:
+ format: int64
+ type: integer
+ timeoutSeconds:
+ format: int32
+ type: integer
+ type: object
+ volumeMounts:
+ items:
+ properties:
+ mountPath:
+ type: string
+ mountPropagation:
+ type: string
+ name:
+ type: string
+ readOnly:
+ type: boolean
+ subPath:
+ type: string
+ subPathExpr:
+ type: string
+ type: object
+ type: array
type: object
type: object
type: object
diff --git a/pkg/util/k8sutil/envs/envs.go b/pkg/util/k8sutil/resources/envs.go
similarity index 94%
rename from pkg/util/k8sutil/envs/envs.go
rename to pkg/util/k8sutil/resources/envs.go
index ed5c358cc..cb7bf8e84 100644
--- a/pkg/util/k8sutil/envs/envs.go
+++ b/pkg/util/k8sutil/resources/envs.go
@@ -1,7 +1,7 @@
//
// DISCLAIMER
//
-// Copyright 2023 ArangoDB GmbH, Cologne, Germany
+// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -18,7 +18,7 @@
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
-package envs
+package resources
import core "k8s.io/api/core/v1"
diff --git a/pkg/util/k8sutil/resources/lifecycle.go b/pkg/util/k8sutil/resources/lifecycle.go
new file mode 100644
index 000000000..1667f8305
--- /dev/null
+++ b/pkg/util/k8sutil/resources/lifecycle.go
@@ -0,0 +1,58 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import core "k8s.io/api/core/v1"
+
+func MergeLifecycle(a, b *core.Lifecycle) *core.Lifecycle {
+ if a == nil && b == nil {
+ return nil
+ }
+ if a == nil {
+ return b.DeepCopy()
+ }
+ if b == nil {
+ return a.DeepCopy()
+ }
+
+ return &core.Lifecycle{
+ PostStart: MergeLifecycleHandler(b.PostStart, a.PostStart),
+ PreStop: MergeLifecycleHandler(b.PreStop, a.PreStop),
+ }
+}
+
+func MergeLifecycleHandler(a, b *core.LifecycleHandler) *core.LifecycleHandler {
+ if a == nil && b == nil {
+ return nil
+ }
+ if a == nil {
+ return b.DeepCopy()
+ }
+ if b == nil {
+ return a.DeepCopy()
+ }
+
+ if a.HTTPGet != nil || a.Exec != nil || a.TCPSocket != nil {
+ return a.DeepCopy()
+ }
+
+ return b.DeepCopy()
+}
diff --git a/pkg/util/k8sutil/resources/ports.go b/pkg/util/k8sutil/resources/ports.go
new file mode 100644
index 000000000..d87c6af1c
--- /dev/null
+++ b/pkg/util/k8sutil/resources/ports.go
@@ -0,0 +1,49 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import core "k8s.io/api/core/v1"
+
+func MergeContainerPorts(in []core.ContainerPort, envs ...core.ContainerPort) []core.ContainerPort {
+ out := append([]core.ContainerPort{}, in...)
+
+ for _, env := range envs {
+ var envCopy core.ContainerPort
+ env.DeepCopyInto(&envCopy)
+ if id := ContainerPortId(out, envCopy.Name); id == -1 {
+ out = append(out, envCopy)
+ } else {
+ out[id] = envCopy
+ }
+ }
+
+ return out
+}
+
+func ContainerPortId(in []core.ContainerPort, name string) int {
+ for id := range in {
+ if in[id].Name == name {
+ return id
+ }
+ }
+
+ return -1
+}
diff --git a/pkg/util/k8sutil/resources/probes.go b/pkg/util/k8sutil/resources/probes.go
new file mode 100644
index 000000000..16fab92eb
--- /dev/null
+++ b/pkg/util/k8sutil/resources/probes.go
@@ -0,0 +1,49 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import (
+ core "k8s.io/api/core/v1"
+
+ "github.com/arangodb/kube-arangodb/pkg/util"
+)
+
+func MergeProbes(a, b *core.Probe) *core.Probe {
+ if a == nil && b == nil {
+ return nil
+ }
+ if a == nil {
+ return b.DeepCopy()
+ }
+ if b == nil {
+ return a.DeepCopy()
+ }
+
+ return &core.Probe{
+ ProbeHandler: util.FirstNotDefault(b.ProbeHandler, a.ProbeHandler),
+ InitialDelaySeconds: util.FirstNotDefault(b.InitialDelaySeconds, a.InitialDelaySeconds),
+ TimeoutSeconds: util.FirstNotDefault(b.TimeoutSeconds, a.TimeoutSeconds),
+ PeriodSeconds: util.FirstNotDefault(b.PeriodSeconds, a.PeriodSeconds),
+ SuccessThreshold: util.FirstNotDefault(b.SuccessThreshold, a.SuccessThreshold),
+ FailureThreshold: util.FirstNotDefault(b.FailureThreshold, a.FailureThreshold),
+ TerminationGracePeriodSeconds: util.FirstNotDefault(b.TerminationGracePeriodSeconds, a.TerminationGracePeriodSeconds),
+ }
+}
diff --git a/pkg/util/k8sutil/resources/volumes.go b/pkg/util/k8sutil/resources/volumes.go
new file mode 100644
index 000000000..43f610967
--- /dev/null
+++ b/pkg/util/k8sutil/resources/volumes.go
@@ -0,0 +1,57 @@
+//
+// DISCLAIMER
+//
+// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package resources
+
+import core "k8s.io/api/core/v1"
+
+func MergeVolumes(in []core.Volume, envs ...core.Volume) []core.Volume {
+ out := append([]core.Volume{}, in...)
+
+ for _, env := range envs {
+ var envCopy core.Volume
+ env.DeepCopyInto(&envCopy)
+ if id := VolumeID(out, envCopy.Name); id == -1 {
+ out = append(out, envCopy)
+ } else {
+ out[id] = envCopy
+ }
+ }
+
+ return out
+}
+
+func MergeVolumeMounts(in []core.VolumeMount, envs ...core.VolumeMount) []core.VolumeMount {
+ out := append([]core.VolumeMount{}, in...)
+
+ out = append(out, envs...)
+
+ return out
+}
+
+func VolumeID(in []core.Volume, name string) int {
+ for id := range in {
+ if in[id].Name == name {
+ return id
+ }
+ }
+
+ return -1
+}
diff --git a/pkg/util/refs.go b/pkg/util/refs.go
index 002a47c31..bb03b8708 100644
--- a/pkg/util/refs.go
+++ b/pkg/util/refs.go
@@ -20,6 +20,8 @@
package util
+import "reflect"
+
// NewType returns a reference to a simple type with given value.
func NewType[T interface{}](input T) *T {
return &input
@@ -72,6 +74,17 @@ func First[T interface{}](input ...*T) *T {
return nil
}
+// FirstNotDefault returns first not default value
+func FirstNotDefault[T interface{}](input ...T) T {
+ for _, i := range input {
+ if !reflect.DeepEqual(i, Default[T]()) {
+ return i
+ }
+ }
+
+ return Default[T]()
+}
+
// LastFromList returns last element on the list
func LastFromList[T interface{}](in []T) T {
return in[len(in)-1]
diff --git a/pkg/util/refs_test.go b/pkg/util/refs_test.go
index 5b880e951..7aecd2f5d 100644
--- a/pkg/util/refs_test.go
+++ b/pkg/util/refs_test.go
@@ -1,7 +1,7 @@
//
// DISCLAIMER
//
-// Copyright 2023 ArangoDB GmbH, Cologne, Germany
+// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -153,3 +153,45 @@ func Test_CheckConditionalNil(t *testing.T) {
})
})
}
+
+func Test_FirstNotDefault(t *testing.T) {
+ t.Run("String", func(t *testing.T) {
+ require.Equal(t, "", FirstNotDefault[string]())
+ require.Equal(t, "", FirstNotDefault[string](""))
+ require.Equal(t, "test", FirstNotDefault[string]("", "test"))
+ require.Equal(t, "test1", FirstNotDefault[string]("test1", "test"))
+ })
+ t.Run("Int", func(t *testing.T) {
+ require.Equal(t, 0, FirstNotDefault[int]())
+ require.Equal(t, 0, FirstNotDefault[int](0))
+ require.Equal(t, 1, FirstNotDefault[int](0, 1))
+ require.Equal(t, 2, FirstNotDefault[int](2, 1))
+ })
+ t.Run("Structs", func(t *testing.T) {
+ type z struct {
+ v int
+ }
+
+ require.Equal(t, z{}, FirstNotDefault[z]())
+ require.Equal(t, z{}, FirstNotDefault[z](z{}))
+ require.Equal(t, z{4}, FirstNotDefault[z](z{}, z{4}))
+ require.Equal(t, z{1}, FirstNotDefault[z](z{1}, z{4}))
+ })
+ t.Run("Pointers", func(t *testing.T) {
+ type z struct {
+ v int
+ }
+
+ var z1, z2 z
+
+ z1 = z{1}
+ z2 = z{2}
+
+ require.Equal(t, (*z)(nil), FirstNotDefault[*z]())
+ require.Equal(t, &z1, FirstNotDefault[*z](&z1))
+ require.NotEqual(t, nil, FirstNotDefault[*z](&z1))
+ require.NotEqual(t, &z2, FirstNotDefault[*z](&z1))
+ require.Equal(t, &z1, FirstNotDefault[*z](nil, &z1))
+ require.Equal(t, &z2, FirstNotDefault[*z](&z2, &z1))
+ })
+}