У нас есть много подсетей, которые создаются точно так же, как в terraform. Мы используем переменную count и list of 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 захочет воссоздать все ресурсы с большим числовым индексом.
Чтобы быть более понятным, и, например, если ресурс подсети Azure «sa100-tools», на который ссылается индекс create-subnet [1], удаляется из переменной списка, Terraform уничтожает и воссоздает все более крупные индексы, которые превышают или равно create-subnet [1]. В нашем случае это уничтожение подсетей, на которые ссылаются create-subnet [1] и create-subnet [2].
Кто-нибудь сталкивался с этой проблемой? Пожалуйста, предложите свой вклад и мысли.
Спасибо!