91 lines
2.5 KiB
YAML
91 lines
2.5 KiB
YAML
---
|
|
- name: Resolve Image Variables (List)
|
|
set_fact:
|
|
_image_url: "{{ image_list[image_alias].url }}"
|
|
_image_name: "{{ image_list[image_alias].filename }}"
|
|
when: image_source_type == 'list'
|
|
|
|
- name: Resolve Image Variables (URL)
|
|
set_fact:
|
|
_image_url: "{{ custom_image_url }}"
|
|
_image_name: "{{ custom_image_name }}"
|
|
when: image_source_type == 'url'
|
|
|
|
- name: Check if template already exists
|
|
command: "qm status {{ template_id }}"
|
|
register: vm_status
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Fail if template ID exists
|
|
fail:
|
|
msg: "VM ID {{ template_id }} already exists. Please delete it or choose a different ID."
|
|
when: vm_status.rc == 0
|
|
|
|
- name: Download Cloud Image
|
|
get_url:
|
|
url: "{{ _image_url }}"
|
|
dest: "/tmp/{{ _image_name }}"
|
|
mode: '0644'
|
|
|
|
- name: Install libguestfs-tools (for virt-customize if needed)
|
|
apt:
|
|
name: libguestfs-tools
|
|
state: present
|
|
ignore_errors: yes
|
|
|
|
- name: Create VM with hardware config
|
|
command: >
|
|
qm create {{ template_id }}
|
|
--name "{{ template_name }}"
|
|
--memory {{ template_memory }}
|
|
--core {{ template_cores }}
|
|
--net0 virtio,bridge=vmbr0
|
|
--scsihw virtio-scsi-pci
|
|
--ostype l26
|
|
--serial0 socket --vga serial0
|
|
|
|
- name: Import Disk
|
|
command: "qm importdisk {{ template_id }} /tmp/{{ _image_name }} {{ storage_pool }}"
|
|
|
|
- name: Attach Disk to SCSI
|
|
command: "qm set {{ template_id }} --scsi0 {{ storage_pool }}:vm-{{ template_id }}-disk-0"
|
|
|
|
- name: Add Cloud-Init Drive
|
|
command: "qm set {{ template_id }} --ide2 {{ storage_pool }}:cloudinit"
|
|
|
|
- name: Set Boot Order
|
|
command: "qm set {{ template_id }} --boot c --bootdisk scsi0"
|
|
|
|
- name: Configure Cloud-Init (Optional Admin Key)
|
|
block:
|
|
- name: Prepare SSH Keys File
|
|
copy:
|
|
content: "{{ admin_ssh_key }}"
|
|
dest: "/tmp/ssh_key_{{ template_id }}.pub"
|
|
mode: '0600'
|
|
|
|
- name: Set SSH Keys on Template
|
|
command: "qm set {{ template_id }} --sshkeys /tmp/ssh_key_{{ template_id }}.pub"
|
|
|
|
- name: Cleanup Key File
|
|
file:
|
|
path: "/tmp/ssh_key_{{ template_id }}.pub"
|
|
state: absent
|
|
when: embed_admin_ssh_key | bool and admin_ssh_key | length > 0
|
|
|
|
- name: Set Cloud-Init IP Config (DHCP)
|
|
command: "qm set {{ template_id }} --ipconfig0 ip=dhcp"
|
|
|
|
- name: Resize Disk (to Minimum 10G)
|
|
command: "qm resize {{ template_id }} scsi0 10G"
|
|
ignore_errors: yes
|
|
|
|
- name: Convert to Template
|
|
command: "qm template {{ template_id }}"
|
|
|
|
- name: Remove Downloaded Image
|
|
file:
|
|
path: "/tmp/{{ _image_name }}"
|
|
state: absent
|