# Секреты Helm-чарта

Helm-чарт `gs-ctk` может создавать Kubernetes Secret'ы при включении параметра `addSecrets`.

Для новых конфигураций scheduler private key используйте `stringData`. Поле `data` сохраняется для обратной совместимости.

Для `scheduler-token-secret` в `stringData.private.key` указывается исходное содержимое ключа. При использовании
legacy-поля `data.private.key` значение должно быть в формате base64, как это принято в Kubernetes Secret.

## Пример в `values.yaml`

```yaml
# Включить добавление секретов через values.yaml
addSecrets: true

# Настройка секретов по умолчанию
secrets:
  gs-admin-auth:
    type: kubernetes.io/basic-auth
    stringData:
      password: admin
      username: admin
  db-user-secret:
    type: kubernetes.io/basic-auth
    stringData:
      password: admin
      username: admin
  scheduler-token-secret:
    stringData:
      private.key: change_me_scheduler_private_key
  secret-haproxy-auth:
    type: kubernetes.io/basic-auth
    stringData:
      username: admin
      password: t0p-Secret
  grafana-admin:
    type: kubernetes.io/basic-auth
    stringData:
      password: admin
      username: admin
  rabbitmq-global:
    type: kubernetes.io/basic-auth
    stringData:
      password: globalrabbitmq
      username: globalrabbitmq
  rabbitmq-admin:
    type: kubernetes.io/basic-auth
    stringData:
      password: admin
      username: admin
  ctk-restapi-secret:
    type: Opaque
    stringData:
      jwt-secret-key: change_me_in_production_min_32_char
      admin-password: admin
      viewer-password: viewer
  prometheus-admin:
    type: kubernetes.io/basic-auth
    stringData:
      password: admin
      username: admin
```

Применить такой файл можно командой:

```bash
helm upgrade gs-ctk ~/nscli/helm_chart -f ./my-values.yaml --set addSecrets=true
```

## Обновление через `helm upgrade`

```bash
helm upgrade gs-ctk . \
  --set addSecrets=true \
  --set-string secrets.gs-admin-auth.stringData.password="admin" \
  --set-string secrets.db-user-secret.stringData.username="dbuser" \
  --set-string secrets.db-user-secret.stringData.password="dbpass" \
  --set-json 'secrets.scheduler-token-secret.stringData={"private.key":"token..."}' \
  --set-string secrets.ctk-restapi-secret.stringData.jwt-secret-key="replace_me_with_32_or_more_chars" \
  --set-string secrets.ctk-restapi-secret.stringData.admin-password="admin" \
  --set-string secrets.ctk-restapi-secret.stringData.viewer-password="viewer"
```

Для `scheduler-token-secret` рекомендуется `--set-json`, так как имя ключа `private.key` содержит точку.

## _helpers.tpl

Для всех секретов, кроме `scheduler-token-secret`, Helm-чарт работает по прежней схеме и просто вставляет их описание
из `values.yaml` в итоговый `Secret`.

Отдельный helper `gs-ctk.secretSpec` используется только для `scheduler-token-secret`.

Его задача одна: если одновременно заданы `data` и `stringData` с одинаковым ключом `private.key`, chart сохраняет
значение из `data`. Это нужно, чтобы старые сценарии с `secrets.scheduler-token-secret.data` продолжали работать после
появления дефолтного `stringData`.

## Обратная совместимость

Если в уже существующих сценариях используется `data`, Helm-чарт продолжит принимать такой формат:

```bash
helm upgrade gs-ctk . \
  --set addSecrets=true \
  --set-json 'secrets.scheduler-token-secret.data={"private.key":"token..."}'
```

Если для одного и того же ключа заданы и `data`, и `stringData`, Helm-чарт сохраняет значение из `data`, чтобы не ломать
legacy-сценарии.
