如何通过 --set 选项在模板中设置 "required" 值?
How to set the "required" value in templates from --set option?
如何在 helm install|upgrade
上强制指定 --set 选项?
在我的例子中,需要一些环境变量。 (例如 "database.password")
文件
.
|-- Chart.yaml
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- ingress.yaml
| |-- secret.yaml
| `-- service.yaml
`-- values.yaml
values.yaml(截图)
#...
database:
useExternal: no
host: "pgsql"
port: "5432"
name: "myapp"
userName: "myapp_user"
# password shouldn't write here.
# I want to be inject this value to secret.
password: ""
#...
templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: myapp-secrets
type: Opaque
data:
app-database-password: {{required .Values.database.password | b64enc | quote }}
templates/deployment.yaml(片段)
#...
env:
- name: APP_DATABASE_HOST
value: {{ .Values.database.host | quote }}
- name: APP_DATABASE_PORT
value: {{ .Values.database.port | quote }}
- name: APP_DATABASE_NAME
value: {{ .Values.database.name | quote }}
- name: APP_DATABASE_USERNAME
value: {{ .Values.database.username | quote }}
- name: APP_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: myapp-secrets
key: app-database-password
#...
命令
# Retrieve from GCP KMS(prod) or define directly(dev)
DATABASE_PASSWORD=$( ... )
# Deploy.
helm upgrade --install \
-f ./values.yaml \
--set database.password=$DATABASE_PASSWORD \
myapp-dev ./ --dry-run --debug
因错误而失败。
Error: render error in "myapp/templates/secret.yaml": template: myapp/templates/secret.yaml:7:28: executing "myapp/templates/secret.yaml" at <required>: wrong number of args for required: want 2 got 1
似乎 required
函数在解析时静态评估模板文件。
我需要以下事项:
database.password
可通过环境切换,例如 "prod" 或 "stage".
database.password
应该保密。
- 我想在命令执行时使用环境变量设置实际的
database.password
值。
有什么想法吗?
Helm 特定的 required
宏 takes two parameters:值不存在时的错误消息,以及您正在检查的值。此语法还允许它以管道形式使用。在您的示例中,秘密值可以是
app-database-password: {{.Values.database.password | required "database password is required" | b64enc | quote }}
如何在 helm install|upgrade
上强制指定 --set 选项?
在我的例子中,需要一些环境变量。 (例如 "database.password")
文件
.
|-- Chart.yaml
|-- templates
| |-- NOTES.txt
| |-- _helpers.tpl
| |-- deployment.yaml
| |-- ingress.yaml
| |-- secret.yaml
| `-- service.yaml
`-- values.yaml
values.yaml(截图)
#...
database:
useExternal: no
host: "pgsql"
port: "5432"
name: "myapp"
userName: "myapp_user"
# password shouldn't write here.
# I want to be inject this value to secret.
password: ""
#...
templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: myapp-secrets
type: Opaque
data:
app-database-password: {{required .Values.database.password | b64enc | quote }}
templates/deployment.yaml(片段)
#...
env:
- name: APP_DATABASE_HOST
value: {{ .Values.database.host | quote }}
- name: APP_DATABASE_PORT
value: {{ .Values.database.port | quote }}
- name: APP_DATABASE_NAME
value: {{ .Values.database.name | quote }}
- name: APP_DATABASE_USERNAME
value: {{ .Values.database.username | quote }}
- name: APP_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: myapp-secrets
key: app-database-password
#...
命令
# Retrieve from GCP KMS(prod) or define directly(dev)
DATABASE_PASSWORD=$( ... )
# Deploy.
helm upgrade --install \
-f ./values.yaml \
--set database.password=$DATABASE_PASSWORD \
myapp-dev ./ --dry-run --debug
因错误而失败。
Error: render error in "myapp/templates/secret.yaml": template: myapp/templates/secret.yaml:7:28: executing "myapp/templates/secret.yaml" at <required>: wrong number of args for required: want 2 got 1
似乎 required
函数在解析时静态评估模板文件。
我需要以下事项:
database.password
可通过环境切换,例如 "prod" 或 "stage".database.password
应该保密。- 我想在命令执行时使用环境变量设置实际的
database.password
值。
有什么想法吗?
Helm 特定的 required
宏 takes two parameters:值不存在时的错误消息,以及您正在检查的值。此语法还允许它以管道形式使用。在您的示例中,秘密值可以是
app-database-password: {{.Values.database.password | required "database password is required" | b64enc | quote }}