- name: Check if {{ miq_image_path }} is directory stat: path: "{{ miq_image_path }}" register: image_path_st - name: Download the qcow image get_url: url: "{{ miq_qcow_url }}" dest: "{{ image_path_st.stat.isdir | ternary( miq_image_path~'/'~miq_qcow_url.rpartition('/')[-1], miq_image_path) | regex_replace('//', '/') }}" checksum: "{{ miq_image_checksum | default(omit) }}" register: downloaded_file - name: Check file type command: "/usr/bin/file {{ downloaded_file.dest | quote }}" changed_when: false register: filetype - name: Fail if image is not qcow fail: msg: "The downloaded file is not a valid QCOW file." when: '"QCOW" not in filetype.stdout' - name: Calculate image size in GiB set_fact: miq_image_size_gib: "{{ filetype.stdout_lines[0].split()[5] | int // 2**30 }}" # # Find default disk size for miq disk: # - block: - name: Extract integer from miq_vm_disk_size set_fact: miq_vm_disk_size_gib: "{{ miq_vm_disk_size | regex_replace('GiB$') }}" - name: Fail if miq_vm_disk_size is less than qcow size fail: msg: "Setting a disk size ({{ miq_vm_disk_size }}) lower than the image size ({{ miq_image_size_gib }}GiB) may result in disk corruption." when: "miq_vm_disk_size_gib < miq_image_size_gib" when: "miq_vm_disk_size is defined" # # Find default data storage domain for Miq disk: # - block: - name: Fetch storages ovirt_storage_domain_facts: auth: "{{ ovirt_auth }}" pattern: "Clusters.name={{ miq_vm_cluster }} and status=active" - name: Find data domain set_fact: disk_storage_domain: "{{ ovirt_storage_domains | json_query(the_query) | list | first }}" vars: the_query: "[?type=='data']" when: miq_vm_disk_storage is undefined - name: Check if VM already exists ovirt_vm_facts: auth: "{{ ovirt_auth }}" pattern: "name={{ miq_vm_name }}" - block: - name: Deploy the qcow image to oVirt engine ovirt_disk: auth: "{{ ovirt_auth }}" name: "{{ miq_vm_disk_name | default(miq_vm_name) }}" interface: "{{ miq_vm_disk_interface }}" size: "{{ miq_vm_disk_size | default(miq_image_size_gib + 'GiB') }}" format: "{{ miq_vm_disk_format }}" image_path: "{{ downloaded_file.dest }}" storage_domain: "{{ disk_storage_domain.name if disk_storage_domain is defined else miq_vm_disk_storage }}" force: "{{ ovirt_vms | length == 0 }}" register: ovirt_disk rescue: - name: Remove failed disk ovirt_disk: auth: "{{ ovirt_auth }}" state: absent name: "{{ miq_vm_disk_name | default(miq_vm_name) }}" - name: Set miq_disk_deploy_failed set_fact: miq_disk_deploy_failed: true