refactor(vars): add system/hypervisor dict inputs
This commit is contained in:
@@ -1,5 +1,31 @@
|
||||
---
|
||||
- name: Create VM disk
|
||||
- name: Build disk definitions
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_libvirt_disks: "{{ virtualization_libvirt_disks | default([]) + [virtualization_libvirt_disk_cfg] }}"
|
||||
vars:
|
||||
device_letter_map: "abcdefghijklmnopqrstuvwxyz"
|
||||
device_letter: "{{ device_letter_map[ansible_loop.index0] }}"
|
||||
virtualization_libvirt_disk_cfg: >-
|
||||
{{
|
||||
{
|
||||
'path': (
|
||||
virtualization_libvirt_disk_path
|
||||
if ansible_loop.index0 == 0
|
||||
else ([virtualization_libvirt_image_dir, hostname ~ '-disk' ~ ansible_loop.index0 ~ '.qcow2'] | ansible.builtin.path_join)
|
||||
),
|
||||
'target': 'vd' ~ device_letter,
|
||||
'bus': 'virtio',
|
||||
'format': 'qcow2',
|
||||
'size': (item.size | float)
|
||||
}
|
||||
}}
|
||||
loop: "{{ system_cfg.disks }}"
|
||||
loop_control:
|
||||
label: "{{ item | to_json }}"
|
||||
extended: true
|
||||
changed_when: false
|
||||
|
||||
- name: Create VM disks
|
||||
delegate_to: localhost
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
@@ -7,19 +33,22 @@
|
||||
- create
|
||||
- -f
|
||||
- qcow2
|
||||
- "{{ virtualization_libvirt_disk_path }}"
|
||||
- "{{ vm_size }}G"
|
||||
creates: "{{ virtualization_libvirt_disk_path }}"
|
||||
- "{{ item.path }}"
|
||||
- "{{ item.size }}G"
|
||||
creates: "{{ item.path }}"
|
||||
loop: "{{ virtualization_libvirt_disks }}"
|
||||
loop_control:
|
||||
label: "{{ item.path }}"
|
||||
|
||||
- name: Render cloud config templates
|
||||
delegate_to: localhost
|
||||
ansible.builtin.template:
|
||||
src: "{{ item.src }}"
|
||||
dest: /tmp/{{ item.dest_prefix }}-{{ hostname }}.yml
|
||||
mode: '0644'
|
||||
mode: "0644"
|
||||
loop:
|
||||
- {src: cloud-user-data.yml.j2, dest_prefix: cloud-user-data}
|
||||
- {src: cloud-network-config.yml.j2, dest_prefix: cloud-network-config}
|
||||
- { src: cloud-user-data.yml.j2, dest_prefix: cloud-user-data }
|
||||
- { src: cloud-network-config.yml.j2, dest_prefix: cloud-network-config }
|
||||
|
||||
- name: Create cloud-init disk
|
||||
delegate_to: localhost
|
||||
@@ -43,3 +72,9 @@
|
||||
community.libvirt.virt:
|
||||
name: "{{ hostname }}"
|
||||
state: running
|
||||
register: virtualization_libvirt_start_result
|
||||
|
||||
- name: Set VM created fact
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_vm_created_in_run: true
|
||||
when: virtualization_libvirt_start_result is defined and virtualization_libvirt_start_result.changed | bool
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
- name: Deploy VM on Proxmox
|
||||
delegate_to: localhost
|
||||
vars:
|
||||
virtualization_dns_value: "{{ vm_dns if vm_dns is defined else '' }}"
|
||||
virtualization_dns_value: "{{ system_cfg.dns_servers if system_cfg.dns_servers is defined else '' }}"
|
||||
virtualization_dns_list_raw: >-
|
||||
{{
|
||||
virtualization_dns_value
|
||||
@@ -11,7 +11,7 @@
|
||||
}}
|
||||
virtualization_dns_list: >-
|
||||
{{ virtualization_dns_list_raw | map('trim') | reject('equalto', '') | list }}
|
||||
virtualization_search_value: "{{ vm_dns_search if vm_dns_search is defined else '' }}"
|
||||
virtualization_search_value: "{{ system_cfg.dns_search if system_cfg.dns_search is defined else '' }}"
|
||||
virtualization_search_list_raw: >-
|
||||
{{
|
||||
virtualization_search_value
|
||||
@@ -20,6 +20,12 @@
|
||||
}}
|
||||
virtualization_search_list: >-
|
||||
{{ virtualization_search_list_raw | map('trim') | reject('equalto', '') | list }}
|
||||
virtualization_proxmox_scsi: >-
|
||||
{%- set out = {} -%}
|
||||
{%- for disk in system_cfg.disks -%}
|
||||
{%- set _ = out.update({ 'scsi' ~ loop.index0: hypervisor_storage ~ ':' ~ (disk.size | int) }) -%}
|
||||
{%- endfor -%}
|
||||
{{ out }}
|
||||
community.proxmox.proxmox_kvm:
|
||||
api_host: "{{ hypervisor_url }}"
|
||||
api_user: "{{ hypervisor_username }}"
|
||||
@@ -28,12 +34,12 @@
|
||||
cipassword: "{{ user_password }}"
|
||||
ciupgrade: false
|
||||
node: "{{ hypervisor_node }}"
|
||||
vmid: "{{ vm_id }}"
|
||||
vmid: "{{ system_cfg.id }}"
|
||||
name: "{{ hostname }}"
|
||||
cpu: host
|
||||
cores: "{{ vm_cpus }}"
|
||||
memory: "{{ vm_memory }}"
|
||||
balloon: "{{ vm_ballo if vm_ballo is defined and vm_ballo | int > 0 else omit }}"
|
||||
cores: "{{ system_cfg.cpus }}"
|
||||
memory: "{{ system_cfg.memory_mb }}"
|
||||
balloon: "{{ system_cfg.balloon_mb if system_cfg.balloon_mb is defined and system_cfg.balloon_mb | int > 0 else omit }}"
|
||||
numa_enabled: true
|
||||
hotplug: network,disk
|
||||
update: "{{ virtualization_tpm2_enabled | bool }}"
|
||||
@@ -42,8 +48,7 @@
|
||||
machine: "{{ 'q35' if virtualization_tpm2_enabled | bool else omit }}"
|
||||
boot: ac
|
||||
scsihw: virtio-scsi-single
|
||||
scsi:
|
||||
scsi0: "{{ hypervisor_storage }}:{{ vm_size }}"
|
||||
scsi: "{{ virtualization_proxmox_scsi }}"
|
||||
efidisk0:
|
||||
efitype: 4m
|
||||
format: raw
|
||||
@@ -60,13 +65,14 @@
|
||||
ide1: "{{ rhel_iso + ',media=cdrom' if rhel_iso is defined and rhel_iso | length > 0 else omit }}"
|
||||
ide2: "{{ hypervisor_storage }}:cloudinit"
|
||||
net:
|
||||
net0: virtio,bridge={{ vm_nif }}{% if vlan_name is defined and vlan_name | length > 0 %},tag={{ vlan_name }}{% endif %}
|
||||
net0: >-
|
||||
virtio,bridge={{ system_cfg.network }}{% if system_cfg.vlan is defined and system_cfg.vlan | string | length > 0 %},tag={{ system_cfg.vlan }}{% endif %}
|
||||
ipconfig:
|
||||
ipconfig0: >-
|
||||
{{
|
||||
'ip=' ~ vm_ip ~ '/' ~ vm_nms
|
||||
~ (',gw=' ~ vm_gw if vm_gw is defined and vm_gw | length else '')
|
||||
if vm_ip is defined and vm_ip | length
|
||||
'ip=' ~ system_cfg.ip ~ '/' ~ system_cfg.prefix
|
||||
~ (',gw=' ~ system_cfg.gateway if system_cfg.gateway is defined and system_cfg.gateway | length else '')
|
||||
if system_cfg.ip is defined and system_cfg.ip | string | length
|
||||
else 'ip=dhcp'
|
||||
}}
|
||||
nameservers: "{{ virtualization_dns_list if virtualization_dns_list | length else omit }}"
|
||||
@@ -82,5 +88,11 @@
|
||||
api_password: "{{ hypervisor_password }}"
|
||||
node: "{{ hypervisor_node }}"
|
||||
name: "{{ hostname }}"
|
||||
vmid: "{{ vm_id }}"
|
||||
vmid: "{{ system_cfg.id }}"
|
||||
state: started
|
||||
register: virtualization_proxmox_start_result
|
||||
|
||||
- name: Set VM created fact
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_vm_created_in_run: true
|
||||
when: virtualization_proxmox_start_result is defined and virtualization_proxmox_start_result.changed | bool
|
||||
|
||||
@@ -1,26 +1,36 @@
|
||||
---
|
||||
- name: Build vCenter disk list
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_vmware_disks: "{{ virtualization_vmware_disks | default([]) + [virtualization_vmware_disk_cfg] }}"
|
||||
vars:
|
||||
virtualization_vmware_disk_cfg:
|
||||
size_gb: "{{ item.size | int }}"
|
||||
type: thin
|
||||
datastore: "{{ hypervisor_storage }}"
|
||||
loop: "{{ system_cfg.disks }}"
|
||||
loop_control:
|
||||
label: "{{ item | to_json }}"
|
||||
changed_when: false
|
||||
|
||||
- name: Create VM in vCenter
|
||||
delegate_to: localhost
|
||||
community.vmware.vmware_guest:
|
||||
hostname: "{{ hypervisor_url }}"
|
||||
username: "{{ hypervisor_username }}"
|
||||
password: "{{ hypervisor_password }}"
|
||||
validate_certs: false
|
||||
validate_certs: "{{ hypervisor_validate_certs }}"
|
||||
datacenter: "{{ hypervisor_datacenter }}"
|
||||
cluster: "{{ hypervisor_cluster }}"
|
||||
folder: "{{ vm_path if vm_path is defined and vm_path | length > 0 else omit }}"
|
||||
folder: "{{ system_cfg.path if system_cfg.path | string | length > 0 else omit }}"
|
||||
name: "{{ hostname }}"
|
||||
guest_id: otherLinux64Guest
|
||||
annotation: |
|
||||
{{ note if note is defined else '' }}
|
||||
state: "{{ 'poweredoff' if virtualization_tpm2_enabled | bool else 'poweredon' }}"
|
||||
disk:
|
||||
- size_gb: "{{ vm_size }}"
|
||||
type: thin
|
||||
datastore: "{{ hypervisor_storage }}"
|
||||
disk: "{{ virtualization_vmware_disks }}"
|
||||
hardware:
|
||||
memory_mb: "{{ vm_memory }}"
|
||||
num_cpus: "{{ vm_cpus }}"
|
||||
memory_mb: "{{ system_cfg.memory_mb }}"
|
||||
num_cpus: "{{ system_cfg.cpus }}"
|
||||
boot_firmware: efi
|
||||
secure_boot: false
|
||||
cdrom: >-
|
||||
@@ -44,9 +54,18 @@
|
||||
} ] if rhel_iso is defined and rhel_iso | length > 0 else [] )
|
||||
}}
|
||||
networks:
|
||||
- name: "{{ vm_nif }}"
|
||||
- name: "{{ system_cfg.network }}"
|
||||
type: dhcp
|
||||
vlan: "{{ vlan_name if vlan_name is defined and vlan_name | length > 0 else omit }}"
|
||||
vlan: "{{ system_cfg.vlan if system_cfg.vlan is defined and system_cfg.vlan | string | length > 0 else omit }}"
|
||||
register: virtualization_vmware_create_result
|
||||
|
||||
- name: Set VM created fact when VM was powered on during creation
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_vm_created_in_run: true
|
||||
when:
|
||||
- virtualization_vmware_create_result is defined
|
||||
- not virtualization_tpm2_enabled | bool
|
||||
- virtualization_vmware_create_result.changed | bool
|
||||
|
||||
- name: Ensure vTPM2 is enabled when required
|
||||
when: virtualization_tpm2_enabled | bool
|
||||
@@ -55,9 +74,9 @@
|
||||
hostname: "{{ hypervisor_url }}"
|
||||
username: "{{ hypervisor_username }}"
|
||||
password: "{{ hypervisor_password }}"
|
||||
validate_certs: false
|
||||
validate_certs: "{{ hypervisor_validate_certs }}"
|
||||
datacenter: "{{ hypervisor_datacenter }}"
|
||||
folder: "{{ vm_path if vm_path is defined and vm_path | length > 0 else omit }}"
|
||||
folder: "{{ system_cfg.path if system_cfg.path | string | length > 0 else omit }}"
|
||||
name: "{{ hostname }}"
|
||||
state: present
|
||||
|
||||
@@ -68,7 +87,16 @@
|
||||
hostname: "{{ hypervisor_url }}"
|
||||
username: "{{ hypervisor_username }}"
|
||||
password: "{{ hypervisor_password }}"
|
||||
validate_certs: false
|
||||
validate_certs: "{{ hypervisor_validate_certs }}"
|
||||
datacenter: "{{ hypervisor_datacenter }}"
|
||||
name: "{{ hostname }}"
|
||||
state: powered-on
|
||||
register: virtualization_vmware_start_result
|
||||
|
||||
- name: Set VM created fact when VM was started separately (TPM2 case)
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_vm_created_in_run: true
|
||||
when:
|
||||
- virtualization_tpm2_enabled | bool
|
||||
- virtualization_vmware_start_result is defined
|
||||
- virtualization_vmware_start_result.changed | bool
|
||||
|
||||
77
roles/virtualization/tasks/xen.yml
Normal file
77
roles/virtualization/tasks/xen.yml
Normal file
@@ -0,0 +1,77 @@
|
||||
---
|
||||
- name: Deploy VM on Xen
|
||||
block:
|
||||
- name: Build disk definitions
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_xen_disks: "{{ virtualization_xen_disks | default([]) + [virtualization_xen_disk_cfg] }}"
|
||||
vars:
|
||||
device_letter_map: "abcdefghijklmnopqrstuvwxyz"
|
||||
device_letter: "{{ device_letter_map[ansible_loop.index0] }}"
|
||||
virtualization_xen_disk_cfg: >-
|
||||
{{
|
||||
{
|
||||
'path': (
|
||||
virtualization_xen_disk_path ~ '/' ~ hostname ~ '.qcow2'
|
||||
if ansible_loop.index0 == 0
|
||||
else virtualization_xen_disk_path ~ '/' ~ hostname ~ '-disk' ~ ansible_loop.index0 ~ '.qcow2'
|
||||
),
|
||||
'target': 'xvd' ~ device_letter,
|
||||
'size': (item.size | float)
|
||||
}
|
||||
}}
|
||||
loop: "{{ system_cfg.disks }}"
|
||||
loop_control:
|
||||
label: "{{ item | to_json }}"
|
||||
extended: true
|
||||
changed_when: false
|
||||
|
||||
- name: Create VM disks for Xen
|
||||
delegate_to: localhost
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- qemu-img
|
||||
- create
|
||||
- -f
|
||||
- qcow2
|
||||
- "{{ item.path }}"
|
||||
- "{{ item.size }}G"
|
||||
creates: "{{ item.path }}"
|
||||
loop: "{{ virtualization_xen_disks }}"
|
||||
loop_control:
|
||||
label: "{{ item.path }}"
|
||||
|
||||
- name: Render Xen VM configuration
|
||||
delegate_to: localhost
|
||||
vars:
|
||||
xen_installer_media_enabled: true
|
||||
ansible.builtin.template:
|
||||
src: xen.cfg.j2
|
||||
dest: /tmp/xen-{{ hostname }}.cfg
|
||||
mode: "0644"
|
||||
|
||||
- name: Create Xen VM
|
||||
delegate_to: localhost
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- xl
|
||||
- create
|
||||
- /tmp/xen-{{ hostname }}.cfg
|
||||
register: virtualization_xen_create_result
|
||||
changed_when: virtualization_xen_create_result.rc == 0
|
||||
|
||||
- name: Ensure VM is running
|
||||
delegate_to: localhost
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- xl
|
||||
- list
|
||||
register: virtualization_xen_list_result
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Set VM created fact
|
||||
ansible.builtin.set_fact:
|
||||
virtualization_vm_created_in_run: true
|
||||
when:
|
||||
- virtualization_xen_list_result is defined
|
||||
- hostname in virtualization_xen_list_result.stdout
|
||||
Reference in New Issue
Block a user