Files
pve_deploy_vms/main.yml
2023-06-16 19:27:17 +02:00

111 lines
3.0 KiB
YAML

---
- name: Install required Pip modules
hosts: localhost
tasks:
- name: Install python-setup tools
package:
name:
- python3-setuptools
state: latest
- name: Install proxmoxer and requests modules
pip:
name:
- proxmoxer
- requests
state: present
- name: Create VM from template, update the ip and hardware, resize the disk,
hosts: all
gather_facts: false
vars_files:
- vars/proxmox.yml
- defaults/vm_sizing.yml
tasks:
- name: Create VM from template
proxmox_kvm:
node: "{{ node }}"
api_host: "{{ pve_host }}"
api_user: "{{ pve_user }}"
api_password: "{{ pve_password }}"
validate_certs: no
name: "{{ inventory_hostname }}"
storage: "{{ storage }}"
clone: "{{ clone }}"
onboot: true
register: vm_created
delegate_to: localhost
- name: Wait 10s for VM to be fully deployed
ansible.builtin.wait_for:
timeout: 10
delegate_to: localhost
- name: Update VM configuration
community.general.proxmox_kvm:
api_host: "{{ pve_host }}"
api_user: "{{ pve_user }}"
api_password: "{{ pve_password }}"
name: "{{ inventory_hostname }}"
node: "{{ node }}"
memory: "{{ vm_memory }}"
cores: "{{ vm_cores }}"
ipconfig:
ipconfig0: "{{ vm_ip_address }}"
update: true
delegate_to: localhost
- name: Update the disk size
community.general.proxmox_disk:
api_host: "{{ pve_host }}"
api_user: "{{ pve_user }}"
api_password: "{{ pve_password }}"
name: "{{ inventory_hostname }}"
disk: scsi0
backup: false
size: "{{ resize_root_disk_size }}"
state: resized
delegate_to: localhost
- name: Start the VM
community.general.proxmox_kvm:
api_host: "{{ pve_host }}"
api_user: "{{ pve_user }}"
api_password: "{{ pve_password }}"
name: "{{ inventory_hostname }}"
node: "{{ node }}"
state: started
delegate_to: localhost
- name: Wait 3 minutes for VM to start and install latest updates
ansible.builtin.wait_for:
timeout: 180
delegate_to: localhost
- name: Extract VM IP with regex
set_fact:
vm_ip: "{{ vm_ip_address | regex_replace('ip=(\\d+\\.\\d+\\.\\d+\\.\\d+)/.*', '\\1') }}"
delegate_to: localhost
- name: Get information about the VM
ansible.builtin.setup:
delegate_to: "{{ vm_ip }}"
become: true
- name: Install Quemu Guest Agent if virtualization type is kvm
ansible.builtin.apt:
update_cache: true
name: qemu-guest-agent
state: latest
when: ansible_virtualization_type == 'kvm'
delegate_to: "{{ vm_ip }}"
become: true
- name: Enable QEMU Guest Agent
ansible.builtin.systemd:
name: qemu-guest-agent
enabled: true
when: ansible_virtualization_type == 'kvm'
delegate_to: "{{ vm_ip }}"
become: true