Files
toallab-automation/roles/ovirt.manageiq/tasks/deploy_qcow2.yml
2019-08-31 19:22:32 -04:00

85 lines
2.7 KiB
YAML

- 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