首页 > 解决方案 > 返回地图值的单个列表

问题描述

我需要动态配置参数值,instances以便该值可以覆盖 default_parameters值。在示例代码下方。

变量.tf

variable "instances" {
  type = map(object({
    suffix              = string
    modify_type         = string
    parameters          = list(map(string))
  }))
 }

variable "default_parameters" {
  type = list(map(string))
}

问题是,我需要使用 terraformmerge函数,但它只接受地图或对象,如何将参数转换为地图?

  dynamic "parameters" {
    for_each = merge(var.default_parameters, var.instances[each.key].parameters)
    content {
      name  = parameters.value.name
      value = parameters.value.value
    }
  }

标签: terraform

解决方案


我会建议不同的格式。而不是地图列表,只需使用地图:


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"
      }
}

然后:

  dynamic "parameters" {
    for_each = merge(var.default_parameters, var.instances[each.key].parameters)
    content {
      name  = parameters.key
      value = parameters.value
    }
  }

推荐阅读