Terraform配置locals块报错each.value cannot be used in this context求助
问题产生原因
- Terraform 中
each是专属的循环上下文对象,仅允许在显式声明了for_each参数的resource、data、module块内部使用,locals块不支持顶层定义for_each参数,你代码中写在locals块内的for_each = toset(vnetnames)属于无效声明,不会生成对应的each上下文。 - 你在
resourcelist的for表达式中直接引用each.value时,没有任何生效的for_each逻辑提供each对象取值,因此触发上下文不合法的报错。
修复方案
首先需要根据你的实际业务逻辑调整取值方式,如果你要实现的是将vnetlist中的region字段和vnetnames中的vnet名称做映射,可参考如下修改:
locals { vnetlist = csvdecode(file("./title.csv")) vnetnames = ([for vnets in lookup(data.azurerm_resources.spokes, "resources", []) : lookup(vnets, "name")]) # 若vnetlist的元素顺序和vnetnames的顺序一一对应,按索引关联取值 resourcelist = {for idx, r in local.vnetlist : r.region => local.vnetnames[idx]} } output "mybranch" { value = local.resourcelist }
如果你的实际需求是遍历vnetnames创建多个资源,需要把for_each声明移动到对应的资源块内,此时可以在资源块内部正常使用each.value,示例如下:
# 示例:为每个vnet创建对应的子网资源 resource "azurerm_subnet" "example" { for_each = toset(local.vnetnames) name = "${each.value}-subnet" resource_group_name = "example-rg" virtual_network_name = each.value address_prefixes = ["10.0.1.0/24"] }
内容的提问来源于stack exchange,提问作者kanmani1303
相关产品推荐
相关产品推荐

