- name: Set full image path on Proxmox ansible.builtin.set_fact: remote_image_path: "{{ dest_image_path }}{{ image_filename }}" delegate_to: localhost # Run this locally to set a fact accessible globally - name: Destroy existing backup template VM (if it exists) ansible.builtin.shell: "qm destroy {{ vmid_backup_template }} --purge || true" # args: # warn: no # changed_when: false # Assume idempotency; if it didn't exist, no change failed_when: false # Don't fail if VM isn't found - name: Clone 'lastest' template to 'backup' template VMID ansible.builtin.command: > qm clone {{ vmid_latest_template }} {{ vmid_backup_template }} --name {{ vmname_backup_template }} --full # args: # creates: "/etc/pve/qemu-server/{{ vmid_backup_template }}.conf" # Idempotency check: only run if config file doesn't exist # failed_when: false # Don't fail if VM isn't found - name: Convert 'backup' template VM to a template ansible.builtin.command: "qm template {{ vmid_backup_template }}" - name: Destroy existing backup template VM (if it exists) ansible.builtin.shell: "qm destroy {{ vmid_backup_template }} --purge || true" - name: Restore VM from image to 'latest' template VMID ansible.builtin.command: > qmrestore {{ remote_image_path }} {{ vmid_latest_template }} --unique true # args: # creates: "/etc/pve/qemu-server/{{ vmid_latest_template }}.conf" # Idempotency check: only run if config file doesn't exist - name: Set CPU and memory for the base template VM ansible.builtin.command: > qm set {{ vmid_latest_template }} --cores {{ cpu_cores }} --memory {{ memory_mb }} --name {{ vmname_latest_template }} - name: Convert 'backup' template VM to a template ansible.builtin.command: "qm template {{ vmid_latest_template }}"