Terraform examples

This commit is contained in:
Innokentii Konstantinov 2022-08-11 14:32:39 +05:00
parent 83d5ccb95c
commit 5694dc2bd8
3 changed files with 223 additions and 0 deletions

View file

@ -0,0 +1,42 @@
terraform {
required_providers {
grafana = {
source = "grafana/grafana"
version = ">= 1.22.0"
}
}
}
provider "grafana" {
alias = "oncall"
oncall_access_token = <YOUR_API_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
}

View file

@ -0,0 +1,106 @@
terraform {
required_providers {
grafana = {
source = "grafana/grafana"
version = ">= 1.22.0"
}
}
}
provider "grafana" {
alias = "oncall"
oncall_access_token = <YOUR_API_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
}

View file

@ -0,0 +1,75 @@
terraform {
required_providers {
grafana = {
source = "grafana/grafana"
version = ">= 1.22.0"
}
}
}
provider "grafana" {
alias = "oncall"
oncall_access_token = <YOUR_API_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
}