iac/apps/pm/uralkal/backend.yaml
ivan 9ec172c0f4 uralkal: replicate the vad business-app footprint (36 apps) with uralkal domains
apps/<app>/uralkal mirrors apps/<app>/vad for all 36 apps from
clusters/vad/kustomization.yaml, with domains remapped (not a suffix swap —
vad's sarex-login.vadroad.ru etc. use a different host scheme than uralkal's
login.sarex.local.uralkali.com). Two things are left as explicit
placeholders pending real infra: the Zitadel client_id/org_id
(TBD_URALKAL_ZITADEL_CLIENT_ID, since uralkal's Zitadel has no application
registered yet) and the Kafka CA cert in pm/issues/message-hub/flows
(copied from vad, will need swapping once uralkal's Kafka actually
generates its own CA, same as vad's history).

infrastructure/s3-proxy/uralkal: new component, nginx upstream points at
the single uralkal minio endpoint (10.133.0.245:9000) from terraform,
unlike vad's 4-node list.

clusters/uralkal/kustomization.yaml: wires in s3-proxy + all 36 apps.

infrastructure/istio-config/uralkal/istio-config.yaml: adds the 28
path-routed virtualServices under sarex.local.uralkali.com (mirroring
vad's sarex.vadroad.ru routing, incl. the documentations-api CORS policy)
plus stamp-verification/document-link/s3 on their already-declared hosts.
Pre-existing zitadel/superset/camunda-operate blocks are untouched.

apps/django/vad/backend.yaml: drop a stale explanatory comment (also
removed from the uralkal copy before this commit).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 14:56:17 +03:00

206 lines
6.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# Патч backend для vad.
#
# ВНИМАНИЕ: args — список, kustomize заменяет его ЦЕЛИКОМ (JSON merge patch),
# поэтому здесь продублирован весь скрипт из apps/pm/base/backend.yaml.
# При правке args в base их нужно продублировать и сюда.
# podAnnotations — map, мержится по ключам, поэтому переопределён только
# один ключ agent-inject-template-pm-s3; остальные vault-аннотации берутся из base.
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: backend
namespace: pm
spec:
values:
services:
backend:
image:
name:
_default: cr.yandex/crp3ccidau046kdj8g9q/pm-backend:production_fa0f1551
deployment:
args:
_default:
- |
set -a
[ -f /vault/secrets/pm-db ] && . /vault/secrets/pm-db
[ -f /vault/secrets/pm-rabbitmq ] && . /vault/secrets/pm-rabbitmq
[ -f /vault/secrets/pm-s3 ] && . /vault/secrets/pm-s3
[ -f /vault/secrets/pm-kafka ] && . /vault/secrets/pm-kafka
set +a
python manage.py makemigrations pm --noinput
python manage.py migrate
exec /opt/sarex/entrypoint.sh
envs:
- name: USERS_INTERNAL_HOST
value:
_default: "http://backend-svc.django.svc.cluster.local:80"
- name: CELERY_REDIS_HOST
value:
_default: "redis.pm.svc.cluster.local"
- name: RESOURCES_INTERNAL_HOST
value:
_default: "http://iam-backend.iam.svc.cluster.local:8000"
- name: EAV_HOST
value:
_default: "http://backend-svc.eav.svc.cluster.local:80"
- name: EAV_API_PREFIX
value:
_default: "/api/v0"
- name: EAV_API_PREFIX_V1
value:
_default: "/api/v1"
- name: TRACING_INSECURE
value:
_default: "False"
- name: SERVER_ENABLE_SYNC_RESOURCES
value:
_default: "True"
- name: SERVER_DELETED_TASK_MAX_AGE_DAYS
value:
_default: "1"
- name: SERVER_EXPIRED_TASK_NOTIFICATION_HOUR
value:
_default: "17"
- name: LANG
value:
_default: "C.UTF-8"
- name: LC_ALL
value:
_default: "C.UTF-8"
- name: PYTHONUTF8
value:
_default: "1"
- name: CACHE_SSL
value:
_default: "False"
- name: CACHE_SSL_CA_CERTS
value:
_default: ""
# base: "False". При False CACHE_CLIENT = None (config/settings/base.py:190),
# и GET /api/pm/msp/external-task-info/ падает с
# AttributeError: 'NoneType' object has no attribute 'get' —
# sarex/pm/utils/broker_producer.py:38 дёргает .get() без проверки на None.
- name: CACHE_ENABLE
value:
_default: "True"
# Новые: в base их нет. Дефолт CacheSettings.host — localhost,
# т.е. без них включённый кэш стучится в собственный под.
# Redis разворачивается тут же — apps/pm/vad/redis.yaml.
- name: CACHE_HOST
value:
_default: "redis.pm.svc.cluster.local"
- name: CACHE_PORT
value:
_default: "6379"
- name: CLICKHOUSE_ENABLE
value:
_default: "False"
- name: KAFKA_ENABLE
value:
_default: "True"
- name: KAFKA_BOOTSTRAP_SERVERS
value:
_default: '["kafka-kafka-contour.kafka.svc.cluster.local:9092"]'
- name: KAFKA_SECURITY_PROTOCOL
value:
_default: "SASL_SSL"
- name: KAFKA_SSL_CAFILE
value:
_default: "/usr/local/share/ca-certificates/kafka.crt"
- name: KAFKA_TOPICS
value:
_default: '{"planning": "message-hub-prod"}'
- name: AUTH_PUBLIC_TOKEN_URL
value:
_default: "https://sarex.local.uralkali.com/api/token/public/"
- name: SERVER_HOST
value:
_default: "https://sarex.local.uralkali.com"
- name: SERVER_API_HOST
value:
_default: "https://sarex.local.uralkali.com"
- name: SERVER_DEBUG
value:
_default: "False"
- name: SERVER_ALLOWED_HOSTS
value:
_default: '["*"]'
- name: SERVER_USE_OTEL
value:
_default: "False"
- name: SERVER_VERIFY_SSL
value:
_default: "False"
- name: SERVER_LOG_LEVEL
value:
_default: "INFO"
volumes:
_default:
- name: kafka-ca-cert
mountPath:
_default: /usr/local/share/ca-certificates/kafka.crt
subPath:
_default: kafka.crt
readOnly:
_default: true
configMap:
name:
_default: kafka-ca-cert
items:
- key: kafka.crt
path:
_default: kafka.crt
podAnnotations:
_default:
vault.hashicorp.com/agent-inject-template-pm-s3: |-
{{- with secret "secrets/data/minio/apps/pm" -}}
S3_HOST={{ index .Data.data.client "endpoint" }}
S3_LOGIN={{ index .Data.data "access_key" }}
S3_PASSWORD={{ index .Data.data "secret_key" }}
S3_VERIFY=False
{{- $buckets := index .Data.data "buckets" }}
S3_BUCKET={{ if gt (len $buckets) 0 }}{{ index (index $buckets 0) "name" }}{{ else }}sarex-media-storage{{ end }}
{{- end -}}
vault.hashicorp.com/agent-inject-secret-pm-kafka: secrets/data/kafka/apps/pm
vault.hashicorp.com/agent-inject-template-pm-kafka: |-
{{- with secret "secrets/data/kafka/apps/pm" -}}
KAFKA_SASL_MECHANISM={{ index .Data.data.auth "sasl_mechanism" }}
KAFKA_SASL_PLAIN_USERNAME={{ index .Data.data "username" }}
KAFKA_SASL_PLAIN_PASSWORD={{ index .Data.data "password" }}
{{- end -}}