diff --git a/apis/installer/v1alpha1/kubestash_operator_types.go b/apis/installer/v1alpha1/kubestash_operator_types.go index 5b8922fe..f951432b 100644 --- a/apis/installer/v1alpha1/kubestash_operator_types.go +++ b/apis/installer/v1alpha1/kubestash_operator_types.go @@ -88,6 +88,23 @@ type KubestashOperatorSpec struct { NetVolAccessor NetVolAccessor `json:"netVolAccessor"` // +optional License string `json:"license"` + // List of sources to populate environment variables in the container. + // The keys defined within a source must be a C_IDENTIFIER. All invalid keys + // will be reported as an event when the container is starting. When a key exists in multiple + // sources, the value associated with the last source will take precedence. + // Values defined by an Env with a duplicate key will take precedence. + // Cannot be updated. + // +optional + // +listType=atomic + EnvFrom []core.EnvFromSource `json:"envFrom"` + // List of environment variables to set in the container. + // Cannot be updated. + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + Env []core.EnvVar `json:"env"` } type ImageRef struct { diff --git a/apis/installer/v1alpha1/zz_generated.deepcopy.go b/apis/installer/v1alpha1/zz_generated.deepcopy.go index 206bddd6..7fcafc2c 100644 --- a/apis/installer/v1alpha1/zz_generated.deepcopy.go +++ b/apis/installer/v1alpha1/zz_generated.deepcopy.go @@ -499,6 +499,20 @@ func (in *KubestashOperatorSpec) DeepCopyInto(out *KubestashOperatorSpec) { out.Security = in.Security out.Platform = in.Platform out.NetVolAccessor = in.NetVolAccessor + if in.EnvFrom != nil { + in, out := &in.EnvFrom, &out.EnvFrom + *out = make([]v1.EnvFromSource, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]v1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } diff --git a/charts/kubestash-operator/README.md b/charts/kubestash-operator/README.md index e8eb56a0..b9863f70 100644 --- a/charts/kubestash-operator/README.md +++ b/charts/kubestash-operator/README.md @@ -106,6 +106,8 @@ The following table lists the configurable parameters of the `kubestash-operator | netVolAccessor.memory | Memory for each network volume accessor deployment | "128Mi" | | netVolAccessor.runAsUser | Run the network volume accessor with this UID. | 2000 | | netVolAccessor.privileged | Run the network volume accessor deployments in privileged mode | false | +| envFrom | List of sources to populate environment variables in the container | [] | +| env | List of environment variables to set in the container | [] | Specify each parameter using the `--set key=value[,key=value]` argument to `helm upgrade -i`. For example: diff --git a/charts/kubestash-operator/templates/operator/deployment.yaml b/charts/kubestash-operator/templates/operator/deployment.yaml index 19fe253e..9cdc06ca 100644 --- a/charts/kubestash-operator/templates/operator/deployment.yaml +++ b/charts/kubestash-operator/templates/operator/deployment.yaml @@ -47,7 +47,14 @@ spec: {{- if include "appscode.licenseSecretName" . }} - --license-file=/var/run/secrets/appscode/license/key.txt {{- end }} + {{- with .Values.envFrom }} + envFrom: + {{- toYaml . | nindent 8 }} + {{- end }} env: + {{- with .Values.env }} + {{- toYaml . | nindent 8 }} + {{- end }} - name: POD_NAME valueFrom: fieldRef: diff --git a/charts/kubestash-operator/values.openapiv3_schema.yaml b/charts/kubestash-operator/values.openapiv3_schema.yaml index 9110318f..ce843423 100644 --- a/charts/kubestash-operator/values.openapiv3_schema.yaml +++ b/charts/kubestash-operator/values.openapiv3_schema.yaml @@ -2143,6 +2143,175 @@ properties: type: object criticalAddon: type: boolean + env: + description: List of environment variables to set in the container. Cannot be + updated. + items: + description: EnvVar represents an environment variable present in a Container. + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded using the previously + defined environment variables in the container and any service environment + variables. If a variable cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce + the string literal "$(VAR_NAME)". Escaped references will never be expanded, + regardless of whether the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. Cannot be used + if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + default: '' + description: 'Name of the referent. This field is effectively required, + but due to backwards compatibility is allowed to be empty. Instances + of this type with an empty value here are almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t + need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, + `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath is written in terms + of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of the container: only resources limits + and requests (limits.cpu, limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) are + currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, optional for + env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + properties: + key: + description: The key of the secret to select from. Must be a valid + secret key. + type: string + name: + default: '' + description: 'Name of the referent. This field is effectively required, + but due to backwards compatibility is allowed to be empty. Instances + of this type with an empty value here are almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t + need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + description: List of sources to populate environment variables in the container. + The keys defined within a source must be a C_IDENTIFIER. All invalid keys will + be reported as an event when the container is starting. When a key exists in + multiple sources, the value associated with the last source will take precedence. + Values defined by an Env with a duplicate key will take precedence. Cannot be + updated. + items: + description: EnvFromSource represents the source of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + default: '' + description: 'Name of the referent. This field is effectively required, + but due to backwards compatibility is allowed to be empty. Instances + of this type with an empty value here are almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t need + it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the ConfigMap must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend to each key in the ConfigMap. + Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + default: '' + description: 'Name of the referent. This field is effectively required, + but due to backwards compatibility is allowed to be empty. Instances + of this type with an empty value here are almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t need + it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic fullnameOverride: type: string imagePullPolicy: diff --git a/charts/kubestash-operator/values.yaml b/charts/kubestash-operator/values.yaml index 71388d1e..b10d9c23 100644 --- a/charts/kubestash-operator/values.yaml +++ b/charts/kubestash-operator/values.yaml @@ -189,3 +189,9 @@ netVolAccessor: runAsUser: 2000 # Run the network volume accessor deployments in privileged mode privileged: false + + +# List of sources to populate environment variables in the container +envFrom: [] +# List of environment variables to set in the container +env: [] diff --git a/charts/kubestash/values.openapiv3_schema.yaml b/charts/kubestash/values.openapiv3_schema.yaml index d5a733ce..9747b205 100644 --- a/charts/kubestash/values.openapiv3_schema.yaml +++ b/charts/kubestash/values.openapiv3_schema.yaml @@ -2328,6 +2328,181 @@ properties: type: boolean enabled: type: boolean + env: + description: List of environment variables to set in the container. Cannot + be updated. + items: + description: EnvVar represents an environment variable present in a Container. + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded using the + previously defined environment variables in the container and any + service environment variables. If a variable cannot be resolved, the + reference in the input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. + "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped + references will never be expanded, regardless of whether the variable + exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. Cannot be + used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + default: '' + description: 'Name of the referent. This field is effectively + required, but due to backwards compatibility is allowed to + be empty. Instances of this type with an empty value here + are almost certainly wrong. TODO: Add other useful fields. + apiVersion, kind, uid? More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t + need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the ConfigMap or its key must be + defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, + metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath is written + in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified API + version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: 'Selects a resource of the container: only resources + limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, + requests.cpu, requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, optional + for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the exposed resources, + defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + properties: + key: + description: The key of the secret to select from. Must be + a valid secret key. + type: string + name: + default: '' + description: 'Name of the referent. This field is effectively + required, but due to backwards compatibility is allowed to + be empty. Instances of this type with an empty value here + are almost certainly wrong. TODO: Add other useful fields. + apiVersion, kind, uid? More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t + need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + description: List of sources to populate environment variables in the container. + The keys defined within a source must be a C_IDENTIFIER. All invalid keys + will be reported as an event when the container is starting. When a key + exists in multiple sources, the value associated with the last source will + take precedence. Values defined by an Env with a duplicate key will take + precedence. Cannot be updated. + items: + description: EnvFromSource represents the source of a set of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + default: '' + description: 'Name of the referent. This field is effectively required, + but due to backwards compatibility is allowed to be empty. Instances + of this type with an empty value here are almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t + need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the ConfigMap must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + description: An optional identifier to prepend to each key in the ConfigMap. + Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + default: '' + description: 'Name of the referent. This field is effectively required, + but due to backwards compatibility is allowed to be empty. Instances + of this type with an empty value here are almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn''t + need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896.' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic fullnameOverride: type: string imagePullPolicy: