Home > Enterprise >  Create kubernetes docker-registry secret from yaml file for each lookup namespaces?
Create kubernetes docker-registry secret from yaml file for each lookup namespaces?

Time:01-02

I am trying to dynamic lookup available namespaces and able to create secrets in the namespaces using below helm chart.

templates/secrets.yaml

{{ range $index, $namespace := (lookup "v1" "Namespace" "" "").items }}
apiVersion: v1
kind: Secret
metadata:
  name: myregcred
  namespace: {{ $namespace.metadata.name }}
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: {{ template "imagePullSecret" . }}
{{- end}}

values.yaml

imageCredentials:
  registry: quay.io
  username: someone
  password: sillyness
  email: [email protected]

_helpers.tpl

{{- define "imagePullSecret" }}
{{- with .Values.imageCredentials }}
{{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}}" .registry .username .password .email (printf "%s:%s" .username .password | b64enc) | b64enc }}
{{- end }}
{{- end }}

When i run this helm chart, i get below error

Error: INSTALLATION FAILED: template: secrets/templates/_helpers.tpl:2:16: executing "imagePullSecret" at <.Values.imageCredentials>: nil pointer evaluating interface {}.imageCredentials

I dont know what I am doing wrong here.

CodePudding user response:

When you reference the named template "imagePullSecret" inside the range, the context "." you are providing refers to the body of the loop, which does not have the "Values" attribute.

Try providing the root context instead:

{{ range $index, $namespace := (lookup "v1" "Namespace" "" "").items }}
apiVersion: v1
kind: Secret
metadata:
  name: myregcred
  namespace: {{ $namespace.metadata.name }}
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: {{ template "imagePullSecret" $ }}
---
{{- end}}
  • Related