--- - include_vars: vault - name: check if vm name exists in hostvars local_action: stat path="host_vars/{{ vmname }}" register: register_name - name: Stop if host_vars exist debug: msg: "The file or directory exists" failed_when: register_name.stat.exists - name: add new vm to hostvars include_tasks: create_hostvars.yml - name: install libvirt and co package: name: - libvirt-daemon-system - qemu-system - virtinst - qemu-utils - libvirt-clients - genisoimage state: latest become: true - name: Create images directory file: path: '{{ images_dir }}' state: directory owner: libvirt-qemu group: libvirt-qemu become: true - name: check for cloudimage find: age: -26w path: '{{ images_dir }}' pattern: '{{ base_image }}' register: recent_cloudimage - debug: msg: "{{ recent_cloudimage.matched }}" - name: download cloud image template, if none found or to old get_url: url: '{{ image_url }}' dest: '{{ images_dir }}' checksum: 'sha512:{{ image_checksum }}' owner: libvirt-qemu group: libvirt-qemu when: not recent_cloudimage.matched - name: Create VM image from base image command: qemu-img create -b {{ base_image }} -f qcow2 -F qcow2 {{ images_dir }}{{ vmname }}.img {{ hdd }} - name: Create user-data template: src: user-data.j2 dest: '{{ images_dir }}/user-data' - name: Create meta-data template: src: meta-data.j2 dest: '{{ images_dir }}/meta-data' - name: make sure setuid for qemu-bridge-helper is set file: path: /usr/lib/qemu/qemu-bridge-helper mode: 04755 become: true - name: Create the VM command: virt-install --name={{ vmname }} --ram={{ ram }} --vcpus={{ vcpus }} --import --disk path={{ images_dir }}{{ vmname }}.img,format=qcow2 --cloud-init meta-data={{ images_dir }}meta-data,user-data={{ images_dir }}user-data --os-variant {{ os }} --network bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole