Как установить «обязательное» значение в шаблонах из опции --set? - PullRequest
0 голосов
/ 05 октября 2018

Как принудительно указать параметр --set для helm install|upgrade?

, в моем случае, некоторые обязательные переменные окружения.(например, «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 / deploy.yaml (snip)

#...
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 следует сохранить в секрет.
  • Я хочу установитьфактическое значение database.password с использованием переменных env при выполнении команды.

Есть идеи?

1 Ответ

0 голосов
/ 06 октября 2018

Специфичный для Helm макрос required принимает два параметра : сообщение об ошибке, если значение отсутствует, и значение, которое вы проверяете.Этот синтаксис также позволяет использовать его в форме конвейера.В вашем примере секретное значение может быть

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