定义集合时添加新闻行

时间:2019-03-29 04:23:18

标签: kubernetes yaml kubernetes-helm

我正在尝试定义一个集合(dict),并且我想在每个定义上添加新行(以提高可读性),例如:

{{ $deployment := dict 
"Release" .Release 
"Chart" .Chart 
"Values" .Values }}

但是当我这样做时,头盔会响应一个解析错误:

Error: parse error in "XXX": template: XXX:2: unclosed action
Error: UPGRADE FAILED: parse error in "XXX": template: XXX:2: unclosed action

HELM中有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

看来这是不可能的。 Helm模板系统基本上就是Go模板系统。如Go templating docs中所述:

  

除了原始字符串外,动作可能不会跨越换行符,尽管注释可以。

答案 1 :(得分:1)

TLDR;

不可能像Perl fat逗号运算符那样以多行方式声明dict。
请检查“ Sprig:Go模板的模板功能”中的reference

相反,您可以使用这种黑客手段来实现类似的结果:

  1. 在“全局值”文件中将每个键值对保留在单独的行中,以提高可读性:

# values.yaml
  -- 
  global:
  someMap:
    coffee: robusta
    origin: Angola
    crema: yes

  1. 在_helpers.tpl中定义帮助器模板:

{{- define "mychart.labels.standard"}}
{{- $global := default (dict) .Values.global.someMap -}}
Release: {{ .Release.Name | quote }}
Chart: {{ .Chart.Name }}
Values:
{{- $global := default (dict) .Values.global.someMap -}} 
{{- range $key, $value := $global }}
  {{ $key }}: {{ $value }}
{{- end }}
{{- end -}}

  1. 将其包含在另一个模板中:

helm_data:
  {{- $global := default (dict) .Values.global -}}
  {{- range $key, $value := $global }}
    {{ $key }}: {{ $value }}
  {{- end }}
  {{ include "mychart.labels.standard" . | nindent 0 -}}

  1. 将其渲染以验证结果(头盔模板--name dict-chart)。

---
# Source: mychart/templates/data_type.yaml
helm_data:
    someMap: map[crema:true origin:Angola coffee:robusta]
  
Release: "dict-chart"
Chart: mychart
Values:
    coffee: robusta
    crema: true
    origin: Angol

答案 2 :(得分:0)

我首先定义了字典,然后每行设置了一个键。

{{- $myDict := dict "" "" -}}
{{- $_ := set $myDict "myKey1" "myValue1" -}}
{{- $_ := set $myDict "myKey2" "myValue2" -}}
{{- $_ := set $myDict "myKey3" "myValue3" -}}
{{- $_ := set $myDict "myKey4" "myValue4" -}}

奖金提示:由于dict get函数似乎仅在helm3及更高版本中可用,因此您可以使用此技巧从dict到字符串获取值。

{{/* Hack needed until helm 3 which has 'get' for 'dict' */}}
{{- $myValue3Var := pluck "myKey3" $myDict | first -}}