如何通过--set选项设置模板中的“必需”值?

时间:2018-10-05 08:57:58

标签: kubernetes kubernetes-helm

如何在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可以通过env(例如“ prod”或“ stage”)进行切换。
  • database.password应该保密。
  • 我想在命令执行时使用env vars设置实际的database.password值。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

特定于Helm的requiredtakes two parameters:如果不存在该值以及您要检查的值,则会出现错误消息。此语法还允许以管道形式使用它。在您的示例中,秘密值可能是

app-database-password: {{.Values.database.password | required "database password is required" | b64enc | quote }}