Files
ansible_proxmox_VM/tasks/helpers.yml

167 lines
5.5 KiB
YAML
Raw Normal View History

---
# helpers.yml - Utility tasks for common operations
# Usage:
# - name: Check if VM exists
# include_tasks: helpers.yml
# vars:
# helper_task: check_vm_exists
# target_vm_id: "{{ vm_id }}"
##################################################################
# CHECK VM EXISTS
##################################################################
- name: "[HELPER] Check VM exists"
block:
- name: "[HELPER] Stat VM config file"
2025-11-15 21:49:12 +01:00
ansible.builtin.stat:
path: "/etc/pve/qemu-server/{{ target_vm_id }}.conf"
register: vm_config
changed_when: false
- name: "[HELPER] Set fact: vm_exists"
2025-11-15 21:49:12 +01:00
ansible.builtin.set_fact:
vm_exists: "{{ vm_config.stat.exists }}"
when: helper_task == "check_vm_exists"
##################################################################
# CHECK IF VM IS TEMPLATE
##################################################################
- name: "[HELPER] Check if VM is template"
block:
- name: "[HELPER] Query VM template status"
2025-11-15 21:49:12 +01:00
ansible.builtin.shell: "qm config {{ target_vm_id }} | grep -q '^template: 1$'"
changed_when: false
failed_when: false
register: template_check
- name: "[HELPER] Set fact: is_template"
2025-11-15 21:49:12 +01:00
ansible.builtin.set_fact:
is_template: "{{ template_check.rc == 0 }}"
when: helper_task == "check_template"
##################################################################
# CHECK VM STATUS
##################################################################
- name: "[HELPER] Check VM running status"
block:
- name: "[HELPER] Query VM status"
2025-11-15 21:49:12 +01:00
ansible.builtin.shell: "qm status {{ target_vm_id }} | grep -oP 'status: \\K\\w+'"
changed_when: false
register: vm_status_cmd
- name: "[HELPER] Set fact: vm_status"
2025-11-15 21:49:12 +01:00
ansible.builtin.set_fact:
vm_status: "{{ vm_status_cmd.stdout | default('unknown') }}"
when: helper_task == "check_vm_status"
##################################################################
# CHECK STORAGE AVAILABLE
##################################################################
- name: "[HELPER] Check storage space"
block:
- name: "[HELPER] Query storage status"
2025-11-15 21:49:12 +01:00
ansible.builtin.command: "pvesm status {{ storage_name }}"
changed_when: false
register: storage_status
- name: "[HELPER] Extract available space"
2025-11-15 21:49:12 +01:00
ansible.builtin.set_fact:
storage_available: "{{ storage_status.stdout_lines[1].split()[1] | int }}"
when: helper_task == "check_storage"
##################################################################
# VALIDATE VM ID
##################################################################
- name: "[HELPER] Validate VM ID"
block:
- name: "[HELPER] Check VM ID format"
2025-11-15 21:49:12 +01:00
ansible.builtin.assert:
that:
- target_vm_id | int >= 100
- target_vm_id | int <= 999999
fail_msg: "Invalid VM ID {{ target_vm_id }}. Must be between 100 and 999999"
- name: "[HELPER] Check if ID already in use"
2025-11-15 21:49:12 +01:00
ansible.builtin.stat:
path: "/etc/pve/qemu-server/{{ target_vm_id }}.conf"
register: id_check
changed_when: false
- name: "[HELPER] Warn if ID exists"
2025-11-15 21:49:12 +01:00
ansible.builtin.debug:
msg: "WARNING: VM ID {{ target_vm_id }} already exists"
when: id_check.stat.exists
when: helper_task == "validate_vm_id"
##################################################################
# GET VM INFO
##################################################################
- name: "[HELPER] Get VM information"
block:
- name: "[HELPER] Read VM config"
2025-11-15 21:49:12 +01:00
ansible.builtin.slurp:
src: "/etc/pve/qemu-server/{{ target_vm_id }}.conf"
register: vm_config_file
changed_when: false
- name: "[HELPER] Parse VM config"
2025-11-15 21:49:12 +01:00
ansible.builtin.set_fact:
vm_info: "{{ vm_config_file.content | b64decode }}"
when: helper_task == "get_vm_info"
##################################################################
# LIST ALL VMS
##################################################################
- name: "[HELPER] List all VMs"
block:
- name: "[HELPER] Get VM list"
2025-11-15 21:49:12 +01:00
ansible.builtin.command: "qm list"
changed_when: false
register: vm_list_output
- name: "[HELPER] Parse VM list"
2025-11-15 21:49:12 +01:00
ansible.builtin.set_fact:
vm_list: "{{ vm_list_output.stdout_lines[1:] }}"
when: helper_task == "list_vms"
##################################################################
# CLEANUP SNIPPETS
##################################################################
- name: "[HELPER] Cleanup Cloud-Init snippets"
block:
- name: "[HELPER] Remove old snippets for VM"
2025-11-15 21:49:12 +01:00
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- "/var/lib/vz/snippets/{{ target_vm_id }}-user.yaml"
- "/var/lib/vz/snippets/{{ target_vm_id }}-vendor.yaml"
- "/var/lib/vz/snippets/{{ target_vm_id }}-sshkey.pub"
when: helper_task == "cleanup_snippets"
##################################################################
# CHECK IF DISK IS ATTACHED
##################################################################
- name: "[HELPER] Check if disk is attached to VM"
block:
- name: "[HELPER] Query VM config for disk attachment"
ansible.builtin.shell: "qm config {{ target_vm_id }} | grep -q '^scsi0:'"
changed_when: false
failed_when: false
register: disk_check
- name: "[HELPER] Set fact: disk_attached"
ansible.builtin.set_fact:
disk_attached: "{{ disk_check.rc == 0 }}"
when: helper_task == "check_disk_attached"