Skip to content

Commit

Permalink
fix: Refactor flatten and add validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher Kim committed Mar 11, 2023
1 parent c074a00 commit 8d26c98
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 42 deletions.
24 changes: 24 additions & 0 deletions terraform/flatten_map/main.tf
Original file line number Diff line number Diff line change
@@ -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
}
48 changes: 6 additions & 42 deletions terraform/flatten_map/outputs.tf
Original file line number Diff line number Diff line change
@@ -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"
}
}

0 comments on commit 8d26c98

Please sign in to comment.