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/

相关文章:

go - 如何更新 https ://github. com/hashicorp/terraform.git for terraform 的 vendor 文件夹

terraform - icmp 协议(protocol)入口规则 aws_security_group 资源的 from_port 和 to_port 值?

azure - 发送请求失败: StatusCode=404 -- Original Error: Code ="ArtifactNotFound"

Terraform 想要删除一个存储桶,并提示它不是空的。我不希望 terraform 删除存储桶。我怎么告诉它不要?

terraform - Vault - 为一个身份组分配多个别名

aws-api-gateway - Terraform - AWS - API 网关依赖难题

azure-devops - 使用 terraform -out 参数

azure - azure_managed_disk 和 storage_data_disk 之间的关系

node.js - 尽管指定了 Kubernetes 部署/服务端口,但连接端口错误

ansible - 如何自动配置 Azure B2C?