控制Terraform相似资源而不修改列表时重新创建它们的最佳方法

时间:2018-08-09 12:39:22

标签: 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"]

重新创建所有资源,因为它是控制资源创建/销毁的索引。

如果从列表中删除了一项,最好的方法是不重新创建它们?

1 个答案:

答案 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模板,并且使用模板构造将资源创建为单独的资源块。