web-dev-qa-db-ja.com

yamlファイルでjson変数を使用するにはどうすればよいですか(Helm)

次のようなHELM値ファイルがあります。

service:
  environment: dev
  spring_application_json: >-
    {
      "spring" : {
        "boot" : {
          "admin" : {
            "client" : {
              "enabled" : "false",
              "url" : "http://website1",
              "instance" : {
                "service-base-url" : "http://website2",
                "management-base-url" : "http://website3"
              }
            }
          }
        }
      }
    }

そして、この値を取得してコンテナに環境変数として挿入する、対応するテンプレートファイル。

spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      imagePullSecrets:
        - name: {{ .Values.image.pullSecret }}
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: ENVIRONMENT
              value: "{{ .Values.service.environment }}"
            - name: SPRING_APPLICATION_JSON
              value: "{{ .Values.service.spring_application_json }}"

しかし、helm installを実行すると、次のエラーが発生します。

Error: YAML parse error on deployment.yaml: error converting YAML to JSON: yaml: line 40: did not find expected key

どちらが線を指しているか:

value: "{{ .Values.service.spring_application_json }}"

私はjson文字列を複数行の環境変数として解析しようとしている方法に問題があると思いますか? ENVIRONMENT 'dev'変数は完全に機能し、この同じYAMLはdocker-composeでも完全に機能します。

6
Garreth

spring cloud dataflow のドキュメントにこのような例が少しありますが、それらのドキュメントの形式では引用符がエスケープされています。

値ファイルのエントリを次のように変更することで、エラーを再現してそれを乗り越えることができました。

service:
  spring_application_json:
    {
      "spring" : {
        "boot" : {
          "admin" : {
            "client" : {
              "enabled" : "false",
              "url" : "http://website1",
              "instance" : {
                "service-base-url" : "http://website2",
                "management-base-url" : "http://website3"
              }
            }
          }
        }
      }
    }

そして、デプロイメントエントリは:

    - name: SPRING_APPLICATION_JSON
      value: {{ .Values.service.spring_application_json | toJson | quote }}

とにかく処理されるため、この部分を囲む引用符はありません。

5
Ryan Dawson