有没有办法从字符串创建可迭代列表?

Is there a way to create an iterable list from a string?

我正在通过 values.yaml 传递以下字符串:

urls: http://example.com http://example2.com http://example3.com

有没有办法从中创建一个列表,这样我就可以做类似的事情:

{{ range $urls }}
{{ . }}
{{ end }}

问题是我以动态方式传递 urls var,而且我也无法避免为此使用单个字符串(ArgoCD ApplicationSet 不允许我传递列表)。

用空格分割得到一个 url 数组。

{{- range _, $v := $urls | split " " }}
{{ $v }}
{{- end }}

基本上您只需要在模板中添加这一行 yaml:

{{- $urls := splitList " " .Values.urls }}

它将从 values.yaml as the list 导入 urls 字符串,这样您就可以 运行 您在问题中发布的代码。

基于helm docs的简单示例:

  1. 让我们得到helm docs中使用的简单图表并准备一下:

    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