WIP3
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: convert to template
|
||||
ovirt_template:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ template.name }}"
|
||||
vm: "{{ template.name }}"
|
||||
cluster: "{{ providers.ovirt.cluster }}"
|
||||
timeout: "{{ template_convert_timeout }}"
|
||||
seal: "{{ template_convert_seal }}"
|
||||
when: template is defined
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
|
||||
- block:
|
||||
- name: remove iso file from data_domain
|
||||
ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ iso_file }}"
|
||||
storage_domain: "{{ providers.ovirt.data_domain | default('data_domain') }}"
|
||||
state: absent
|
||||
rescue:
|
||||
- include_tasks: wait_iso_disk_unlock_pre29.yml
|
||||
when: ansible_version.full is version('2.9', '<')
|
||||
|
||||
- include_tasks: wait_iso_disk_unlock.yml
|
||||
when: ansible_version.full is version('2.9', '>=')
|
||||
|
||||
- name: remove iso file from data_domain
|
||||
ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ iso_file }}"
|
||||
storage_domain: "{{ providers.ovirt.data_domain | default('data_domain') }}"
|
||||
state: absent
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
|
||||
- name: upload iso file to data_domain
|
||||
ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ iso_file }}"
|
||||
upload_image_path: "{{ playbook_dir }}/{{ temp_directory }}/windows_{{ windows_distro_name }}_autounattend_autogen.iso"
|
||||
storage_domain: "{{ providers.ovirt.data_domain | default('data_domain') }}"
|
||||
size: 20MiB
|
||||
wait: true
|
||||
bootable: true
|
||||
format: raw
|
||||
content_type: iso
|
||||
force: yes
|
||||
register: disk_iso_file
|
||||
|
||||
- name: set iso file disk id
|
||||
set_fact:
|
||||
ks_iso_file_disk_id: "{{ disk_iso_file.disk.id }}"
|
||||
ks_iso_file_image_id: "{{ disk_iso_file.disk.image_id }}"
|
||||
ovirt_datacenter_id: "{{ disk_iso_file.disk.quota.href | regex_replace('^/ovirt-engine/api/datacenters/(.*)/quotas.*$', '\\1') }}"
|
||||
ovirt_datastore_id: "{{ disk_iso_file.disk.storage_domains[0].id }}"
|
||||
20
roles/oatakan.windows_ovirt_template/tasks/export_ovf.yml
Normal file
20
roles/oatakan.windows_ovirt_template/tasks/export_ovf.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
|
||||
- name: export template to export domain
|
||||
ovirt_template:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
state: exported
|
||||
name: "{{ template.name }}"
|
||||
export_domain: "{{ providers.ovirt.export_domain }}"
|
||||
cluster: "{{ providers.ovirt.cluster }}"
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: export_ovf_file
|
||||
|
||||
- name: wait for export to complete
|
||||
async_status:
|
||||
jid: "{{ export_ovf_file.ansible_job_id }}"
|
||||
register: ovf
|
||||
until: ovf.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
119
roles/oatakan.windows_ovirt_template/tasks/main.yml
Normal file
119
roles/oatakan.windows_ovirt_template/tasks/main.yml
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
|
||||
- name: obtain SSO token with using username/password credentials
|
||||
ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password) }}"
|
||||
insecure: yes
|
||||
|
||||
- include_tasks: preflight_check_pre29.yml
|
||||
when: ansible_version.full is version('2.9', '<')
|
||||
|
||||
- include_tasks: preflight_check.yml
|
||||
when: ansible_version.full is version('2.9', '>=')
|
||||
|
||||
# remove existing template
|
||||
- block:
|
||||
|
||||
- include_tasks: remove_template.yml
|
||||
|
||||
when:
|
||||
- template_force|bool
|
||||
- template_found|bool
|
||||
|
||||
- block:
|
||||
- include_tasks: make_iso.yml
|
||||
|
||||
- include_tasks: provision_vm.yml
|
||||
|
||||
- name: refresh inventory
|
||||
meta: refresh_inventory
|
||||
|
||||
- name: clear gathered facts
|
||||
meta: clear_facts
|
||||
|
||||
- name: clear any host errors
|
||||
meta: clear_host_errors
|
||||
|
||||
- name: add host
|
||||
add_host:
|
||||
hostname: template_host
|
||||
ansible_host: "{{ template_vm_ip_address }}"
|
||||
ansible_user: "{{ unattend.local_accounts[0].name }}"
|
||||
ansible_password: "{{ unattend.local_accounts[0].password }}"
|
||||
ansible_port: "{{ vm_ansible_port | default('5986') }}"
|
||||
ansible_connection: winrm
|
||||
ansible_winrm_transport: "{{ vm_ansible_winrm_transport | default('credssp') }}"
|
||||
ansible_winrm_server_cert_validation: ignore
|
||||
ansible_winrm_operation_timeout_sec: 250
|
||||
ansible_winrm_read_timeout_sec: 280
|
||||
ansible_win_async_startup_timeout: 60
|
||||
|
||||
- include_role:
|
||||
name: "{{ windows_build_role }}"
|
||||
apply:
|
||||
vars:
|
||||
target_ovirt: yes
|
||||
install_updates: yes
|
||||
remove_apps: yes
|
||||
clean_up_components: yes
|
||||
upgrade_powershell: "{{ vm_upgrade_powershell | default('no') }}"
|
||||
delegate_to: template_host
|
||||
|
||||
- name: refresh SSO credentials
|
||||
ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password) }}"
|
||||
insecure: yes
|
||||
|
||||
- include_tasks: stop_vm.yml
|
||||
|
||||
- include_tasks: convert_to_template.yml
|
||||
|
||||
- include_tasks: export_ovf.yml
|
||||
when: export_ovf|bool
|
||||
|
||||
rescue:
|
||||
- name: refresh SSO credentials
|
||||
ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password) }}"
|
||||
insecure: yes
|
||||
|
||||
- include_tasks: remove_template.yml
|
||||
when: remove_vm_on_error|bool
|
||||
|
||||
- name: set vm_failed variable
|
||||
set_fact:
|
||||
vm_failed: yes
|
||||
|
||||
always:
|
||||
- name: refresh SSO credentials
|
||||
ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password) }}"
|
||||
insecure: yes
|
||||
|
||||
- include_tasks: remove_vm.yml
|
||||
when: remove_vm_on_error|bool or (not remove_vm_on_error|bool and not vm_failed|bool)
|
||||
|
||||
- include_tasks: datastore_iso_remove.yml
|
||||
|
||||
- name: remove temporary directory
|
||||
file:
|
||||
path: "{{ temp_directory }}"
|
||||
state: absent
|
||||
|
||||
- name: logout from oVirt
|
||||
ovirt_auth:
|
||||
state: absent
|
||||
ovirt_auth: "{{ ovirt_auth }}"
|
||||
|
||||
- name: fail if needed
|
||||
fail:
|
||||
msg: "fail to create a template."
|
||||
when: vm_failed|bool
|
||||
30
roles/oatakan.windows_ovirt_template/tasks/make_iso.yml
Normal file
30
roles/oatakan.windows_ovirt_template/tasks/make_iso.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
- block:
|
||||
- name: create temporary directory
|
||||
file:
|
||||
path: "{{ temp_directory }}/ks_iso"
|
||||
state: directory
|
||||
|
||||
- name: create Autounattend.xml file
|
||||
template:
|
||||
src: "{{ windows_sysprep_template_folder }}/Autounattend.xml.j2"
|
||||
dest: "{{ temp_directory }}/ks_iso/Autounattend.xml"
|
||||
|
||||
- name: include virtio drivers
|
||||
include_tasks: virtio_drivers.yml
|
||||
|
||||
- name: create iso
|
||||
command: mkisofs -V ADDISO -r -iso-level 4 -o {{ playbook_dir }}/{{ temp_directory }}/windows_{{ windows_distro_name }}_autounattend_autogen.iso .
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}/{{ temp_directory }}/ks_iso"
|
||||
|
||||
- include_tasks: datastore_upload.yml
|
||||
always:
|
||||
- name: remove temporary files
|
||||
file:
|
||||
path: "{{ temp_directory }}/{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- windows_{{ windows_distro_name }}_autounattend_autogen.iso
|
||||
- virtio_win.iso
|
||||
- ks_iso/
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
|
||||
- name: get the datacenter name
|
||||
ovirt_datacenter_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "Clusters.name = {{ providers.ovirt.cluster }}"
|
||||
register: datacenter_info
|
||||
|
||||
- name: get storage information
|
||||
ovirt_storage_domain_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "datacenter={{ datacenter_info.ovirt_datacenters[0].name }}"
|
||||
register: storage_info
|
||||
when:
|
||||
- template_disk_storage is undefined
|
||||
|
||||
- name: get data domain
|
||||
set_fact:
|
||||
disk_storage_domain: "{{ storage_info.ovirt_storage_domains|json_query(the_query)|list|first|default(None) }}"
|
||||
when:
|
||||
- template_disk_storage is undefined
|
||||
vars:
|
||||
the_query: "[?type=='data']"
|
||||
|
||||
- name: get iso domain (deprecated as of oVirt/RHV 4.3)
|
||||
set_fact:
|
||||
iso_domain: "{{ storage_info.ovirt_storage_domains|json_query(the_query)|list|first|default(None) }}"
|
||||
vars:
|
||||
the_query: "[?type=='iso']"
|
||||
|
||||
- name: check if template already exists
|
||||
ovirt_template_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ template.name }} and datacenter={{ datacenter_info.ovirt_datacenters[0].name }}"
|
||||
register: template_info
|
||||
|
||||
- block:
|
||||
- name: set template_found to yes
|
||||
set_fact:
|
||||
template_found: yes
|
||||
|
||||
- name: fail with message
|
||||
fail:
|
||||
msg: "Existing template found on ovirt/rhv: {{ template.name }}"
|
||||
when: not template_force|bool
|
||||
when:
|
||||
- template_info.ovirt_templates is defined
|
||||
- template_info.ovirt_templates | length > 0
|
||||
|
||||
- name: check iso file on data domain
|
||||
ovirt_disk_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ iso_file_name }}"
|
||||
register: ovirt_disk_main_iso
|
||||
when: iso_file_name is defined
|
||||
|
||||
- debug:
|
||||
msg: "{{ ovirt_disk_main_iso }}"
|
||||
|
||||
- name: set file id of the iso file
|
||||
set_fact:
|
||||
iso_file_id: "{{ ovirt_disk_main_iso.ovirt_disks[0].id }}"
|
||||
when:
|
||||
- ovirt_disk_main_iso.ovirt_disks | length > 0
|
||||
- ovirt_disk_main_iso.ovirt_disks[0].id is defined
|
||||
- ovirt_disk_main_iso.ovirt_disks[0].content_type == 'iso'
|
||||
|
||||
- name: fail with message
|
||||
fail:
|
||||
msg: "iso file ({{ iso_file_name }}) could not be found on the data domain and iso domain does not exists"
|
||||
when:
|
||||
- iso_file_id is undefined
|
||||
- iso_domain is undefined or iso_domain|length == 0
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
|
||||
- name: get the datacenter name (<2.9)
|
||||
ovirt_datacenter_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "Clusters.name = {{ providers.ovirt.cluster }}"
|
||||
|
||||
- name: get storage information (<2.9)
|
||||
ovirt_storage_domain_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "datacenter={{ ovirt_datacenters[0].name }}"
|
||||
when:
|
||||
- template_disk_storage is undefined
|
||||
|
||||
- name: get data domain (<2.9)
|
||||
set_fact:
|
||||
disk_storage_domain: "{{ ovirt_storage_domains|json_query(the_query)|list|first }}"
|
||||
when:
|
||||
- template_disk_storage is undefined
|
||||
vars:
|
||||
the_query: "[?type=='data']"
|
||||
|
||||
- name: get iso domain (deprecated as of oVirt/RHV 4.3) (<2.9)
|
||||
set_fact:
|
||||
iso_domain: "{{ ovirt_storage_domains|json_query(the_query)|list|first }}"
|
||||
vars:
|
||||
the_query: "[?type=='iso']"
|
||||
|
||||
- name: check if template already exists (<2.9)
|
||||
ovirt_template_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ template.name }} and datacenter={{ ovirt_datacenters[0].name }}"
|
||||
|
||||
- block:
|
||||
- name: set template_found to yes
|
||||
set_fact:
|
||||
template_found: yes
|
||||
|
||||
- name: fail with message
|
||||
fail:
|
||||
msg: "Existing template found on ovirt/rhv: {{ template.name }}"
|
||||
when: not template_force|bool
|
||||
when:
|
||||
- ovirt_templates is defined
|
||||
- ovirt_templates | length > 0
|
||||
|
||||
- name: check iso file on data domain
|
||||
ovirt_disk_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ iso_file_name }}"
|
||||
when: iso_file_name is defined
|
||||
|
||||
- debug:
|
||||
msg: "{{ ovirt_disks }}"
|
||||
|
||||
- name: set file id of the iso file
|
||||
set_fact:
|
||||
iso_file_id: "{{ ovirt_disks[0].id }}"
|
||||
when:
|
||||
- ovirt_disks | length > 0
|
||||
- ovirt_disks[0].id is defined
|
||||
- ovirt_disks[0].content_type == 'iso'
|
||||
|
||||
- name: fail with message
|
||||
fail:
|
||||
msg: "iso file ({{ iso_file_name }}) could not be found on the data domain and iso domain does not exists"
|
||||
when:
|
||||
- iso_file_id is undefined
|
||||
- iso_domain is undefined or iso_domain|length == 0
|
||||
123
roles/oatakan.windows_ovirt_template/tasks/provision_vm.yml
Normal file
123
roles/oatakan.windows_ovirt_template/tasks/provision_vm.yml
Normal file
@@ -0,0 +1,123 @@
|
||||
---
|
||||
|
||||
- name: provision a new vm
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ template.name }}"
|
||||
cluster: "{{ providers.ovirt.cluster|default('Default') }}"
|
||||
state: present
|
||||
wait: yes
|
||||
memory: "{{ template.memory }}MiB"
|
||||
cpu_sockets: "{{ template.cpu }}"
|
||||
boot_devices:
|
||||
- hd
|
||||
- cdrom
|
||||
cd_iso: "{{ template.cd_iso }}"
|
||||
type: server
|
||||
high_availability: true
|
||||
nics:
|
||||
- name: nic1
|
||||
profile_name: "{{ template.networks[0].name }}"
|
||||
network: "{{ template.networks[0].name }}"
|
||||
custom_properties: "{{ custom_properties | default(omit) }}"
|
||||
operating_system: "{{ template_vm_guest_id | default(omit) }}"
|
||||
timezone: "{{ template_timezone | default(omit) }}"
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: deploy
|
||||
|
||||
- name: wait for instance creation to complete
|
||||
async_status: jid="{{ deploy.ansible_job_id }}"
|
||||
register: instance
|
||||
until: instance.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
|
||||
- name: create a disk
|
||||
ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{% if item.name_prefix | default(false) %}{{ template.name }}_{% endif %}{{ item.name }}"
|
||||
vm_name: "{{ template.name }}"
|
||||
size: "{{ item.size | default(omit) }}"
|
||||
format: "{{ item.format | default(omit) }}"
|
||||
interface: "{{ item.interface | default(omit) }}"
|
||||
bootable: "{{ item.bootable | default(omit) }}"
|
||||
storage_domain: "{{ item.storage_domain | default(omit) }}"
|
||||
activate: yes
|
||||
state: present
|
||||
wait: yes
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: create_disks
|
||||
loop: "{{ template.disks }}"
|
||||
when:
|
||||
- template is defined
|
||||
- template.disks is defined
|
||||
|
||||
- name: wait for disk creation to complete
|
||||
async_status:
|
||||
jid: "{{ item.ansible_job_id }}"
|
||||
register: disks_creation
|
||||
until: disks_creation.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
loop: "{{ create_disks.results }}"
|
||||
when:
|
||||
- template is defined
|
||||
- create_disks.results is defined
|
||||
- item.ansible_job_id is defined
|
||||
|
||||
- include_tasks: wait_disk_unlock_pre29.yml
|
||||
when:
|
||||
- ansible_version.full is version('2.9', '<')
|
||||
- template is defined
|
||||
- template.disks is defined
|
||||
- disks_creation.results is defined
|
||||
|
||||
- include_tasks: wait_disk_unlock.yml
|
||||
when:
|
||||
- ansible_version.full is version('2.9', '>=')
|
||||
- template is defined
|
||||
- template.disks is defined
|
||||
- disks_creation.results is defined
|
||||
|
||||
- name: assign tags to provisioned vms
|
||||
ovirt_tag:
|
||||
name: "{{ item }}_{{ instance.item.item[item] }}"
|
||||
vms: ["{{ instance.item.item.name }}"]
|
||||
state: attached
|
||||
loop:
|
||||
- app_name
|
||||
- role
|
||||
when:
|
||||
- template is defined
|
||||
- instance is defined
|
||||
- instance.vm is defined
|
||||
- instance.item.item[item] is defined
|
||||
|
||||
- name: start vm
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ template.name }}"
|
||||
cluster: "{{ providers.ovirt.cluster|default('Default') }}"
|
||||
state: running
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: start
|
||||
|
||||
- name: wait for instance creation to complete
|
||||
async_status: jid="{{ start.ansible_job_id }}"
|
||||
register: instance
|
||||
until: instance.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
|
||||
- name: waiting for server to come online
|
||||
wait_for:
|
||||
host: "{{ template.networks[0].ip }}"
|
||||
port: "{{ template.ansible_port | default(vm_ansible_port) | default(ansible_port) | default('5986') }}"
|
||||
timeout: "{{ instance_wait_connection_timeout }}"
|
||||
when:
|
||||
- instance is changed
|
||||
- template is defined
|
||||
ignore_errors: yes
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
|
||||
- name: remove template
|
||||
ovirt_template:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
cluster: "{{ providers.ovirt.cluster }}"
|
||||
name: "{{ template.name }}"
|
||||
state: absent
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: undeploy
|
||||
when: template is defined
|
||||
|
||||
- name: wait for template deletion to complete
|
||||
async_status:
|
||||
jid: "{{ undeploy.ansible_job_id }}"
|
||||
register: instance
|
||||
until: instance.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
20
roles/oatakan.windows_ovirt_template/tasks/remove_vm.yml
Normal file
20
roles/oatakan.windows_ovirt_template/tasks/remove_vm.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
|
||||
- name: remove vm
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
cluster: "{{ providers.ovirt.cluster }}"
|
||||
name: "{{ template.name }}"
|
||||
state: absent
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: undeploy
|
||||
when: template is defined
|
||||
|
||||
- name: wait for template deletion to complete
|
||||
async_status:
|
||||
jid: "{{ undeploy.ansible_job_id }}"
|
||||
register: instance
|
||||
until: instance.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
35
roles/oatakan.windows_ovirt_template/tasks/stop_vm.yml
Normal file
35
roles/oatakan.windows_ovirt_template/tasks/stop_vm.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
|
||||
- block:
|
||||
|
||||
- name: wait for server to stop responding
|
||||
wait_for:
|
||||
host: "{{ template_vm_ip_address }}"
|
||||
port: "{{ vm_ansible_port | default('5986') }}"
|
||||
timeout: 120
|
||||
state: stopped
|
||||
ignore_errors: yes
|
||||
|
||||
- include_tasks: wait_vm_poweredoff_pre29.yml
|
||||
when: ansible_version.full is version('2.9', '<')
|
||||
|
||||
- include_tasks: wait_vm_poweredoff.yml
|
||||
when: ansible_version.full is version('2.9', '>=')
|
||||
|
||||
rescue:
|
||||
- name: ignoring any error
|
||||
debug:
|
||||
msg: "ignoring error..."
|
||||
|
||||
- name: reconfigure vm
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
cluster: "{{ providers.ovirt.cluster }}"
|
||||
name: "{{ template.name }}"
|
||||
boot_devices:
|
||||
- hd
|
||||
cd_iso: ""
|
||||
custom_properties: "{{ custom_properties_efi if template_vm_efi|bool else '' }}"
|
||||
force: yes
|
||||
state: present
|
||||
when: template is defined
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
|
||||
- name: download virtio win iso file
|
||||
get_url:
|
||||
url: "{{ virtio_iso_url }}"
|
||||
dest: "{{ temp_directory }}/virtio_win.iso"
|
||||
register: download_virtio_iso
|
||||
until: download_virtio_iso is success
|
||||
delay: 3
|
||||
retries: 5
|
||||
|
||||
- name: set list of directories to copy
|
||||
set_fact:
|
||||
virtio_iso_list_of_directories_to_extract:
|
||||
- /viostor/{{ os_short_names[windows_distro_name] | default('2k16') }}/amd64
|
||||
- /NetKVM/{{ os_short_names[windows_distro_name] | default('2k16') }}/amd64
|
||||
|
||||
- name: get a list of files from template iso
|
||||
shell: >
|
||||
set -o pipefail &&
|
||||
isoinfo -f -R -i {{ playbook_dir }}/{{ temp_directory }}/virtio_win.iso |
|
||||
grep -E "^{{ virtio_iso_list_of_directories_to_extract | join('|^') }}"
|
||||
changed_when: False
|
||||
register: virtio_iso_list_of_files
|
||||
|
||||
- name: copy files from virtio iso to target
|
||||
shell: |
|
||||
set -o pipefail &&
|
||||
isoinfo -f -R -i {{ playbook_dir }}/{{ temp_directory }}/virtio_win.iso |\
|
||||
grep -E "^{{ virtio_iso_list_of_directories_to_extract | join('|^') }}" | while read line; do
|
||||
d=$(dirname $line)
|
||||
od=".${d}"
|
||||
[ -f $od ] && rm -f $od
|
||||
[ -d $od ] || mkdir -p $od
|
||||
[ -d ".${line}" ] || isoinfo -R -i \
|
||||
{{ playbook_dir }}/{{ temp_directory }}/virtio_win.iso -x $line > ".${line}"
|
||||
done
|
||||
changed_when: True
|
||||
args:
|
||||
chdir: "{{ playbook_dir }}/{{ temp_directory }}/ks_iso"
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
|
||||
- name: wait until the image is unlocked by the oVirt engine
|
||||
ovirt_disk_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={% if item.name_prefix | default(false) %}{{ template.name }}_{% endif %}{{ item.name }}"
|
||||
register: ovirt_disk_info
|
||||
until: (ovirt_disk_info.ovirt_disks is defined) and (ovirt_disk_info.ovirt_disks | length > 0) and (ovirt_disk_info.ovirt_disks[0].status != "locked")
|
||||
retries: 10
|
||||
delay: 3
|
||||
loop: "{{ template.disks }}"
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
|
||||
- name: wait until the image is unlocked by the oVirt engine (<2.9)
|
||||
ovirt_disk_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={% if item.name_prefix | default(false) %}{{ template.name }}_{% endif %}{{ item.name }}"
|
||||
until: (ovirt_disks is defined) and (ovirt_disks | length > 0) and (ovirt_disks[0].status != "locked")
|
||||
retries: 10
|
||||
delay: 3
|
||||
loop: "{{ template.disks }}"
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
|
||||
- name: wait until the disk is unlocked by the oVirt engine
|
||||
ovirt_disk_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ iso_file }}"
|
||||
register: ovirt_disk_info
|
||||
until: (ovirt_disk_info.ovirt_disks is defined) and (ovirt_disk_info.ovirt_disks | length > 0) and (ovirt_disk_info.ovirt_disks[0].status != "locked")
|
||||
retries: 10
|
||||
delay: 3
|
||||
when: iso_file is defined
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
|
||||
- name: wait until the disk is unlocked by the oVirt engine (<2.9)
|
||||
ovirt_disk_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ iso_file }}"
|
||||
until: (ovirt_disks is defined) and (ovirt_disks | length > 0) and (ovirt_disks[0].status != "locked")
|
||||
retries: 10
|
||||
delay: 3
|
||||
when: iso_file is defined
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
|
||||
- name: wait for vm status to be poweredoff
|
||||
ovirt_vm_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: name={{ template.name }} and cluster={{ providers.ovirt.cluster }}
|
||||
register: ovirt_vm_info_result
|
||||
until:
|
||||
- ovirt_vm_info_result.ovirt_vms is defined
|
||||
- ovirt_vm_info_result.ovirt_vms|length > 0
|
||||
- ovirt_vm_info_result.ovirt_vms[0].status == 'down'
|
||||
delay: 5
|
||||
retries: 30
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
|
||||
- name: wait for vm status to be poweredoff
|
||||
ovirt_vm_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: name={{ template.name }} and cluster={{ providers.ovirt.cluster }}
|
||||
until:
|
||||
- ovirt_vms is defined
|
||||
- ovirt_vms|length > 0
|
||||
- ovirt_vms[0].status == 'down'
|
||||
delay: 5
|
||||
retries: 30
|
||||
Reference in New Issue
Block a user