Terraform 当列表被修改时,控制地形相似资源而不重新创建它们的最佳方法
考虑以下代码:Terraform 当列表被修改时,控制地形相似资源而不重新创建它们的最佳方法,terraform,Terraform,考虑以下代码: variable "list" { type = "list" default = ["a", "b", "c"] } resource "null_resource" "resources_from_a_list" { count = "${length(var.list)}" triggers { field = "${element(var.list, count.index)}}" } } 在terraform中,通常使用循环计数来创建类似
variable "list" {
type = "list"
default = ["a", "b", "c"]
}
resource "null_resource" "resources_from_a_list" {
count = "${length(var.list)}"
triggers {
field = "${element(var.list, count.index)}}"
}
}
在terraform中,通常使用循环计数来创建类似的资源
当需要修改此列表时,删除第一项,例如:
var.list from ["a", "b", "c"] to ["b", "c"]
所有资源都会重新创建,因为它是控制资源创建/销毁的索引
如果从列表中删除其中一个项目,那么不重新创建它们的最佳方法是什么?Terraform 0.12将使用新的
for_each
构造解决此问题
目前只有像编辑tfstate这样的黑客解决方法:
terraform state mv <resource-name>.<resource-id>[<i>] <resource-name>.<resource-id>[<j>]
terraformstate mv.[].]
这里有更多的讨论-
另一种选择是使用类似jinja模板的外部模板,其中源tf本身是jinja模板,并且使用模板构造将资源创建为单个资源块