refactor: IRM config moved to irm/escalation.yaml
цепочки эскалации описаны в yaml, vault-метки (vault:key) подставляются через locals.tf
This commit is contained in:
30
environments/dev/adibrov/irm/escalation.yaml
Normal file
30
environments/dev/adibrov/irm/escalation.yaml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# Цепочки эскалации Grafana IRM для окружения dev/adibrov
|
||||||
|
#
|
||||||
|
# Как найти ID:
|
||||||
|
# Пользователь: Grafana IRM → Users → ID в колонке
|
||||||
|
# Расписание: Grafana IRM → Schedules → ID из URL
|
||||||
|
# Группа: Grafana IRM → User groups → ID из URL
|
||||||
|
#
|
||||||
|
# Типы шагов: notify_persons, notify_on_call_from_schedule,
|
||||||
|
# notify_user_group, wait, repeat_escalation
|
||||||
|
|
||||||
|
chains:
|
||||||
|
- name: infra-default
|
||||||
|
steps:
|
||||||
|
# Шаг 1: уведомить дежурного
|
||||||
|
- type: notify_persons
|
||||||
|
persons_to_notify:
|
||||||
|
- vault:irm_user_adibrov
|
||||||
|
|
||||||
|
# Шаг 2: ждём 5 минут
|
||||||
|
- type: wait
|
||||||
|
duration_seconds: 300
|
||||||
|
|
||||||
|
# Шаг 3: повторный важный звонок
|
||||||
|
- type: notify_persons
|
||||||
|
persons_to_notify:
|
||||||
|
- vault:irm_user_adibrov
|
||||||
|
important: true
|
||||||
|
|
||||||
|
# Шаг 4: повторяем цепочку с начала
|
||||||
|
- type: repeat_escalation
|
||||||
@ -5,28 +5,26 @@ locals {
|
|||||||
"X-Disable-Provenance" = var.disable_provenance ? "true" : "false"
|
"X-Disable-Provenance" = var.disable_provenance ? "true" : "false"
|
||||||
}
|
}
|
||||||
|
|
||||||
# IRM escalation chains
|
# IRM: читаем конфигурацию из irm/escalation.yaml
|
||||||
# ID пользователей/расписаний хранятся в Vault: app/groups/monitoring/grafana/dev/ext
|
# Метки вида "vault:key_name" заменяются значениями из Vault (secret_ext)
|
||||||
|
_irm_raw = yamldecode(file("${path.module}/irm/escalation.yaml"))
|
||||||
|
_irm_ext = data.vault_kv_secret_v2.secret_ext.data
|
||||||
|
|
||||||
irm_escalation_chains = [
|
irm_escalation_chains = [
|
||||||
{
|
for chain in local._irm_raw.chains : {
|
||||||
name = "infra-default"
|
name = chain.name
|
||||||
|
team_id = try(chain.team_id, null)
|
||||||
steps = [
|
steps = [
|
||||||
{
|
for step in chain.steps : merge(step, {
|
||||||
type = "notify_persons"
|
persons_to_notify = try([
|
||||||
persons_to_notify = [data.vault_kv_secret_v2.secret_ext.data["irm_user_adibrov"]]
|
for p in step.persons_to_notify :
|
||||||
},
|
startswith(p, "vault:") ? local._irm_ext[trimprefix(p, "vault:")] : p
|
||||||
{
|
], null)
|
||||||
type = "wait"
|
persons_to_notify_next_each_time = try([
|
||||||
duration_seconds = 300
|
for p in step.persons_to_notify_next_each_time :
|
||||||
},
|
startswith(p, "vault:") ? local._irm_ext[trimprefix(p, "vault:")] : p
|
||||||
{
|
], null)
|
||||||
type = "notify_persons"
|
})
|
||||||
persons_to_notify = [data.vault_kv_secret_v2.secret_ext.data["irm_user_adibrov"]]
|
|
||||||
important = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "repeat_escalation"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user