Error converting YAML to JSON: did not find expected key

11/14/2019

I just created a new Helm chart but when I run helm install --dry-run --debug I get:

Error: YAML parse error on multi-camera-tracking/templates/multi-camera-tracking.yaml: error converting YAML to JSON: yaml: line 30: did not find expected key

And this is my Yaml file:

---
# apiVersion: apps/v1beta1
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: multi-camera-tracking
  annotations:
    Process: multi-camera-tracking
  labels:
    io.kompose.service: multi-camera-tracking
spec:
  serviceName: multi-camera-tracking
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: multi-camera-tracking
  podManagementPolicy: "Parallel"
  template:
    metadata:
      labels:
        io.kompose.service: multi-camera-tracking
    spec:
      containers:
      - name: multi-camera-tracking
        env:
        - name: MCT_PUB_PORT
          value: {{ .Values.MCT_PUB_PORT | quote }}
        - name: SCT_IP_ADDR_CSV
          value: {{ .Values.SCT_IP_ADDR_CSV | quote }}
        - name: SCT_PUB_PORT_CSV
          value: {{ .Values.SCT_PUB_PORT1 | quote }}, {{ .Values.SCT_PUB_PORT2 | quote }}
        image: {{ .Values.image_multi_camera_tracking }}
        #name: multi-camera-tracking
        ports:
        - containerPort: {{ .Values.MCT_PUB_PORT }}
        resources:
          requests:
            cpu: 0.1
            memory: 250Mi
          limits:
            cpu: 4
            memory: 10Gi
        readinessProbe:
          exec:
            command:
            - ls
            - /tmp
          initialDelaySeconds: 5
          periodSeconds: 60
      restartPolicy: Always
      #imagePullSecrets:
      #- name: wwssecret
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    Process: multi-camera-tracking
  creationTimestamp: null
  labels:
    io.kompose.service: multi-camera-tracking
  name: multi-camera-tracking
spec:
  ports:
  - name: "MCT_PUB_PORT"
    port: {{ .Values.MCT_PUB_PORT }}
    targetPort: {{ .Values.MCT_PUB_PORT }}
  selector:
    io.kompose.service: multi-camera-tracking
status:
  loadBalancer: {}

The strange thing is I have created multiple other helm charted and they all are very similar to this but this one doesn't work and produces error.

-- AVarf
kubernetes
kubernetes-helm
yaml

3 Answers

3/26/2020

One way to debug this problem is to do a dry-run and render the template to see what is causing the issue on the offending line.

helm install [Chart] [flags] --dry-run --debug

This would allow you to see which keys are not indented well as this issue is sometimes caused by the wrong indentation.

-- Margach Chris
Source: StackOverflow

11/15/2019

I found the reason why it is not working. First of all, it is allowed to have comma-separated values but the problematic part was the quotations.

This is the wrong syntax:

value: {{ .Values.SCT_PUB_PORT1 | quote }}, {{ .Values.SCT_PUB_PORT2 | quote }}

And this is the correct one:

value: {{ .Values.SCT_PUB_PORT1 }}, {{ .Values.SCT_PUB_PORT2 }}
-- AVarf
Source: StackOverflow

11/14/2019

I suspect it's the value following the key in line 30 that's the issue; it contains a , and this makes it an invalid value.

{{ .Values.SCT_PUB_PORT1 | quote }}, {{ .Values.SCT_PUB_PORT2 | quote }}
-- DazWilkin
Source: StackOverflow