helm-charts icon indicating copy to clipboard operation
helm-charts copied to clipboard

Per-service extraEnv supports arbitrary YAML

Open xrl opened this issue 5 months ago • 1 comments

I need the ability to map secrets to environment variables. Works towards #102 .

A value file like this:

environment:
  - name: ROOT_ENV_KEY
    value: root1234
searcher:
  extraEnv:
    - name: SEARCHER_ENV_KEY
      value: search123
control_plane:
  extraEnv:
    - name: CONTROL_PLANE_KEY
      value: controlPlane123
indexer:
  extraEnv:
    - name: INDEXER_KEY
      value: indexer123
janitor:
  extraEnv:
    - name: JANITOR_KEY
      value: janitor123
metastore:
  extraEnv:
    - name: METASTORE_KEY
      value: metastore123

yields these kinds of pod definitions:

% helm template meep . -f /tmp/blah.yaml --show-only templates/metastore-deployment.yaml
# snip
          env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: QW_CONFIG
              value: /quickwit/node.yaml
            - name: QW_CLUSTER_ID
              value: staging-meep-quickwit
            - name: QW_NODE_ID
              value: "$(POD_NAME)"
            - name: QW_PEER_SEEDS
              value: meep-quickwit-headless
            - name: QW_ADVERTISE_ADDRESS
              value: "$(POD_IP)"
            - name: QW_CLUSTER_ENDPOINT
              value: http://meep-quickwit-metastore.staging.svc.cluster.local:7280
            - name: ROOT_ENV_KEY
              value: root1234
            - name: METASTORE_KEY
              value: metastore123

note: it has the global values from environment but also the service-specific overrides from metastore.extraEnv

and to demonstrate I can do the secret-as-env-value:

janitor:
  extraEnv:
    - name: JANITOR_KEY
      valueFrom:
        secretKeyRef:
          name: some-secret
          key: a-key-in-the-secret

renders out:

          env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: QW_CONFIG
              value: /quickwit/node.yaml
            - name: QW_CLUSTER_ID
              value: staging-meep-quickwit
            - name: QW_NODE_ID
              value: "$(POD_NAME)"
            - name: QW_PEER_SEEDS
              value: meep-quickwit-headless
            - name: QW_ADVERTISE_ADDRESS
              value: "$(POD_IP)"
            - name: QW_CLUSTER_ENDPOINT
              value: http://meep-quickwit-metastore.staging.svc.cluster.local:7280
            - name: ROOT_ENV_KEY
              value: root1234
            - name: JANITOR_KEY
              valueFrom:
                secretKeyRef:
                  key: a-key-in-the-secret
                  name: some-secret

xrl avatar Sep 25 '24 17:09 xrl