如何在掌舵模板中使用属性名称中的冒号访问属性

时间:2018-12-07 09:45:14

标签: kubernetes-helm

在掌舵模板中,我想编写如下内容:

{{- if empty .Values.conf.proxy_server.filter:authtoken.auth_uri -}}
{{- $_ := tuple "identity" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup"| set .Values.conf.proxy_server.filter:authtoken "auth_uri" -}}
{{- end -}}

由于filter:authtoken中有一个冒号,因此出现如下错误:

Error: parse error in "swift/templates/configmap-etc.yaml": template: swift/templates/configmap-etc.yaml:20: expected :=

values.yaml中,代码段如下:

conf:
  proxy_server:
    filter:authtoken:
      paste.filter_factory: keystonemiddleware.auth_token:filter_factory
      auth_type: password
      ......

所以要解决此问题吗?

1 个答案:

答案 0 :(得分:0)

那不是有效的YAML;但是YAML是YAML,可以通过多种方式“拼写”事物。 (所有有效的JSON都是有效的YAML。)在其他选项中,您可以在值文件中引号:

conf:
  proxy_server:
    "filter:authtoken":
      paste.filter_factory: "keystonemiddleware.auth_token:filter_factory"
      auth_type: password
      ......

(我也用in引号括起来的值,以防万一它被误解为映射。)

当您回读它时,您可能不得不使用Go文本/模板index函数来提取值,因为它看起来并不像普通名称。

{{- if empty (index .Values.conf.proxy_server "filter:authtoken").auth_uri -}}

由于作为图表作者,您可以控制values.yaml文件中的内容,因此选择一个更中性的标点符号(例如句点或下划线)可能会更容易,并且避免所有这些