.Values 中的 helm 变量

yan*_*ang 3 go-templates kubernetes-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 }}
Run Code Online (Sandbox Code Playgroud)

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


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

像这样的值文件:

deployment-nginx-imagerepo: nginx
deployment-nginx-imagetag: latest
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 5

Go 文本/模板语言中,我相信该index函数会做到这一点。(.Values通常是地图,而 YAML 地图和列表会转换为 Go 地图和切片。)(还要记住sprig库中的几乎所有内容都可用。)

image: {{ index .Values (printf "%s-image" $value.name) }}:{{ index .Values (printf "%s-tag" $value.name) }}
Run Code Online (Sandbox Code Playgroud)