NealR
NealR

Reputation: 10699

Unable to locate global value from helm subchart

This is my first time using nested Helm charts and I'm trying to access a global value from the root values.yaml file. According to the documentation I should be able to use the syntax below in my secret.yaml file, however if I run helm template api --debug I get the following error:

Error: template: api/templates/secret.yaml:7:21: executing "api/templates/secret.yaml" at <.Values.global.sa_json>: nil pointer evaluating interface {}.sa_json helm.go:84: [debug] template: api/templates/secret.yaml:7:21: executing "api/templates/secret.yaml" at <.Values.global.sa_json>: nil pointer evaluating interface {}.sa_json

/primaryChart/charts/api/templates/secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Chart.Name }}-service-account-secret
type: Opaque
data:
  sa_json: {{ .Values.global.sa_json }}

primaryChart/values.yaml

global:
  sa_json: _b64_sa_credentials

Folder structure is as follows:

/primaryChart 
|- values.yaml 
|-- /charts
    |-- /api
       |-- /templates
           |- secret.yaml

Upvotes: 0

Views: 1962

Answers (1)

edbighead
edbighead

Reputation: 6324

Having the following directory layout, .Values.global.sa_json will only be available if you call helm template api . from your main chart

/mnt/c/home/primaryChart> tree
.
├── Chart.yaml  <-- your main chart
├── charts
│   └── api
│       ├── Chart.yaml  <-- your subchart
│       ├── charts
│       ├── templates
│       │   └── secrets.yaml
│       └── values.yaml
├── templates
└── values.yaml   <--- this is where your global.sa_json is defined

Your values file should be called values.yaml and not value.yaml, or use any other file with -f flag helm template api . -f value.yaml

/mnt/c/home/primaryChart> helm template api .
---
# Source: primaryChart/charts/api/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: api-service-account-secret
type: Opaque
data:
  sa_json: _b64_sa_credentials

Upvotes: 2

Related Questions