首页 > 解决方案 > Terraform 对象列表语法

问题描述

我正在使用一个模块,该模块引用了一个用于在 terraform 中构建 Puppet 服务器的中央模块。根模块中有一个变量允许附加标签与 ASG 一起使用,但我似乎无法正确使用语法。这是核心存储库中的信息:

   variable "additional_asg_tags" {
  description = "A map of additional tags to add to the puppet server ASG."
  type        = list(object({ key = string, value = string, propagate_at_launch = bool }))
  default     = []
}

我已经尝试了我能想到的所有方法来调用它,但它总是会出现错误消息,例如“不正确的列表元素类型:需要字符串”。或“此默认值与变量的类型约束不兼容:需要对象列表。”

我正在尝试用类似的方式调用上述内容;

variable "additional_asg_tags" {
  description = "A map of additional tags to add to ASG."
  type        = list(object({ key = string, value = string, propagate_at_launch = bool }))
  default     = { key = "Name", value = "Puppet-nonprod", propagate_at_launch = "true" 
 }
}

我已经删除了它周围的方括号,因为这也会导致错误,但我可能需要重新添加它们。

有人可以帮助请以正确的方式引用具有这些值的对象列表吗

标签: amazon-web-servicesterraform

解决方案


您的正确默认值为additional_asg_tagsa list

variable "additional_asg_tags" {

  description = "A map of additional tags to add to ASG."
  
  type = list(object({
               key = string, 
               value = string, 
               propagate_at_launch = bool
            }))
            
  default = [{ 
        key = "Name", 
        value = "Puppet-nonprod", 
        propagate_at_launch = "true" 
   }]
}

您可以按如下方式引用各个元素(一些示例):

var.additional_asg_tags[0]["key"]

var.additional_asg_tags[0].value

# to get list 
var.additional_asg_tags[*].propagate_at_launch

推荐阅读