如何根据嵌套值的存在有条件地渲染 helm 模板

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

我有一个模板,它呈现一个包含登录服务器凭据的秘密。 有一个部署配置,其中这是不安全地完成的,在这种情况下我不想呈现秘密。 通常我的values.yaml包含auth.myapp.username和auth.myapp.password,但是当部署缺少凭据时,整个auth部分不再存在。

我的秘密模板如下所示:

{{ if .Values.auth.myapp.username }}
apiVersion: v1
kind: Secret
metadata:
  name: myapp-credentials-secret
type: Opaque
data:
  USERNAME: {{ .Values.auth.myapp.username | b64enc }}
  PASSWORD: {{ .Values.auth.myapp.password | b64enc }}
{{ end }}

但是,在运行 helm install 时出现错误,因为“auth”值不存在,无法从中查找 myapp。

我知道我可以通过不使用 --strict 标志来解决这个问题,但我无法控制它,是否有正确的方法来预测嵌套值?

kubernetes kubernetes-helm
2个回答
2
投票

使用

hasKey
功能:

{{ if hasKey .Values "auth" }}
apiVersion: v1
kind: Secret
metadata:
  name: myapp-credentials-secret
type: Opaque
data:
  USERNAME: {{ .Values.auth.myapp.username | b64enc }}
  PASSWORD: {{ .Values.auth.myapp.password | b64enc }}
{{ end }}

如果给定的字典包含给定的键,则

hasKey
function 返回
true

hasKey $myDict "name1"

如果未找到密钥,则返回

false


0
投票

您可以使用标准

default
函数填充不存在的层次结构层,结合 Sprig
dict
函数创建一个空字典:

{{- $auth := .Values.auth | default dict -}}
{{/* $auth is the "auth" object from the top-level values, or an empty
     dictionary if there was no such value */}}

这将让您一次逐步浏览此结构:

{{- $auth := .Values.auth | default dict -}}
{{- $myapp := $auth.myapp | default dict -}}
{{- if and $myapp.username $myapp.password -}}
apiVersion: v1
kind: Secret
...
data:
  USERNAME: {{ $myapp.username | b64enc }}
  PASSWORD: {{ $myapp.password | b64enc }}
{{ end }}
© www.soinside.com 2019 - 2024. All rights reserved.