地形规划资源cloudflare_list总是希望在没有更改的情况下就地更新



我使用了如下示例中的地形代码成功创建了一个IP地址列表:

resource "cloudflare_list" "example" {
account_id  = "f037e56e89293a057740de681ac9abbe"
name        = "example_list"
description = "example IPs for a list"
kind        = "ip"
item {
value {
ip = "192.0.2.0"
}
comment = "one"
}
item {
value {
ip = "192.0.2.1"
}
comment = "two"
}
}

然而,terraform plan总是想交换周围的项目,例如:

# cloudflare_list.example will be updated in-place
~ resource "cloudflare_list" "example" {
id          = "xxxxxxxxxxxxxxxxxxxxxx"
name        = "example_list"
# (3 unchanged attributes hidden)
~ item {
~ comment = "one" -> "two"
~ value {
~ ip = "192.0.2.0" -> "192.0.2.1"
}
}
~ item {
~ comment = "two" -> "one"
~ value {
~ ip = "192.0.2.1" -> "192.0.2.0"
}
}
}

这是一个列表,所以我不在乎它是否被交换,所以我做了apply,希望它是一次性的。我得到了Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

但是,下一个terraform plan再次显示了相同的内容。在Cloudflare UI上,列表保持不变。如何修复此循环以获得所需的";您的基础设施是最新的";?非常感谢。

我的配置是:

Terraform v1.3.3
on linux_amd64
+ provider registry.terraform.io/cloudflare/cloudflare v3.26.0

这是一个已知的错误,请检查https://github.com/cloudflare/terraform-provider-cloudflare/issues/1827

解决方法包括更改清单中项目的顺序,以匹配cloudflare内部顺序。尝试以下操作:

resource "cloudflare_list" "example" {
account_id  = "f037e56e89293a057740de681ac9abbe"
name        = "example_list"
description = "example IPs for a list"
kind        = "ip"
item {
value {
ip = "192.0.2.1"
}
comment = "two"
}
item {
value {
ip = "192.0.2.0"
}
comment = "one"
}
}

根据本评论

轻微的解决方法似乎是使地形中的列表项与创建顺序完全匹配(因此在应用地形后手动重新排序列表(。它似乎与字母数字排序密切相关,允许后续计划/申请不需要更改。

编辑:排序实际上是字母数字的,但您需要删除/-_等特殊字符,然后对列表进行排序,因此Cloudflare认为以下是正确的顺序:

相关内容

最新更新