【问题标题】:Understanding Terraform for_each loop iteration了解 Terraform for_each 循环迭代
【发布时间】:2021-12-08 19:21:32
【问题描述】:

我正在学习 terraform 并试图理解 terraform 中的 for_each 循环迭代。

我正在遍历一个循环以在 Azure 云中创建 RG,我想了解的是使用 .要么 [””]。 例如,下面是我的 tfvar 文件:

resource_groups = {
  resource_group_1 = {
    name     = "terraform-apply-1"
    location = "eastus2"
    tags = {
      created_by = "vivek89@test.com"
    }
  },
  resource_group_2 = {
    name     = "terraform-apply-2"
    location = "eastus2"
    tags = {
      created_by = "vivek89@test.com"
    }
  },

  resource_group_3 = {
    name     = "terraform-apply-3"
    location = "eastus2"
    tags = {
      created_by = "vivek89@test.com"
      contact_dl = "vivek89@test.com"
    }
  }
}

以下是我的 terraform main.tf 文件:

resource "azurerm_resource_group" "terraformRG" {
  for_each = var.resource_groups
  name = each.value.name
  location = each.value.location
  tags = each.value.tags
}

我对 RG 创建块中 for_each 中的表达式感到困惑。以下代码均有效并创建了 RG:

name = each.value.name
name = each.value["name"]

我想了解两者的区别,哪个是正确的。

【问题讨论】:

  • 我还注意到您的几乎所有问题都有答案,但只有一个被接受。接受好的答案不仅是一种好习惯,而且可以减少重复的次数并增加您的问题得到实际回答的机会。
  • 当然马辛。谢谢。我会的。

标签: terraform


【解决方案1】:

它们与docs 中的解释相同:

名称为有效标识符的地图/对象属性也可以使用点分隔的属性表示法来访问,例如 local.object.attrname。如果地图可能包含任意用户指定的键,我们建议仅使用方括号索引表示法 (local.map["keyname"])。

主要区别在于dot 表示法要求关键属性是有效的identifiers。相反,方括号符号适用于任何标识符。

【讨论】:

  • 我想你可能想说方括号符号适用于任何表达式。 ?
猜你喜欢
  • 2020-11-01
  • 2021-01-17
  • 2021-11-25
  • 2021-10-04
  • 2021-05-25
  • 2022-07-21
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多