Define values for each namespace

5/28/2019

values.yaml

replicas: {
  test: 1,
  stage: 2,
  prod: 3
}

Here I am trying to use Helm templates to define number of replicas per namespace but am unsure of the proper syntax and pattern:

deployment.yaml

replicas: {{ .Values.replicas.{{ .Release.Namespace }} }}

So if this were deployed to --namespace=prod, I would expect the template to return:

# .Values.replicas.prod
replicas: 3
-- atkayla
go-templates
kubernetes
kubernetes-helm

2 Answers

5/29/2019

I don't think that Helm supports evaluating variable in the variable. For this, you're expression would need to be evaluated twice.

What you could do is to write the following code:

{{ if eq .Release.Namespace "test" }}{{ .Values.replicas.test }}{{ end }}

You can then also extract that code to your _helpers.tpl. Then the usage should be clear and pretty.

-- RafaƂ Leszko
Source: StackOverflow

5/29/2019

All of the template functions provided by the standard Go text/template library are available. In particular, that includes an index function which can do dynamic lookup in an array or map object.

replicas: {{ index .Values.replicas .Release.Namespace }}
-- David Maze
Source: StackOverflow