helm嵌套变量引用未发生

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

我无法在Helm中的嵌套变量内引用变量。我无法执行此嵌套引用,我想使用app1_image变量的值检索app1_tagapps_label。我该怎么办?

values.yaml:

  apps:
   -  name: web-server
       label: app1
       command: /root/web.sh
       port: 80

   -  name: app-server
      label: app2
      command: /root/app.sh
      port: 8080

app1_image:
     name: nginx
     tag: v1.0

app2_image:
    name: tomcat
    tag: v1.0

deployment.yaml:

{{- range $apps := .Values.apps
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ $apps.name }}
  labels:
    app: {{ $apps.name }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: 
  template:
    metadata:
      labels:
        app: {{ $apps.name }}
    spec:
      containers:
      - name: {{ $apps.name }}
        image: {{ $.Values.$apps.label.image }}: {{ $.Values.$apps.label.tag }}
        ports:
        - containerPort: {{ $apps.port}}
{{- end }}
kubernetes-helm
1个回答
0
投票

核心Go text/template语言包括index函数,您可以将其用作.运算符的更动态版本。给定您显示的值文件,您可以像在循环中一样进行查找:

{{- $key := printf "%s_image" $apps.label }}
{{- $settings := index $.Values $key | required (printf "could not find top-level settings for %s" $key) }}
      - name: {{ $apps.name }}
        image: {{ $settings.image }}:{{ $settings.tag }}

[您可能可以重新排列values.yaml文件的布局,以使其更加清晰。您还可以尝试使用可以提供的多个helm install -f选项在安装时覆盖这些选项;如果您可以将所有这些设置都放在一个位置,则更易于管理。

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