skip to Main Content

I have created a few instances using Terraform module:

resource "google_compute_instance" "cluster" {
  count = var.num_instances
  name = "redis-${format("%03d", count.index)}"
  ...
  attached_disk {
    source = 
google_compute_disk.ssd[count.index].name
  }
}

resource "google_compute_disk" "ssd" {
  count   = var.num_instances
  name    = "redis-ssd-${format("%03d", count.index)}"
  ...
  zone    = data.google_compute_zones.available.names[count.index % length(data.google_compute_zones.available.names)]

}

resource "google_dns_record_set" "dns" {
  count   = var.num_instances
 name    = "${var.dns_name}-${format("%03d", 
count.index +)}.something.com"
  ...

  managed_zone = XXX

  rrdatas = [google_compute_instance.cluster[count.index].network_interface.0.network_ip]
}

module "test" {
  source = "/modules_folder"
  num_instances             = 2
    ...
}

How can I destroy one of the instances and its dependency, say instance[1]+ssd[1]+dns[1]? I tried to destroy only one module using

terraform destroy -target module.test.google_compute_instance.cluster[1]

but it does not destroy ssd[1] and it tried to destroy both dns:

module.test.google_dns_record_set.dns[0] module.test.google_dns_record_set.dns[1]

if I run

terraform destroy -target module.test.google_compute_disk.ssd[1]

it tried to destroy both instances and dns:

module.test.google_compute_instance.cluster[0] module.test.google_compute_instance.cluster[1]

module.test.google_dns_record_set.dns[0]

module.test.google_dns_record_set.dns[1]

as well.

how to only destroy instance[1], ssd[1] and dns[1]? I feel my code may have some bug, maybe count.index has some problem which trigger some unexpected destroy?

I use: Terraform v0.12.29

2

Answers


  1. I’m a bit confused as to why you want to terraform destroy what you’d normally want to do is decrement num_instances and then terraform apply.

    If you do a terraform destroy the next terraform apply will put you right back to whatever you have configured in your terraform source.

    It’s a bit hard without more of your source to see what’s going on- but setting num_instances on the module and using it in the module’s resources feels wonky.

    I would recommend you upgrade terraform and use count or for_each directly on the module rather than within it. (this was introduced in terraform 0.13.0) see https://www.hashicorp.com/blog/terraform-0-13-brings-powerful-meta-arguments-to-modular-workflows

    Login or Signup to reply.
  2. Remove resource by resource:

    terraform destroy -target RESOURCE_TYPE.NAME -target RESOURCE_TYPE2.NAME
    
    
    resource "resource_type" "resource_name" {
       ...
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search