我正在试用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)}"
}
Run Code Online (Sandbox Code Playgroud)
当我尝试验证代码时,我得到了length: expected 1 arguments, got 2 in
:${length(local.subnet_names, local.env)}
这有什么窍门?
你local.subnet_names
是不是列表,它是一个地图,并且可以作为解释的访问插语法:
${length(local.subnet_names[local.env])}
Run Code Online (Sandbox Code Playgroud)
编辑:
对于name
变量,正确的方法是使用元素插值:
name = "${element(local.subnet_names[local.env], count.index)}"
Run Code Online (Sandbox Code Playgroud)
这是由于local.subnet_names[local.env]
将返回列表的事实。例如,如果local.env
为“ dev”,它将返回
["dev_sub1", "dev_sub2", "dev_sub3"]
Run Code Online (Sandbox Code Playgroud)
为了获得列表中某个索引中的元素,我们使用element。
归档时间: |
|
查看次数: |
7295 次 |
最近记录: |