我尝试使用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)}
这里的诀窍是什么?
答案 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。