我正在通过values.yaml传递以下字符串:
urls: http://example.com http://example2.com http://example3.com
有没有办法从这个创建一个列表,这样我就可以这样做:
{{ range $urls }}
{{ . }}
{{ end }}
问题是我在动态方式传递url var,我也不能避免使用单个字符串(ArgoCD ApplicationSet不会让我传递列表)。
基本上你所需要的就是在你的模板中添加这一行yaml
:
{{- $urls := splitList " " .Values.urls }}
它将从values.yaml
中导入urls
字符串作为列表,这样您就可以运行您在问题中发布的代码。
基于helm docs的简单示例:
让我们在helm文档中使用简单的图表并准备它:
helm create mychart rm -rf mychart/templates/*
编辑
values.yaml
并插入urls
字符串:urls: http://example.com http://example2.com http://example3.com
在
templates
文件夹中创建ConfigMap(命名为configmap.yaml
)apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: {{- $urls := splitList " " .Values.urls }} urls: |- {{- range $urls }} - {{ . }} {{- end }}
可以看到,我正在使用你的循环("- ")为了避免创建空行).
安装图表并检查:
helm install example ./mychart/ helm get manifest example
输出:
--- # Source: mychart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: example-configmap data: urls: |- - http://example.com - http://example2.com - http://example3.com
按空格分隔得到url数组
{{- range _, $v := $urls | split " " }}
{{ $v }}
{{- end }}