我们使用count遍历地图列表,以在Terraform中创建多个资源。列表中的随机删除和插入是一个问题

时间:2019-04-25 03:11:28

标签: terraform

我们有许多以terraform完全相同的方式创建的子网。我们使用count和maps变量列表在单个循环中创建多个子网。 maps变量输入的列表来自terraform.tfvars文件。代码基本上如下所示:

Terraform version : 0.11
Provider : azurerm

列出从terraform.tfvars文件输入的变量

"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"
 }

代码循环遍历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]引用的子网。

有人遇到这个问题吗?请提出您的意见和想法。

谢谢!

0 个答案:

没有答案