Terraform 每次应用时都会强制使用新资源

Terraform 每次应用时都会强制使用新资源

我正在制作一个小型虚拟机谷歌云,使用一个磁盘基础映像,并希望使用 HashiCorp 的地形这是我正在运行的基本 TF 代码:

resource "google_compute_disk" "blog" {
    image = "ubuntu-1604-lts"
}
resource "google_compute_instance" "blog-vm" {
    disk {
        disk = "${google_compute_disk.blog.id}"
        auto_delete = false
    }
}

当我 时tf apply,它第一次运行良好。但后续计划希望重建磁盘,从而重建虚拟机本身。

-/+ google_compute_disk.blog
    image:                      "ubuntu-1604-xenial-v20170619a" =>
                                "ubuntu-1604-lts" (forces new resource)

我的目标是在创建映像时选择最新的 ubuntu-lts 模板,但如果创建了磁盘则保留原样。这在 Terraform 中可行吗?

答案1

这类问题的一般解决办法是ignore_changes生命周期设置,使得 Terraform 在创建计划时忽略特定属性的改变。

resource "google_compute_disk" "blog" {
  image = "ubuntu-1604-lts"

  lifecycle {
    ignore_changes = ["image"]
  }
}

有了这个,Terraform 将不会在image发生更改时自动计划更换磁盘。如果您想要用新映像替换磁盘,就需要手动对其进行污染:

$ terraform taint google_compute_disk.blog

这会将实例标记为“已污染”状态,这意味着下一个计划将包括销毁磁盘并在其位置创建新磁盘的步骤。由于实例随后会使用该磁盘,因此该计划还将根据需要更新或替换该磁盘。

相关内容