从values.yaml中获取yaml键

时间:2018-05-26 17:20:15

标签: yaml go-templates kubernetes-helm

我想动态制作一个yaml KEY(而不是值)。

在我的values.yaml

failoverip1: 0.0.0.0` (<- this is only a demo IP)

在我的templates/configmap.yaml我有这个:

apiVersion: v1
kind: ConfigMap
metadata:
  name: vip-configmap
data:
  {{- .Values.failoverip1 -}}: {{ .Release.Namespace -}}/{{- .Values.target -}}
     ^^^^^^^^^^^^^^^^^^^^^----> here should be an IP address from values.yaml

{{ .Release.Namespace -}}/{{- .Values.target -}}成功呈现。

但是如果我将{{- .Values.failoverip1 -}}添加到关键部分,它什么都不呈现。 (没有任何意思,整个data:块,不会被渲染。

这是我运行helm install --name hetzner-failover .

时的错误消息

Error: YAML parse error on hetzner-failover/templates/configmap-ip.yaml: error converting YAML to JSON: yaml: line 4: mapping values are not allowed in this context

不允许制作

  • 关键动态?
  • 如果没有,怎么开车呢?

以下是我所说的回购:

https://github.com/exocode/helm-charts/blob/master/hetzner-failover/templates/configmap-ip.yaml

1 个答案:

答案 0 :(得分:0)

错误似乎是,领先的-被削减了。

所以正确的方法是删除减号:

<强>之前:

{{- .Values.failoverip1 | indent 2 -}}

<强>后:

{{ .Values.failoverip1 | indent 2 -}}

yaml现在是:

apiVersion: v1
kind: ConfigMap
metadata:
  name: vip-configmap
data:
{{ .Values.failoverip1 | indent 2 -}}: {{ .Release.Namespace -}}/{{- .Values.target -}} # add your config map here. must map the base64 encoded IP in secrets.yaml

渲染结果为:

kubectl get configmap -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    0.0.0.0: default/nginx# add your config map here. must map the base64 encoded
      IP in secrets.yaml
  kind: ConfigMap