feat: the template can be create on other hosts

This commit is contained in:
2026-08-20 19:29:24 +00:00
parent 011885eed0
commit 189d031b13
+45 -12
View File
@@ -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: >