Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is it possible to use .Release.Name inside .Values? #1313

Closed
odinsy opened this issue Jun 17, 2020 · 5 comments
Closed

Is it possible to use .Release.Name inside .Values? #1313

odinsy opened this issue Jun 17, 2020 · 5 comments

Comments

@odinsy
Copy link

odinsy commented Jun 17, 2020

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?

@adl2db
Copy link

adl2db commented Jun 22, 2020

I'm interested in this too, if its possible. Essentially looking to do something like this (with no success), motivated from this example #1143 (comment):

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

@mumoshu
Copy link
Collaborator

mumoshu commented Jun 22, 2020

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

@odinsy
Copy link
Author

odinsy commented Jul 7, 2020

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[]

@odinsy
Copy link
Author

odinsy commented Jul 7, 2020

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 }}

@odinsy
Copy link
Author

odinsy commented Jul 7, 2020

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 {}

@odinsy odinsy closed this as completed Jul 7, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants