Terraform 获取列表的长度

标签 terraform

我正在试验 Terraform,但遇到了 本地人 .我想要做的是根据另一个变量( env )获取列表的长度。

在尝试评估长度之前,如何使 terrform 评估变量?

这是我的代码:

locals {
  env = "${terraform.workspace}"

  subnet_names = {
    "default" = ["default_sub1"]
    "dev"     = ["dev_sub1", "dev_sub2", "dev_sub3"]
    "prod"    = ["prod_sub1", "prod_sub2", "prod_sub3"]
  }

}

resource "azurerm_subnet" "subnet" {
  name                      = "${lookup(local.subnet_names, local.env, count.index)}"
  virtual_network_name      = "${azurerm_virtual_network.network.name}"
  resource_group_name       = "${azurerm_resource_group.terraform.name}"
  address_prefix            = "10.0.1.0/24"
  network_security_group_id = "${azurerm_network_security_group.security_group.id}"
  count                     =  "${length(local.subnet_names, local.env)}"
}

当我尝试验证代码时,我得到了这个 length: expected 1 arguments, got 2 in :${length(local.subnet_names, local.env)}
这里的诀窍是什么?

最佳答案

您的 local.subnet_names不是一个列表,它是一个 map并且可以按照 interpolation syntax 中的说明进行访问:

${length(local.subnet_names[local.env])}

编辑:

至于name变量,正确的方法是使用 element插值:
name = "${element(local.subnet_names[local.env], count.index)}"

这是因为 local.subnet_names[local.env]将返回一个列表。例如,如果 local.env是“dev”,它会返回
["dev_sub1", "dev_sub2", "dev_sub3"]

要获取列表中某个索引中的元素,我们使用 element .

关于Terraform 获取列表的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47080292/

相关文章:

amazon-s3 - 策略中的 S3 存储桶名称,terraform

azure - 如何使用 Terraform 的文件配置程序从本地计算机复制到虚拟机?

azure - 在 blob 存储帐户中组织 terraform 状态

terraform - 使用 Terraform 将 EFS 挂载到 AWS Fargate - PlatformTaskDefinitionIncompatibilityException 错误 :

amazon-web-services - 使用 terraform 将资源策略附加到 AWS secret 管理器的 lambda 函数

amazon-web-services - 如何使用 terraform 获取默认的 vpc id

azure - 在应用服务中为静态出站 IP 配置专用端点和 NAT 网关

terraform - 基于另一个变量的引用变量

当不存在循环时,terraform destroy 会产生循环错误

visual-studio-code - 如何在 VSCode 和 Intellij 中设置相同的 Terraform 格式化样式