50 lines
2.6 KiB
Terraform
50 lines
2.6 KiB
Terraform
|
|
locals {
|
||
|
|
# Create a map of groups by dashboard_alert_group_name for parent lookup
|
||
|
|
groups_by_name = {
|
||
|
|
for group in var.groups : group.dashboard_alert_group_name => group
|
||
|
|
}
|
||
|
|
|
||
|
|
# Helper function to extract parent folder name and child folder name
|
||
|
|
# If dashboard_alert_group_name contains "/", split it into parent and child
|
||
|
|
folder_structure = {
|
||
|
|
for group in var.groups : group.dashboard_alert_group_name => {
|
||
|
|
group = group
|
||
|
|
parts = split("/", group.dashboard_alert_group_name)
|
||
|
|
has_parent = length(split("/", group.dashboard_alert_group_name)) > 1
|
||
|
|
parent_folder_name = length(split("/", group.dashboard_alert_group_name)) > 1 ? join("/", slice(split("/", group.dashboard_alert_group_name), 0, length(split("/", group.dashboard_alert_group_name)) - 1)) : null
|
||
|
|
folder_title = length(split("/", group.dashboard_alert_group_name)) > 1 ? element(split("/", group.dashboard_alert_group_name), length(split("/", group.dashboard_alert_group_name)) - 1) : group.dashboard_alert_group_name
|
||
|
|
# Get parent folder UID from parent group's folder_uid
|
||
|
|
parent_folder_uid = length(split("/", group.dashboard_alert_group_name)) > 1 ? try(local.groups_by_name[join("/", slice(split("/", group.dashboard_alert_group_name), 0, length(split("/", group.dashboard_alert_group_name)) - 1))].folder_uid, null) : null
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Group folders by whether they should keep manual changes or be protected from destruction
|
||
|
|
folders_ignore_only = {
|
||
|
|
for group_name, folder_info in local.folder_structure : group_name => folder_info
|
||
|
|
if lookup(folder_info.group, "keep_manual_changes", false) && !lookup(folder_info.group, "prevent_destroy_on_recreate", false)
|
||
|
|
}
|
||
|
|
|
||
|
|
folders_protect_only = {
|
||
|
|
for group_name, folder_info in local.folder_structure : group_name => folder_info
|
||
|
|
if !lookup(folder_info.group, "keep_manual_changes", false) && lookup(folder_info.group, "prevent_destroy_on_recreate", false)
|
||
|
|
}
|
||
|
|
|
||
|
|
folders_ignore_and_protect = {
|
||
|
|
for group_name, folder_info in local.folder_structure : group_name => folder_info
|
||
|
|
if lookup(folder_info.group, "keep_manual_changes", false) && lookup(folder_info.group, "prevent_destroy_on_recreate", false)
|
||
|
|
}
|
||
|
|
|
||
|
|
folders_standard = {
|
||
|
|
for group_name, folder_info in local.folder_structure : group_name => folder_info
|
||
|
|
if !lookup(folder_info.group, "keep_manual_changes", false) && !lookup(folder_info.group, "prevent_destroy_on_recreate", false)
|
||
|
|
}
|
||
|
|
|
||
|
|
# Create a map of all folders for parent UID lookup
|
||
|
|
all_folders = merge(
|
||
|
|
local.folders_ignore_and_protect,
|
||
|
|
local.folders_ignore_only,
|
||
|
|
local.folders_protect_only,
|
||
|
|
local.folders_standard
|
||
|
|
)
|
||
|
|
}
|