Skip to content

Commit 12e02ea

Browse files
committed
grafana: automatic dashboard backup and restore
1 parent bd5866b commit 12e02ea

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

tf/grafana/dashboard.tf

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Always backup to s3://rk-infra/grafana/backup/current/
2+
# Manual copy to s3://rk-infra/grafana/backup/rkYYnet/ when tearing down
3+
# Automaticaly imported from s3://rk-infra/grafana/backup/rkYYnet/ at creation
4+
# Imported dashboards are not overwritten in later tf applies
5+
6+
7+
locals {
8+
grafana_dashboards = {
9+
"bird_rs" = {},
10+
"dhcp" = {},
11+
"dns" = {},
12+
"location" = {},
13+
"overview" = {},
14+
"ping" = {},
15+
"prometheus" = {},
16+
"v6mostly" = {},
17+
}
18+
}
19+
20+
data "aws_s3_object" "dashboard" {
21+
for_each = local.grafana_dashboards
22+
23+
bucket = "rk-infra"
24+
key = "grafana/backup/rk25net/${each.key}.json"
25+
}
26+
27+
resource "grafana_dashboard" "dashboard" {
28+
for_each = local.grafana_dashboards
29+
30+
config_json = replace(data.aws_s3_object.dashboard[each.key].body, "/\\$${DS_PROMETHEUS}/", grafana_data_source.prometheus.uid)
31+
32+
lifecycle {
33+
ignore_changes = [config_json]
34+
}
35+
}
36+
37+
data "grafana_dashboard" "dashboard-backup" {
38+
for_each = local.grafana_dashboards
39+
uid = grafana_dashboard.dashboard[each.key].uid
40+
}
41+
42+
resource "aws_s3_object" "dashboard-backup" {
43+
for_each = local.grafana_dashboards
44+
45+
bucket = "rk-infra"
46+
key = "grafana/backup/current/${each.key}.json"
47+
48+
content = replace(data.grafana_dashboard.dashboard-backup[each.key].config_json, "/\"uid\":\"${grafana_data_source.prometheus.uid}\"/", "\"uid\":\"$${DS_PROMETHEUS}\"")
49+
content_type = "application/json"
50+
}

0 commit comments

Comments
 (0)