如何在 helm chart 中使用同名的多个变量?
how to use multiple variables with same name in helm chart?
我有 helm chart 需要像这样定义多个相同的变量名
containers:
- name: APP_NAME
image: CONTAINER_IMAGE
envFrom:
- secretRef:
name: secret1
- secretRef:
name: secret2
- configMapRef:
name: configmap1
- secretRef:
name: secret3
我添加了这样的 nonproduction.yaml 图表
envFrom:
secretRef:
name1: secret1
secretRef:
name2: secret2
configmapRef:
name3: configmap1
secretRef:
name4: secret3
并定义 deployment.yaml
containers:
- name: {{ .Values.appName }}
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
envFrom:
- secretRef:
name: {{ .Values.envFrom.secretRef.name1 }}
- secretRef:
name: {{ .Values.envFrom.secretRef.name2 }}
- configMapRef:
name: {{ .Values.envFrom.configmapRef.name3 }}
- secretRef:
name: {{ .Values.envFrom.secretRef.name4 }}
但是它在终端上复制了键,我如何在不更改名称的情况下在 helm chart 上使用相同的名称变量?
编辑:添加数字,这样我们就不会被 'name'
弄晕了
您可以一次调用所有秘密,而不是调用单独的秘密和配置映射。
env:
{{- toYaml .Values.envs | nindent 12 }}
envFrom:
{{- toYaml .Values.envFrom | nindent 12 }}
YAML 支持一组基本数据结构,例如 JSON(事实上,有效的 JSON 文件通常是有效的 YAML)。在 YAML 的术语中,有 scalars(字符串、数字、布尔值)、sequences(列表、数组)和 mappings(字典)。
在您显示的 values.yaml
文件中, envFrom:
是一个映射,但其中三个键是相同的;你说 属性 secretRef
有映射值 {name1: value1}
,而且 属性 secretRef
有映射值 {name2: value2}
,这就是 Helm 感到困惑的地方。
您可以将 values.yaml
文件改为 YAML 序列,方法是在每个项目前添加一个连字符 -
:
envFrom:
- secretRef:
name1: secret1
- secretRef:
name2: secret2
- et: cetera
# ^ add "-" before each item
此时您可以使用 中的方法将此结构按原样复制到 YAML 输出中,因为序列形式与 Kubernetes 在这里期望的相匹配。
envFrom: {{- toYaml .Values.envFrom | nindent 12 }}
如果您确实需要在此处遍历各个值,因为它现在是一个序列,您不能通过名称引用单个项目(并且在 Helm 中查找一系列映射中的项目并不容易一些 属性) 但只能通过索引或通过 range
迭代关键字。
我有 helm chart 需要像这样定义多个相同的变量名
containers:
- name: APP_NAME
image: CONTAINER_IMAGE
envFrom:
- secretRef:
name: secret1
- secretRef:
name: secret2
- configMapRef:
name: configmap1
- secretRef:
name: secret3
我添加了这样的 nonproduction.yaml 图表
envFrom:
secretRef:
name1: secret1
secretRef:
name2: secret2
configmapRef:
name3: configmap1
secretRef:
name4: secret3
并定义 deployment.yaml
containers:
- name: {{ .Values.appName }}
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
envFrom:
- secretRef:
name: {{ .Values.envFrom.secretRef.name1 }}
- secretRef:
name: {{ .Values.envFrom.secretRef.name2 }}
- configMapRef:
name: {{ .Values.envFrom.configmapRef.name3 }}
- secretRef:
name: {{ .Values.envFrom.secretRef.name4 }}
但是它在终端上复制了键,我如何在不更改名称的情况下在 helm chart 上使用相同的名称变量?
编辑:添加数字,这样我们就不会被 'name'
弄晕了您可以一次调用所有秘密,而不是调用单独的秘密和配置映射。
env:
{{- toYaml .Values.envs | nindent 12 }}
envFrom:
{{- toYaml .Values.envFrom | nindent 12 }}
YAML 支持一组基本数据结构,例如 JSON(事实上,有效的 JSON 文件通常是有效的 YAML)。在 YAML 的术语中,有 scalars(字符串、数字、布尔值)、sequences(列表、数组)和 mappings(字典)。
在您显示的 values.yaml
文件中, envFrom:
是一个映射,但其中三个键是相同的;你说 属性 secretRef
有映射值 {name1: value1}
,而且 属性 secretRef
有映射值 {name2: value2}
,这就是 Helm 感到困惑的地方。
您可以将 values.yaml
文件改为 YAML 序列,方法是在每个项目前添加一个连字符 -
:
envFrom:
- secretRef:
name1: secret1
- secretRef:
name2: secret2
- et: cetera
# ^ add "-" before each item
此时您可以使用
envFrom: {{- toYaml .Values.envFrom | nindent 12 }}
如果您确实需要在此处遍历各个值,因为它现在是一个序列,您不能通过名称引用单个项目(并且在 Helm 中查找一系列映射中的项目并不容易一些 属性) 但只能通过索引或通过 range
迭代关键字。