locals { app_version = var.tag monitoring_folder = "${var.persistent_folder}/grafana" dashboard_resource_names = { for folder_name in keys(var.dashboard_folder) : folder_name => "${substr(replace(lower(folder_name), "/[^a-z0-9-]/", "-"), 0, 40)}-${substr(md5(folder_name), 0, 8)}" } dashboard_mount_paths = { for folder_name in keys(var.dashboard_folder) : folder_name => "/var/lib/grafana/dashboards/${local.dashboard_resource_names[folder_name]}" } # Load datasource YAMLs from app root if datasource_folder is provided datasource_files = { for f in fileset(var.datasource_folder, "*.{yml,yaml}") : f => file("${var.datasource_folder}/${f}") } # Load dashboard JSONs from app root folders grouped by Grafana category name dashboard_files_by_category = { for folder_name, folder_path in var.dashboard_folder : folder_name => { for f in fileset(folder_path, "*.json") : f => file("${folder_path}/${f}") } } grafana_dashboard_provider = yamlencode({ apiVersion = 1 providers = [ for folder_name in keys(var.dashboard_folder) : { name = "local-${local.dashboard_resource_names[folder_name]}" orgId = 1 folder = folder_name type = "file" disableDeletion = false updateIntervalSeconds = 30 allowUiUpdates = true options = { path = local.dashboard_mount_paths[folder_name] } } ] }) checksum_datasources = md5(join("", values(local.datasource_files))) checksum_dashboards = md5("${local.grafana_dashboard_provider}${jsonencode(local.dashboard_files_by_category)}") }