homelab/ansible/books/clone-template.yml
plasmagoat 66387734d8
All checks were successful
Hello World / test (push) Successful in 32s
runner!
2025-06-06 23:53:55 +02:00

82 lines
2.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- name: Clone VM from Template
hosts: proxmox
become: true
vars_prompt:
- name: "template_vmid"
prompt: "Enter VMID for the template"
private: no
default: "9000"
- name: "new_vmid"
prompt: "Enter the new VMID"
private: no
default: "9001"
- name: "new_name"
prompt: "Enter name for the new VM"
private: no
default: "nixos-clone"
vars:
storage: "local-lvm"
tasks:
- name: Clone the template
ansible.builtin.command: >
qm clone {{ template_vmid }} {{ new_vmid }} --name {{ new_name }}
- name: Resize disk to 10G
ansible.builtin.command: >
qm resize {{ new_vmid }} virtio0 +5G
- name: Set cloud-init params
ansible.builtin.command: >
qm set {{ new_vmid }}
--ciuser root
--cipassword root
--sshkey /root/.ssh/id_rsa.pub
--ipconfig0 ip=dhcp
- name: Start the new VM
ansible.builtin.command: >
qm start {{ new_vmid }}
- name: Wait for QEMU Guest Agent to come online
retries: 20
delay: 5
ansible.builtin.shell: |
qm guest exec {{ new_vmid }} -- true
register: qga_check
until: qga_check.rc == 0
- name: Get IP addresses via QEMU Guest Agent
ansible.builtin.shell: |
qm guest cmd {{ new_vmid }} network-get-interfaces
register: qga_json
failed_when: qga_json.rc != 0
- name: Parse out eth0s IPv4 address
ansible.builtin.set_fact:
vm_ipv4: >-
{{
(
qga_json.stdout
| from_json
| selectattr('name','equalto','eth0')
| map(attribute='ip-addresses')
| first
| selectattr('ip-address-type','equalto','ipv4')
| map(attribute='ip-address')
| first
)
}}
- name: Show the VMs IP
ansible.builtin.debug:
msg: "VM {{ new_vmid }} ({{ new_name }}) reports IPv4: {{ vm_ipv4 }}"
- name: Add new VMs IP to in-memory inventory (for later tasks)
ansible.builtin.add_host:
name: "nixos-{{ new_vmid }}"
ansible_host: "{{ vm_ipv4 }}"
ansible_user: root