Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error converting YAML to JSON: did not find expected key

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.

like image 929
AVarf Avatar asked Nov 14 '19 16:11

AVarf


4 Answers

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 }}
like image 153
AVarf Avatar answered Nov 10 '22 03:11

AVarf


In my case, I had written

name: { { template "cp-kafka.fullname" . } }-jaas-configmap

due to that giving error.

Right would be

name: {{ template "cp-kafka.fullname" . }}-jaas-configmap

The difference is space between curly brackets.

like image 23
NIrav Modi Avatar answered Nov 10 '22 03:11

NIrav Modi


I think the template command with --debug is the expected debug route for this kind of issue, e.g:

helm template  ./yourchart/ -f your-overrides.yaml -n your-ns --debug

Here helm will do its best to try and produce the YAML, and allow you to inspect and see whether you can see errors more clearly.

like image 4
AntonOfTheWoods Avatar answered Nov 10 '22 02:11

AntonOfTheWoods


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 }}
like image 3
DazWilkin Avatar answered Nov 10 '22 02:11

DazWilkin