Compare commits

..

No commits in common. "ba57cf7c0591a2350c471051bb974e27fdbc8f09" and "82171aedfc7814bf9acd947530869a01dd02edba" have entirely different histories.

2 changed files with 29 additions and 36 deletions

View file

@ -164,28 +164,26 @@ jobs:
# бы вовсе — то есть алертинг исчез бы целиком, а не «ушёл не в # бы вовсе — то есть алертинг исчез бы целиком, а не «ушёл не в
# ту тему». # ту тему».
# #
# Значение по умолчанию стоит ЗДЕСЬ, а не в секрете. Номер темы # Откат обязателен: пока METRICS_TELEGRAM_INFRA_TOPIC_ID не
# форума секретом не является: в репозитории уже лежат домены, # прописана на хосте, берём METRICS_TELEGRAM_TOPIC_ID — тогда
# пути на хостах, имена контейнеров и внешние адреса. Зато шаг # поведение остаётся ровно прежним, а не ломается молча.
# «завести секрет руками» — это отказ, который уже случился:
# 27.08 два прогона подряд молча откатились на тему клиентских
# инцидентов, и тема «метрики» осталась пустой при полностью
# зелёном деплое.
#
# Прежний откат на METRICS_TELEGRAM_TOPIC_ID убран намеренно: он
# давал ровно то состояние, ради ухода от которого всё и
# затевалось — весь инфраструктурный поток в теме клиентских
# инцидентов, — и сообщал об этом строкой в логе, которую никто
# не читает. Молчаливое «почти правильно» хуже явной поломки.
#
# Переменная окружения по-прежнему перекрывает значение: переезд
# темы или другой чат решается ею, без правки кода.
INFRA_TOPIC_ID="${METRICS_TELEGRAM_INFRA_TOPIC_ID:-245}"
METRICS_TELEGRAM_INFRA_TOPIC_LINE=" message_thread_id: ${INFRA_TOPIC_ID}"
if [ -n "${METRICS_TELEGRAM_INFRA_TOPIC_ID:-}" ]; then if [ -n "${METRICS_TELEGRAM_INFRA_TOPIC_ID:-}" ]; then
echo "Инфраструктура: тема ${INFRA_TOPIC_ID} из окружения." INFRA_TOPIC_ID="${METRICS_TELEGRAM_INFRA_TOPIC_ID}"
INFRA_TOPIC_IS_FALLBACK=0
else else
echo "Инфраструктура: тема ${INFRA_TOPIC_ID} по умолчанию (METRICS_TELEGRAM_INFRA_TOPIC_ID не задана)." INFRA_TOPIC_ID="${METRICS_TELEGRAM_TOPIC_ID:-}"
INFRA_TOPIC_IS_FALLBACK=1
fi
if [ -n "${INFRA_TOPIC_ID}" ]; then
METRICS_TELEGRAM_INFRA_TOPIC_LINE=" message_thread_id: ${INFRA_TOPIC_ID}"
if [ "${INFRA_TOPIC_IS_FALLBACK}" = "1" ]; then
echo "Инфраструктура: METRICS_TELEGRAM_INFRA_TOPIC_ID не задана — откат на METRICS_TELEGRAM_TOPIC_ID, топик ${INFRA_TOPIC_ID}."
else
echo "Инфраструктура: адресуются в топик ${INFRA_TOPIC_ID}."
fi
else
METRICS_TELEGRAM_INFRA_TOPIC_LINE=""
echo "Инфраструктура: топик не задан — уйдут в общую тему чата."
fi fi
if [ -n "${METRICS_TELEGRAM_ONCALL:-}" ]; then if [ -n "${METRICS_TELEGRAM_ONCALL:-}" ]; then

View file

@ -133,27 +133,22 @@ def test_deploy_computes_whole_line_and_passes_it_to_envsubst() -> None:
) )
def test_infra_topic_has_working_default_and_never_falls_back_to_client_topic() -> None: def test_infra_topic_falls_back_to_client_topic_when_unset() -> None:
"""Тема по умолчанию задана в самом деплое и НЕ откатывается на клиентскую (#3163). """Без METRICS_TELEGRAM_INFRA_TOPIC_ID — откат на METRICS_TELEGRAM_TOPIC_ID (#3163).
Первая половина: без значения по умолчанию разделение тем зависело бы от Разделение тем не должно ломать деплой у тех, кто ещё не прописал новую
ручного шага «завести секрет». Этот шаг уже отказал 27.08 два прогона переменную на хосте: пока её нет, поведение обязано остаться ровно
подряд отработали зелёными, а тема «метрики» осталась пустой. прежним (топик из METRICS_TELEGRAM_TOPIC_ID), а не откатиться в общую тему
чата или сломать рендер конфига.
Вторая половина важнее: откат на METRICS_TELEGRAM_TOPIC_ID запрещён явно.
Он возвращал ровно то состояние, ради ухода от которого всё затевалось
весь инфраструктурный поток в теме клиентских инцидентов, и сообщал об
этом строкой в логе прогона, которую никто не читает.
""" """
text = WORKFLOW.read_text(encoding="utf-8") text = WORKFLOW.read_text(encoding="utf-8")
assert re.search( assert re.search(
r'INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID:-\d+\}"', r'if \[ -n "\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID:-\}" \]; then'
r'[\s\S]*?INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_INFRA_TOPIC_ID\}"'
r'[\s\S]*?else'
r'[\s\S]*?INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_TOPIC_ID:-\}"',
text, text,
), "у инфраструктурной темы нет значения по умолчанию — разделение зависит от ручного шага" ), "нет отката на METRICS_TELEGRAM_TOPIC_ID при незаданной METRICS_TELEGRAM_INFRA_TOPIC_ID"
assert not re.search(
r'INFRA_TOPIC_ID="\$\{METRICS_TELEGRAM_TOPIC_ID',
text,
), "вернулся откат на тему клиентских инцидентов — это и есть исходный дефект"
def test_config_is_validated_before_stack_comes_up() -> None: def test_config_is_validated_before_stack_comes_up() -> None: