【问题标题】:Error converting YAML to JSON: did not find expected key将 YAML 转换为 JSON 时出错:未找到预期的密钥
【发布时间】:2020-03-10 17:13:34
【问题描述】:

我刚刚创建了一个新的 Helm 图表,但是当我运行 helm install --dry-run --debug 时,我得到:

Error: YAML parse error on multi-camera-tracking/templates/multi-camera-tracking.yaml:将 YAML 转换为 JSON 时出错:yaml:第 30 行:未找到预期的密钥

这是我的 Yaml 文件:

---
# 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: {}

奇怪的是我已经创建了多个其他 helm 图表,它们都与这个非常相似,但是这个不起作用并产生错误。

【问题讨论】:

    标签: kubernetes yaml kubernetes-helm


    【解决方案1】:

    我找到了它不起作用的原因。首先,允许有逗号分隔的值,但有问题的部分是引号。

    这是错误的语法:

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

    这是正确的:

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

    【讨论】:

      【解决方案2】:

      就我而言,我写过

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

      由于那个给出错误。

      应该是

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

      区别在于大括号之间的空格。

      【讨论】:

        【解决方案3】:

        我怀疑问题出在第 30 行中键后面的值;它包含一个,,这使其成为无效值。

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

        【讨论】:

        • 你是对的,但不是因为逗号。我发布了我的答案。
        【解决方案4】:

        调试此问题的一种方法是进行试运行并渲染模板以查看导致问题所在行的问题。

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

        这可以让您查看哪些键没有很好地缩进,因为这个问题有时是由错误的缩进引起的。

        【讨论】:

        • 这显然不允许看到除了 Go 堆栈跟踪之外的任何内容。
        • 它也会渲染 YAML 输出,如果缩进错误,您可以看到错误在缩进的位置或字段格式是否错误。
        • 不,如果在 Helm 能够呈现有效的 YAML 之前发生错误,显然不会,这显然是错误模板语法的情况。实际上,我无法想象 Helm 在空运行模式下同时显示渲染的 YAML 和堆栈跟踪的情况。
        • 和@miz 一样
        • 试运行因解析错误而失败,因此从未显示实际呈现的清单。 Helm 不显示预处理的 YAML(应用的值),因此您必须通过解析您头脑中的模板并希望它与现实相匹配来推断... Helm 应该理想地显示预处理的清单并让世界免于痛苦...
        【解决方案5】:

        我认为带有--debugtemplate 命令是此类问题的预期调试路径,例如:

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

        here helm 将尽最大努力尝试生成 YAML,并让您检查并查看是否可以更清楚地看到错误。

        【讨论】:

          猜你喜欢
          • 2019-06-26
          • 1970-01-01
          • 2019-12-13
          • 1970-01-01
          • 2020-05-02
          • 1970-01-01
          • 1970-01-01
          • 2021-12-08
          • 2021-10-03
          相关资源
          最近更新 更多