=== G4-v7 throwaway exercise, 2026-07-19 ===
=== STEP 1: create (tofu apply -auto-approve, throwaway root) ===

OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create

OpenTofu will perform the following actions:

  # libvirt_cloudinit_disk.seed will be created
  + resource "libvirt_cloudinit_disk" "seed" {
      + id        = (known after apply)
      + meta_data = <<-EOT
            instance-id: throwaway-v7
            local-hostname: throwaway-v7
        EOT
      + name      = "throwaway-v7-cloudinit"
      + path      = (known after apply)
      + size      = (known after apply)
      + user_data = <<-EOT
            #cloud-config
            hostname: throwaway-v7
        EOT
    }

  # libvirt_domain.vm will be created
  + resource "libvirt_domain" "vm" {
      + devices     = {
          + disks = [
              + {
                  + driver = {
                      + type = "qcow2"
                    }
                  + source = {
                      + volume = {
                          + pool   = "throwaway-v7-pool"
                          + volume = "throwaway-v7-disk.qcow2"
                        }
                    }
                  + target = {
                      + bus = "virtio"
                      + dev = "vda"
                    }
                },
              + {
                  + device = "cdrom"
                  + source = {
                      + volume = {
                          + pool   = "throwaway-v7-pool"
                          + volume = "throwaway-v7-cloudinit.iso"
                        }
                    }
                  + target = {
                      + bus = "sata"
                      + dev = "sda"
                    }
                },
            ]
        }
      + features    = {
          + acpi = true
          + apic = {}
        }
      + id          = (known after apply)
      + memory      = 256
      + memory_unit = "MiB"
      + name        = "throwaway-v7-domain"
      + os          = {
          + type         = "hvm"
          + type_arch    = "x86_64"
          + type_machine = "q35"
        }
      + running     = true
      + type        = "kvm"
      + uuid        = (known after apply)
      + vcpu        = 1
    }

  # libvirt_pool.scratch will be created
  + resource "libvirt_pool" "scratch" {
      + allocation = (known after apply)
      + available  = (known after apply)
      + capacity   = (known after apply)
      + id         = (known after apply)
      + name       = "throwaway-v7-pool"
      + target     = {
          + path = "/var/lib/libvirt/vr1/throwaway-v7"
        }
      + type       = "dir"
      + uuid       = (known after apply)
    }

  # libvirt_volume.disk will be created
  + resource "libvirt_volume" "disk" {
      + allocation = (known after apply)
      + capacity   = 104857600
      + id         = (known after apply)
      + key        = (known after apply)
      + name       = "throwaway-v7-disk.qcow2"
      + path       = (known after apply)
      + physical   = (known after apply)
      + pool       = "throwaway-v7-pool"
      + target     = {
          + format = {
              + type = "qcow2"
            }
          + path   = (known after apply)
        }
    }

  # libvirt_volume.seed will be created
  + resource "libvirt_volume" "seed" {
      + allocation = (known after apply)
      + capacity   = (known after apply)
      + create     = {
          + content = {
              + url = (known after apply)
            }
        }
      + id         = (known after apply)
      + key        = (known after apply)
      + name       = "throwaway-v7-cloudinit.iso"
      + path       = (known after apply)
      + physical   = (known after apply)
      + pool       = "throwaway-v7-pool"
    }

Plan: 5 to add, 0 to change, 0 to destroy.
libvirt_cloudinit_disk.seed: Creating...
libvirt_cloudinit_disk.seed: Creation complete after 0s [id=c78933fb4b72fe38]
libvirt_pool.scratch: Creating...
libvirt_pool.scratch: Creation complete after 0s [id=7e9fef28-f7dc-4922-8631-5f6d2c31df9b]
libvirt_volume.seed: Creating...
libvirt_volume.disk: Creating...
libvirt_volume.seed: Creation complete after 0s [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso]
libvirt_volume.disk: Creation complete after 0s [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-disk.qcow2]
libvirt_domain.vm: Creating...
libvirt_domain.vm: Creation complete after 1s [name=throwaway-v7-domain]

Apply complete! Resources: 5 added, 0 changed, 0 destroyed.

=== STEP 2: pre-replace live state (virsh) ===
running

3

 Name                         Path
--------------------------------------------------------------------------------------------
 throwaway-v7-cloudinit.iso   /var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso
 throwaway-v7-disk.qcow2      /var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-disk.qcow2

staging ISO(s):
total 116
drwxr-xr-x  2 jessea123 jessea123  4096 Jul 19 08:04 .
drwxrwxrwt 41 root      root      65536 Jul 19 08:04 ..
-rw-r--r--  1 jessea123 jessea123 43008 Jul 19 08:04 cloudinit-c78933fb4b72fe38.iso

=== STEP 3: simulate host-reboot loss of the staging ISO ===
$ rm /tmp/terraform-provider-libvirt-cloudinit/cloudinit-c78933fb4b72fe38.iso
removed

=== STEP 4: re-plan after ISO loss (expect forced replacement) ===
libvirt_cloudinit_disk.seed: Refreshing state... [id=c78933fb4b72fe38]
libvirt_pool.scratch: Refreshing state... [id=7e9fef28-f7dc-4922-8631-5f6d2c31df9b]
libvirt_volume.seed: Refreshing state... [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso]
libvirt_volume.disk: Refreshing state... [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-disk.qcow2]
libvirt_domain.vm: Refreshing state... [name=throwaway-v7-domain]

Note: Objects have changed outside of OpenTofu

OpenTofu detected the following changes made outside of OpenTofu since the
last "tofu apply" which may have affected this plan:

  # libvirt_cloudinit_disk.seed has been deleted
  - resource "libvirt_cloudinit_disk" "seed" {
        id        = "c78933fb4b72fe38"
        name      = "throwaway-v7-cloudinit"
      - path      = "/tmp/terraform-provider-libvirt-cloudinit/cloudinit-c78933fb4b72fe38.iso" -> null
        # (3 unchanged attributes hidden)
    }


Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────

OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create
-/+ destroy and then create replacement

OpenTofu will perform the following actions:

  # libvirt_cloudinit_disk.seed will be created
  + resource "libvirt_cloudinit_disk" "seed" {
      + id        = (known after apply)
      + meta_data = <<-EOT
            instance-id: throwaway-v7
            local-hostname: throwaway-v7
        EOT
      + name      = "throwaway-v7-cloudinit"
      + path      = (known after apply)
      + size      = (known after apply)
      + user_data = <<-EOT
            #cloud-config
            hostname: throwaway-v7
        EOT
    }

  # libvirt_volume.seed must be replaced
-/+ resource "libvirt_volume" "seed" {
      ~ allocation = 45056 -> (known after apply)
      ~ capacity   = 43008 -> (known after apply)
      ~ create     = { # forces replacement
          ~ content = {
              ~ url = "/tmp/terraform-provider-libvirt-cloudinit/cloudinit-c78933fb4b72fe38.iso" -> (known after apply)
            }
        }
      ~ id         = "/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso" -> (known after apply)
      ~ key        = "/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso" -> (known after apply)
        name       = "throwaway-v7-cloudinit.iso"
      ~ path       = "/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso" -> (known after apply)
      ~ physical   = 43008 -> (known after apply)
        # (1 unchanged attribute hidden)
    }

Plan: 2 to add, 0 to change, 1 to destroy.

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so OpenTofu can't
guarantee to take exactly these actions if you run "tofu apply" now.

=== STEP 5: apply the replacement UNDER the running domain ===
domid before: 3
libvirt_cloudinit_disk.seed: Refreshing state... [id=c78933fb4b72fe38]
libvirt_pool.scratch: Refreshing state... [id=7e9fef28-f7dc-4922-8631-5f6d2c31df9b]
libvirt_volume.seed: Refreshing state... [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso]
libvirt_volume.disk: Refreshing state... [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-disk.qcow2]
libvirt_domain.vm: Refreshing state... [name=throwaway-v7-domain]

Note: Objects have changed outside of OpenTofu

OpenTofu detected the following changes made outside of OpenTofu since the
last "tofu apply" which may have affected this plan:

  # libvirt_cloudinit_disk.seed has been deleted
  - resource "libvirt_cloudinit_disk" "seed" {
        id        = "c78933fb4b72fe38"
        name      = "throwaway-v7-cloudinit"
      - path      = "/tmp/terraform-provider-libvirt-cloudinit/cloudinit-c78933fb4b72fe38.iso" -> null
        # (3 unchanged attributes hidden)
    }


Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────

OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create
-/+ destroy and then create replacement

OpenTofu will perform the following actions:

  # libvirt_cloudinit_disk.seed will be created
  + resource "libvirt_cloudinit_disk" "seed" {
      + id        = (known after apply)
      + meta_data = <<-EOT
            instance-id: throwaway-v7
            local-hostname: throwaway-v7
        EOT
      + name      = "throwaway-v7-cloudinit"
      + path      = (known after apply)
      + size      = (known after apply)
      + user_data = <<-EOT
            #cloud-config
            hostname: throwaway-v7
        EOT
    }

  # libvirt_volume.seed must be replaced
-/+ resource "libvirt_volume" "seed" {
      ~ allocation = 45056 -> (known after apply)
      ~ capacity   = 43008 -> (known after apply)
      ~ create     = { # forces replacement
          ~ content = {
              ~ url = "/tmp/terraform-provider-libvirt-cloudinit/cloudinit-c78933fb4b72fe38.iso" -> (known after apply)
            }
        }
      ~ id         = "/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso" -> (known after apply)
      ~ key        = "/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso" -> (known after apply)
        name       = "throwaway-v7-cloudinit.iso"
      ~ path       = "/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso" -> (known after apply)
      ~ physical   = 43008 -> (known after apply)
        # (1 unchanged attribute hidden)
    }

Plan: 2 to add, 0 to change, 1 to destroy.
libvirt_volume.seed: Destroying... [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso]
libvirt_volume.seed: Destruction complete after 0s
libvirt_cloudinit_disk.seed: Creating...
libvirt_cloudinit_disk.seed: Creation complete after 0s [id=c78933fb4b72fe38]
libvirt_volume.seed: Creating...
libvirt_volume.seed: Creation complete after 0s [id=/var/lib/libvirt/vr1/throwaway-v7/throwaway-v7-cloudinit.iso]

Apply complete! Resources: 2 added, 0 changed, 1 destroyed.
rc=0
domid after: 3
domstate after: running

=== STEP 6: teardown (tofu destroy) + zero-residue verification ===
libvirt_volume.seed: Destruction complete after 0s
libvirt_volume.disk: Destruction complete after 0s
libvirt_cloudinit_disk.seed: Destroying... [id=c78933fb4b72fe38]
libvirt_cloudinit_disk.seed: Destruction complete after 0s
libvirt_pool.scratch: Destroying... [id=7e9fef28-f7dc-4922-8631-5f6d2c31df9b]
libvirt_pool.scratch: Destruction complete after 0s

Destroy complete! Resources: 5 destroyed.
rc=0
--- residue checks ---
domains: 0
pools:   0
dir:     ls: cannot access '/var/lib/libvirt/vr1/throwaway-v7': No such file or directory
staging: 
