是否有一种方法来创建一个可迭代列表从字符串?



我正在通过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的简单示例:

  1. 让我们在helm文档中使用简单的图表并准备它:

    helm create mychart
    rm -rf mychart/templates/*
    
  2. 编辑values.yaml并插入urls字符串:

    urls: http://example.com http://example2.com http://example3.com
    
  3. templates文件夹中创建ConfigMap(命名为configmap.yaml)

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: {{ .Release.Name }}-configmap
    data:
    {{- $urls := splitList " " .Values.urls }}
    urls: |- 
    {{- range $urls }}
    - {{ . }}
    {{- end }}
    

    可以看到,我正在使用你的循环("- ")为了避免创建空行).

  4. 安装图表并检查:

    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 }}

相关内容

  • 没有找到相关文章

最新更新