json - 如何在 yaml 文件中使用 json 变量 (Helm)

标签 json docker kubernetes yaml kubernetes-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 完美地工作。

最佳答案

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

注意这部分没有引号,因为无论如何都会处理它。

关于json - 如何在 yaml 文件中使用 json 变量 (Helm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930405/

相关文章:

json - 在 golang、JSON 与 gob 中深度复制对象的更快方法

docker - 与ECS和EFS共享文件

docker - 无法在 Dockerfile 中运行 sysctl 命令

kubernetes - 如何在不停机的情况下更新部署的initContainer镜像?

kubernetes - kubectl replace -f 在 Pending 状态下无限期地创建 pod

kubernetes - CoreDNS服务Corefile位置

c# - JSON Newtonsoft C# - 反序列化 JSON 文件中的特定字段

javascript - 在 js 中调试 php 上的 var

javascript - 为什么我的 eval 没有将 json 字符串转换为对象

docker - 为什么我无法运行 Kafka 连接器?