115 lines
3.2 KiB
YAML
115 lines
3.2 KiB
YAML
---
|
|
### Setup needs to be done if task is run from ansible-semaphore docker container
|
|
# FIXME NOT WORKING ON Semaphore in docker yet
|
|
# - name: Install required Pip modules
|
|
# hosts: localhost
|
|
# tasks:
|
|
# - name: Install python-setup tools
|
|
# remote_user: semaphore
|
|
# package:
|
|
# name:
|
|
# - python3-setuptools
|
|
# state: latest
|
|
|
|
# - name: Install proxmoxer and requests modules
|
|
# remote_user: semaphore
|
|
# 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 |