Reputation: 57
looking for possible solution/approach for the below req.
I have a var as below
nodes= {
"type1" = {
max_size = 4
tags = { "key1" = "value1"
"key2" = "value2" } # structure of tags can be changed as needed
}
and then I have a locals that will ref this tag to use in an asg
locals {
for nodetype, nodeconfig in var.nodes
..
..
node_tags = nodeconfig.tags
}
local.node_tags must take the final form as below
{
"key" = "key1"
"value" = "value1"
"propagate_at_launch" = "true"
},
{
"key" = "key2"
...
...
}
I need to use these in an asg
resource "aws_autoscaling_group" "nodes" {
for_each = { for i in local.nodes ....
...
...
tags = each.value.node_tags
}
Similar use case - https://github.com/terraform-aws-modules/terraform-aws-autoscaling#tags
I tried something below.. looks ugly and doesn't work.
locals {
for nodetype, nodeconfig in var.nodes
..
..
node_tags = {for i in nodeconfig.tags : "{i}" => {
"key" = keys(i),
"value" = values(i),
"propagate_at_launch" = "true"
}
}
}
Upvotes: 1
Views: 222
Reputation: 238081
What about this one:
variable "nodes" {
default = {
"type1" = {
max_size = 4
tags = { "key1" = "value1"
"key2" = "value2"
}
},
"type2" = {
max_size = 4
tags = { "key11" = "value11"
"key22" = "value22"
}
},
}
}
locals {
node_tags = values(merge([for nodetype, nodeconfig in var.nodes:
{for tag_key , tag_value in nodeconfig.tags:
"${nodetype}-${tag_key}-${tag_value}" =>
{key = tag_key
value = tag_value
"propagate_at_launch" = "true"}
}
]...))
}
output "test" {
value = local.node_tags
}
which gives:
test = [
{
"key" = "key1"
"propagate_at_launch" = "true"
"value" = "value1"
},
{
"key" = "key2"
"propagate_at_launch" = "true"
"value" = "value2"
},
{
"key" = "key11"
"propagate_at_launch" = "true"
"value" = "value11"
},
{
"key" = "key22"
"propagate_at_launch" = "true"
"value" = "value22"
},
]
Upvotes: 1