Helm:获取地图中的键列表

问题描述 投票:0回答:2

我正在尝试获取 Values.yaml 中定义的所有键的列表。现在我添加了一个额外的变量只是为了将键保存为列表,这不是最好的解决方案。有没有办法获取地图中所有键的列表?

由于我在另一个 value.yaml 中将相同的变量定义为列表,因此我想第一次展平地图以获取列表,以便我可以在我的 helm 模板上具有相同的循环逻辑。

我想循环遍历地图并创建一个动态列表。但似乎不可能,因为列表是不可变的。

值.yaml

default:
    environment_names: ## this is what i want to eliminate
    - preview
    - preview-test
    environments: 
      preview: 
        server: https://sds
        something: adkfgdf
      preview-test:  
        server: https://sds
      staging: 
        server: https://35.246.225.83

Application.yaml 模板

  {{- range $service := $.Values.services }}
  {{- $environment_names := $.Values.default.environment_names }} ## default value (here i want to write a funtion which would flatten the map and return the keys)
  {{- if $service.environments }} ## if defined in another vaues.yaml as list
     {{- $environment_names:= $service.environments }}
  {{- range $env_name := $environment_names }} ## looping through the environments
  {{- $environment := get $.Values.default.environments $env_name }} ## reading from the map from default
  ---
  apiVersion: argoproj.io/v1alpha1
  kind: Application
  debug1: {{ $environment_names }}
  debug: {{ $env_name }}
  debug2: {{ $service.name }}
  {{- end }}
  {{- end }}
  {{- end }}
kubernetes-helm go-templates
2个回答
0
投票

这是我如何获取模板中的键列表(我尝试使用对我不起作用的功能,因此可以改进)

{{- $env_list:= list }}
{{- range $k,$v:= $.Values.default.environments }}
   {{- $env_list = append $env_list $k }}
{{- end }}
{{- range $service := $.Values.services }}
{{- $environment_names:= ternary $service.environments $env_list (hasKey $service "environments") }}

我可以用

$.Values.default.environment_names
替换
env_list
并且它可以工作。


0
投票

Helm 包含许多扩展函数,其中有一个

keys
函数,它完全按照您的要求执行:给定一个 dict 类型对象(如
.Values
),它以列表形式返回其键。


对于您显示的 Helm 模板的整体结构,请记住,可以构建其他值文件并使用

helm install -f
和类似选项传递它们;您不必将每个可能环境的所有可能设置都放在单个
values.yaml
文件中。 我可能会为每个环境创建一个单独的文件:

# values-preview.yaml
server: https://sds
something: adkfgdf
# values-staging.yaml
server: https://35.246.225.83

现在,例如,如果您

helm install -f values-staging.yaml
,那么
.Values.server
将扩展到服务器的配置位置,而无需显示任何复杂的条件逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.