diff --git a/roles/cleanup/tasks/virtual.yml b/roles/cleanup/tasks/virtual.yml index 3cf6c90..aed1ce9 100644 --- a/roles/cleanup/tasks/virtual.yml +++ b/roles/cleanup/tasks/virtual.yml @@ -6,16 +6,7 @@ ansible.builtin.include_tasks: shutdown.yml - name: Cleanup hypervisor resources - ansible.builtin.include_tasks: proxmox.yml - -- name: Cleanup vCenter resources - ansible.builtin.include_tasks: vmware.yml - -- name: Cleanup libvirt resources - ansible.builtin.include_tasks: libvirt.yml - -- name: Cleanup Xen resources - ansible.builtin.include_tasks: xen.yml + ansible.builtin.include_tasks: "{{ hypervisor_type }}.yml" - name: Determine post-reboot connectivity ansible.builtin.set_fact: @@ -34,7 +25,6 @@ ) ) | bool }} - changed_when: false - name: Check VM accessibility after reboot when: @@ -53,6 +43,7 @@ when: - cleanup_vm_connection_check is defined - cleanup_vm_connection_check.failed | bool + - virtualization_vm_created_in_run | default(false) | bool block: - name: VM boot failure detected - removing VM ansible.builtin.debug: @@ -61,151 +52,111 @@ This VM was created in the current playbook run and will be removed to prevent orphaned resources. - - name: Remove VM for libvirt - when: - - hypervisor_type == "libvirt" - - virtualization_vm_created_in_run | default(false) | bool + - name: Remove failed libvirt VM + when: hypervisor_type == "libvirt" delegate_to: localhost become: false - community.libvirt.virt: - name: "{{ hostname }}" - state: destroyed + block: + - name: Destroy libvirt VM + community.libvirt.virt: + name: "{{ hostname }}" + state: destroyed + failed_when: false - - name: Undefine VM for libvirt - when: - - hypervisor_type == "libvirt" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - community.libvirt.virt: - name: "{{ hostname }}" - command: undefine + - name: Undefine libvirt VM + community.libvirt.virt: + name: "{{ hostname }}" + command: undefine - - name: Remove VM disk for libvirt - when: - - hypervisor_type == "libvirt" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - ansible.builtin.file: - path: "{{ item.path }}" - state: absent - loop: "{{ virtualization_libvirt_disks | default([]) }}" - loop_control: - label: "{{ item.path }}" + - name: Remove libvirt VM disks + ansible.builtin.file: + path: "{{ item.path }}" + state: absent + loop: "{{ virtualization_libvirt_disks | default([]) }}" + loop_control: + label: "{{ item.path }}" - - name: Remove cloud-init disk for libvirt - when: - - hypervisor_type == "libvirt" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - ansible.builtin.file: - path: "{{ virtualization_libvirt_cloudinit_path }}" - state: absent + - name: Remove libvirt cloud-init disk + ansible.builtin.file: + path: "{{ virtualization_libvirt_cloudinit_path }}" + state: absent - - name: Remove VM for proxmox - when: - - hypervisor_type == "proxmox" - - virtualization_vm_created_in_run | default(false) | bool + - name: Remove failed Proxmox VM + when: hypervisor_type == "proxmox" delegate_to: localhost become: false - community.proxmox.proxmox_kvm: - api_host: "{{ hypervisor_cfg.url }}" - api_user: "{{ hypervisor_cfg.username }}" - api_password: "{{ hypervisor_cfg.password }}" - node: "{{ hypervisor_cfg.host }}" - name: "{{ hostname }}" - vmid: "{{ system_cfg.id }}" - state: stopped + module_defaults: + community.proxmox.proxmox_kvm: + api_host: "{{ hypervisor_cfg.url }}" + api_user: "{{ hypervisor_cfg.username }}" + api_password: "{{ hypervisor_cfg.password }}" + node: "{{ hypervisor_cfg.host }}" no_log: true + block: + - name: Stop Proxmox VM + community.proxmox.proxmox_kvm: + name: "{{ hostname }}" + vmid: "{{ system_cfg.id }}" + state: stopped - - name: Delete VM for proxmox - when: - - hypervisor_type == "proxmox" - - virtualization_vm_created_in_run | default(false) | bool + - name: Delete Proxmox VM + community.proxmox.proxmox_kvm: + name: "{{ hostname }}" + vmid: "{{ system_cfg.id }}" + state: absent + unprivileged: false + + - name: Remove failed VMware VM + when: hypervisor_type == "vmware" delegate_to: localhost become: false - community.proxmox.proxmox_kvm: - api_host: "{{ hypervisor_cfg.url }}" - api_user: "{{ hypervisor_cfg.username }}" - api_password: "{{ hypervisor_cfg.password }}" - node: "{{ hypervisor_cfg.host }}" - name: "{{ hostname }}" - vmid: "{{ system_cfg.id }}" - state: absent - unprivileged: false + module_defaults: + community.vmware.vmware_guest: + hostname: "{{ hypervisor_cfg.url }}" + username: "{{ hypervisor_cfg.username }}" + password: "{{ hypervisor_cfg.password }}" + validate_certs: "{{ hypervisor_cfg.certs | bool }}" no_log: true + block: + - name: Power off VMware VM + community.vmware.vmware_guest: + name: "{{ hostname }}" + folder: "{{ system_cfg.path | default('/') }}" + state: poweredoff - - name: Remove VM for VMware - when: - - hypervisor_type == "vmware" - - virtualization_vm_created_in_run | default(false) | bool + - name: Delete VMware VM + community.vmware.vmware_guest: + name: "{{ hostname }}" + folder: "{{ system_cfg.path | default('/') }}" + state: absent + + - name: Remove failed Xen VM + when: hypervisor_type == "xen" delegate_to: localhost become: false - community.vmware.vmware_guest: - hostname: "{{ hypervisor_cfg.url }}" - username: "{{ hypervisor_cfg.username }}" - password: "{{ hypervisor_cfg.password }}" - validate_certs: "{{ hypervisor_cfg.certs | bool }}" - name: "{{ hostname }}" - folder: "{{ system_cfg.path | default('/') }}" - state: poweredoff - no_log: true + block: + - name: Destroy Xen VM if running + ansible.builtin.command: + argv: + - xl + - destroy + - "{{ hostname }}" + register: cleanup_xen_destroy + failed_when: false + changed_when: cleanup_xen_destroy.rc == 0 - - name: Delete VM for VMware - when: - - hypervisor_type == "vmware" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - community.vmware.vmware_guest: - hostname: "{{ hypervisor_cfg.url }}" - username: "{{ hypervisor_cfg.username }}" - password: "{{ hypervisor_cfg.password }}" - validate_certs: "{{ hypervisor_cfg.certs | bool }}" - name: "{{ hostname }}" - folder: "{{ system_cfg.path | default('/') }}" - state: absent - no_log: true + - name: Remove Xen VM disks + ansible.builtin.file: + path: "{{ item.path }}" + state: absent + loop: "{{ virtualization_xen_disks | default([]) }}" + loop_control: + label: "{{ item.path }}" - - name: Destroy Xen VM if running - when: - - hypervisor_type == "xen" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - ansible.builtin.command: - argv: - - xl - - destroy - - "{{ hostname }}" - register: cleanup_xen_destroy - failed_when: false - changed_when: cleanup_xen_destroy.rc == 0 - - - name: Remove Xen VM disk - when: - - hypervisor_type == "xen" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - ansible.builtin.file: - path: "{{ item.path }}" - state: absent - loop: "{{ virtualization_xen_disks | default([]) }}" - loop_control: - label: "{{ item.path }}" - - - name: Remove Xen VM config file - when: - - hypervisor_type == "xen" - - virtualization_vm_created_in_run | default(false) | bool - delegate_to: localhost - become: false - ansible.builtin.file: - path: "/tmp/xen-{{ hostname }}.cfg" - state: absent + - name: Remove Xen VM config file + ansible.builtin.file: + path: "/tmp/xen-{{ hostname }}.cfg" + state: absent - name: VM cleanup completed ansible.builtin.debug: