home lab init

This commit is contained in:
plasmagoat 2025-06-03 23:07:46 +02:00
commit 7278922625
65 changed files with 27336 additions and 0 deletions

View file

@ -0,0 +1,82 @@
- 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