vmware builds
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: convert to template
|
||||
ovirt.ovirt.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.ovirt.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.ovirt.ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ iso_file }}"
|
||||
storage_domain: "{{ providers.ovirt.data_domain | default('data_domain') }}"
|
||||
state: absent
|
||||
29
roles/oatakan.rhel_ovirt_template/tasks/datastore_upload.yml
Normal file
29
roles/oatakan.rhel_ovirt_template/tasks/datastore_upload.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
|
||||
- name: validate file
|
||||
stat:
|
||||
path: "{{ playbook_dir }}/{{ temp_directory }}/linux_{{ linux_distro_name }}_ks_autogen.iso"
|
||||
get_checksum: no
|
||||
register: iso_file_check
|
||||
|
||||
- name: upload iso file to data_domain
|
||||
ovirt.ovirt.ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ iso_file }}"
|
||||
upload_image_path: "{{ iso_file_check.stat.path }}"
|
||||
storage_domain: "{{ providers.ovirt.data_domain | default('data_domain') }}"
|
||||
size: "{{ (iso_file_check.stat.size/1024/1024)|round(0, 'ceil')|int|string }}MiB"
|
||||
wait: true
|
||||
bootable: true
|
||||
format: raw
|
||||
content_type: iso
|
||||
force: yes
|
||||
register: disk_iso_file
|
||||
when: iso_file_check.stat.exists
|
||||
|
||||
- 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.rhel_ovirt_template/tasks/export_ovf.yml
Normal file
20
roles/oatakan.rhel_ovirt_template/tasks/export_ovf.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
|
||||
- name: export template to export domain
|
||||
ovirt.ovirt.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
|
||||
138
roles/oatakan.rhel_ovirt_template/tasks/main.yml
Normal file
138
roles/oatakan.rhel_ovirt_template/tasks/main.yml
Normal file
@@ -0,0 +1,138 @@
|
||||
---
|
||||
|
||||
- name: obtain SSO token with using username/password credentials
|
||||
ovirt.ovirt.ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url, true) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username, true) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password, true) }}"
|
||||
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_vm
|
||||
ansible_host: '{{ template_vm_ip_address }}'
|
||||
host_key_checking: false
|
||||
ansible_user: "{{ local_account_username }}"
|
||||
ansible_password: "{{ local_account_password }}"
|
||||
ansible_port: "{{ vm_ansible_port | default('22') }}"
|
||||
ansible_ssh_common_args: '-o UserKnownHostsFile=/dev/null'
|
||||
ansible_python_interpreter: auto
|
||||
|
||||
- name: run setup module
|
||||
setup:
|
||||
delegate_to: template_vm
|
||||
connection: ssh
|
||||
|
||||
- block:
|
||||
- include_role:
|
||||
name: oatakan.rhn
|
||||
apply:
|
||||
delegate_to: template_vm
|
||||
connection: ssh
|
||||
become: yes
|
||||
|
||||
- include_role:
|
||||
name: oatakan.rhel_upgrade
|
||||
apply:
|
||||
delegate_to: template_vm
|
||||
connection: ssh
|
||||
become: yes
|
||||
when: install_updates|bool
|
||||
|
||||
- include_role:
|
||||
name: oatakan.rhel_template_build
|
||||
apply:
|
||||
delegate_to: template_vm
|
||||
connection: ssh
|
||||
become: yes
|
||||
vars:
|
||||
target_ovirt: yes
|
||||
|
||||
always:
|
||||
- include_role:
|
||||
name: oatakan.rhn
|
||||
apply:
|
||||
delegate_to: template_vm
|
||||
connection: ssh
|
||||
become: yes
|
||||
vars:
|
||||
role_action: unregister
|
||||
|
||||
- name: force handlers to run before stoppping the vm
|
||||
meta: flush_handlers
|
||||
|
||||
- name: refresh SSO credentials
|
||||
ovirt.ovirt.ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url, true) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username, true) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password, true) }}"
|
||||
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.ovirt.ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url, true) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username, true) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password, true) }}"
|
||||
insecure: yes
|
||||
|
||||
- include_tasks: remove_template.yml
|
||||
when: remove_vm_on_error|bool
|
||||
|
||||
always:
|
||||
- name: refresh SSO credentials
|
||||
ovirt.ovirt.ovirt_auth:
|
||||
url: "{{ lookup('env', 'OVIRT_URL')|default(ovirt.url, true) }}"
|
||||
username: "{{ lookup('env', 'OVIRT_USERNAME')|default(ovirt.username, true) }}"
|
||||
password: "{{ lookup('env', 'OVIRT_PASSWORD')|default(ovirt.password, true) }}"
|
||||
insecure: yes
|
||||
|
||||
- include_tasks: remove_vm.yml
|
||||
|
||||
- include_tasks: datastore_iso_remove.yml
|
||||
|
||||
- name: remove temporary directory
|
||||
file:
|
||||
path: "{{ temp_directory }}"
|
||||
state: absent
|
||||
|
||||
- name: logout from oVirt
|
||||
ovirt.ovirt.ovirt_auth:
|
||||
state: absent
|
||||
ovirt_auth: "{{ ovirt_auth }}"
|
||||
29
roles/oatakan.rhel_ovirt_template/tasks/make_iso.yml
Normal file
29
roles/oatakan.rhel_ovirt_template/tasks/make_iso.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
- block:
|
||||
- name: create temporary directory
|
||||
file:
|
||||
path: "{{ temp_directory }}/ks_iso"
|
||||
state: directory
|
||||
|
||||
- name: create ks.cfg file
|
||||
template:
|
||||
src: "{{ linux_ks_folder }}/ks.cfg.j2"
|
||||
dest: "{{ temp_directory }}/ks_iso/ks.cfg"
|
||||
|
||||
- name: create iso
|
||||
command: >
|
||||
mkisofs -U -A "OEMDRV" -V "OEMDRV"
|
||||
-volset "OEMDRV" -J -joliet-long -r -v -T
|
||||
-o {{ playbook_dir }}/{{ temp_directory }}/linux_{{ linux_distro_name }}_ks_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:
|
||||
- linux_{{ linux_distro_name }}_ks_autogen.iso
|
||||
- ks_iso/
|
||||
70
roles/oatakan.rhel_ovirt_template/tasks/preflight_check.yml
Normal file
70
roles/oatakan.rhel_ovirt_template/tasks/preflight_check.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
|
||||
- name: get the datacenter name
|
||||
ovirt.ovirt.ovirt_datacenter_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "Clusters.name = {{ providers.ovirt.cluster }}"
|
||||
register: datacenter_info
|
||||
|
||||
- name: get storage information
|
||||
ovirt.ovirt.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.ovirt.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.ovirt.ovirt_disk_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ iso_file_name }}"
|
||||
register: ovirt_disk_main_iso
|
||||
when: iso_file_name is defined
|
||||
|
||||
- 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,67 @@
|
||||
---
|
||||
|
||||
- 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)
|
||||
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
|
||||
|
||||
- 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 ({{ template.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.rhel_ovirt_template/tasks/provision_vm.yml
Normal file
123
roles/oatakan.rhel_ovirt_template/tasks/provision_vm.yml
Normal file
@@ -0,0 +1,123 @@
|
||||
---
|
||||
|
||||
- name: provision a new vm
|
||||
ovirt.ovirt.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 }}"
|
||||
bios_type: "{{ template.bios_type | default(omit) }}"
|
||||
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) }}"
|
||||
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.ovirt.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.ovirt.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.ovirt.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('22') }}"
|
||||
timeout: "{{ instance_wait_connection_timeout }}"
|
||||
when:
|
||||
- instance is changed
|
||||
- template is defined
|
||||
ignore_errors: yes
|
||||
20
roles/oatakan.rhel_ovirt_template/tasks/remove_template.yml
Normal file
20
roles/oatakan.rhel_ovirt_template/tasks/remove_template.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
|
||||
- name: remove template
|
||||
ovirt.ovirt.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.rhel_ovirt_template/tasks/remove_vm.yml
Normal file
20
roles/oatakan.rhel_ovirt_template/tasks/remove_vm.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
|
||||
- name: remove vm
|
||||
ovirt.ovirt.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
|
||||
45
roles/oatakan.rhel_ovirt_template/tasks/stop_vm.yml
Normal file
45
roles/oatakan.rhel_ovirt_template/tasks/stop_vm.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
|
||||
- block:
|
||||
|
||||
- name: shutdown guest vm
|
||||
ovirt.ovirt.ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
cluster: "{{ providers.ovirt.cluster }}"
|
||||
name: "{{ template.name }}"
|
||||
state: stopped
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: shutdown
|
||||
when: template is defined
|
||||
|
||||
- name: wait for server to stop responding
|
||||
wait_for:
|
||||
host: "{{ template_vm_ip_address }}"
|
||||
port: "{{ vm_ansible_port | default('22') }}"
|
||||
timeout: 120
|
||||
state: stopped
|
||||
|
||||
- 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.ovirt.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 and custom_efi_enabled|bool) else ([{}]) }}"
|
||||
force: yes
|
||||
state: present
|
||||
when: template is defined
|
||||
11
roles/oatakan.rhel_ovirt_template/tasks/wait_disk_unlock.yml
Normal file
11
roles/oatakan.rhel_ovirt_template/tasks/wait_disk_unlock.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
|
||||
- name: wait until the image is unlocked by the oVirt engine
|
||||
ovirt.ovirt.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.ovirt.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.ovirt.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