我正在Google Cloud中制作一个带有一个磁盘基础映像的小型 VM,并希望使用 HashiCorp 的Terraform管理我的 GCP 基础设施这是我正在运行的基本 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
,它第一次工作正常。但随后的计划想要重建磁盘,从而重建 VM 本身。
-/+ google_compute_disk.blog
image: "ubuntu-1604-xenial-v20170619a" =>
"ubuntu-1604-lts" (forces new resource)
我的目标是在创建映像时选择最新的 ubuntu-lts 模板,但如果创建了磁盘,则不要管它。这在 Terraform 中可能吗?
此类问题的一般解决方案是
ignore_changes
生命周期设置,这会导致 Terraform 在创建计划时忽略对特定属性的更改。有了这个,Terraform 将不会在更改时自动计划更换磁盘
image
。如果您确实想为新图像替换磁盘,则有必要手动对其进行污染:这会将实例标记为“受污染”状态,这意味着下一个计划将包括销毁磁盘并在其位置创建一个新磁盘的步骤。由于实例随后使用该磁盘,因此该计划还将根据需要更新或替换该磁盘。