Processing: один секрет на все файлы задач, добавлен django-auth.json

Следующая задача падала на
  run.py:91  data = json.load(file)
  json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
то есть снова читала пустой файл — на этот раз django-auth.json.

Аннотации пода показали, почему: VAULT_MOUNT_PATH у движка ОДИН НА ВСЕ
файлы. Он подставляет его в каждую аннотацию, меняя только имя ключа:

  agent-inject-file-django-auth:     django-auth.json
  agent-inject-template-django-auth: {{- with secret
                                     "secrets/data/apps/processing/yc-s3" -}}

Ключа django-auth.json в том секрете не было, агент отрендерил пустоту.

Поэтому путь переименован в secrets/apps/processing/job-files: имя yc-s3
описывало один из файлов и врало о содержимом. В секрет добавлен ключ
django-auth.json — объект {"token": "..."}, а не голая строка, потому что
задача читает файл целиком через json.load. Значение то же, что у
workspaces в DJANGO_BASIC_AUTH: base64 от логина и пароля администратора.

Правило на будущее: появился новый файл, который движок кладёт в под
задачи, — добавляется ключ в этот же секрет, с именем ровно как у файла.
This commit is contained in:
emelinda 2026-08-10 01:11:53 +03:00
parent 3640bc8229
commit be205b3b14
2 changed files with 21 additions and 3 deletions

View File

@ -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 }}",

View File

@ -275,14 +275,20 @@ patches:
# {{- with secret "<VAULT_MOUNT_PATH>" -}}
# {{ 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