diff --git a/aero/roles/sarex_stack/defaults/main.yml b/aero/roles/sarex_stack/defaults/main.yml index aa31285..1d6da0c 100644 --- a/aero/roles/sarex_stack/defaults/main.yml +++ b/aero/roles/sarex_stack/defaults/main.yml @@ -407,8 +407,20 @@ vault_app_secrets: # # endpoint БЕЗ схемы: протокол задаёт use_ssl. У нас MinIO внутри кластера по # http, поэтому use_ssl: false. - - path: secrets/apps/processing/yc-s3 + # + # Путь ОДИН НА ВСЕ файлы задач: движок подставляет VAULT_MOUNT_PATH в каждую + # аннотацию, меняя только имя ключа. Добавляется файл — добавляется ключ + # СЮДА, с именем ровно как у файла. + - path: secrets/apps/processing/job-files data: + # Basic-токен администратора django. Задача читает файл целиком как JSON + # (run.py: json.load), поэтому здесь именно объект с ключом token, а не + # голая строка. Значение — то же, что у workspaces в DJANGO_BASIC_AUTH: + # base64 от "логин:пароль" учётки, которую заводит роль. + # Без ключа файл рендерится пустым и задача падает на + # json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) + django-auth.json: >- + {"token": "{{ (superuser_name ~ ':' ~ superuser_password) | b64encode }}"} yc-s3-service-account.json: >- {"endpoint": "minio.minio.svc.cluster.local:9000", "bucket_name": "{{ sarex_django_s3_bucket }}", diff --git a/apps/processing/aero/kustomization.yaml b/apps/processing/aero/kustomization.yaml index f893903..9409b10 100644 --- a/apps/processing/aero/kustomization.yaml +++ b/apps/processing/aero/kustomization.yaml @@ -275,14 +275,20 @@ patches: # {{- with secret "" -}} # {{ index .Data.data "yc-s3-service-account.json" }} # Отсюда два следствия: путь пишется в форме чтения KV v2 (с /data/), а в - # секрете обязан быть ключ с именем ФАЙЛА — yc-s3-service-account.json. + # секрете обязан быть ключ с именем ФАЙЛА. + # + # Путь ОДИН НА ВСЕ ФАЙЛЫ, которые движок кладёт в поды задач: он + # подставляет VAULT_MOUNT_PATH в каждую аннотацию, меняя только имя + # ключа. Так, для django-auth аннотация ссылается на этот же путь и ищет + # в нём ключ django-auth.json. Поэтому имя пути нейтральное (job-files), + # а не по имени одного из файлов, — иначе оно врёт о содержимом. # Сам секрет кладёт ansible, vault_app_secrets. - op: add path: /spec/values/services/backend/envs/- value: name: VAULT_MOUNT_PATH value: - _default: secrets/data/apps/processing/yc-s3 + _default: secrets/data/apps/processing/job-files # S3 из Vault, как у api. - op: add