iac/apps/issues/d8-ugmk-prod/production-configmap.yaml
emelinda f22d5cc773 **Update d8-ugmk-prod configurations to fix service references and ensure proper workflow and API integration**
- Replace incorrect `WORKFLOWS_HOST` and `WORKFLOWS_URL` references across multiple YAML files to point to `backend-svc.processing.svc.cluster.local`.
- Update `DOCUMENTATIONS_URL` to use the accurate service name `backend-api-svc.documentations.svc.cluster.local`.
- Adjust `SAREX_API` and related settings for consistency using `https://sarex.uralmine.com`.
- Refactor `production-configmap.yaml` to align environment variable overrides and remove obsolete hardcoded values.
- Resolve key INFRA-3005 issues to prevent Excel export and notification failures caused by invalid DNS and configuration.
2026-10-20 18:01:28 +03:00

182 lines
7.9 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.

---
# ВНИМАНИЕ: data["production.py"] — одна строка, kustomize заменяет её ЦЕЛИКОМ,
# поэтому здесь продублировано всё содержимое из
# apps/issues/base/production-configmap.yaml (та же ловушка, что с envs).
#
# Зачем нужен этот патч:
# production.py делает `from .base import *` (там всё через os.getenv), а затем
# переприсваивает часть значений ХАРДКОДОМ — поэтому для этих переменных
# ConfigMap ПОБЕЖДАЕТ env из HelmRelease, и правка env в оверлее
# backend-s3.yaml/celery-s3.yaml сама по себе ни на что не влияет.
#
# INFRA-3005 (основная причина зависания экспорта в Excel):
# в base хардкодом WORKFLOWS_HOST/WORKFLOWS_URL = workflows-api-service.workflow
# — такого сервиса в УГМК нет. celery собирает xlsx, затем
# ExportFinishedNotification → issues/mailing.py:122 делает POST на
# {WORKFLOWS_HOST}/internal/v1/companies/{id}/workflows и падает с
# ConnectionError (Name or service not known) — задача фейлится, фронт не
# получает завершения и крутит загрузку бесконечно. Тем же путём с 26.08
# падали ВСЕ уведомления (send_notification_on_create/on_update/
# to_new_responsible/on_bulk_update, ~1770 ошибок).
#
# Отличия от base:
# - WORKFLOWS_HOST / WORKFLOWS_URL → backend-svc.processing (через os.getenv,
# чтобы env из оверлея снова начал работать)
# - SAREX_API → https://sarex.uralmine.com (в base зашит https://srx.wb.ru)
# - CORS/CSRF origins → https://sarex.uralmine.com (в base только lk.srx.wb.ru)
# - убраны хардкоды KAFKA_USERNAME/KAFKA_PASSWORD/DJANGO_TOKEN и чужой
# дефолт KAFKA_HOST: в УГМК всё это приходит из Vault
# (см. podAnnotations в backend-s3.yaml / celery-s3.yaml / kafka-app.yaml)
# - BASE_AERO_URL оставлен внутренним — он server-to-server
apiVersion: v1
kind: ConfigMap
metadata:
name: production-configmap
namespace: issues
data:
production.py: |
from datetime import timedelta
import os
from .base import *
# DEBUG SETTINGS START
# -----------------------------------------------------------------------------
DEBUG = True
# -----------------------------------------------------------------------------
TEST_MODE = False
# SECRETS SETTINGS START
# -----------------------------------------------------------------------------
SECRET_KEY = "FromToMuchLoveOfLiving" # Delete after Test
# -----------------------------------------------------------------------------
DJANGO_TOKEN = os.getenv("DJANGO_TOKEN")
# ALLOWED HOSTS START
# -----------------------------------------------------------------------------
ALLOWED_HOSTS = ["*"]
# -----------------------------------------------------------------------------
# APPS SETTINGS START
# -----------------------------------------------------------------------------
# INSTALLED_APPS += [
# "django_extensions",
# ]
# -----------------------------------------------------------------------------
# DEBUG SETTINGS START
# -----------------------------------------------------------------------------
DEBUG = False
# -----------------------------------------------------------------------------
REVIEW_HOST='http://backend-svc.flows.svc.cluster.local:80'
# -----------------------------------------------------------------------------
# EXTERNAL SERVICES END
# INFRA-3005: в base здесь хардкод workflows-api-service.workflow — такого
# сервиса в УГМК нет (DNS: "Name or service not known"), из-за чего падал
# POST {WORKFLOWS_HOST}/internal/v1/companies/{id}/workflows в
# issues/mailing.py:122 (WorkflowsMailer) — а это и рассылка уведомлений,
# и финальный шаг celery-задачи экспорта в Excel.
# В УГМК workflows (processing) живёт как backend-svc в namespace processing.
WORKFLOWS_HOST = os.getenv("WORKFLOWS_HOST", "http://backend-svc.processing.svc.cluster.local:80")
WORKFLOWS_URL = os.getenv("WORKFLOWS_URL", "http://backend-svc.processing.svc.cluster.local:80")
# backend-api-svc — реальное имя сервиса documentations (base/api.yaml:74).
DOCUMENTATIONS_URL = "http://backend-api-svc.documentations.svc.cluster.local:80"
RESOURCES_API_HOST = os.getenv("RESOURCES_API_HOST", default="http://resources-service.resources.svc.cluster:8000")
KAFKA_HOST = os.getenv("KAFKA_HOST")
KAFKA_USERNAME = os.getenv("KAFKA_USERNAME")
KAFKA_PASSWORD = os.getenv("KAFKA_PASSWORD")
KAFKA_SSL_CAFILE = os.getenv("KAFKA_SSL_CAFILE", "/usr/local/share/ca-certificates/kafka.crt")
KAFKA_EAV_ASSETS_TOPIC = os.getenv("KAFKA_EAV_ASSETS_TOPIC", "sarex")
KAFKA_ISSUES_TOPIC = os.getenv("KAFKA_ISSUES_TOPIC", "sarex-issues")
USE_ASYNC_FUNCTIONS = True
USE_NOTIFICATIONS = True
# JWT SETTINGS START
if not os.environ.get("JWT_PRIVATE_KEY"):
os.environ["JWT_PRIVATE_KEY"] = _read_secret_file("/vault/secrets/django-jwt-private")
if not os.environ.get("JWT_PUBLIC_KEY"):
os.environ["JWT_PUBLIC_KEY"] = _read_secret_file("/vault/secrets/django-jwt-public")
# ---------------------------------------------------------------------------------------------------------------------
SIMPLE_JWT_ISSUER = os.getenv("SIMPLE_JWT_ISSUER", default="default_issuer")
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=5),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
"ROTATE_REFRESH_TOKENS": False,
"UPDATE_LAST_LOGIN": False,
"ALGORITHM": "RS512",
"SIGNING_KEY": os.getenv("JWT_PRIVATE_KEY", default="").replace("\\n", "\n"),
"VERIFYING_KEY": os.getenv("JWT_PUBLIC_KEY").replace("\\n", "\n"),
"AUDIENCE": None,
"ISSUER": SIMPLE_JWT_ISSUER,
"AUTH_HEADER_TYPES": ("Bearer",),
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
"USER_ID_FIELD": "id",
"USER_ID_CLAIM": "user_id",
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
"TOKEN_TYPE_CLAIM": "token_type",
"JTI_CLAIM": "jti",
"SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp",
"SLIDING_TOKEN_LIFETIME": timedelta(minutes=5),
"SLIDING_TOKEN_REFRESH_LIFETIME": timedelta(days=1),
}
# ---------------------------------------------------------------------------------------------------------------------
CORS_ALLOWED_ORIGINS = [
"https://sarex.uralmine.com",
]
CORS_TRUSTED_ORIGINS = [
"https://sarex.uralmine.com",
]
CSRF_TRUSTED_ORIGINS = [
"https://sarex.uralmine.com",
]
CORS_ALLOW_ALL_ORIGINS = True
ENABLE_MAILGUN=False
SMTP_PORT=465
SMTP_HOST="mail.rwb.ru"
EMAIL_FROM="sarex@rwb.ru"
CORS_ALLOW_METHODS = [
"DELETE",
"GET",
"OPTIONS",
"PATCH",
"POST",
"PUT",
]
SAREX_API = os.getenv("SAREX_API", "https://sarex.uralmine.com")
AERO_PUBLIC_HOST = os.getenv("AERO_PUBLIC_HOST", default=SAREX_API)
BASE_AERO_URL = "http://backend-svc.django.svc.cluster.local:80"
ENVIRONMENT = "production"
SESSION_COOKIE_NAME = "issues-sessionid"
CSRF_COOKIE_NAME = "issues-csrftoken"
STATIC_URL = "/static/"
STORAGES = {
'default': {
'BACKEND': "storages.backends.s3boto3.S3Boto3Storage",
},
'staticfiles': {
# Leave whatever setting you already have here, e.g.:
'BACKEND': "storages.backends.s3boto3.S3Boto3Storage",
}
}