Я делаю небольшую виртуальную машину в Google Cloud, с одним базовым образом диска и хотите управлять моей инфраструктурой GCP с помощью HashiCorp's Terraform Вот базовый код 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?
Общее решение этого класса проблем - это ignore_changes
настройка жизненного цикла, из-за которой Terraform игнорирует изменения определенных атрибутов при создании плана.
resource "google_compute_disk" "blog" {
image = "ubuntu-1604-lts"
lifecycle {
ignore_changes = ["image"]
}
}
При этом Terraform не будет автоматически планировать замену диска, когда image
изменения. если ты делать хотите заменить диск на новый образ, необходимо вручную его испортить:
$ terraform taint google_compute_disk.blog
Это помечает экземпляр как «испорченный» в состоянии, что означает, что следующий план будет включать в себя шаг по уничтожению диска и созданию нового на его месте. Поскольку экземпляр затем использует этот диск, план также обновит или заменит его при необходимости.