--- - 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 when: - register_name.stat.exists - not recreate - name: add new vm to hostvars include_tasks: create_hostvars.yml when: not recreate - 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 }}' 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 {{ image_capacity }} - 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: Create cloud-init configuration image command: genisoimage -output {{ images_dir }}/{{ vmname }}-cidata.iso -V cidata -r -J {{ images_dir }}/user-data {{ images_dir }}/meta-data become: true - name: Create the VM command: virt-install --name={{ vmname }} --ram={{ ram }} --vcpus={{ vcpus }} --import --disk path={{ images_dir }}{{ vmname }}.img,format=qcow2 --disk path={{ images_dir }}{{ vmname }}-cidata.iso,device=cdrom --os-variant {{ os }} --network bridge=br0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole