- 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.
182 lines
7.9 KiB
YAML
182 lines
7.9 KiB
YAML
---
|
||
# ВНИМАНИЕ: 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",
|
||
}
|
||
}
|