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}" dashboard_json = jsondecode(file("${group.dashboard_path_if_exist}/${file}")) dashboard_uid = substr( replace( lower( "${try(jsondecode(file("${group.dashboard_path_if_exist}/${file}")).uid, trimsuffix(basename(file), ".json"))}_${group.dashboard_path_if_exist}/${file}" ), "/[^a-z0-9_-]/", "_" ), 0, var.dashboard_uid_max_length ) 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}" dashboard_json = jsondecode(file("${group.dashboard_path_if_exist}/${file}")) dashboard_uid = substr( replace( lower( "${try(jsondecode(file("${group.dashboard_path_if_exist}/${file}")).uid, trimsuffix(basename(file), ".json"))}_${group.dashboard_path_if_exist}/${file}" ), "/[^a-z0-9_-]/", "_" ), 0, var.dashboard_uid_max_length ) 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}" dashboard_json = jsondecode(file("${group.dashboard_path_if_exist}/${file}")) dashboard_uid = substr( replace( lower( "${try(jsondecode(file("${group.dashboard_path_if_exist}/${file}")).uid, trimsuffix(basename(file), ".json"))}_${group.dashboard_path_if_exist}/${file}" ), "/[^a-z0-9_-]/", "_" ), 0, var.dashboard_uid_max_length ) 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}" dashboard_json = jsondecode(file("${group.dashboard_path_if_exist}/${file}")) dashboard_uid = substr( replace( lower( "${try(jsondecode(file("${group.dashboard_path_if_exist}/${file}")).uid, trimsuffix(basename(file), ".json"))}_${group.dashboard_path_if_exist}/${file}" ), "/[^a-z0-9_-]/", "_" ), 0, var.dashboard_uid_max_length ) 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) ]) }