【问题标题】:Best approach to control terraform similar resources without re-creating them when a list is modified控制 terraform 类似资源而不在修改列表时重新创建它们的最佳方法
【发布时间】:2018-08-10 13:45:20
【问题描述】:

考虑下面的代码:

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


    【解决方案1】:

    Terraform 0.12 将使用新的 for_each 构造解决此问题。

    目前只有修改 tfstate 之类的 hacky 变通方法:

    terraform state mv <resource-name>.<resource-id>[<i>] <resource-name>.<resource-id>[<j>]
    

    更多讨论在这里 - https://github.com/hashicorp/terraform/issues/14275

    另一种选择是使用外部模板,如 jinja 模板,其中源 tf 本身就是一个 jinja 模板,并且使用模板构造将资源创建为单独的资源块。

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 2020-11-24
      • 2022-12-29
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2018-09-24
      • 2018-10-23
      相关资源
      最近更新 更多