Helmfile: Is it possible to use .Release.Name inside .Values?

Created on 17 Jun 2020  路  5Comments  路  Source: roboll/helmfile

Hi!
I have a common values file for my releases (only one for environment, because it's about ~70 releases for one env).
But i don't understand how to use .Release.Name as key for my values
Look:

balancer:
  resources:
    requests:
      memory: 384Mi
    limits:
      memory: 384Mi

backend:
  resources:
    requests:
      memory: 512Mi
    limits:
      memory: 512Mi

now i want to use resources variable for all my releases separately
something like this, but it doesn't work

environments:
  dev:

templates:
  default: &default
    {{ $releaseName := "{{`{{ .Release.Name }}`}}" }}
    chart: "{{`{{ .Release.Name }}`}}"
    values:
      - values//{{ .Environment.Name }}/values.yaml
      - resources: {{ .Environment.Values | get ($releaseName).resources }}

releases:
- name: balancer
  <<: *default
- name: backend
  <<: *default

can u help me, is it possible?

Most helpful comment

Hey! Please note that any go template expressions is evaluated BEFORE it's parsed as YAML. That's why it doesn't work.

A possible way would be to use valuesTemplate added in https://github.com/roboll/helmfile/pull/823 and https://github.com/roboll/helmfile/pull/833

All 5 comments

I'm interested in this too, if its possible. Essentially looking to do something like this (with no success), motivated from this example https://github.com/roboll/helmfile/issues/1143#issuecomment-599824264:

templates:
  values: &values
      set:
         - name: replicas
           values: {{ index .Values.replicas .Release.Name }}

with helmfile looking like this

environments:
    dev: 
      values:
         - replicas.yaml
releases:
- name: release-name-1
  <<: *values

replicas.yaml looks like this

replicas:
  release-name-1: 1

helmfile 0.119.0

Hey! Please note that any go template expressions is evaluated BEFORE it's parsed as YAML. That's why it doesn't work.

A possible way would be to use valuesTemplate added in https://github.com/roboll/helmfile/pull/823 and https://github.com/roboll/helmfile/pull/833

Hey! Please note that any go template expressions is evaluated BEFORE it's parsed as YAML. That's why it doesn't work.

A possible way would be to use valuesTemplate added in #823 and #833

Hmm, thank you!
Could you help me with one more question - do you know how can i make separate release files for every environment?
I tried something like this, but {{ .Environment.Name }} is not available in readFile step

bases:
- environments.yaml

templates:
  default: &default
    {{- $apps := readFile "_custom_values/`{{ .Environment.Name }}`/releases.yaml" | fromYaml }}
    chart: "{{`{{ .Release.Name }}`}}"
    valuesTemplate:
      - _custom_values/{{ .Environment.Name }}/values.yaml
{{- range $_, $settings := $apps }}
      - resources: {{ $settings | get "resources" | toYaml | nindent 10 }}
{{- end }}

releases:
{{- range $app, $_ := $apps  }}
- name: {{ $app }}
  <<: *default
{{- end }}

this way doesn't work too

bases:
- environments.yaml

templates:
  default: &default
    chart: "{{`{{ .Release.Name }}`}}"
    valuesTemplate:
      - _custom_values/{{ .Environment.Name }}/values.yaml
      - releases: _custom_values/{{ .Environment.Name }}/releases.yaml

releases:
{{- range $app, $_ := .Environment.Values | get "releases"  }}
- name: {{ $app }}
  <<: *default
{{- end }}
err: error during helmfile.yaml.part.1 parsing: template: stringTemplate:8:23: executing "stringTemplate" at <get "releases">: error calling get: no value exist for key "releases" in map[]
in ./helmfile.yaml: error during helmfile.yaml.part.1 parsing: template: stringTemplate:8:23: executing "stringTemplate" at <get "releases">: error calling get: no value exist for key "releases" in map[]

This one works but i want to have separate releases file for every environment.
There is more than 70 services for install.

bases:
- environments.yaml

---
{{- $apps := readFile "_custom_values/common/releases.yaml" | fromYaml }}

templates:
  default: &default
    chart: "{{`{{ .Release.Name }}`}}"
    values:
      - _custom_values/{{ .Environment.Name }}/values.yaml
{{- range $_, $settings := $apps }}
      - resources: {{ $settings | get "resources" | toYaml | nindent 10 }}
{{- end }}

releases:
{{- range $app, $_ := $apps  }}
- name: {{ $app }}
  <<: *default
{{- end }}

Okay, now i can iterate over releases, but how can i get resources for release from resources.yaml?
This one doesn't work.
one more not working example

environments:
  dev:
    values:
      - _custom_values/dev/releases.yaml

templates:
  default: &default
    chart: "{{`{{ .Release.Name }}`}}"
    values:
      - _custom_values/{{`{{ .Environment.Name }}`}}/values.yaml
      - _custom_values/{{`{{ .Environment.Name }}`}}/resources.yaml
    valuesTemplate:
      - releaseName: '{{`{{ .Release.Name }}`}}'

releases:
{{- range $release := .Values.releases  }}
- name: {{ $release }}
  <<: *default
  values:
    - resources: {{ .Values.resources | get $release }}
{{- end }}
err: error during helmfile.yaml.part.0 parsing: template: stringTemplate:20:27: executing "stringTemplate" at <.Values.resources>: can't evaluate field Values in type interface {}
in ./helmfile.yaml: error during helmfile.yaml.part.0 parsing: template: stringTemplate:20:27: executing "stringTemplate" at <.Values.resources>: can't evaluate field Values in type interface {}
Was this page helpful?
0 / 5 - 0 ratings

Related issues

cilerler picture cilerler  路  3Comments

maver1ck picture maver1ck  路  3Comments

pavdmyt picture pavdmyt  路  3Comments

cilerler picture cilerler  路  4Comments

sstarcher picture sstarcher  路  3Comments