Terraform中map(object)变量资源创建引用及tfvars传值方法
Terraform map(object) 变量赋值与引用解决方案
1. terraform.tfvars 正确传值方式
你定义的type_names为map(object)类型,map要求所有元素必须配置唯一的键作为索引,你当前的写法直接拼接多个object,没有定义map键,不符合语法规范。正确写法如下:
BName = "Test" type_names = { # cooper_entry、mike_entry为自定义map键,可按需修改,保证全局唯一即可 cooper_entry = { name = "cooper" type = "senior" stream = "developer" grp = "Mid" } mike_entry = { name = "Mike" type = "Junior" stream = "tester" grp = "entry" } }
2. 资源中正确引用map变量的方法
你原有写法var.type_names.name错误,原因是var.type_names是完整的map集合,不是单个object对象,无法直接取object下的属性,需要根据使用场景选择以下引用方式:
2.1 批量生成资源(最常用场景)
如果需要为map内的每个object都创建一个对应资源,使用for_each遍历map即可,示例代码:
resource "az_resource" "B_Name" { name = var.BName } resource "azure_resource" "reso" { for_each = var.type_names id = az_resource.B_Name.id # each.value对应当前遍历到的object对象,直接取对应属性即可 name = each.value.name # 其他属性引用示例: # type = each.value.type # stream = each.value.stream # grp = each.value.grp }
2.2 单独引用指定元素属性
如果不需要批量创建资源,只想取某个固定键对应的object属性,直接通过[键名]索引访问即可:
resource "azure_resource" "reso_cooper" { id = az_resource.B_Name.id # 取键为cooper_entry的对象的name属性 name = var.type_names["cooper_entry"].name }
内容的提问来源于stack exchange,提问作者mystack
相关产品推荐
相关产品推荐

