Estou fazendo uma pequena VM no Google Cloud , com uma imagem de base de disco, e desejo gerenciar minha infraestrutura GCP com o Terraform da HashiCorp Aqui está o código TF básico que estou executando:
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
}
}
Quando eu tf apply
, ele funciona bem na primeira vez. Mas os planos subsequentes querem reconstruir o disco e, portanto, a própria VM.
-/+ google_compute_disk.blog
image: "ubuntu-1604-xenial-v20170619a" =>
"ubuntu-1604-lts" (forces new resource)
Meu objetivo aqui é escolher o modelo mais recente do ubuntu-lts na criação de imagens, mas deixar o disco em paz se criado. Isso é possível no Terraform?
A solução geral para essa classe de problema é a
ignore_changes
configuração do ciclo de vida, que faz com que o Terraform ignore alterações em atributos específicos ao criar um plano.Com isso em vigor, o Terraform não planejará automaticamente a substituição do disco quando houver
image
alterações. Se você quiser substituir o disco por uma nova imagem, será necessário contaminá-lo manualmente:Isso marca a instância como "contaminada" no estado, o que significa que o próximo plano incluirá uma etapa para destruir o disco e criar um novo em seu lugar. Como a instância usa esse disco, o plano também o atualizará ou substituirá conforme necessário.