如何在Helm Chart模板的多行字符串中编写流控制?
在Helm Chart的YAML多行字符串里用流控制的正确姿势
在Helm Chart的YAML文件里,要在多行块字符串(就是用|标记的那种)里用if这类模板流控制,关键是让模板指令和字符串内容缩进对齐,再用模板的空白修剪标记(-)控制多余的空格和换行。
你的示例问题
你贴的这段代码,主要是缩进和空白处理的问题,可能导致渲染后的字符串有多余的前导空格,或者出现不必要的空行。我们调整下就能正常工作。
正确写法
假设你想要的效果是:当.Values.favorite.drink是coffee时,输出Latte、Cappuccino加Espresso;否则只输出Espresso,而且每行内容不带多余前导空格,可以这么写:
coffee: | {{- if eq .Values.favorite.drink "coffee" }} Latte Cappuccino {{- end }} Espresso
要是你希望最终输出的字符串每行都带两个空格的缩进,那就保持模板指令和内容同缩进:
coffee: | {{- if eq .Values.favorite.drink "coffee" }} Latte Cappuccino {{- end }} Espresso
核心注意点
- 缩进对齐:模板指令
{{- ... }}得和块里的内容缩进一致,不然渲染出来的YAML可能格式错误,Helm会报错。 - 空白修剪:
{{-会删掉指令左边的空白(包括换行),-}}会删掉右边的。用对了能避免输出多余的空行或者空格,比如第一个示例里的{{- if就去掉了指令前面的换行,不会让条件满足时出现空行。 - 块字符串特性:YAML的
|会保留你写的换行和缩进,所以块里每一行的缩进都会原封不动出现在最终输出的字符串里,得根据你想要的结果调整缩进。
内容的提问来源于stack exchange,提问作者tony
相关产品推荐
相关产品推荐

