Skip to content

Commit

Permalink
Issue 646: Add support for providing customized environment variables…
Browse files Browse the repository at this point in the history
… to controller (#647)

Signed-off-by: anisha.kj <[email protected]>
  • Loading branch information
anishakj authored Dec 9, 2022
1 parent 05ee5bf commit 8fb9ebc
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 6 deletions.
3 changes: 3 additions & 0 deletions api/v1beta1/pravega.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ type PravegaSpec struct {
// Provides the list of env variables that can be passed to segmentStore pods.
SegmentStoreContainerEnv []v1.EnvVar `json:"segmentStoreContainerEnv,omitempty"`

// Provides the list of env variables that can be passed to controller pods.
ControllerEnvVars []v1.EnvVar `json:"controllerEnvVars,omitempty"`

// SegmentStoreSecret specifies whether or not any secret needs to be configured into the ss pod
// either as an environment variable or by mounting it to a volume
// +optional
Expand Down
111 changes: 111 additions & 0 deletions config/crd/bases/pravega.pravega.io_pravegaclusters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1452,6 +1452,117 @@ spec:
backing this claim.
type: string
type: object
controllerEnvVars:
description: Provides the list of env variables that can be passed
to controller pods.
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:
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
optional:
description: Specify whether the ConfigMap or its
key must be defined
type: boolean
required:
- key
type: object
fieldRef:
description: 'Selects a field of the pod: supports metadata.name,
metadata.namespace, `metadata.labels[''<KEY>'']`,
`metadata.annotations[''<KEY>'']`, 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
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
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:
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
optional:
description: Specify whether the Secret or its key
must be defined
type: boolean
required:
- key
type: object
type: object
required:
- name
type: object
type: array
controllerExtServiceType:
description: Type specifies the service type to achieve external
access. Options are "LoadBalancer" and "NodePort". By default,
Expand Down
14 changes: 8 additions & 6 deletions controllers/pravega_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ func makeControllerPodSpec(p *api.PravegaCluster) *corev1.PodSpec {
if p.Spec.Pravega.ControllerInitContainers != nil {
podSpec.InitContainers = append(podSpec.InitContainers, p.Spec.Pravega.ControllerInitContainers...)
}
podSpec.Containers[0].Env = []corev1.EnvVar{}
if p.Spec.Pravega.ControllerEnvVars != nil {
podSpec.Containers[0].Env = append(podSpec.Containers[0].Env, p.Spec.Pravega.ControllerEnvVars...)
}
if p.Spec.Pravega.AuthImplementations != nil {
authContainers := []corev1.Container{}
var mountPath string
Expand Down Expand Up @@ -282,12 +286,10 @@ func configureControllerInfluxDBSecrets(podSpec *corev1.PodSpec, p *api.PravegaC
addSecretVolumeWithMount(podSpec, p, influxDBSecretVolumeName, p.Spec.Pravega.InfluxDBSecret.Secret,
influxDBSecretVolumeName, p.Spec.Pravega.InfluxDBSecret.MountPath)

podSpec.Containers[0].Env = []corev1.EnvVar{
{
Name: "INFLUX_DB_SECRET_MOUNT_PATH",
Value: p.Spec.Pravega.InfluxDBSecret.MountPath,
},
}
podSpec.Containers[0].Env = append(podSpec.Containers[0].Env, corev1.EnvVar{
Name: "INFLUX_DB_SECRET_MOUNT_PATH",
Value: p.Spec.Pravega.InfluxDBSecret.MountPath,
})
}
}

Expand Down

0 comments on commit 8fb9ebc

Please sign in to comment.