Search code examples
kubernetes-helm

helm reporting nil pointer evaluating interface {}.green_slot_name


I am getting a weird error. I am running helm command inside the application helm chart and getting error as below:

helm upgrade --install socket-manager  -nsocket-manager .

Release "socket-manager" does not exist. Installing it now.
Error: template: socket-manager/templates/service.yaml:6:37: executing "socket-manager/templates/service.yaml" at <.Values.config.green_slot_name>: nil pointer evaluating interface {}.green_slot_name

Values.yaml is below:

cat Values.yaml
config:
  green_slot_name: "green"
  blue_slot_name: "blue"

service.yaml is below:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: "{{ .Chart.Name }}"
  name: "{{ .Chart.Name }}-{{ .Values.config.green_slot_name }}-{{ .Values.config.environment }}-service"
spec:
  ports:
  - port: {{ .Values.config.port }}
    protocol: TCP
    targetPort: {{ .Values.config.target_port }}
  selector:
    app: "{{ .Chart.Name }}"
    slot: "{{ .Values.config.green_slot_name }}"
  type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: "{{ .Chart.Name }}"
  name: "{{ .Chart.Name }}-{{ .Values.config.blue_slot_name }}-{{ .Values.config.environment }}-service"
spec:
  ports:
  - port: {{ .Values.config.port }}
    protocol: TCP
    targetPort: {{ .Values.config.target_port }}
  selector:
    app: "{{ .Chart.Name }}"
    slot: "{{ .Values.config.blue_slot_name }}"
  type: ClusterIP

I wonder what is wrong here?


Solution

  • At first glance, I can spot a typo in 4 occurrences in your manifests:

    It should be

    .Values.health_checks.liveliness.*
    

    and not

    .Values.health_checks.liveness.* 
    

    When I fixed that typo in my local it works.

    You can also try to remove the double quotes from selector inside the service

    For instance:

      selector:
        app: {{ .Chart.Name }}
        slot: {{ .Values.config.green_slot_name }}