Ranjan Khanna
Ranjan Khanna

Reputation: 71

Helm iterating over array of objects

I have following array of object

--------------------------
customizedFactorImplVolume:
  - name: PasswordAuthn
    customFactorProviderDir: PasswordDir

  - name: FaceIdAuthn
    customFactorProviderDir: FaceIdDir 
--------------

when this is passed as "helm install --name jenkins -f my-values.yaml", i am able to iterate over it using "range" from my deployment.yaml. But when I am unable to read it when passed the values using "--set" helm option:

--set customfactor.customizedFactorImplVolume[0].customFactorProviderDir=PasswordAuthentication --set customfactor.customizedFactorImplVolume[0].name=password --set customfactor.customizedFactorImplVolume[1].customFactorProviderDir=FaceIdAuthn --set customfactor.customizedFactorImplVolume[1].name=faceid

Not sure what is bad in "--set"("range helm api is getting values null). Any help will be really appreciated.

Upvotes: 7

Views: 30963

Answers (1)

z.x
z.x

Reputation: 2527

This is a problem with references to array elements.

values.yaml

customizedFactorImplVolume:
  - name: PasswordAuthn
    customFactorProviderDir: PasswordDir

  - name: FaceIdAuthn
    customFactorProviderDir: FaceIdDir 

template/cfg.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: test
data:
  {{- range $v := .Values.customizedFactorImplVolume }}
  - name: {{ $v.name }}
    customFactorProviderDir: {{ $v.customFactorProviderDir }}
  {{- end }}

cmd

helm template test . --set customizedFactorImplVolume.0.name=n0 --set customizedFactorImplVolume.0.customFactorProviderDir=d0 --set customizedFactorImplVolume.1.name=n1 --set customizedFactorImplVolume.1.customFactorProviderDir=d1

output

apiVersion: v1
kind: ConfigMap
metadata:
  name: test
data:
  - name: n0
    customFactorProviderDir: d0
  - name: n1
    customFactorProviderDir: d1

Upvotes: 13

Related Questions