首页 > 解决方案 > .Values 中的 helm 变量

问题描述

我想动态生成我的模板文件,这是我的情况:

{{- $v := (.Files.Get "values-deployment-nginx.yaml") | fromYaml }}
spec:
  {{- range $key, $value := $v.containers }}
  containers:
  - name: {{ $value.name }}
    image: {{ .Values.{{ $value.name }}-image }}:{{ .Values.{{ $value.name }}--tag }}

我想首先获取 {{ $value.name }},它可能是一个类似“nginx”的字符串,然后我想使用 {{ .Values.nginx-image }} 在值文件中获取正确的图像值.
有没有办法做到这一点?非常感谢!


我有很多动态生成的部署模板,但只想将图像和标签暴露给 values 文件,以便我们在安装图表时可以传递不同的图像信息。其他变量在 (.Files.Get "values-deployment-nginx.yaml") 中,就像这样(也是动态生成的)。所以在生成模板时,我想匹配值文件中的图像和标签。

像这样的值文件:

deployment-nginx-imagerepo: nginx
deployment-nginx-imagetag: latest

values-deployment-nginx.yaml 像这样(由其他项目生成):

autoscale: []
containers:
- envs: []
  imagerepository: nginx
  imagetag: latest
  itemid: n79fecd51_6716_fa65_5e64_aeed8ed6ab7e
  name: nginx
  resource:
    maxcpu: ""
    maxmemory: ""
    mincpu: "0.5"
    minmemory: 512m
  volumemounts: []
name: details
replicas: 1
schedulpolicy: []
storages: []
type: deployment

标签: kubernetes-helmgo-templates

解决方案


Go 文本/模板语言中,我相信该index功能会做到这一点。(.Values通常是一个映射,YAML 映射和列表转换为 Go 映射和切片。)(还要记住几乎所有sprig库中的东西都是可用的。)

image: {{ index .Values (printf "%s-image" $value.name) }}:{{ index .Values (printf "%s-tag" $value.name) }}

推荐阅读