Ошибка управления преобразованием YAML в JSON: yaml: строка 24: не найден ожидаемый ключ

#postgresql #kubernetes #yaml #kubernetes-helm #kubernetes-statefulset

Вопрос:

Получение ошибки при развертывании postgres для службы приводит к сбою. Проверил yaml с помощью yamllint, и он действителен, но все равно появляется ошибка. Файл развертывания содержит ServiceAccount , Службу и набор состояний.

 install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /builds/xxx/xyxy/xyxyxy/xx/xxyy/src/main/helm
Error: YAML parse error on postgresdeployment.yaml: error converting YAML to JSON: yaml: line 24: did not find expected key
helm.go:75: [debug] error converting YAML to JSON: yaml: line 24: did not find expected key
YAML parse error on postgresdeployment.yaml
helm.sh/helm/v3/pkg/releaseutil.(*manifestFile).sort
    /home/circleci/helm.sh/helm/pkg/releaseutil/manifest_sorter.go:146
helm.sh/helm/v3/pkg/releaseutil.SortManifests
    /home/circleci/helm.sh/helm/pkg/releaseutil/manifest_sorter.go:106
helm.sh/helm/v3/pkg/action.(*Configuration).renderResources
    /home/circleci/helm.sh/helm/pkg/action/install.go:489
helm.sh/helm/v3/pkg/action.(*Install).Run
    /home/circleci/helm.sh/helm/pkg/action/install.go:230
main.runInstall
    /home/circleci/helm.sh/helm/cmd/helm/install.go:223
main.newUpgradeCmd.func1
    /home/circleci/helm.sh/helm/cmd/helm/upgrade.go:113
github.com/spf13/cobra.(*Command).execute
    /go/pkg/mod/github.com/spf13/cobra@v0.0.5/command.go:826
github.com/spf13/cobra.(*Command).ExecuteC
    /go/pkg/mod/github.com/spf13/cobra@v0.0.5/command.go:914
github.com/spf13/cobra.(*Command).Execute
    /go/pkg/mod/github.com/spf13/cobra@v0.0.5/command.go:864
main.main
    /home/circleci/helm.sh/helm/cmd/helm/helm.go:74
runtime.main
    /usr/local/go/src/runtime/proc.go:203
runtime.goexit
    /usr/local/go/src/runtime/asm_amd64.s:1357
    
 

после развертывания.yaml

  1. Существует ли какой-либо недопустимый синтаксис yaml?
  2. Какой-нибудь отступ отсутствует ?
  3. Какой узел здесь отсутствует?
 {{- if contains "-dev" .Values.istio.suffix }}
# Postgre ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
  name: postgres
---
# PostgreSQL StatefulSet Service
apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  selector:
    app: postgres
  ports:
    - port: 5432
      targetPort: 5432
---
# Postgre StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: postgres
    spec:
        serviceAccountName: postgres
        securityContext:
          {{- toYaml .Values.securityContext | nindent 8 }}
        terminationGracePeriodSeconds: {{ default 60 .Values.terminationGracePeriodSeconds }}
        volumes:
        {{ include "xxx.volumes.logs.spec" . | indent 8 }}
        - emptyDir: { }
            name: postgres-disk
        containers:
          - name: postgres
            image: "{{ template "xxx.dockerRegistry.hostport" . }}/postgres:latest"
            imagePullPolicy: {{ .Values.image.pullPolicy }}
            ports:
              - name: postgres
                containerPort: 5432
            livenessProbe:
              tcpSocket:
                port: 5432
              failureThreshold: 3
              initialDelaySeconds: 240
              periodSeconds: 45
              timeoutSeconds: 5
            readinessProbe:
              tcpSocket:
                port: 5432
              failureThreshold: 2
              initialDelaySeconds: 180
              periodSeconds: 5
              timeoutSeconds: 20
            resources:
              {{ if .Values.lowResourceMode }}
                {{- toYaml .Values.resources.low | nindent 12 }}
                {{ else }}
                {{- toYaml .Values.resources.high | nindent 12 }}
                {{ end }}
            env:
              - name: PGDATA
                value: /var/lib/postgresql/data/pgdata
            volumeMounts:
              - name: postgres-disk
                mountPath: /var/lib/postgresql/data
{{- end }}
 

Ответ №1:

Шаблонные усы в helm (и его одноранговый текст/шаблон golang) должны быть одним маркером, иначе yaml считает, что { открывает диктант, а затем { пытается открыть дочерний диктант, и, как и в JSON, это недопустимая структура

Так что вы захотите:

         serviceAccountName: postgres
        securityContext:
          {{- toYaml .Values.securityContext | nindent 8 }}
 

Комментарии:

1. Да , это работает, но теперь я получаю еще одну ошибку «helm.go:75: [отладка] ошибка преобразования YAML в JSON: yaml: строка 24: не найден ожидаемый ключ»

2. Слушай, мне жаль, что YAML это так ново для вас, но - emptyDir: { }nname: postgres-disk это неверный, слишком; это не какие-то тонкости «кто мог знать» различные, не говоря уже о том, что вы не включили какой строке 24 есть на самом деле, я был просто в состоянии заметить эту очевидную ошибку-не может быть другим, основываясь на values.yaml том, что вы и не пост

3. Знак минус непосредственно внутри двойных фигурных скобок {{- ... }} -это сигнал движку Go text/template удалить пробелы перед блоком шаблона; его не примут за словарь YAML.