从values.yaml控制yaml关键点

从values.yaml控制yaml关键点,yaml,go-templates,kubernetes-helm,Yaml,Go Templates,Kubernetes Helm,我想动态生成一个yaml键(而不是值) 在myvalues.yaml中 failoverip1: 0.0.0.0` (<- this is only a demo IP) {{.Release.Namespace-}}/{{-.Values.target-}}成功渲染 但是如果我将{{-.Values.failoverip1-}}添加到关键部分,它不会呈现任何内容。 (这并不意味着整个数据:块不会被渲染 这是当我运行helm安装时的错误消息——name hetzner failover。

我想动态生成一个yaml键(而不是值)

在my
values.yaml中

failoverip1: 0.0.0.0` (<- this is only a demo IP)
{{.Release.Namespace-}}/{{-.Values.target-}}
成功渲染

但是如果我将
{{-.Values.failoverip1-}}
添加到关键部分,它不会呈现任何内容。 (这并不意味着整个
数据:
块不会被渲染

这是当我运行
helm安装时的错误消息——name hetzner failover。

错误:hetzner failover/templates/configmap-ip上的YAML解析错误。YAML:将YAML转换为JSON时出错:YAML:第4行:在此上下文中不允许映射值

是不是不允许打电话

  • 关键动态
  • 如果没有,如何绕道而行
这就是我所说的回购协议:


错误似乎是,前导的
-
被切断了

所以正确的方法是去掉这个负号:

之前:

{{- .Values.failoverip1 | indent 2 -}}
{{ .Values.failoverip1 | indent 2 -}}
之后:

{{- .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

当您尝试时会发生什么?但要回答您的问题:模板只是作为标准文本处理。对于模板引擎,键和值不是特殊的,因此任何内容都可以是动态的。@Flimzy。所以解析任何文本都应该没有问题吗?我现在在问题中添加了错误:
错误:hetzner failover/templates/configmap上的YAML parse错误-ip.yaml:将yaml转换为JSON时出错:yaml:第4行:在此上下文中不允许映射值
模板引擎解析任何文本都没有问题。Helm仍然希望您生成有效的yaml,不过(该错误表示您没有这样做)。我找到了解决方案:正是前导的
-
截断了intedation:-)
{{.Values.failoverip1 | indent 2-}}