如何通过Helm图表从JSON读取值

时间:2018-12-20 11:20:14

标签: kubernetes kubernetes-helm

我已经在json文件中定义了值。

cat templates/encrypt.json
{"encrypt": "cg8StVXbQJ0gPvMd9o7yrg=="}

该值必须按如下所示传递到yaml文件

-config-file={{ tpl (.Files.Get "encrypt.json") . | b64enc }}  \

下面是头盔图表片段

exec /bin/consul agent \
            -node="${NODE}" \
            -advertise="${POD_IP}" \
            -bind=0.0.0.0 \
            -client=0.0.0.0 \
            {{- if .Values.client.grpc }}
            -hcl="ports { grpc = 8502 }" \
            {{- end }}
            -config-dir=/consul/config \
            {{- range .Values.client.extraVolumes }}
            {{- if .load }}
            -config-dir=/consul/userconfig/{{ .name }} \
            {{- end }}
            {{- end }}
            -datacenter={{ .Values.global.datacenter }} \
            -data-dir=/consul/data \
            -config-file={{ tpl (.Files.Get "encrypt.json") . | b64enc }}  \
            {{- if (.Values.client.join) and (gt (len .Values.client.join) 0) }}

运行健康状况图表时,出现以下错误。

Error: unable to decode "": Object 'Kind' is missing in '{"encrypt":"cg8StVXbQJ0gPvMd9o7yrg=="}'

1 个答案:

答案 0 :(得分:1)

您要注入的{{ tpl (.Files.Get "encrypt.json") . | b64enc }}是json的内容,即{"encrypt": "cg8StVXbQJ0gPvMd9o7yrg=="}。但是我不认为那是该参数所期望的。似乎希望文件的文件名在Pod中可用,这可以通过挂载configmap来完成。那就是how the consul helm chart in the official kubernetes charts handles it

            {{- if .Values.Gossip.Encrypt }}
            if [ -e /etc/consul/secrets/gossip-key ]; then
              echo "{\"encrypt\": \"$(base64 /etc/consul/secrets/gossip-key)\"}" > /etc/consul/encrypt.json
              GOSSIP_KEY="-config-file /etc/consul/encrypt.json"
            fi
            {{- end }}

lets the user set a gossip key in the values filesets that in a secretmounted into豆荚as a volume。如果可以的话,我建议遵循该图表的方法。

我猜您正在做的事情是建立在the consul helm chart that Hashicorp provides之上的,因为您所包含的代码与此类似。因此,大概您不能使用kubernetes存储库中的那个,但是您应该能够按照该图表针对此配置文件采用的方法。