Terraform得到列表的长度

时间:2017-11-02 16:34:04

标签: 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)}

这里的诀窍是什么?

1 个答案:

答案 0 :(得分:5)

您的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