考虑以下代码:
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"]
重新创建所有资源,因为它是控制资源创建/销毁的索引。
如果从列表中删除了一项,最好的方法是不重新创建它们?
答案 0 :(得分:1)
Terraform 0.12将使用新的for_each
构造解决此问题。
当前只有一些变通办法,例如编辑tfstate:
terraform state mv <resource-name>.<resource-id>[<i>] <resource-name>.<resource-id>[<j>]
此处有更多讨论-https://github.com/hashicorp/terraform/issues/14275
另一种选择是使用外部模板,例如jinja模板,其中源tf本身是jinja模板,并且使用模板构造将资源创建为单独的资源块。