我目前正在工作的一个模块,需要有一个灵活的IP地址数量。
目前,我的资源计数是5。如果我将number_of_ips增加到6或更多会发生什么?Terraform会重新创建所有6个IP地址资源还是会递增地添加另一个资源?
示例:
locals {
number_of_ips = 5
}
resource "azurerm_public_ip" "public-ip" {
count = local.number_of_ips
name = "${var.name}${count.index}"
location = var.location
resource_group_name = var.resource_group_name
allocation_method = var.allocation_method
sku = var.sku
}
在上面的示例中,从number_of_ips = 5
转到number_of_ips = 6
时,是重新创建IP地址1到5,还是仅添加IP地址#6作为增量更改?
1条答案
按热度按时间wkyowqbh1#
Terraform是一个理想状态系统,这意味着它会评估你的配置,目标是从本质上理解“你希望世界看起来像什么”,然后将其与它对世界当前外观的记录进行比较,并提出一组动作来从当前状态达到理想状态。
在运行之间,Terraform会记住存在哪些资源示例,因此如果您最初运行
count = 5
,Terraform将在其状态下跟踪以下地址:azurerm_public_ip.public-ip[0]
azurerm_public_ip.public-ip[1]
azurerm_public_ip.public-ip[2]
azurerm_public_ip.public-ip[3]
azurerm_public_ip.public-ip[4]
当您再次使用
count = 6
运行Terraform时,这意味着 * 所需状态 * 将包含一个额外的地址:azurerm_public_ip.public-ip[0]
azurerm_public_ip.public-ip[1]
azurerm_public_ip.public-ip[2]
azurerm_public_ip.public-ip[3]
azurerm_public_ip.public-ip[5]
️ 这是新的**因此Terraform会将期望状态与索引0到4的实际状态进行比较,并希望发现期望状态与那些现有对象匹配,从而确定不需要更改任何内容。
Terraform还将注意到
azurerm_public_ip.public-ip[5]
之前根本不存在,因此将要求AzureRM提供程序计划创建一个与该示例所需状态匹配的新对象。因此,在您描述的情况下,Terraform的典型行为是只建议创建
azurerm_public_ip.public-ip[5]
,而不对其他示例提出任何建议。