如何对 Helm 进行模板化以从其他应用程序插入模板语言?
How to template Helm to insert templating language from other application?
我有一个 configMap,其中包含一条警报,如下所示:
alert_output:
outputs:
- type: webhook
enabled: true
template: |
{{- if ne (print .PolicyType) "Heartbeat" -}}
{"text": "New Alert\n Type: {{.PolicyType}}\n Details: {{.Description}}"
{{- end -}}
我如何在 Helm 中对此进行模板化,以便 outputs.template
内的 text
可以通过这样的值文件进行自定义?
alert_output:
outputs:
- type: webhook
enabled: true
template: |
{{- if ne (print .PolicyType) "Heartbeat" -}}
{"text": {{ .Values.custom_alert_text }}
{{- end -}}
valus.yaml
custom_alert_test: "New Alert\n Type: {{.PolicyType}}\n Details: {{.Description}}"
当然,原始 {{}}
被解释为 Helm 模板而不是应用程序模板语言。
你需要做两件事才能完成这项工作。
在模板本身中,您需要使 Helm(或更准确地说是 Go text/template
引擎)输出 {{
而不是将其解释为模板标记。我发现最简单的方法是编写一个发出花括号的模板块:
{{/* A template that evaluates to the literal string "{{" */}}
{{"{{"}}- if ne ... -}}
values.yaml
文件中不解释大括号,因此您无需在那里进行更改。但是,解析 YAML 文件会将 \n
转义序列转换为换行符并消耗可能存在的任何引号。 Helm 包含一个 toJson 函数,可以将任何内容呈现为有效 JSON,并且应该为您执行所需的引用和转义。
在您的示例中,还需要在与 {
JSON 对象语法匹配的行的末尾再添加一个 }
。
把这些东西放在一起,你应该得到这样的东西:
alert_output:
outputs:
- type: webhook
enabled: true
template: |
{{"{{"}}- if ne (print .PolicyType) "Heartbeat" -}}
{"text": {{ toJson .Values.custom_alert_text }}}
{{"{{"}}- end -}}
您也可以 assemble 模板语言中的整个对象,然后将其序列化;看起来像
template: |
{{"{{"}}- if ne (print .PolicyType) "Heartbeat" -}}
{{ dict "text" .Values.custom_alert_text | toJson }}
{{"{{"}}- end -}}
我有一个 configMap,其中包含一条警报,如下所示:
alert_output:
outputs:
- type: webhook
enabled: true
template: |
{{- if ne (print .PolicyType) "Heartbeat" -}}
{"text": "New Alert\n Type: {{.PolicyType}}\n Details: {{.Description}}"
{{- end -}}
我如何在 Helm 中对此进行模板化,以便 outputs.template
内的 text
可以通过这样的值文件进行自定义?
alert_output:
outputs:
- type: webhook
enabled: true
template: |
{{- if ne (print .PolicyType) "Heartbeat" -}}
{"text": {{ .Values.custom_alert_text }}
{{- end -}}
valus.yaml
custom_alert_test: "New Alert\n Type: {{.PolicyType}}\n Details: {{.Description}}"
当然,原始 {{}}
被解释为 Helm 模板而不是应用程序模板语言。
你需要做两件事才能完成这项工作。
在模板本身中,您需要使 Helm(或更准确地说是 Go text/template
引擎)输出 {{
而不是将其解释为模板标记。我发现最简单的方法是编写一个发出花括号的模板块:
{{/* A template that evaluates to the literal string "{{" */}}
{{"{{"}}- if ne ... -}}
values.yaml
文件中不解释大括号,因此您无需在那里进行更改。但是,解析 YAML 文件会将 \n
转义序列转换为换行符并消耗可能存在的任何引号。 Helm 包含一个 toJson 函数,可以将任何内容呈现为有效 JSON,并且应该为您执行所需的引用和转义。
在您的示例中,还需要在与 {
JSON 对象语法匹配的行的末尾再添加一个 }
。
把这些东西放在一起,你应该得到这样的东西:
alert_output:
outputs:
- type: webhook
enabled: true
template: |
{{"{{"}}- if ne (print .PolicyType) "Heartbeat" -}}
{"text": {{ toJson .Values.custom_alert_text }}}
{{"{{"}}- end -}}
您也可以 assemble 模板语言中的整个对象,然后将其序列化;看起来像
template: |
{{"{{"}}- if ne (print .PolicyType) "Heartbeat" -}}
{{ dict "text" .Values.custom_alert_text | toJson }}
{{"{{"}}- end -}}