ansible-test/roles/virt_vm/tasks/create_vm.yml

104 lines
2.4 KiB
YAML

---
# VM PREPARATION
- name: create vm storage
delegate_to: "{{ virt.host }}"
copy:
src: "{{ libvirt.images }}/{{ virt.image }}"
dest: "{{ libvirt.images }}/{{ inventory_hostname }}.qcow2"
force: no
- name: set vm storage size
delegate_to: "{{ virt.host }}"
shell:
cmd: qemu-img resize "{{ libvirt.images }}/{{ inventory_hostname }}.qcow2" "{{ virt.hdd }}"
- name: define vm
delegate_to: "{{ virt.host }}"
virt:
name: "{{ inventory_hostname }}"
xml: '{{ lookup("template", "fedora-34.xml.j2") }}'
command: define
- name: make temp dir for cloud-init (CI)
delegate_to: "{{ virt.host }}"
tempfile:
state: directory
register: cidata
# CLOUD-INIT PREPARATION
- name: create CI-metadata
delegate_to: "{{ virt.host }}"
template:
src: ci-metadata.j2
dest: "{{ cidata.path }}/meta-data"
- name: create CI-userdata
delegate_to: "{{ virt.host }}"
template:
src: ci-userdata.j2
dest: "{{ cidata.path }}/user-data"
- name: create CI-network-config
delegate_to: "{{ virt.host }}"
template:
src: ci-networkconfig.j2
dest: "{{ cidata.path }}/network-config"
- name: create CI ISO
delegate_to: "{{ virt.host }}"
shell:
cmd: genisoimage -output "{{ libvirt.images }}/{{ inventory_hostname }}-cidata.iso" -volid cidata -joliet -rock user-data meta-data network-config
chdir: "{{ cidata.path }}"
# VM INIT
- name: attach CI to vm
delegate_to: "{{ virt.host }}"
shell:
cmd: virsh change-media "{{ inventory_hostname }}" sda --source "{{ libvirt.images }}/{{ inventory_hostname }}-cidata.iso" --insert --config
- name: define vm
delegate_to: "{{ virt.host }}"
virt:
name: "{{ inventory_hostname }}"
state: running
- name: ping VM
delegate_to: "{{ virt.host }}"
shell:
cmd: "ping -c 2 {{ ansible_host }}"
register: pingcmd
retries: 12
delay: 10
until: pingcmd.rc == 0
# CLOUD-INIT CLEANUP
- name: detach CI from vm
delegate_to: "{{ virt.host }}"
shell:
cmd: virsh change-media "{{ inventory_hostname }}" sda --eject
- name: shutdown VM
delegate_to: "{{ virt.host }}"
virt:
name: "{{ inventory_hostname }}"
state: shutdown
- name: delete CI temp dir
delegate_to: "{{ virt.host }}"
file:
path: "{{ cidata.path }}"
state: absent
force: true
- name: delete CI ISO
delegate_to: "{{ virt.host }}"
file:
path: "{{ libvirt.images }}/{{ inventory_hostname }}-cidata.iso"
state: absent