From 189d031b13ed14f10ceecb5a07256862b37374a2 Mon Sep 17 00:00:00 2001 From: Vezpi Date: Thu, 20 Aug 2026 19:29:24 +0000 Subject: [PATCH] feat: the template can be create on other hosts --- ansible/proxmox/cloudinit_template.yml | 57 ++++++++++++++++++++------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/ansible/proxmox/cloudinit_template.yml b/ansible/proxmox/cloudinit_template.yml index 2cd4fcf..343755f 100644 --- a/ansible/proxmox/cloudinit_template.yml +++ b/ansible/proxmox/cloudinit_template.yml @@ -1,8 +1,7 @@ --- - name: Create or update a cloud-init Ubuntu template - hosts: zenith.mgmt.vezpi.com + hosts: nodes become: true - gather_facts: false vars: template_vmid: 900 template_os: ubuntu @@ -21,6 +20,41 @@ template_cores: 1 tasks: + - name: Check whether the template VMID already exists + ansible.builtin.command: qm status {{ template_vmid }} + register: template_status + changed_when: false + failed_when: false + + - name: Check if the cloud image file exists + ansible.builtin.stat: + path: "{{ image_dest }}" + register: image_exists + changed_when: false + failed_when: false + + - name: Set candidate information + ansible.builtin.set_fact: + has_image_file: "{{ image_exists.stat.exists }}" + root_free_space: "{{ (ansible_mounts | selectattr('mount', 'equalto', '/') | first).size_available }}" + + - name: Select target host + ansible.builtin.set_fact: + target_host: >- + {{ (ansible_play_hosts + | map('extract', hostvars) + | selectattr('has_target_file', 'equalto', true) + | sort(attribute='root_free_space', reverse=true) + | map(attribute='inventory_hostname') + | first) + | default(ansible_play_hosts + | map('extract', hostvars) + | sort(attribute='root_free_space', reverse=true) + | map(attribute='inventory_hostname') + | first, + true) }} + run_once: true + - name: Download the current Ubuntu cloud image ansible.builtin.get_url: url: "{{ image_url }}" @@ -28,19 +62,18 @@ force: false mode: "0644" register: image_download - - - name: Check whether the template VMID already exists - ansible.builtin.command: qm status {{ template_vmid }} - register: template_status - changed_when: false - failed_when: false + when: inventory_hostname == target_host + + - name: Destroy existing template if present + ansible.builtin.command: qm destroy {{ template_vmid }} --purge + when: template_status.rc == 0 - name: Rebuild the template - when: image_download.changed or template_status.rc != 0 + when: + - inventory_hostname == target_host + - image_download.changed or + template_status.rc != 0 block: - - name: Destroy existing template if present - ansible.builtin.command: qm destroy {{ template_vmid }} --purge - when: template_status.rc == 0 - name: Create the base VM shell ansible.builtin.command: >