46 lines
1.5 KiB
HCL
46 lines
1.5 KiB
HCL
locals {
|
|
#################################################################
|
|
# 1. Discover & decode alert YAML files from <root>/<alerts_dir>
|
|
#################################################################
|
|
alert_files = fileset(
|
|
"${path.root}/${var.alerts_dir}",
|
|
var.file_pattern
|
|
)
|
|
|
|
decoded_files = [
|
|
for f in local.alert_files :
|
|
yamldecode(file("${path.root}/${var.alerts_dir}/${f}"))
|
|
]
|
|
|
|
#################################################################
|
|
# 2. Flatten: each file may contain multiple groups
|
|
#################################################################
|
|
groups_raw = flatten([
|
|
for doc in local.decoded_files : try(doc.groups, [])
|
|
])
|
|
|
|
#################################################################
|
|
# 3. Merge defaults & convert camelCase → snake_case
|
|
#################################################################
|
|
groups = [
|
|
for g in local.groups_raw : merge(g, {
|
|
uid = try(
|
|
g.uid,
|
|
trim(replace(replace(lower(g.name), " ", "-"), "_", "-"), "-")
|
|
)
|
|
folder_uid = try(try(g.folder_uid, g.folder), var.default_folder_uid)
|
|
interval = try(g.interval, "1m")
|
|
|
|
rules = [
|
|
for r in g.rules : merge(r, {
|
|
data = [
|
|
for d in r.data : merge(d, {
|
|
datasource_uid = try(d.datasourceUid, var.default_datasource_uid)
|
|
relative_time_range = try(d.relativeTimeRange, { from = 600, to = 0 })
|
|
})
|
|
]
|
|
})
|
|
]
|
|
})
|
|
]
|
|
}
|