user8750453
user8750453

Reputation:

Return single list of map value

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

Answers (1)

Marcin
Marcin

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

Related Questions