Reputation:
I need to dynamically configure parameters values in instances
so that the value can overwrite default_parameters
value. Below the sample code.
vars.tf
variable "instances" {
type = map(object({
suffix = string
modify_type = string
parameters = list(map(string))
}))
}
variable "default_parameters" {
type = list(map(string))
}
And the problem is, I need to use terraform merge
function but it just accept map or object, how to convert the parameters to map?
dynamic "parameters" {
for_each = merge(var.default_parameters, var.instances[each.key].parameters)
content {
name = parameters.value.name
value = parameters.value.value
}
}
Upvotes: 1
Views: 1996
Reputation: 239000
I would suggest different format. Instead of list of maps, just use map:
variable "instances" {
type = map(object({
suffix = string
modify_type = string
parameters = map(string)
}))
default = {
"00" = {
suffix = "00-live"
modify_type = "Upgrade"
parameters = {
connect_timeout = 80
name = "my_instance"
}
}
}
}
variable "default_parameters" {
type = map(string)
default = {
connect_timeout = 100
name = "default_name"
}
}
then:
dynamic "parameters" {
for_each = merge(var.default_parameters, var.instances[each.key].parameters)
content {
name = parameters.key
value = parameters.value
}
}
Upvotes: 1