Add dashboard UID auto-generation and Gitea CI workflow
This commit is contained in:
53
environments/modules/grafana_dashboard_xt5/locals.tf
Normal file
53
environments/modules/grafana_dashboard_xt5/locals.tf
Normal file
@ -0,0 +1,53 @@
|
||||
locals {
|
||||
# Dashboards with both manual changes allowed and destroy protection
|
||||
dashboards_ignore_and_protect = flatten([
|
||||
for group in var.groups : [
|
||||
for file in(group.dashboard_path_if_exist != null ? fileset(group.dashboard_path_if_exist, "*.json") : []) : {
|
||||
group_name = group.dashboard_alert_group_name
|
||||
file_path = "${group.dashboard_path_if_exist}/${file}"
|
||||
folder_id = lookup(var.folder_ids, group.dashboard_alert_group_name, null)
|
||||
keep_manual_changes = lookup(group, "keep_manual_changes", false)
|
||||
prevent_destroy_on_recreate = lookup(group, "prevent_destroy_on_recreate", false)
|
||||
}
|
||||
] if lookup(group, "keep_manual_changes", false) && lookup(group, "prevent_destroy_on_recreate", false)
|
||||
])
|
||||
|
||||
# Dashboards with only manual changes allowed
|
||||
dashboards_ignore_only = flatten([
|
||||
for group in var.groups : [
|
||||
for file in(group.dashboard_path_if_exist != null ? fileset(group.dashboard_path_if_exist, "*.json") : []) : {
|
||||
group_name = group.dashboard_alert_group_name
|
||||
file_path = "${group.dashboard_path_if_exist}/${file}"
|
||||
folder_id = lookup(var.folder_ids, group.dashboard_alert_group_name, null)
|
||||
keep_manual_changes = lookup(group, "keep_manual_changes", false)
|
||||
prevent_destroy_on_recreate = lookup(group, "prevent_destroy_on_recreate", false)
|
||||
}
|
||||
] if lookup(group, "keep_manual_changes", false) && !lookup(group, "prevent_destroy_on_recreate", false)
|
||||
])
|
||||
|
||||
# Dashboards with only destroy protection
|
||||
dashboards_protect_only = flatten([
|
||||
for group in var.groups : [
|
||||
for file in(group.dashboard_path_if_exist != null ? fileset(group.dashboard_path_if_exist, "*.json") : []) : {
|
||||
group_name = group.dashboard_alert_group_name
|
||||
file_path = "${group.dashboard_path_if_exist}/${file}"
|
||||
folder_id = lookup(var.folder_ids, group.dashboard_alert_group_name, null)
|
||||
keep_manual_changes = lookup(group, "keep_manual_changes", false)
|
||||
prevent_destroy_on_recreate = lookup(group, "prevent_destroy_on_recreate", false)
|
||||
}
|
||||
] if !lookup(group, "keep_manual_changes", false) && lookup(group, "prevent_destroy_on_recreate", false)
|
||||
])
|
||||
|
||||
# Standard dashboards without any special lifecycle management
|
||||
dashboards_standard = flatten([
|
||||
for group in var.groups : [
|
||||
for file in(group.dashboard_path_if_exist != null ? fileset(group.dashboard_path_if_exist, "*.json") : []) : {
|
||||
group_name = group.dashboard_alert_group_name
|
||||
file_path = "${group.dashboard_path_if_exist}/${file}"
|
||||
folder_id = lookup(var.folder_ids, group.dashboard_alert_group_name, null)
|
||||
keep_manual_changes = lookup(group, "keep_manual_changes", false)
|
||||
prevent_destroy_on_recreate = lookup(group, "prevent_destroy_on_recreate", false)
|
||||
}
|
||||
] if !lookup(group, "keep_manual_changes", false) && !lookup(group, "prevent_destroy_on_recreate", false)
|
||||
])
|
||||
}
|
||||
52
environments/modules/grafana_dashboard_xt5/main.tf
Normal file
52
environments/modules/grafana_dashboard_xt5/main.tf
Normal file
@ -0,0 +1,52 @@
|
||||
# Dashboards with both manual changes allowed and destroy protection
|
||||
resource "grafana_dashboard" "dashboards_ignore_and_protect" {
|
||||
for_each = { for d in local.dashboards_ignore_and_protect : d.file_path => d }
|
||||
|
||||
config_json = file(each.value.file_path)
|
||||
folder = each.value.folder_id
|
||||
org_id = var.org_id
|
||||
overwrite = true
|
||||
|
||||
lifecycle {
|
||||
prevent_destroy = true
|
||||
ignore_changes = [config_json]
|
||||
}
|
||||
}
|
||||
|
||||
# Dashboards with only manual changes allowed
|
||||
resource "grafana_dashboard" "dashboards_ignore_only" {
|
||||
for_each = { for d in local.dashboards_ignore_only : d.file_path => d }
|
||||
|
||||
config_json = file(each.value.file_path)
|
||||
folder = each.value.folder_id
|
||||
org_id = var.org_id
|
||||
overwrite = true
|
||||
|
||||
lifecycle {
|
||||
ignore_changes = [config_json]
|
||||
}
|
||||
}
|
||||
|
||||
# Dashboards with only destroy protection
|
||||
resource "grafana_dashboard" "dashboards_protect_only" {
|
||||
for_each = { for d in local.dashboards_protect_only : d.file_path => d }
|
||||
|
||||
config_json = file(each.value.file_path)
|
||||
folder = each.value.folder_id
|
||||
org_id = var.org_id
|
||||
overwrite = true
|
||||
|
||||
lifecycle {
|
||||
prevent_destroy = true
|
||||
}
|
||||
}
|
||||
|
||||
# Standard dashboards without any special lifecycle management
|
||||
resource "grafana_dashboard" "dashboards_standard" {
|
||||
for_each = { for d in local.dashboards_standard : d.file_path => d }
|
||||
|
||||
config_json = file(each.value.file_path)
|
||||
folder = each.value.folder_id
|
||||
org_id = var.org_id
|
||||
overwrite = true
|
||||
}
|
||||
9
environments/modules/grafana_dashboard_xt5/outputs.tf
Normal file
9
environments/modules/grafana_dashboard_xt5/outputs.tf
Normal file
@ -0,0 +1,9 @@
|
||||
output "dashboard_ids" {
|
||||
description = "IDs of the created Grafana dashboards"
|
||||
value = merge(
|
||||
{ for name, dashboard in grafana_dashboard.dashboards_ignore_and_protect : name => dashboard.id },
|
||||
{ for name, dashboard in grafana_dashboard.dashboards_ignore_only : name => dashboard.id },
|
||||
{ for name, dashboard in grafana_dashboard.dashboards_protect_only : name => dashboard.id },
|
||||
{ for name, dashboard in grafana_dashboard.dashboards_standard : name => dashboard.id }
|
||||
)
|
||||
}
|
||||
21
environments/modules/grafana_dashboard_xt5/variables.tf
Normal file
21
environments/modules/grafana_dashboard_xt5/variables.tf
Normal file
@ -0,0 +1,21 @@
|
||||
variable "org_id" {
|
||||
description = "ID of the organization for dashboards"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "groups" {
|
||||
description = "List of alert groups with their definitions and data sources"
|
||||
type = list(object({
|
||||
dashboard_alert_group_name = string
|
||||
alert_definitions_path = string
|
||||
dashboard_path_if_exist = optional(string, null)
|
||||
keep_manual_changes = optional(bool, false)
|
||||
prevent_destroy_on_recreate = optional(bool, false)
|
||||
alerts_on_datasources_uid = list(string)
|
||||
}))
|
||||
}
|
||||
|
||||
variable "folder_ids" {
|
||||
description = "Mapping of folder IDs for each alert group"
|
||||
type = map(string)
|
||||
}
|
||||
7
environments/modules/grafana_dashboard_xt5/versions.tf
Normal file
7
environments/modules/grafana_dashboard_xt5/versions.tf
Normal file
@ -0,0 +1,7 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
grafana = {
|
||||
source = "grafana/grafana"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user