How to use environment/secret variable in Helm?

8/30/2021

In my helm chart, I have a few files that need credentials to be inputted For example

<Resource
	name="jdbc/test"
	auth="Container"
	driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://{{ .Values.DB.host }}:{{ .Values.DB.port }};selectMethod=direct;DatabaseName={{ .Values.DB.name }};User={{ Values.DB.username }};Password={{ .Values.DB.password }}"
	/>

I created a secret

Name: databaseinfo
   Data:
     username
     password

I then create environment variables to retrieve those secrets in my deployment.yaml:

env:
   - name: DBPassword
      valueFrom:
      secretKeyRef:
        key: password
        name: databaseinfo
   - name: DBUser
       valueFrom:
       secretKeyRef:
         key: username
         name: databaseinfo 

In my values.yaml or this other file, I need to be able to reference to this secret/environment variable. I tried the following but it does not work: values.yaml

DB:
  username: $env.DBUser
  password: $env.DBPassword
-- Oplop98
kubernetes
kubernetes-helm
kubernetes-secrets

1 Answer

8/30/2021

you cant pass pass Variables from any template to values.yaml with helm. Just from values.yaml to the templates.

The answer you are seeking was posted by mehowthe :

deployment.yaml =

      env:          
        {{- range .Values.env }}
      - name: {{ .name }}
        value: {{ .value }}
     {{- end }}

values.yaml =

env:          
 - name: "DBUser"
   value: ""
 - name: "DBPassword"
   value: ""

then

helm install chart_name --name release_name --set env.DBUser="FOO" --set env.DBPassword="BAR"

-- Philip Welz
Source: StackOverflow