Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Template the Chart.yaml file

I would like to template values in my Chart.yaml file. For example, version: {{ .Values.version }} instead of version: 0.1.0

For other yaml files, the above would work. However, it's my understanding that Helm treats the Chart.yaml differently and the Chart.yaml file is not run through the templating engine.

Does anyone know a workaround?

The actual error I get if I try to helm lint this (with version: 0.1.0 as an entry in my values.yaml file) is: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.version":interface {}(nil)}

like image 549
Thomas Scruggs Avatar asked Jan 11 '20 00:01

Thomas Scruggs


1 Answers

You are thinking of the problem backward: specify the version in Chart.yaml and derive the version in wherever you are using it in the templates; you can't have a dynamic version in the Chart.yaml because helm repo index . does not accept --set or any such flag and thus couldn't construct the tgz to upload

Thus, given a Chart.yaml:

apiVersion: v1
name: my-awesome-chart
appVersion: 0.1.0
version: 1.2.3

and a Deployment.yaml template:

{{ $myTag := .Chart.Version }}
{{/* or, you can use .Chart.AppVersion */}}
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - image: docker.example.com:{{ $myTag }}
        # produces: docker.example.com:1.2.3
like image 162
mdaniel Avatar answered Oct 12 '22 01:10

mdaniel