代码之家  ›  专栏  ›  技术社区  ›  Yaron Idan

在helm模板中为每个列表成员添加后缀

  •  0
  • Yaron Idan  · 技术社区  · 6 年前

    我正在尝试遍历helm模板中的列表,并为每个成员添加一个后缀。 我现在有这样的代码块:

    {{- range $host := .Values.ingress.hosts }}
    {{- $subdomain := initial (initial (splitList "." $host)) | join "." }}
    {{- $topLevelDomain := last (splitList "." $host) }}
    {{- $secondLevelDomain := last (initial (splitList "." $host)) }}
    - host: {{- printf " %s-%s.%s.%s" $subdomain $environment $secondLevelDomain $topLevelDomain | trimSuffix "-" }}
    {{- end }}
    

    因为我需要在同一个文件中进行两次完全相同的操作,所以我想创建一个新的列表,名为 $host-with-env ,它将包含我要查找的后缀。这样我只能执行一次这个操作。
    问题是-我不知道如何在helm中创建一个空列表-所以我不能将现有列表中的项目附加到新列表中。
    你知道我该怎么做吗?
    我也可以修改现有的列表,但是我应用到列表的每一个操作似乎都适用于我应用到它的foreach的范围。 你知道怎么做吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   edbighead    6 年前

    可能不太清楚您试图获得什么结果,这将有助于添加您的输入,如您的values.yaml和所需的输出。不过,我添加了一个示例来回答您的问题。

    受到启发 this answer ,你可以使用 词典 .

    此代码将为所有 .Values.ingress.hosts 把它们放进 $hostsWithEnv 字典到列表中,可以通过 myhosts 钥匙

    价值观

    ingress:
      hosts:
        - one
        - two
    

    配置文件

    {{- $hostsWithEnv := dict "myhosts" (list) -}}
    {{- range $host := .Values.ingress.hosts -}}
    {{- $var := printf "%s.domain.com" $host | append $hostsWithEnv.myhosts | set $hostsWithEnv "myhosts" -}}
    {{- end }}
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-configmap
    data:
    {{- range $hostsWithEnv.myhosts}}
      - host: {{- printf " %s" . | trimSuffix "-" }}
    {{- end }}
    

    输出

    $ helm install --debug --dry-run .              
    [debug] Created tunnel using local port: '62742'                                 
    ...                       
    # Source: mychart/templates/configmap.yaml        
    apiVersion: v1                                  
    kind: ConfigMap                                 
    metadata:                                       
      name: my-configmap                            
    data:                                           
    - host: one.domain.com             
    - host: two.domain.com
    
    推荐文章