Initial commit
This commit is contained in:
41
roles/virtualization/tasks/libvirt.yml
Normal file
41
roles/virtualization/tasks/libvirt.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
- name: Check if VM disk exists
|
||||
delegate_to: localhost
|
||||
stat:
|
||||
path: "{{ storage_path | default('/var/lib/libvirt/images/') }}{{ hostname }}.qcow2"
|
||||
register: vm_disk_stat
|
||||
|
||||
- name: Create VM disk
|
||||
when: not vm_disk_stat.stat.exists
|
||||
delegate_to: localhost
|
||||
command: "qemu-img create -f qcow2 {{ storage_path | default('/var/lib/libvirt/images/') }}{{ hostname }}.qcow2 {{ vm_size }}G"
|
||||
|
||||
- name: Generate Random MAC Address
|
||||
delegate_to: localhost
|
||||
shell: openssl rand -hex 5 | sed 's/\(..\)/\1:/g; s/.$//' | sed 's/^/02:/'
|
||||
changed_when: false
|
||||
register: mac_address_output
|
||||
|
||||
- name: Render cloud config templates
|
||||
delegate_to: localhost
|
||||
template:
|
||||
src: "{{ item.src }}"
|
||||
dest: "/tmp/{{ item.dest_prefix }}-{{ hostname }}.yml"
|
||||
loop:
|
||||
- { 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
|
||||
command: "cloud-localds {{ storage_path | default('/var/lib/libvirt/images/') }}{{ hostname }}-cloudinit.iso /tmp/cloud-user-data-{{ hostname }}.yml -N /tmp/cloud-network-config-{{ hostname }}.yml"
|
||||
|
||||
- name: Create VM using libvirt
|
||||
delegate_to: localhost
|
||||
community.libvirt.virt:
|
||||
command: define
|
||||
xml: "{{ lookup('template', 'vm.xml.j2') }}"
|
||||
|
||||
- name: start vm
|
||||
delegate_to: localhost
|
||||
community.libvirt.virt:
|
||||
name: "{{ hostname }}"
|
||||
state: running
|
||||
2
roles/virtualization/tasks/main.yml
Normal file
2
roles/virtualization/tasks/main.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
- name: Create Virtual Machine
|
||||
include_tasks: "{{ hypervisor }}.yml"
|
||||
48
roles/virtualization/tasks/proxmox.yml
Normal file
48
roles/virtualization/tasks/proxmox.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
- name: Deploy VM on Proxmox
|
||||
delegate_to: localhost
|
||||
proxmox_kvm:
|
||||
api_host: "{{ hypervisor_url }}"
|
||||
api_user: "{{ hypervisor_username }}"
|
||||
api_password: "{{ hypervisor_password }}"
|
||||
ciuser: "{{ user_name }}"
|
||||
cipassword: "{{ user_password }}"
|
||||
ciupgrade: 0
|
||||
node: "{{ hypervisor_node }}" # Proxmox node name
|
||||
vmid: "{{ vm_id }}" # Unique ID for the VM
|
||||
name: "{{ hostname }}" # Name of the VM
|
||||
cpu: "host"
|
||||
cores: "{{ vm_cpus }}" # Number of CPU cores
|
||||
memory: "{{ vm_memory }}" # Memory size in MB
|
||||
numa_enabled: true
|
||||
hotplug: "network,disk"
|
||||
bios: ovmf
|
||||
boot: "ac"
|
||||
scsihw: "virtio-scsi-single"
|
||||
scsi:
|
||||
scsi0: "{{ hypervisor_storage }}:{{ vm_size }}" # Disk configuration
|
||||
efidisk0:
|
||||
efitype: "4m"
|
||||
format: "raw"
|
||||
pre_enrolled_keys: false
|
||||
storage: "{{ hypervisor_storage }}"
|
||||
ide:
|
||||
ide0: "{{ boot_iso }},media=cdrom"
|
||||
ide1: "{{ hypervisor_storage }}:cloudinit"
|
||||
net:
|
||||
net0: "virtio,bridge={{ vm_nif }}{% if vlan_name is defined and vlan_name %},tag={{ vlan_name }}{% endif %}"
|
||||
ipconfig:
|
||||
ipconfig0: "ip={{ vm_ip }},gw={{ vm_gw }}"
|
||||
nameservers: "{{ vm_dns }}"
|
||||
onboot: true # Start the VM on boot
|
||||
state: present # Ensure the VM is present
|
||||
|
||||
- name: Start VM on Proxmox
|
||||
delegate_to: localhost
|
||||
proxmox_kvm:
|
||||
api_host: "{{ hypervisor_url }}"
|
||||
api_user: "{{ hypervisor_username }}"
|
||||
api_password: "{{ hypervisor_password }}"
|
||||
node: "{{ hypervisor_node }}"
|
||||
name: "{{ hostname }}"
|
||||
vmid: "{{ vm_id }}"
|
||||
state: started # Ensure the VM is present
|
||||
33
roles/virtualization/tasks/vmware.yml
Normal file
33
roles/virtualization/tasks/vmware.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
- name: Create VM in vCenter
|
||||
delegate_to: localhost
|
||||
vmware_guest:
|
||||
hostname: "{{ hypervisor_url }}"
|
||||
username: "{{ hypervisor_username }}"
|
||||
password: "{{ hypervisor_password }}"
|
||||
validate_certs: no
|
||||
datacenter: "{{ hypervisor_cluster }}"
|
||||
cluster: "{{ hypervisor_node }}"
|
||||
folder: "{{ vm_path }}"
|
||||
name: "{{ hostname }}"
|
||||
guest_id: "otherGuest64"
|
||||
state: poweredon
|
||||
disk:
|
||||
- size_gb: "{{ vm_size }}"
|
||||
type: thin
|
||||
datastore: "{{ hypervisor_storage }}"
|
||||
hardware:
|
||||
memory_mb: "{{ vm_memory }}"
|
||||
num_cpus: "{{ vm_cpus }}"
|
||||
boot_firmware: "efi"
|
||||
secure_boot: false
|
||||
cdrom:
|
||||
- controller_number: 0
|
||||
unit_number: 0
|
||||
controller_type: "sata"
|
||||
state: present
|
||||
type: iso
|
||||
iso_path: "{{ boot_iso }}"
|
||||
networks:
|
||||
- vlan: "{{ vlan_name }}"
|
||||
type: dhcp
|
||||
ignore_errors: yes
|
||||
Reference in New Issue
Block a user