diff --git a/terraform/flatten_map/main.tf b/terraform/flatten_map/main.tf new file mode 100644 index 0000000..6e68e60 --- /dev/null +++ b/terraform/flatten_map/main.tf @@ -0,0 +1,24 @@ +locals { + x01 = { this = { for k, v in var.in : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, next = merge([for ki, vi in var.in : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x02 = { this = merge(local.x01.this, { for k, v in local.x01.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x01.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x03 = { this = merge(local.x02.this, { for k, v in local.x02.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x02.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x04 = { this = merge(local.x03.this, { for k, v in local.x03.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x03.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x05 = { this = merge(local.x04.this, { for k, v in local.x04.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x04.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x06 = { this = merge(local.x05.this, { for k, v in local.x05.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x05.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x07 = { this = merge(local.x06.this, { for k, v in local.x06.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x06.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x08 = { this = merge(local.x07.this, { for k, v in local.x07.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x07.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x09 = { this = merge(local.x08.this, { for k, v in local.x08.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x08.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x10 = { this = merge(local.x09.this, { for k, v in local.x09.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x09.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x11 = { this = merge(local.x10.this, { for k, v in local.x10.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x10.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x12 = { this = merge(local.x11.this, { for k, v in local.x11.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x11.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x13 = { this = merge(local.x12.this, { for k, v in local.x12.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x12.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x14 = { this = merge(local.x13.this, { for k, v in local.x13.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x13.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x15 = { this = merge(local.x14.this, { for k, v in local.x14.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x14.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x16 = { this = merge(local.x15.this, { for k, v in local.x15.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x15.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x17 = { this = merge(local.x16.this, { for k, v in local.x16.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x16.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x18 = { this = merge(local.x17.this, { for k, v in local.x17.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x17.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x19 = { this = merge(local.x18.this, { for k, v in local.x18.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x18.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + x20 = { this = merge(local.x19.this, { for k, v in local.x19.next : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }), next = merge([for ki, vi in local.x19.next : { for kj, vj in vi : join(var.separator, [ki, kj]) => vj } if !can(tobool(vi)) && !can(tolist(vi)) && !can(tonumber(vi)) && !can(tostring(vi))]...) } + + last = local.x20 +} diff --git a/terraform/flatten_map/outputs.tf b/terraform/flatten_map/outputs.tf index 85e9943..cf629cb 100644 --- a/terraform/flatten_map/outputs.tf +++ b/terraform/flatten_map/outputs.tf @@ -1,44 +1,8 @@ output "out" { - value = merge( - { for k, v in var.in : k => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k1, v1 in var.in : merge( - { for k, v in v1 : join(var.separator, [k1, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k2, v2 in v1 : merge( - { for k, v in v2 : join(var.separator, [k1, k2, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k3, v3 in v2 : merge( - { for k, v in v3 : join(var.separator, [k1, k2, k3, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k4, v4 in v3 : merge( - { for k, v in v4 : join(var.separator, [k1, k2, k3, k4, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k5, v5 in v4 : merge( - { for k, v in v5 : join(var.separator, [k1, k2, k3, k4, k5, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k6, v6 in v5 : merge( - { for k, v in v6 : join(var.separator, [k1, k2, k3, k4, k5, k6, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k7, v7 in v6 : merge( - { for k, v in v7 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k8, v8 in v7 : merge( - { for k, v in v8 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k9, v9 in v8 : merge( - { for k, v in v9 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k10, v10 in v9 : merge( - { for k, v in v10 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k11, v11 in v10 : merge( - { for k, v in v11 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k12, v12 in v11 : merge( - { for k, v in v12 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k13, v13 in v12 : merge( - { for k, v in v13 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k14, v14 in v13 : merge( - { for k, v in v14 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k15, v15 in v14 : merge( - { for k, v in v15 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k16, v16 in v15 : merge( - { for k, v in v16 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k17, v17 in v16 : merge( - { for k, v in v17 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k18, v18 in v17 : merge( - { for k, v in v18 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k19, v19 in v18 : merge( - { for k, v in v19 : join(var.separator, [k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k]) => v if can(tobool(v)) || can(tolist(v)) || can(tonumber(v)) || can(tostring(v)) }, [for k20, v20 in v19 : merge( - ) if !can(tobool(v20)) && !can(tolist(v20)) && !can(tonumber(v20)) && !can(tostring(v20))]... - ) if !can(tobool(v19)) && !can(tolist(v19)) && !can(tonumber(v19)) && !can(tostring(v19))]... - ) if !can(tobool(v18)) && !can(tolist(v18)) && !can(tonumber(v18)) && !can(tostring(v18))]... - ) if !can(tobool(v17)) && !can(tolist(v17)) && !can(tonumber(v17)) && !can(tostring(v17))]... - ) if !can(tobool(v16)) && !can(tolist(v16)) && !can(tonumber(v16)) && !can(tostring(v16))]... - ) if !can(tobool(v15)) && !can(tolist(v15)) && !can(tonumber(v15)) && !can(tostring(v15))]... - ) if !can(tobool(v14)) && !can(tolist(v14)) && !can(tonumber(v14)) && !can(tostring(v14))]... - ) if !can(tobool(v13)) && !can(tolist(v13)) && !can(tonumber(v13)) && !can(tostring(v13))]... - ) if !can(tobool(v12)) && !can(tolist(v12)) && !can(tonumber(v12)) && !can(tostring(v12))]... - ) if !can(tobool(v11)) && !can(tolist(v11)) && !can(tonumber(v11)) && !can(tostring(v11))]... - ) if !can(tobool(v10)) && !can(tolist(v10)) && !can(tonumber(v10)) && !can(tostring(v10))]... - ) if !can(tobool(v9)) && !can(tolist(v9)) && !can(tonumber(v9)) && !can(tostring(v9))]... - ) if !can(tobool(v8)) && !can(tolist(v8)) && !can(tonumber(v8)) && !can(tostring(v8))]... - ) if !can(tobool(v7)) && !can(tolist(v7)) && !can(tonumber(v7)) && !can(tostring(v7))]... - ) if !can(tobool(v6)) && !can(tolist(v6)) && !can(tonumber(v6)) && !can(tostring(v6))]... - ) if !can(tobool(v5)) && !can(tolist(v5)) && !can(tonumber(v5)) && !can(tostring(v5))]... - ) if !can(tobool(v4)) && !can(tolist(v4)) && !can(tonumber(v4)) && !can(tostring(v4))]... - ) if !can(tobool(v3)) && !can(tolist(v3)) && !can(tonumber(v3)) && !can(tostring(v3))]... - ) if !can(tobool(v2)) && !can(tolist(v2)) && !can(tonumber(v2)) && !can(tostring(v2))]... - ) if !can(tobool(v1)) && !can(tolist(v1)) && !can(tonumber(v1)) && !can(tostring(v1))]... - ) + value = local.last.this + + precondition { + condition = local.last.next == {} + error_message = "var.in has a depth greater than 20" + } }