From 5694dc2bd8bc826f68ee4f69fc50041338c9b0cb Mon Sep 17 00:00:00 2001 From: Innokentii Konstantinov Date: Thu, 11 Aug 2022 14:32:39 +0500 Subject: [PATCH] Terraform examples --- examples/terraform/basic.tf | 42 +++++++++++ examples/terraform/routes.tf | 106 +++++++++++++++++++++++++++ examples/terraform/shift_schedule.tf | 75 +++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 examples/terraform/basic.tf create mode 100644 examples/terraform/routes.tf create mode 100644 examples/terraform/shift_schedule.tf diff --git a/examples/terraform/basic.tf b/examples/terraform/basic.tf new file mode 100644 index 00000000..6c33884d --- /dev/null +++ b/examples/terraform/basic.tf @@ -0,0 +1,42 @@ +terraform { + required_providers { + grafana = { + source = "grafana/grafana" + version = ">= 1.22.0" + } + } +} + +provider "grafana" { + alias = "oncall" + oncall_access_token = +} + +data "grafana_oncall_user" "ikonstantinov" { + provider = grafana.oncall + username = "ikonstantinov" +} + +resource "grafana_oncall_integration" "prod_alertmanager" { + provider = grafana.oncall + name = "Prod AM" + type = "alertmanager" + default_route { + escalation_chain_id = grafana_oncall_escalation_chain.default.id + } +} + +resource "grafana_oncall_escalation_chain" "default" { + provider = grafana.oncall + name = "default" +} + +resource "grafana_oncall_escalation" "notify_me_step" { + provider = grafana.oncall + escalation_chain_id = grafana_oncall_escalation_chain.default.id + type = "notify_persons" + persons_to_notify = [ + data.grafana_oncall_user.ikonstantinov.id + ] + position = 0 +} \ No newline at end of file diff --git a/examples/terraform/routes.tf b/examples/terraform/routes.tf new file mode 100644 index 00000000..fdbb81f1 --- /dev/null +++ b/examples/terraform/routes.tf @@ -0,0 +1,106 @@ +terraform { + required_providers { + grafana = { + source = "grafana/grafana" + version = ">= 1.22.0" + } + } +} + +provider "grafana" { + alias = "oncall" + oncall_access_token = +} + +// Users +data "grafana_oncall_user" "ikonstantinov" { + provider = grafana.oncall + username = "ikonstantinov" +} + +data "grafana_oncall_user" "mkukuy" { + provider = grafana.oncall + username = "mkukuy" +} + +// Schedule +resource "grafana_oncall_schedule" "primary" { + provider = grafana.oncall + name = "Primary" + type = "calendar" + time_zone = "UTC" + shifts = [ + grafana_oncall_on_call_shift.week_shift.id + ] +} + +resource "grafana_oncall_on_call_shift" "week_shift" { + provider = grafana.oncall + name = "Week shift" + type = "rolling_users" + start = "2022-06-01T00:00:00" + duration = 60 * 60 * 24 // 24 hours + frequency = "weekly" + by_day = ["MO", "TU", "WE", "TH", "FR", "SA", "SU"] + week_start = "MO" + rolling_users = [ + [data.grafana_oncall_user.ikonstantinov.id], + [data.grafana_oncall_user.mkukuy.id] + ] + time_zone = "UTC" +} + +// Prod Alertmanager Integration +resource "grafana_oncall_integration" "prod_alertmanager" { + provider = grafana.oncall + name = "Prod AM" + type = "alertmanager" + default_route { + escalation_chain_id = grafana_oncall_escalation_chain.default.id + } +} + +// Routes +resource "grafana_oncall_route" "critical_route" { + provider = grafana.oncall + integration_id = grafana_oncall_integration.prod_alertmanager.id + escalation_chain_id = grafana_oncall_escalation_chain.critical.id + routing_regex = "\"severity\": \"critical\"" + position = 0 +} + +// Default escalation chain +resource "grafana_oncall_escalation_chain" "default" { + provider = grafana.oncall + name = "default" +} + +resource "grafana_oncall_escalation" "wait" { + provider = grafana.oncall + escalation_chain_id = grafana_oncall_escalation_chain.default.id + type = "wait" + duration = 60 * 5 + position = 0 +} + +resource "grafana_oncall_escalation" "notify_schedule" { + provider = grafana.oncall + escalation_chain_id = grafana_oncall_escalation_chain.default.id + type = "notify_on_call_from_schedule" + notify_on_call_from_schedule = grafana_oncall_schedule.primary.id + position = 1 +} + +// Critical escalation chain +resource "grafana_oncall_escalation_chain" "critical" { + provider = grafana.oncall + name = "critical" +} + +resource "grafana_oncall_escalation" "notify_schedule_critical" { + provider = grafana.oncall + escalation_chain_id = grafana_oncall_escalation_chain.critical.id + type = "notify_on_call_from_schedule" + notify_on_call_from_schedule = grafana_oncall_schedule.primary.id + position = 0 +} \ No newline at end of file diff --git a/examples/terraform/shift_schedule.tf b/examples/terraform/shift_schedule.tf new file mode 100644 index 00000000..9b2eec37 --- /dev/null +++ b/examples/terraform/shift_schedule.tf @@ -0,0 +1,75 @@ +terraform { + required_providers { + grafana = { + source = "grafana/grafana" + version = ">= 1.22.0" + } + } +} + +provider "grafana" { + alias = "oncall" + oncall_access_token = +} + +// Users +data "grafana_oncall_user" "ikonstantinov" { + provider = grafana.oncall + username = "ikonstantinov" +} + +data "grafana_oncall_user" "mkukuy" { + provider = grafana.oncall + username = "mkukuy" +} + +// Schedule +resource "grafana_oncall_schedule" "primary" { + provider = grafana.oncall + name = "Primary" + type = "calendar" + time_zone = "UTC" + shifts = [ + grafana_oncall_on_call_shift.week_shift.id + ] +} + +resource "grafana_oncall_on_call_shift" "week_shift" { + provider = grafana.oncall + name = "Week shift" + type = "rolling_users" + start = "2022-06-01T00:00:00" + duration = 60 * 60 * 24 // 24 hours + frequency = "weekly" + by_day = ["MO", "TU", "WE", "TH", "FR", "SA", "SU"] + week_start = "MO" + rolling_users = [ + [data.grafana_oncall_user.ikonstantinov.id], + [data.grafana_oncall_user.mkukuy.id] + ] + time_zone = "UTC" +} + +// Prod Alertmanager Integration +resource "grafana_oncall_integration" "prod_alertmanager" { + provider = grafana.oncall + name = "Prod AM" + type = "alertmanager" + default_route { + escalation_chain_id = grafana_oncall_escalation_chain.default.id + } +} + +// Default escalation chain +resource "grafana_oncall_escalation_chain" "default" { + provider = grafana.oncall + name = "default" +} + +resource "grafana_oncall_escalation" "notify_schedule" { + provider = grafana.oncall + escalation_chain_id = grafana_oncall_escalation_chain.default.id + type = "notify_on_call_from_schedule" + notify_on_call_from_schedule = grafana_oncall_schedule.primary.id + position = 0 +} \ No newline at end of file