我们有许多以terraform完全相同的方式创建的子网。我们使用count和maps变量列表在单个循环中创建多个子网。 maps变量输入的列表来自terraform.tfvars文件。代码基本上如下所示:
Terraform version : 0.11
Provider : azurerm
"subnet_vnet_mapping" =[
{subnet_name = "sa100-monitoring" rg_name="sa100-network" vnet_name="sa100-vnet" subnet_address_prefix="10.140.144.124/28"},
{subnet_name = "sa100-tools" rg_name="sa100-network" vnet_name="sa100-vnet" subnet_address_prefix="10.140.145.124/28"},
{subnet_name = "sa100-core" rg_name="sa100-network" vnet_name="sa100-vnet" subnet_address_prefix="10.140.146.124/28"}
]
variable "subnet_vnet_mapping"{
type="list"
}
resource "azurerm_subnet" "create-subnet" {
count = "length(var.subnet_vnet_mapping)"
name = "${lookup(var.subnet_vnet_mapping[count.index],"subnet_name")}
virtual_network_name = "${lookup(var.subnet_vnet_mapping[count.index],"vnet_name")}
address_prefix = "${lookup(var.subnet_vnet_mapping[count.index],"subnet_address_prefix")}"
resource_group_name = "${lookup(var.subnet_vnet_mapping[count.index],"rg_name")}
}
此问题是Terraform使用tfstate文件中的数字标识符(如create-subnet [0],create-subnet [1]和create-subnet [2])为列表变量中的每个子网值引用资源这样,如果我们从列表的中间删除一个元素,那么Terraform将要重新创建具有较大数字索引的所有资源。
更清楚地说,例如,如果从列表变量中删除了索引create-subnet [1]所引用的天蓝色子网资源“ sa100-tools”,则Terraform将销毁并重新创建所有大于或等于create-subnet [1]。在我们的例子中,它正在破坏由create-subnet [1]和create-subnet [2]引用的子网。
有人遇到这个问题吗?请提出您的意见和想法。
谢谢!