web-dev-qa-db-fra.com

Comment utiliser les variables json dans un fichier yaml (Helm)

J'ai un fichier de valeurs HELM qui ressemble à ceci:

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"
              }
            }
          }
        }
      }
    }

Et un fichier de modèle correspondant qui saisit cette valeur et l'insère en tant que variable d'environnement dans un conteneur.

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 }}"

Cependant, lorsque j'exécute l'installation de la barre, j'obtiens l'erreur suivante:

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

Qui pointe vers la ligne:

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

Je crois que c'est un problème avec la façon dont j'essaie d'analyser une chaîne json en tant que variable d'environnement multiligne? La variable "dev" d'ENVIRONNEMENT fonctionne parfaitement et ce même YAML fonctionne également parfaitement avec docker-compose.

6
Garreth

Il y a un exemple un peu comme celui-ci dans les documents pour spring cloud dataflow mais le format dans leur documentation a échappé les guillemets.

J'ai pu recréer l'erreur et la surmonter en modifiant l'entrée du fichier de valeurs en:

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

Et l'entrée de déploiement pour:

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

Remarquez pas de guillemets autour de cette partie car cela est géré de toute façon.

5
Ryan Dawson