我无法在Helm中的嵌套变量内引用变量。我无法执行此嵌套引用,我想使用app1_image
变量的值检索app1_tag
和apps_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 }}
核心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
选项在安装时覆盖这些选项;如果您可以将所有这些设置都放在一个位置,则更易于管理。