From 7495725d9a3832bd964473d9c41fb945a908f0ed Mon Sep 17 00:00:00 2001 From: Atanas Dinov Date: Thu, 1 Aug 2024 22:14:33 +0300 Subject: [PATCH 1/3] Upgrade CDI to v1.59.0 Signed-off-by: Atanas Dinov --- packages/cdi/charts/Chart.yaml | 4 +- packages/cdi/charts/crds/cdi.yaml | 136 ++++++++++++++++-- .../cdi/charts/templates/cdi-operator.yaml | 73 +++++++++- packages/cdi/charts/values.yaml | 2 +- packages/cdi/package.yaml | 2 +- 5 files changed, 203 insertions(+), 14 deletions(-) diff --git a/packages/cdi/charts/Chart.yaml b/packages/cdi/charts/Chart.yaml index 0b6bd31e..dc2449b8 100644 --- a/packages/cdi/charts/Chart.yaml +++ b/packages/cdi/charts/Chart.yaml @@ -1,7 +1,7 @@ apiVersion: v2 -appVersion: 1.58.0 +appVersion: 1.59.0 description: A Helm chart for Containerized Data Importer (CDI) icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg name: cdi type: application -version: 0.2.4 +version: 0.3.0 diff --git a/packages/cdi/charts/crds/cdi.yaml b/packages/cdi/charts/crds/cdi.yaml index 8e6bfc1e..a907f2e8 100644 --- a/packages/cdi/charts/crds/cdi.yaml +++ b/packages/cdi/charts/crds/cdi.yaml @@ -183,7 +183,8 @@ spec: description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation - feature gate. \n This field is immutable." + feature gate. \n This field is immutable. It can only be + set for containers." items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. properties: @@ -220,7 +221,8 @@ spec: description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + to an implementation-defined value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object type: object preallocation: @@ -331,6 +333,52 @@ spec: description: Override the URL used when uploading to a DataVolume type: string type: object + customizeComponents: + description: CustomizeComponents defines patches for components deployed + by the CDI operator. + properties: + flags: + description: Configure the value used for deployment and daemonset + resources + properties: + api: + additionalProperties: + type: string + type: object + controller: + additionalProperties: + type: string + type: object + uploadProxy: + additionalProperties: + type: string + type: object + type: object + patches: + items: + description: CustomizeComponentsPatch defines a patch for some + resource. + properties: + patch: + type: string + resourceName: + minLength: 1 + type: string + resourceType: + minLength: 1 + type: string + type: + description: PatchType defines the patch type. + type: string + required: + - patch + - resourceName + - resourceType + - type + type: object + type: array + x-kubernetes-list-type: atomic + type: object imagePullPolicy: description: PullPolicy describes a policy for if/when to pull a container image @@ -340,8 +388,8 @@ spec: - Never type: string infra: - description: Rules on which nodes CDI infrastructure pods will be - scheduled + description: Selectors and tolerations that should apply to cdi infrastructure + components properties: affinity: description: affinity enables pod affinity/anti-affinity placement @@ -1214,6 +1262,14 @@ spec: type: array type: object type: object + apiServerReplicas: + description: ApiserverReplicas set Replicas for cdi-apiserver + format: int32 + type: integer + deploymentReplicas: + description: DeploymentReplicas set Replicas for cdi-deployment + format: int32 + type: integer nodeSelector: additionalProperties: type: string @@ -1267,6 +1323,10 @@ spec: type: string type: object type: array + uploadProxyReplicas: + description: UploadproxyReplicas set Replicas for cdi-uploadproxy + format: int32 + type: integer type: object priorityClass: description: PriorityClass of the CDI control plane @@ -2423,7 +2483,8 @@ spec: description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container. \n This is an alpha field and requires enabling the DynamicResourceAllocation - feature gate. \n This field is immutable." + feature gate. \n This field is immutable. It can only be + set for containers." items: description: ResourceClaim references one entry in PodSpec.ResourceClaims. properties: @@ -2460,7 +2521,8 @@ spec: description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + to an implementation-defined value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' type: object type: object preallocation: @@ -2571,6 +2633,52 @@ spec: description: Override the URL used when uploading to a DataVolume type: string type: object + customizeComponents: + description: CustomizeComponents defines patches for components deployed + by the CDI operator. + properties: + flags: + description: Configure the value used for deployment and daemonset + resources + properties: + api: + additionalProperties: + type: string + type: object + controller: + additionalProperties: + type: string + type: object + uploadProxy: + additionalProperties: + type: string + type: object + type: object + patches: + items: + description: CustomizeComponentsPatch defines a patch for some + resource. + properties: + patch: + type: string + resourceName: + minLength: 1 + type: string + resourceType: + minLength: 1 + type: string + type: + description: PatchType defines the patch type. + type: string + required: + - patch + - resourceName + - resourceType + - type + type: object + type: array + x-kubernetes-list-type: atomic + type: object imagePullPolicy: description: PullPolicy describes a policy for if/when to pull a container image @@ -2580,8 +2688,8 @@ spec: - Never type: string infra: - description: Rules on which nodes CDI infrastructure pods will be - scheduled + description: Selectors and tolerations that should apply to cdi infrastructure + components properties: affinity: description: affinity enables pod affinity/anti-affinity placement @@ -3454,6 +3562,14 @@ spec: type: array type: object type: object + apiServerReplicas: + description: ApiserverReplicas set Replicas for cdi-apiserver + format: int32 + type: integer + deploymentReplicas: + description: DeploymentReplicas set Replicas for cdi-deployment + format: int32 + type: integer nodeSelector: additionalProperties: type: string @@ -3507,6 +3623,10 @@ spec: type: string type: object type: array + uploadProxyReplicas: + description: UploadproxyReplicas set Replicas for cdi-uploadproxy + format: int32 + type: integer type: object priorityClass: description: PriorityClass of the CDI control plane diff --git a/packages/cdi/charts/templates/cdi-operator.yaml b/packages/cdi/charts/templates/cdi-operator.yaml index caa8fcae..8e8946e4 100644 --- a/packages/cdi/charts/templates/cdi-operator.yaml +++ b/packages/cdi/charts/templates/cdi-operator.yaml @@ -73,6 +73,7 @@ rules: - admissionregistration.k8s.io resourceNames: - cdi-api-datavolume-mutate + - cdi-api-pvc-mutate resources: - mutatingwebhookconfigurations verbs: @@ -110,6 +111,24 @@ rules: - persistentvolumeclaims verbs: - get + - list + - watch + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch - apiGroups: - "" resources: @@ -122,6 +141,8 @@ rules: - volumesnapshots verbs: - get + - list + - watch - apiGroups: - cdi.kubevirt.io resources: @@ -135,12 +156,38 @@ rules: - datasources verbs: - get + - apiGroups: + - cdi.kubevirt.io + resources: + - volumeclonesources + verbs: + - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - storageprofiles + verbs: + - get + - list + - watch - apiGroups: - cdi.kubevirt.io resources: - cdis verbs: - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - cdiconfigs + verbs: + - get + - list + - watch - apiGroups: - cdi.kubevirt.io resources: @@ -218,6 +265,12 @@ rules: - get - list - watch + - apiGroups: + - config.openshift.io + resources: + - clusterversions + verbs: + - get - apiGroups: - cdi.kubevirt.io resources: @@ -321,6 +374,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: labels: + app: containerized-data-importer app.kubernetes.io/component: storage app.kubernetes.io/managed-by: cdi-operator cdi.kubevirt.io: "" @@ -446,14 +500,14 @@ rules: - watch - create - update - - delete + - deletecollection - apiGroups: - batch resources: - jobs verbs: - create - - delete + - deletecollection - list - watch - apiGroups: @@ -501,6 +555,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: labels: + app: containerized-data-importer app.kubernetes.io/component: storage app.kubernetes.io/managed-by: cdi-operator cdi.kubevirt.io: "" @@ -519,6 +574,7 @@ apiVersion: apps/v1 kind: Deployment metadata: labels: + cdi.kubevirt.io: cdi-operator name: cdi-operator operator.cdi.kubevirt.io: "" prometheus.cdi.kubevirt.io: "true" @@ -534,10 +590,23 @@ spec: template: metadata: labels: + cdi.kubevirt.io: cdi-operator name: cdi-operator operator.cdi.kubevirt.io: "" prometheus.cdi.kubevirt.io: "true" spec: + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: cdi.kubevirt.io + operator: In + values: + - cdi-operator + topologyKey: kubernetes.io/hostname + weight: 1 containers: - env: - name: DEPLOY_CLUSTER_RESOURCES diff --git a/packages/cdi/charts/values.yaml b/packages/cdi/charts/values.yaml index 52b507d7..cdf89879 100644 --- a/packages/cdi/charts/values.yaml +++ b/packages/cdi/charts/values.yaml @@ -1,5 +1,5 @@ deployment: - version: 1.58.0-150500.6.15.1 + version: 1.59.0-150500.6.18.1 operatorImage: registry.suse.com/suse/sles/15.5/cdi-operator controllerImage: registry.suse.com/suse/sles/15.5/cdi-controller importerImage: registry.suse.com/suse/sles/15.5/cdi-importer diff --git a/packages/cdi/package.yaml b/packages/cdi/package.yaml index 7982ff3e..be2ca60e 100644 --- a/packages/cdi/package.yaml +++ b/packages/cdi/package.yaml @@ -1,2 +1,2 @@ url: local -version: 0.2.4 +version: 0.3.0 From 7d50d18604cace0cad68704b16bfa29bbc212cf8 Mon Sep 17 00:00:00 2001 From: Atanas Dinov Date: Mon, 5 Aug 2024 10:40:28 +0300 Subject: [PATCH 2/3] make charts Signed-off-by: Atanas Dinov --- assets/cdi/cdi-0.3.0.tgz | Bin 0 -> 29156 bytes charts/cdi/0.3.0/.helmignore | 23 + charts/cdi/0.3.0/Chart.yaml | 7 + charts/cdi/0.3.0/crds/cdi.yaml | 4618 +++++++++++++++++ charts/cdi/0.3.0/templates/NOTES.txt | 2 + charts/cdi/0.3.0/templates/_helpers.tpl | 62 + charts/cdi/0.3.0/templates/_hooks.tpl | 47 + charts/cdi/0.3.0/templates/cdi-operator.yaml | 659 +++ .../0.3.0/templates/cdi-uninstall-hooks.yaml | 69 + charts/cdi/0.3.0/templates/cdi.yaml | 21 + .../0.3.0/templates/crd-uninstall-hooks.yaml | 55 + .../0.3.0/templates/crd-upgrade-hooks.yaml | 80 + .../cdi/0.3.0/templates/namespace-hooks.yaml | 56 + charts/cdi/0.3.0/values.yaml | 38 + index.yaml | 11 + 15 files changed, 5748 insertions(+) create mode 100644 assets/cdi/cdi-0.3.0.tgz create mode 100644 charts/cdi/0.3.0/.helmignore create mode 100644 charts/cdi/0.3.0/Chart.yaml create mode 100644 charts/cdi/0.3.0/crds/cdi.yaml create mode 100644 charts/cdi/0.3.0/templates/NOTES.txt create mode 100644 charts/cdi/0.3.0/templates/_helpers.tpl create mode 100644 charts/cdi/0.3.0/templates/_hooks.tpl create mode 100644 charts/cdi/0.3.0/templates/cdi-operator.yaml create mode 100644 charts/cdi/0.3.0/templates/cdi-uninstall-hooks.yaml create mode 100644 charts/cdi/0.3.0/templates/cdi.yaml create mode 100644 charts/cdi/0.3.0/templates/crd-uninstall-hooks.yaml create mode 100644 charts/cdi/0.3.0/templates/crd-upgrade-hooks.yaml create mode 100644 charts/cdi/0.3.0/templates/namespace-hooks.yaml create mode 100644 charts/cdi/0.3.0/values.yaml diff --git a/assets/cdi/cdi-0.3.0.tgz b/assets/cdi/cdi-0.3.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6978ee9657d621873ee1f4bc35477b0eca6f5a61 GIT binary patch literal 29156 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 literal 0 HcmV?d00001 diff --git a/charts/cdi/0.3.0/.helmignore b/charts/cdi/0.3.0/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/charts/cdi/0.3.0/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/cdi/0.3.0/Chart.yaml b/charts/cdi/0.3.0/Chart.yaml new file mode 100644 index 00000000..dc2449b8 --- /dev/null +++ b/charts/cdi/0.3.0/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v2 +appVersion: 1.59.0 +description: A Helm chart for Containerized Data Importer (CDI) +icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg +name: cdi +type: application +version: 0.3.0 diff --git a/charts/cdi/0.3.0/crds/cdi.yaml b/charts/cdi/0.3.0/crds/cdi.yaml new file mode 100644 index 00000000..a907f2e8 --- /dev/null +++ b/charts/cdi/0.3.0/crds/cdi.yaml @@ -0,0 +1,4618 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.13.0 + name: cdis.cdi.kubevirt.io +spec: + group: cdi.kubevirt.io + names: + kind: CDI + listKind: CDIList + plural: cdis + shortNames: + - cdi + - cdis + singular: cdi + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.phase + name: Phase + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: CDI is the CDI Operator CRD + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: CDISpec defines our specification for the CDI installation + properties: + certConfig: + description: certificate configuration + properties: + ca: + description: CA configuration CA certs are kept in the CA bundle + as long as they are valid + properties: + duration: + description: The requested 'duration' (i.e. lifetime) of the + Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's `notAfter` time that we will begin to attempt + to renew the certificate. + type: string + type: object + server: + description: Server configuration Certs are rotated and discarded + properties: + duration: + description: The requested 'duration' (i.e. lifetime) of the + Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's `notAfter` time that we will begin to attempt + to renew the certificate. + type: string + type: object + type: object + cloneStrategyOverride: + description: 'Clone strategy override: should we use a host-assisted + copy even if snapshots are available?' + enum: + - copy + - snapshot + - csi-clone + type: string + config: + description: CDIConfig at CDI level + properties: + dataVolumeTTLSeconds: + description: DataVolumeTTLSeconds is the time in seconds after + DataVolume completion it can be garbage collected. Disabled + by default. + format: int32 + type: integer + featureGates: + description: FeatureGates are a list of specific enabled feature + gates + items: + type: string + type: array + filesystemOverhead: + description: FilesystemOverhead describes the space reserved for + overhead when using Filesystem volumes. A value is between 0 + and 1, if not defined it is 0.055 (5.5% overhead) + properties: + global: + description: Global is how much space of a Filesystem volume + should be reserved for overhead. This value is used unless + overridden by a more specific value (per storageClass) + pattern: ^(0(?:\.\d{1,3})?|1)$ + type: string + storageClass: + additionalProperties: + description: 'Percent is a string that can only be a value + between [0,1) (Note: we actually rely on reconcile to + reject invalid values)' + pattern: ^(0(?:\.\d{1,3})?|1)$ + type: string + description: StorageClass specifies how much space of a Filesystem + volume should be reserved for safety. The keys are the storageClass + and the values are the overhead. This value overrides the + global value + type: object + type: object + imagePullSecrets: + description: The imagePullSecrets used to pull the container images + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + importProxy: + description: ImportProxy contains importer pod proxy configuration. + properties: + HTTPProxy: + description: HTTPProxy is the URL http://:@: + of the import proxy for HTTP requests. Empty means unset + and will not result in the import pod env var. + type: string + HTTPSProxy: + description: HTTPSProxy is the URL https://:@: + of the import proxy for HTTPS requests. Empty means unset + and will not result in the import pod env var. + type: string + noProxy: + description: NoProxy is a comma-separated list of hostnames + and/or CIDRs for which the proxy should not be used. Empty + means unset and will not result in the import pod env var. + type: string + trustedCAProxy: + description: "TrustedCAProxy is the name of a ConfigMap in + the cdi namespace that contains a user-provided trusted + certificate authority (CA) bundle. The TrustedCAProxy ConfigMap + is consumed by the DataImportCron controller for creating + cronjobs, and by the import controller referring a copy + of the ConfigMap in the import namespace. Here is an example + of the ConfigMap (in yaml): \n apiVersion: v1 kind: ConfigMap + metadata: name: my-ca-proxy-cm namespace: cdi data: ca.pem: + | -----BEGIN CERTIFICATE----- ... + ... -----END CERTIFICATE-----" + type: string + type: object + insecureRegistries: + description: InsecureRegistries is a list of TLS disabled registries + items: + type: string + type: array + logVerbosity: + description: LogVerbosity overrides the default verbosity level + used to initialize loggers + format: int32 + type: integer + podResourceRequirements: + description: ResourceRequirements describes the compute resource + requirements. + properties: + claims: + description: "Claims lists the names of resources, defined + in spec.resourceClaims, that are used by this container. + \n This is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. It can only be + set for containers." + items: + description: ResourceClaim references one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name of one entry in + pod.spec.resourceClaims of the Pod where this field + is used. It makes that resource available inside a + container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + preallocation: + description: Preallocation controls whether storage for DataVolumes + should be allocated in advance. + type: boolean + scratchSpaceStorageClass: + description: 'Override the storage class to used for scratch space + during transfer operations. The scratch space storage class + is determined in the following order: 1. value of scratchSpaceStorageClass, + if that doesn''t exist, use the default storage class, if there + is no default storage class, use the storage class of the DataVolume, + if no storage class specified, use no storage class for scratch + space' + type: string + tlsSecurityProfile: + description: TLSSecurityProfile is used by operators to apply + cluster-wide TLS security settings to operands. + properties: + custom: + description: "custom is a user-defined TLS security profile. + Be extremely careful using a custom profile as invalid configurations + can be catastrophic. An example custom profile looks like + this: \n ciphers: - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 + minTLSVersion: TLSv1.1" + nullable: true + properties: + ciphers: + description: "ciphers is used to specify the cipher algorithms + that are negotiated during the TLS handshake. Operators + may remove entries their operands do not support. For + example, to use DES-CBC3-SHA (yaml): \n ciphers: - + DES-CBC3-SHA" + items: + type: string + type: array + minTLSVersion: + description: "minTLSVersion is used to specify the minimal + version of the TLS protocol that is negotiated during + the TLS handshake. For example, to use TLS versions + 1.1, 1.2 and 1.3 (yaml): \n minTLSVersion: TLSv1.1 \n + NOTE: currently the highest minTLSVersion allowed is + VersionTLS12" + enum: + - VersionTLS10 + - VersionTLS11 + - VersionTLS12 + - VersionTLS13 + type: string + type: object + intermediate: + description: "intermediate is a TLS security profile based + on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29 + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 + - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 + - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 + minTLSVersion: TLSv1.2" + nullable: true + type: object + modern: + description: "modern is a TLS security profile based on: \n + https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + minTLSVersion: TLSv1.3 \n NOTE: Currently unsupported." + nullable: true + type: object + old: + description: "old is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 + - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 + - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 + - DHE-RSA-CHACHA20-POLY1305 - ECDHE-ECDSA-AES128-SHA256 + - ECDHE-RSA-AES128-SHA256 - ECDHE-ECDSA-AES128-SHA - ECDHE-RSA-AES128-SHA + - ECDHE-ECDSA-AES256-SHA384 - ECDHE-RSA-AES256-SHA384 - + ECDHE-ECDSA-AES256-SHA - ECDHE-RSA-AES256-SHA - DHE-RSA-AES128-SHA256 + - DHE-RSA-AES256-SHA256 - AES128-GCM-SHA256 - AES256-GCM-SHA384 + - AES128-SHA256 - AES256-SHA256 - AES128-SHA - AES256-SHA + - DES-CBC3-SHA minTLSVersion: TLSv1.0" + nullable: true + type: object + type: + description: "type is one of Old, Intermediate, Modern or + Custom. Custom provides the ability to specify individual + TLS security profile parameters. Old, Intermediate and Modern + are TLS security profiles based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations + \n The profiles are intent based, so they may change over + time as new ciphers are developed and existing ciphers are + found to be insecure. Depending on precisely which ciphers + are available to a process, the list may be reduced. \n + Note that the Modern profile is currently not supported + because it is not yet well adopted by common software libraries." + enum: + - Old + - Intermediate + - Modern + - Custom + type: string + type: object + uploadProxyURLOverride: + description: Override the URL used when uploading to a DataVolume + type: string + type: object + customizeComponents: + description: CustomizeComponents defines patches for components deployed + by the CDI operator. + properties: + flags: + description: Configure the value used for deployment and daemonset + resources + properties: + api: + additionalProperties: + type: string + type: object + controller: + additionalProperties: + type: string + type: object + uploadProxy: + additionalProperties: + type: string + type: object + type: object + patches: + items: + description: CustomizeComponentsPatch defines a patch for some + resource. + properties: + patch: + type: string + resourceName: + minLength: 1 + type: string + resourceType: + minLength: 1 + type: string + type: + description: PatchType defines the patch type. + type: string + required: + - patch + - resourceName + - resourceType + - type + type: object + type: array + x-kubernetes-list-type: atomic + type: object + imagePullPolicy: + description: PullPolicy describes a policy for if/when to pull a container + image + enum: + - Always + - IfNotPresent + - Never + type: string + infra: + description: Selectors and tolerations that should apply to cdi infrastructure + components + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed with + nodeSelector. affinity is going to be applied to the relevant + kind of pods in parallel with nodeSelector See https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node that + violates one or more of the expressions. The node that + is most preferred is the one with the greatest sum of + weights, i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + anti-affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the pod + will not be scheduled onto the node. If the anti-affinity + requirements specified by this field cease to be met + at some point during pod execution (e.g. due to a pod + label update), the system may or may not try to eventually + evict the pod from its node. When there are multiple + elements, the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + apiServerReplicas: + description: ApiserverReplicas set Replicas for cdi-apiserver + format: int32 + type: integer + deploymentReplicas: + description: DeploymentReplicas set Replicas for cdi-deployment + format: int32 + type: integer + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to the + relevant kind of pods It specifies a map of key-value pairs: + for the pod to be eligible to run on a node, the node must have + each of the indicated key-value pairs as labels (it can have + additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied to the + relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than default + ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, allowed + values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to + the value. Valid operators are Exists and Equal. Defaults + to Equal. Exists is equivalent to wildcard for value, + so that a pod can tolerate all taints of a particular + category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of + time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the taint + forever (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + uploadProxyReplicas: + description: UploadproxyReplicas set Replicas for cdi-uploadproxy + format: int32 + type: integer + type: object + priorityClass: + description: PriorityClass of the CDI control plane + type: string + uninstallStrategy: + description: CDIUninstallStrategy defines the state to leave CDI on + uninstall + enum: + - RemoveWorkloads + - BlockUninstallIfWorkloadsExist + type: string + workload: + description: Restrict on which nodes CDI workload pods will be scheduled + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed with + nodeSelector. affinity is going to be applied to the relevant + kind of pods in parallel with nodeSelector See https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node that + violates one or more of the expressions. The node that + is most preferred is the one with the greatest sum of + weights, i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + anti-affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the pod + will not be scheduled onto the node. If the anti-affinity + requirements specified by this field cease to be met + at some point during pod execution (e.g. due to a pod + label update), the system may or may not try to eventually + evict the pod from its node. When there are multiple + elements, the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to the + relevant kind of pods It specifies a map of key-value pairs: + for the pod to be eligible to run on a node, the node must have + each of the indicated key-value pairs as labels (it can have + additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied to the + relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than default + ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, allowed + values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to + the value. Valid operators are Exists and Equal. Defaults + to Equal. Exists is equivalent to wildcard for value, + so that a pod can tolerate all taints of a particular + category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of + time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the taint + forever (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + type: object + type: object + status: + description: CDIStatus defines the status of the installation + properties: + conditions: + description: A list of current conditions of the resource + items: + description: Condition represents the state of the operator's reconciliation + functionality. + properties: + lastHeartbeatTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + description: ConditionType is the state of the operator's reconciliation + functionality. + type: string + required: + - status + - type + type: object + type: array + observedVersion: + description: The observed version of the resource + type: string + operatorVersion: + description: The version of the resource as defined by the operator + type: string + phase: + description: Phase is the current phase of the deployment + type: string + targetVersion: + description: The desired version of the resource + type: string + type: object + required: + - spec + type: object + served: true + storage: false + subresources: {} + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.phase + name: Phase + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: CDI is the CDI Operator CRD + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: CDISpec defines our specification for the CDI installation + properties: + certConfig: + description: certificate configuration + properties: + ca: + description: CA configuration CA certs are kept in the CA bundle + as long as they are valid + properties: + duration: + description: The requested 'duration' (i.e. lifetime) of the + Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's `notAfter` time that we will begin to attempt + to renew the certificate. + type: string + type: object + server: + description: Server configuration Certs are rotated and discarded + properties: + duration: + description: The requested 'duration' (i.e. lifetime) of the + Certificate. + type: string + renewBefore: + description: The amount of time before the currently issued + certificate's `notAfter` time that we will begin to attempt + to renew the certificate. + type: string + type: object + type: object + cloneStrategyOverride: + description: 'Clone strategy override: should we use a host-assisted + copy even if snapshots are available?' + enum: + - copy + - snapshot + - csi-clone + type: string + config: + description: CDIConfig at CDI level + properties: + dataVolumeTTLSeconds: + description: DataVolumeTTLSeconds is the time in seconds after + DataVolume completion it can be garbage collected. Disabled + by default. + format: int32 + type: integer + featureGates: + description: FeatureGates are a list of specific enabled feature + gates + items: + type: string + type: array + filesystemOverhead: + description: FilesystemOverhead describes the space reserved for + overhead when using Filesystem volumes. A value is between 0 + and 1, if not defined it is 0.055 (5.5% overhead) + properties: + global: + description: Global is how much space of a Filesystem volume + should be reserved for overhead. This value is used unless + overridden by a more specific value (per storageClass) + pattern: ^(0(?:\.\d{1,3})?|1)$ + type: string + storageClass: + additionalProperties: + description: 'Percent is a string that can only be a value + between [0,1) (Note: we actually rely on reconcile to + reject invalid values)' + pattern: ^(0(?:\.\d{1,3})?|1)$ + type: string + description: StorageClass specifies how much space of a Filesystem + volume should be reserved for safety. The keys are the storageClass + and the values are the overhead. This value overrides the + global value + type: object + type: object + imagePullSecrets: + description: The imagePullSecrets used to pull the container images + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + importProxy: + description: ImportProxy contains importer pod proxy configuration. + properties: + HTTPProxy: + description: HTTPProxy is the URL http://:@: + of the import proxy for HTTP requests. Empty means unset + and will not result in the import pod env var. + type: string + HTTPSProxy: + description: HTTPSProxy is the URL https://:@: + of the import proxy for HTTPS requests. Empty means unset + and will not result in the import pod env var. + type: string + noProxy: + description: NoProxy is a comma-separated list of hostnames + and/or CIDRs for which the proxy should not be used. Empty + means unset and will not result in the import pod env var. + type: string + trustedCAProxy: + description: "TrustedCAProxy is the name of a ConfigMap in + the cdi namespace that contains a user-provided trusted + certificate authority (CA) bundle. The TrustedCAProxy ConfigMap + is consumed by the DataImportCron controller for creating + cronjobs, and by the import controller referring a copy + of the ConfigMap in the import namespace. Here is an example + of the ConfigMap (in yaml): \n apiVersion: v1 kind: ConfigMap + metadata: name: my-ca-proxy-cm namespace: cdi data: ca.pem: + | -----BEGIN CERTIFICATE----- ... + ... -----END CERTIFICATE-----" + type: string + type: object + insecureRegistries: + description: InsecureRegistries is a list of TLS disabled registries + items: + type: string + type: array + logVerbosity: + description: LogVerbosity overrides the default verbosity level + used to initialize loggers + format: int32 + type: integer + podResourceRequirements: + description: ResourceRequirements describes the compute resource + requirements. + properties: + claims: + description: "Claims lists the names of resources, defined + in spec.resourceClaims, that are used by this container. + \n This is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. It can only be + set for containers." + items: + description: ResourceClaim references one entry in PodSpec.ResourceClaims. + properties: + name: + description: Name must match the name of one entry in + pod.spec.resourceClaims of the Pod where this field + is used. It makes that resource available inside a + container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. Requests cannot exceed + Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + preallocation: + description: Preallocation controls whether storage for DataVolumes + should be allocated in advance. + type: boolean + scratchSpaceStorageClass: + description: 'Override the storage class to used for scratch space + during transfer operations. The scratch space storage class + is determined in the following order: 1. value of scratchSpaceStorageClass, + if that doesn''t exist, use the default storage class, if there + is no default storage class, use the storage class of the DataVolume, + if no storage class specified, use no storage class for scratch + space' + type: string + tlsSecurityProfile: + description: TLSSecurityProfile is used by operators to apply + cluster-wide TLS security settings to operands. + properties: + custom: + description: "custom is a user-defined TLS security profile. + Be extremely careful using a custom profile as invalid configurations + can be catastrophic. An example custom profile looks like + this: \n ciphers: - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 + minTLSVersion: TLSv1.1" + nullable: true + properties: + ciphers: + description: "ciphers is used to specify the cipher algorithms + that are negotiated during the TLS handshake. Operators + may remove entries their operands do not support. For + example, to use DES-CBC3-SHA (yaml): \n ciphers: - + DES-CBC3-SHA" + items: + type: string + type: array + minTLSVersion: + description: "minTLSVersion is used to specify the minimal + version of the TLS protocol that is negotiated during + the TLS handshake. For example, to use TLS versions + 1.1, 1.2 and 1.3 (yaml): \n minTLSVersion: TLSv1.1 \n + NOTE: currently the highest minTLSVersion allowed is + VersionTLS12" + enum: + - VersionTLS10 + - VersionTLS11 + - VersionTLS12 + - VersionTLS13 + type: string + type: object + intermediate: + description: "intermediate is a TLS security profile based + on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29 + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 + - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 + - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 + minTLSVersion: TLSv1.2" + nullable: true + type: object + modern: + description: "modern is a TLS security profile based on: \n + https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + minTLSVersion: TLSv1.3 \n NOTE: Currently unsupported." + nullable: true + type: object + old: + description: "old is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 + - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 + - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 + - DHE-RSA-CHACHA20-POLY1305 - ECDHE-ECDSA-AES128-SHA256 + - ECDHE-RSA-AES128-SHA256 - ECDHE-ECDSA-AES128-SHA - ECDHE-RSA-AES128-SHA + - ECDHE-ECDSA-AES256-SHA384 - ECDHE-RSA-AES256-SHA384 - + ECDHE-ECDSA-AES256-SHA - ECDHE-RSA-AES256-SHA - DHE-RSA-AES128-SHA256 + - DHE-RSA-AES256-SHA256 - AES128-GCM-SHA256 - AES256-GCM-SHA384 + - AES128-SHA256 - AES256-SHA256 - AES128-SHA - AES256-SHA + - DES-CBC3-SHA minTLSVersion: TLSv1.0" + nullable: true + type: object + type: + description: "type is one of Old, Intermediate, Modern or + Custom. Custom provides the ability to specify individual + TLS security profile parameters. Old, Intermediate and Modern + are TLS security profiles based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations + \n The profiles are intent based, so they may change over + time as new ciphers are developed and existing ciphers are + found to be insecure. Depending on precisely which ciphers + are available to a process, the list may be reduced. \n + Note that the Modern profile is currently not supported + because it is not yet well adopted by common software libraries." + enum: + - Old + - Intermediate + - Modern + - Custom + type: string + type: object + uploadProxyURLOverride: + description: Override the URL used when uploading to a DataVolume + type: string + type: object + customizeComponents: + description: CustomizeComponents defines patches for components deployed + by the CDI operator. + properties: + flags: + description: Configure the value used for deployment and daemonset + resources + properties: + api: + additionalProperties: + type: string + type: object + controller: + additionalProperties: + type: string + type: object + uploadProxy: + additionalProperties: + type: string + type: object + type: object + patches: + items: + description: CustomizeComponentsPatch defines a patch for some + resource. + properties: + patch: + type: string + resourceName: + minLength: 1 + type: string + resourceType: + minLength: 1 + type: string + type: + description: PatchType defines the patch type. + type: string + required: + - patch + - resourceName + - resourceType + - type + type: object + type: array + x-kubernetes-list-type: atomic + type: object + imagePullPolicy: + description: PullPolicy describes a policy for if/when to pull a container + image + enum: + - Always + - IfNotPresent + - Never + type: string + infra: + description: Selectors and tolerations that should apply to cdi infrastructure + components + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed with + nodeSelector. affinity is going to be applied to the relevant + kind of pods in parallel with nodeSelector See https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node that + violates one or more of the expressions. The node that + is most preferred is the one with the greatest sum of + weights, i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + anti-affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the pod + will not be scheduled onto the node. If the anti-affinity + requirements specified by this field cease to be met + at some point during pod execution (e.g. due to a pod + label update), the system may or may not try to eventually + evict the pod from its node. When there are multiple + elements, the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + apiServerReplicas: + description: ApiserverReplicas set Replicas for cdi-apiserver + format: int32 + type: integer + deploymentReplicas: + description: DeploymentReplicas set Replicas for cdi-deployment + format: int32 + type: integer + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to the + relevant kind of pods It specifies a map of key-value pairs: + for the pod to be eligible to run on a node, the node must have + each of the indicated key-value pairs as labels (it can have + additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied to the + relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than default + ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, allowed + values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to + the value. Valid operators are Exists and Equal. Defaults + to Equal. Exists is equivalent to wildcard for value, + so that a pod can tolerate all taints of a particular + category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of + time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the taint + forever (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + uploadProxyReplicas: + description: UploadproxyReplicas set Replicas for cdi-uploadproxy + format: int32 + type: integer + type: object + priorityClass: + description: PriorityClass of the CDI control plane + type: string + uninstallStrategy: + description: CDIUninstallStrategy defines the state to leave CDI on + uninstall + enum: + - RemoveWorkloads + - BlockUninstallIfWorkloadsExist + type: string + workload: + description: Restrict on which nodes CDI workload pods will be scheduled + properties: + affinity: + description: affinity enables pod affinity/anti-affinity placement + expanding the types of constraints that can be expressed with + nodeSelector. affinity is going to be applied to the relevant + kind of pods in parallel with nodeSelector See https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node that + violates one or more of the expressions. The node that + is most preferred is the one with the greatest sum of + weights, i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + anti-affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the pod + will not be scheduled onto the node. If the anti-affinity + requirements specified by this field cease to be met + at some point during pod execution (e.g. due to a pod + label update), the system may or may not try to eventually + evict the pod from its node. When there are multiple + elements, the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + description: 'nodeSelector is the node selector applied to the + relevant kind of pods It specifies a map of key-value pairs: + for the pod to be eligible to run on a node, the node must have + each of the indicated key-value pairs as labels (it can have + additional labels as well). See https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector' + type: object + tolerations: + description: tolerations is a list of tolerations applied to the + relevant kind of pods See https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + for more info. These are additional tolerations other than default + ones. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, allowed + values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to + the value. Valid operators are Exists and Equal. Defaults + to Equal. Exists is equivalent to wildcard for value, + so that a pod can tolerate all taints of a particular + category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of + time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the taint + forever (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + type: object + type: object + status: + description: CDIStatus defines the status of the installation + properties: + conditions: + description: A list of current conditions of the resource + items: + description: Condition represents the state of the operator's reconciliation + functionality. + properties: + lastHeartbeatTime: + format: date-time + type: string + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + description: ConditionType is the state of the operator's reconciliation + functionality. + type: string + required: + - status + - type + type: object + type: array + observedVersion: + description: The observed version of the resource + type: string + operatorVersion: + description: The version of the resource as defined by the operator + type: string + phase: + description: Phase is the current phase of the deployment + type: string + targetVersion: + description: The desired version of the resource + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: {} diff --git a/charts/cdi/0.3.0/templates/NOTES.txt b/charts/cdi/0.3.0/templates/NOTES.txt new file mode 100644 index 00000000..9e79f627 --- /dev/null +++ b/charts/cdi/0.3.0/templates/NOTES.txt @@ -0,0 +1,2 @@ +Verify that all CDI components are installed correctly: + kubectl get all -n {{ .Release.Namespace }} diff --git a/charts/cdi/0.3.0/templates/_helpers.tpl b/charts/cdi/0.3.0/templates/_helpers.tpl new file mode 100644 index 00000000..6fa59949 --- /dev/null +++ b/charts/cdi/0.3.0/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "cdi.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "cdi.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "cdi.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "cdi.labels" -}} +helm.sh/chart: {{ include "cdi.chart" . }} +{{ include "cdi.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "cdi.selectorLabels" -}} +app.kubernetes.io/name: {{ include "cdi.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "cdi.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "cdi.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/charts/cdi/0.3.0/templates/_hooks.tpl b/charts/cdi/0.3.0/templates/_hooks.tpl new file mode 100644 index 00000000..96499504 --- /dev/null +++ b/charts/cdi/0.3.0/templates/_hooks.tpl @@ -0,0 +1,47 @@ +{{/* Hook annotations */}} +{{- define "cdi.hook.annotations" -}} + annotations: + "helm.sh/hook": {{ .hookType }} + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "helm.sh/hook-weight": {{ .hookWeight | quote }} +{{- end -}} + +{{/* Namespace modifying hook annotations */}} +{{- define "cdi.namespaceHook.annotations" -}} +{{ template "cdi.hook.annotations" merge (dict "hookType" "pre-install") . }} +{{- end -}} + +{{/* CRD upgrading hook annotations */}} +{{- define "cdi.crdUpgradeHook.annotations" -}} +{{ template "cdi.hook.annotations" merge (dict "hookType" "pre-upgrade") . }} +{{- end -}} + +{{/* Custom resource uninstalling hook annotations */}} +{{- define "cdi.crUninstallHook.annotations" -}} +{{ template "cdi.hook.annotations" merge (dict "hookType" "pre-delete") . }} +{{- end -}} + +{{/* CRD uninstalling hook annotations */}} +{{- define "cdi.crdUninstallHook.annotations" -}} +{{ template "cdi.hook.annotations" merge (dict "hookType" "post-delete") . }} +{{- end -}} + +{{/* Namespace modifying hook name */}} +{{- define "cdi.namespaceHook.name" -}} +{{ include "cdi.fullname" . }}-namespace-modify +{{- end }} + +{{/* CRD upgrading hook name */}} +{{- define "cdi.crdUpgradeHook.name" -}} +{{ include "cdi.fullname" . }}-crd-upgrade +{{- end }} + +{{/* Custom resource uninstalling hook name */}} +{{- define "cdi.crUninstallHook.name" -}} +{{ include "cdi.fullname" . }}-uninstall +{{- end }} + +{{/* CRD uninstalling hook name */}} +{{- define "cdi.crdUninstallHook.name" -}} +{{ include "cdi.fullname" . }}-crd-uninstall +{{- end }} diff --git a/charts/cdi/0.3.0/templates/cdi-operator.yaml b/charts/cdi/0.3.0/templates/cdi-operator.yaml new file mode 100644 index 00000000..8e8946e4 --- /dev/null +++ b/charts/cdi/0.3.0/templates/cdi-operator.yaml @@ -0,0 +1,659 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + operator.cdi.kubevirt.io: "" + name: cdi-operator-cluster +rules: + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - security.openshift.io + resources: + - securitycontextconstraints + verbs: + - get + - list + - watch + - update + - create + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + - customresourcedefinitions/status + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - cdi.kubevirt.io + - upload.cdi.kubevirt.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - create + - list + - watch + - apiGroups: + - admissionregistration.k8s.io + resourceNames: + - cdi-api-dataimportcron-validate + - cdi-api-populator-validate + - cdi-api-datavolume-validate + - cdi-api-validate + - objecttransfer-api-validate + resources: + - validatingwebhookconfigurations + verbs: + - get + - update + - delete + - apiGroups: + - admissionregistration.k8s.io + resourceNames: + - cdi-api-datavolume-mutate + - cdi-api-pvc-mutate + resources: + - mutatingwebhookconfigurations + verbs: + - get + - update + - delete + - apiGroups: + - apiregistration.k8s.io + resources: + - apiservices + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - datavolumes + verbs: + - list + - get + - apiGroups: + - cdi.kubevirt.io + resources: + - datasources + verbs: + - get + - apiGroups: + - cdi.kubevirt.io + resources: + - volumeclonesources + verbs: + - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - storageprofiles + verbs: + - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - cdis + verbs: + - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - cdiconfigs + verbs: + - get + - list + - watch + - apiGroups: + - cdi.kubevirt.io + resources: + - cdis/finalizers + verbs: + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - create + - update + - delete + - deletecollection + - patch + - apiGroups: + - "" + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims/finalizers + - pods/finalizers + verbs: + - update + - apiGroups: + - "" + resources: + - pods + - services + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - create + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + - csidrivers + verbs: + - get + - list + - watch + - apiGroups: + - config.openshift.io + resources: + - proxies + verbs: + - get + - list + - watch + - apiGroups: + - config.openshift.io + resources: + - clusterversions + verbs: + - get + - apiGroups: + - cdi.kubevirt.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + - volumesnapshotclasses + - volumesnapshotcontents + verbs: + - get + - list + - watch + - create + - delete + - apiGroups: + - snapshot.storage.k8s.io + resources: + - volumesnapshots + verbs: + - update + - deletecollection + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch + - apiGroups: + - scheduling.k8s.io + resources: + - priorityclasses + verbs: + - get + - list + - watch + - apiGroups: + - image.openshift.io + resources: + - imagestreams + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - apiGroups: + - kubevirt.io + resources: + - virtualmachines/finalizers + verbs: + - update + - apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - apiGroups: + - cdi.kubevirt.io + resources: + - dataimportcrons + verbs: + - get + - list + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + operator.cdi.kubevirt.io: "" + name: cdi-operator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cdi-operator-cluster +subjects: + - kind: ServiceAccount + name: cdi-operator + namespace: {{ .Release.Namespace }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + operator.cdi.kubevirt.io: "" + name: cdi-operator + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: containerized-data-importer + app.kubernetes.io/component: storage + app.kubernetes.io/managed-by: cdi-operator + cdi.kubevirt.io: "" + name: cdi-operator + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - serviceaccounts + - configmaps + - events + - secrets + - services + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - apps + resources: + - deployments + - deployments/finalizers + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - route.openshift.io + resources: + - routes + - routes/custom-host + verbs: + - get + - list + - watch + - create + - update + - apiGroups: + - config.openshift.io + resources: + - proxies + verbs: + - get + - list + - watch + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + - prometheusrules + verbs: + - get + - list + - watch + - create + - delete + - update + - patch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - create + - update + - apiGroups: + - "" + resources: + - secrets + - configmaps + verbs: + - get + - list + - watch + - create + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - cronjobs + verbs: + - get + - list + - watch + - create + - update + - deletecollection + - apiGroups: + - batch + resources: + - jobs + verbs: + - create + - deletecollection + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - create + - update + - apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - route.openshift.io + resources: + - routes + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - apiGroups: + - "" + resources: + - services + - endpoints + - pods + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: containerized-data-importer + app.kubernetes.io/component: storage + app.kubernetes.io/managed-by: cdi-operator + cdi.kubevirt.io: "" + name: cdi-operator + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: cdi-operator +subjects: + - kind: ServiceAccount + name: cdi-operator + namespace: {{ .Release.Namespace }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + cdi.kubevirt.io: cdi-operator + name: cdi-operator + operator.cdi.kubevirt.io: "" + prometheus.cdi.kubevirt.io: "true" + name: cdi-operator + namespace: {{ .Release.Namespace }} +spec: + replicas: 1 + selector: + matchLabels: + name: cdi-operator + operator.cdi.kubevirt.io: "" + strategy: {} + template: + metadata: + labels: + cdi.kubevirt.io: cdi-operator + name: cdi-operator + operator.cdi.kubevirt.io: "" + prometheus.cdi.kubevirt.io: "true" + spec: + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: cdi.kubevirt.io + operator: In + values: + - cdi-operator + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - env: + - name: DEPLOY_CLUSTER_RESOURCES + value: "true" + - name: OPERATOR_VERSION + value: {{ .Values.deployment.version }} + - name: CONTROLLER_IMAGE + value: {{ .Values.deployment.controllerImage }}:{{ .Values.deployment.version }} + - name: IMPORTER_IMAGE + value: {{ .Values.deployment.importerImage }}:{{ .Values.deployment.version }} + - name: CLONER_IMAGE + value: {{ .Values.deployment.clonerImage }}:{{ .Values.deployment.version }} + - name: APISERVER_IMAGE + value: {{ .Values.deployment.apiserverImage }}:{{ .Values.deployment.version }} + - name: UPLOAD_SERVER_IMAGE + value: {{ .Values.deployment.uploadserverImage }}:{{ .Values.deployment.version }} + - name: UPLOAD_PROXY_IMAGE + value: {{ .Values.deployment.uploadproxyImage }}:{{ .Values.deployment.version }} + - name: VERBOSITY + value: "1" + - name: PULL_POLICY + value: {{ .Values.deployment.pullPolicy }} + - name: MONITORING_NAMESPACE + image: {{ .Values.deployment.operatorImage }}:{{ .Values.deployment.version }} + imagePullPolicy: {{ .Values.deployment.pullPolicy }} + name: cdi-operator + ports: + - containerPort: 8080 + name: metrics + protocol: TCP + resources: + requests: + cpu: 100m + memory: 150Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + nodeSelector: + kubernetes.io/os: linux + securityContext: + runAsNonRoot: true + serviceAccountName: cdi-operator + tolerations: + - key: CriticalAddonsOnly + operator: Exists diff --git a/charts/cdi/0.3.0/templates/cdi-uninstall-hooks.yaml b/charts/cdi/0.3.0/templates/cdi-uninstall-hooks.yaml new file mode 100644 index 00000000..181a8bc9 --- /dev/null +++ b/charts/cdi/0.3.0/templates/cdi-uninstall-hooks.yaml @@ -0,0 +1,69 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crUninstallHook.name" . }} + {{ template "cdi.crUninstallHook.annotations" (dict "hookWeight" 1) }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "cdi.crUninstallHook.name" . }} + {{ template "cdi.crUninstallHook.annotations" (dict "hookWeight" 1) }} +rules: + - apiGroups: [ "cdi.kubevirt.io" ] + resources: [ "cdis" ] + resourceNames: + - "cdi" + verbs: [ "delete" ] + - apiGroups: [ "apps" ] + resources: [ "deployments" ] + verbs: [ "get", "list" ] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "cdi.crUninstallHook.name" . }} + {{ template "cdi.crUninstallHook.annotations" (dict "hookWeight" 2) }} +subjects: + - kind: ServiceAccount + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crUninstallHook.name" . }} +roleRef: + kind: ClusterRole + name: {{ template "cdi.crUninstallHook.name" . }} + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: batch/v1 +kind: Job +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crUninstallHook.name" . }} + {{ template "cdi.crUninstallHook.annotations" (dict "hookWeight" 3) }} +spec: + template: + metadata: + name: {{ template "cdi.crUninstallHook.name" . }} + spec: + serviceAccountName: {{ template "cdi.crUninstallHook.name" . }} + restartPolicy: {{ .Values.hookRestartPolicy }} + containers: + - name: {{ template "cdi.crUninstallHook.name" . }} + image: {{ .Values.hookImage }} + securityContext: + {{- toYaml .Values.hookSecurityContext | nindent 12 }} + args: + - delete + - cdi + - cdi + - name: {{ template "cdi.crUninstallHook.name" . }}-cleanup + image: {{ .Values.hookImage }} + securityContext: + {{- toYaml .Values.hookSecurityContext | nindent 12 }} + args: + - wait + - --for=delete + - deployments/cdi-apiserver + - deployments/cdi-deployment + - deployments/cdi-uploadproxy + - --timeout=60s diff --git a/charts/cdi/0.3.0/templates/cdi.yaml b/charts/cdi/0.3.0/templates/cdi.yaml new file mode 100644 index 00000000..d5a5aada --- /dev/null +++ b/charts/cdi/0.3.0/templates/cdi.yaml @@ -0,0 +1,21 @@ +apiVersion: cdi.kubevirt.io/v1beta1 +kind: CDI +metadata: + name: cdi +spec: + {{- with .Values.cdi.config }} + config: + {{- toYaml . | nindent 4 }} + {{- end }} + imagePullPolicy: {{ .Values.cdi.imagePullPolicy }} + {{- with .Values.cdi.infra }} + infra: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- if .Values.cdi.uninstallStrategy }} + uninstallStrategy: {{ .Values.cdi.uninstallStrategy }} + {{- end }} + {{- with .Values.cdi.workload }} + workload: + {{- toYaml . | nindent 4 }} + {{- end }} diff --git a/charts/cdi/0.3.0/templates/crd-uninstall-hooks.yaml b/charts/cdi/0.3.0/templates/crd-uninstall-hooks.yaml new file mode 100644 index 00000000..e10ddbe2 --- /dev/null +++ b/charts/cdi/0.3.0/templates/crd-uninstall-hooks.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crdUninstallHook.name" . }} + {{ template "cdi.crdUninstallHook.annotations" (dict "hookWeight" 1) }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "cdi.crdUninstallHook.name" . }} + {{ template "cdi.crdUninstallHook.annotations" (dict "hookWeight" 1) }} +rules: + - apiGroups: [ "apiextensions.k8s.io" ] + resources: [ "customresourcedefinitions" ] + resourceNames: + - "cdis.cdi.kubevirt.io" + verbs: [ "delete" ] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "cdi.crdUninstallHook.name" . }} + {{ template "cdi.crdUninstallHook.annotations" (dict "hookWeight" 2) }} +subjects: + - kind: ServiceAccount + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crdUninstallHook.name" . }} +roleRef: + kind: ClusterRole + name: {{ template "cdi.crdUninstallHook.name" . }} + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: batch/v1 +kind: Job +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crdUninstallHook.name" . }} + {{ template "cdi.crdUninstallHook.annotations" (dict "hookWeight" 3) }} +spec: + template: + metadata: + name: {{ template "cdi.crdUninstallHook.name" . }} + spec: + serviceAccountName: {{ template "cdi.crdUninstallHook.name" . }} + restartPolicy: {{ .Values.hookRestartPolicy }} + containers: + - name: {{ template "cdi.crdUninstallHook.name" . }} + image: {{ .Values.hookImage }} + args: + - delete + - customresourcedefinitions + - cdis.cdi.kubevirt.io + securityContext: + {{- toYaml .Values.hookSecurityContext | nindent 12 }} diff --git a/charts/cdi/0.3.0/templates/crd-upgrade-hooks.yaml b/charts/cdi/0.3.0/templates/crd-upgrade-hooks.yaml new file mode 100644 index 00000000..cf5fb4f4 --- /dev/null +++ b/charts/cdi/0.3.0/templates/crd-upgrade-hooks.yaml @@ -0,0 +1,80 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: {{ .Release.Namespace }} + name: cdi-crd-manifest + {{ template "cdi.crdUpgradeHook.annotations" (dict "hookWeight" 1) }} +data: + crd: |- + {{ $.Files.Get "crds/cdi.yaml" | nindent 4 }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crdUpgradeHook.name" . }} + {{ template "cdi.crdUpgradeHook.annotations" (dict "hookWeight" 2) }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "cdi.crdUpgradeHook.name" . }} + {{ template "cdi.crdUpgradeHook.annotations" (dict "hookWeight" 2) }} +rules: + - apiGroups: [ "" ] + resources: [ "configmaps" ] + resourceNames: + - "cdi-crd-manifest" + verbs: [ "get" ] + - apiGroups: [ "apiextensions.k8s.io" ] + resources: [ "customresourcedefinitions" ] + resourceNames: + - "cdis.cdi.kubevirt.io" + verbs: [ "get", "patch" ] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "cdi.crdUpgradeHook.name" . }} + {{ template "cdi.crdUpgradeHook.annotations" (dict "hookWeight" 3) }} +subjects: + - kind: ServiceAccount + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crdUpgradeHook.name" . }} +roleRef: + kind: ClusterRole + name: {{ template "cdi.crdUpgradeHook.name" . }} + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: batch/v1 +kind: Job +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.crdUpgradeHook.name" . }} + {{ template "cdi.crdUpgradeHook.annotations" (dict "hookWeight" 4) }} +spec: + template: + metadata: + name: {{ template "cdi.crdUpgradeHook.name" . }} + spec: + serviceAccountName: {{ template "cdi.crdUpgradeHook.name" . }} + restartPolicy: {{ .Values.hookRestartPolicy }} + containers: + - name: {{ template "cdi.crdUpgradeHook.name" . }} + image: {{ .Values.hookImage }} + args: + - apply + - -f + - /etc/manifests/crd.yaml + securityContext: + {{- toYaml .Values.hookSecurityContext | nindent 12 }} + volumeMounts: + - name: crd-volume + mountPath: /etc/manifests + volumes: + - name: crd-volume + configMap: + name: cdi-crd-manifest + items: + - key: crd + path: crd.yaml diff --git a/charts/cdi/0.3.0/templates/namespace-hooks.yaml b/charts/cdi/0.3.0/templates/namespace-hooks.yaml new file mode 100644 index 00000000..62867085 --- /dev/null +++ b/charts/cdi/0.3.0/templates/namespace-hooks.yaml @@ -0,0 +1,56 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.namespaceHook.name" . }} + {{ template "cdi.namespaceHook.annotations" (dict "hookWeight" 1) }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "cdi.namespaceHook.name" . }} + {{ template "cdi.namespaceHook.annotations" (dict "hookWeight" 1) }} +rules: + - apiGroups: [ "" ] + resources: [ "namespaces" ] + resourceNames: + - {{ .Release.Namespace | quote }} + verbs: [ "get", "patch" ] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "cdi.namespaceHook.name" . }} + {{ template "cdi.namespaceHook.annotations" (dict "hookWeight" 2) }} +subjects: + - kind: ServiceAccount + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.namespaceHook.name" . }} +roleRef: + kind: ClusterRole + name: {{ template "cdi.namespaceHook.name" . }} + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: batch/v1 +kind: Job +metadata: + namespace: {{ .Release.Namespace }} + name: {{ template "cdi.namespaceHook.name" . }} + {{ template "cdi.namespaceHook.annotations" (dict "hookWeight" 3) }} +spec: + template: + metadata: + name: {{ template "cdi.namespaceHook.name" . }} + spec: + serviceAccountName: {{ template "cdi.namespaceHook.name" . }} + restartPolicy: {{ .Values.hookRestartPolicy }} + containers: + - name: {{ template "cdi.namespaceHook.name" . }} + securityContext: + {{- toYaml .Values.hookSecurityContext | nindent 12 }} + image: {{ .Values.hookImage }} + args: + - label + - namespace + - {{ .Release.Namespace }} + - cdi.kubevirt.io= diff --git a/charts/cdi/0.3.0/values.yaml b/charts/cdi/0.3.0/values.yaml new file mode 100644 index 00000000..cdf89879 --- /dev/null +++ b/charts/cdi/0.3.0/values.yaml @@ -0,0 +1,38 @@ +deployment: + version: 1.59.0-150500.6.18.1 + operatorImage: registry.suse.com/suse/sles/15.5/cdi-operator + controllerImage: registry.suse.com/suse/sles/15.5/cdi-controller + importerImage: registry.suse.com/suse/sles/15.5/cdi-importer + clonerImage: registry.suse.com/suse/sles/15.5/cdi-cloner + apiserverImage: registry.suse.com/suse/sles/15.5/cdi-apiserver + uploadserverImage: registry.suse.com/suse/sles/15.5/cdi-uploadserver + uploadproxyImage: registry.suse.com/suse/sles/15.5/cdi-uploadproxy + pullPolicy: IfNotPresent + +cdi: + config: + featureGates: + - HonorWaitForFirstConsumer + imagePullPolicy: "IfNotPresent" + infra: + nodeSelector: + kubernetes.io/os: linux + tolerations: + - key: CriticalAddonsOnly + operator: Exists + uninstallStrategy: "" + workload: + nodeSelector: + kubernetes.io/os: linux + +hookImage: rancher/kubectl:v1.28.7 +hookRestartPolicy: OnFailure +hookSecurityContext: + seccompProfile: + type: RuntimeDefault + runAsNonRoot: true + runAsUser: 1000 + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL diff --git a/index.yaml b/index.yaml index 1f6d5b39..4f57f5af 100755 --- a/index.yaml +++ b/index.yaml @@ -91,6 +91,17 @@ entries: - assets/akri-dashboard-extension/akri-dashboard-extension-0.1.0.tgz version: 0.1.0 cdi: + - apiVersion: v2 + appVersion: 1.59.0 + created: "2024-08-05T10:24:31.580038+03:00" + description: A Helm chart for Containerized Data Importer (CDI) + digest: 3ed98816e2e1b30acb787289b1aab7eed5137e6aa5dff877a6836c341a1f6a6c + icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg + name: cdi + type: application + urls: + - assets/cdi/cdi-0.3.0.tgz + version: 0.3.0 - apiVersion: v2 appVersion: 1.58.0 created: "2024-07-23T14:20:40.458545+03:00" From 2056ad1b6e0416b5e79e278f7b3f2734dd75460d Mon Sep 17 00:00:00 2001 From: Atanas Dinov Date: Mon, 5 Aug 2024 10:40:49 +0300 Subject: [PATCH 3/3] make html Signed-off-by: Atanas Dinov --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index d8fd4153..fc34d5d5 100755 --- a/index.html +++ b/index.html @@ -179,14 +179,14 @@

Charts