From 011885eed0033caa6a85c2ad12626c750117e4b7 Mon Sep 17 00:00:00 2001 From: Vezpi Date: Wed, 19 Aug 2026 12:49:29 +0000 Subject: [PATCH] add: cloudinit_template playbook --- ansible/proxmox/cloudinit_template.yml | 72 ++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ansible/proxmox/cloudinit_template.yml diff --git a/ansible/proxmox/cloudinit_template.yml b/ansible/proxmox/cloudinit_template.yml new file mode 100644 index 0000000..2cd4fcf --- /dev/null +++ b/ansible/proxmox/cloudinit_template.yml @@ -0,0 +1,72 @@ +--- +- name: Create or update a cloud-init Ubuntu template + hosts: zenith.mgmt.vezpi.com + become: true + gather_facts: false + vars: + template_vmid: 900 + template_os: ubuntu + os_release: noble + + template_name: "{{template_os}}-{{ os_release }}-cloud" + + image_filename: "{{ os_release }}-server-cloudimg-amd64.img" + image_url: "https://cloud-images.ubuntu.com/{{ os_release }}/current/{{ image_filename }}" + image_dest: "/var/lib/vz/template/iso/{{ image_filename }}" + + iso_storage: local + vm_storage: ceph-workload + + template_memory: 2048 + template_cores: 1 + + tasks: + - name: Download the current Ubuntu cloud image + ansible.builtin.get_url: + url: "{{ image_url }}" + dest: "{{ image_dest }}" + 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 + + - name: Rebuild the template + when: 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: > + qm create {{ template_vmid }} + --memory {{ template_memory }} + --core {{ template_cores }} + --net0 virtio,bridge=vmbr0 + --scsihw virtio-scsi-pci + --bios ovmf + --machine q35 + --efidisk0 {{ vm_storage }}:0,pre-enrolled-keys=0 + --name {{ template_name }} + changed_when: true + + - name: Import the cloud image as the primary disk + ansible.builtin.command: qm set {{ template_vmid }} --scsi0 {{ vm_storage }}:0,import-from={{ image_dest }} + + - name: Attach a cloud-init drive + ansible.builtin.command: qm set {{ template_vmid }} --scsi1 {{ vm_storage }}:cloudinit + + - name: Set boot order to the primary disk + ansible.builtin.command: qm set {{ template_vmid }} --boot order=scsi0 + + - name: Add serial console for cloud-init consoles + ansible.builtin.command: qm set {{ template_vmid }} --serial0 socket --vga serial0 + + - name: Convert the VM to a template + ansible.builtin.command: qm template {{ template_vmid }} +