Build Windows Templates in RHV
This commit is contained in:
65
roles/oatakan.ansible-role-ovirt/tasks/deprovision.yml
Normal file
65
roles/oatakan.ansible-role-ovirt/tasks/deprovision.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
---
|
||||
|
||||
- name: remove vms
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ item }}"
|
||||
cluster: "{{ providers.ovirt.cluster | default('Default') }}"
|
||||
storage_domain: "{{ item.storage_domain | default(omit) }}"
|
||||
state: absent
|
||||
wait: yes
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: undeploy
|
||||
loop: "{{ ansible_play_hosts | intersect(nodes | map(attribute='name') | list) }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- hostvars[item].name is defined
|
||||
|
||||
- name: wait for vms to be deleted
|
||||
async_status:
|
||||
jid: "{{ item.ansible_job_id }}"
|
||||
register: vm_remove
|
||||
until: vm_remove.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
loop: "{{ undeploy.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- undeploy.results is defined
|
||||
- item.ansible_job_id is defined
|
||||
|
||||
- name: delete additional disks
|
||||
ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{% if item.1.name_prefix | default(true) %}{{ item.0.name }}_{% endif %}{{ item.1.name }}"
|
||||
vm_name: "{{ item.0.name }}"
|
||||
storage_domain: "{{ item.1.storage_domain | default(omit) }}"
|
||||
state: absent
|
||||
wait: no
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: delete_disks
|
||||
with_subelements:
|
||||
- "{{ nodes | json_query(query) }}"
|
||||
- disks
|
||||
- skip_missing: yes
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.1 is defined
|
||||
- item.1.storage_domain is defined
|
||||
vars:
|
||||
query: "@[?contains(`{{ ansible_play_hosts }}`, name)]"
|
||||
|
||||
- name: wait for disk deletion to complete
|
||||
async_status:
|
||||
jid: "{{ item.ansible_job_id }}"
|
||||
register: disks_deletion
|
||||
until: disks_deletion.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
with_items: "{{ delete_disks.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- delete_disks.results is defined
|
||||
- item.ansible_job_id is defined
|
||||
25
roles/oatakan.ansible-role-ovirt/tasks/main.yml
Normal file
25
roles/oatakan.ansible-role-ovirt/tasks/main.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
|
||||
- block:
|
||||
- name: obtain SSO token with using username/password credentials
|
||||
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: provision.yml
|
||||
when: role_action == 'provision'
|
||||
|
||||
- include_tasks: deprovision.yml
|
||||
run_once: yes
|
||||
when: role_action == 'deprovision'
|
||||
always:
|
||||
- name: revoke the SSO token
|
||||
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
|
||||
ovirt_auth: "{{ ovirt_auth }}"
|
||||
state: absent
|
||||
40
roles/oatakan.ansible-role-ovirt/tasks/preflight_check.yml
Normal file
40
roles/oatakan.ansible-role-ovirt/tasks/preflight_check.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
|
||||
- name: fail if cluster name is not specified
|
||||
fail:
|
||||
msg: "cluster name is not specified, please specify providers.ovirt.cluster"
|
||||
when: (providers.ovirt.cluster | default(None)) is undefined
|
||||
|
||||
- name: get the datacenter name
|
||||
ovirt_datacenter_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "Clusters.name = {{ providers.ovirt.cluster }}"
|
||||
register: datacenter_info
|
||||
|
||||
- name: fail if datacenter is not found
|
||||
fail:
|
||||
msg: "data center is not found"
|
||||
when: datacenter_info.ovirt_datacenters | length == 0
|
||||
|
||||
- name: get storage information
|
||||
ovirt_storage_domain_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "datacenter={{ datacenter_info.ovirt_datacenters[0].name }}"
|
||||
register: storage_info
|
||||
|
||||
- name: set data domain
|
||||
set_fact:
|
||||
disk_storage_domain: "{{ storage_info.ovirt_storage_domains|json_query(the_query)|list|first|default(None) }}"
|
||||
vars:
|
||||
the_query: "[?type=='data']"
|
||||
|
||||
- name: set 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']"
|
||||
|
||||
- include_tasks: template_check.yml
|
||||
loop: "{{ nodes }}"
|
||||
loop_control:
|
||||
loop_var: node
|
||||
183
roles/oatakan.ansible-role-ovirt/tasks/provision.yml
Normal file
183
roles/oatakan.ansible-role-ovirt/tasks/provision.yml
Normal file
@@ -0,0 +1,183 @@
|
||||
---
|
||||
|
||||
- include_tasks: preflight_check.yml
|
||||
|
||||
- name: clone from template
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ item.name }}"
|
||||
template: "{{ item.template | default(omit) }}"
|
||||
cluster: "{{ providers.ovirt.cluster | default('Default') }}"
|
||||
state: present
|
||||
wait: yes
|
||||
memory: "{{ item.memory }}MiB"
|
||||
memory_max: "{{ ((item.memory_max | string) + 'MiB') if item.memory_max is defined else omit }}"
|
||||
memory_guaranteed: "{{ ((item.memory_guaranteed | string) + 'MiB') if item.memory_guaranteed is defined else omit }}"
|
||||
cpu_mode: "{{ item.cpu_mode | default(omit) }}"
|
||||
cpu_cores: "{{ item.cpu_cores | default(omit) }}"
|
||||
cpu_sockets: "{{ item.cpu }}"
|
||||
cpu_threads: "{{ item.cpu_threads | default(omit) }}"
|
||||
cd_iso: "{{ node_iso_file[item] | default(omit) }}"
|
||||
bios_type: "{{ item.bios_type | default(omit) }}"
|
||||
ballooning_enabled: "{{ item.ballooning_enabled | default(omit) }}"
|
||||
graphical_console: "{{ item.graphical_console | default(omit) }}"
|
||||
host: "{{ item.host | default(omit) }}"
|
||||
host_devices: "{{ item.host_devices | default(omit) }}"
|
||||
placement_policy: "{{ item.placement_policy | default(omit) }}"
|
||||
storage_domain: "{{ item.storage_domain | default(omit) }}"
|
||||
type: "{{ item.type | default('server') }}"
|
||||
high_availability: true
|
||||
nics:
|
||||
- name: nic1
|
||||
profile_name: "{{ item.networks[0].profile_name | default(item.networks[0].name) }}"
|
||||
network: "{{ item.networks[0].name }}"
|
||||
custom_properties: "{{ item.custom_properties | default(omit) }}"
|
||||
operating_system: "{{ item.operating_system | default(omit) }}"
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: deploy
|
||||
loop: "{{ nodes }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
|
||||
- name: wait for instance creation to complete
|
||||
async_status:
|
||||
jid: "{{ item.ansible_job_id }}"
|
||||
register: deployed_instances
|
||||
until: deployed_instances.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
no_log: false
|
||||
with_items: "{{ deploy.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- deploy.results is defined
|
||||
- item.ansible_job_id is defined
|
||||
|
||||
- name: create additional disks
|
||||
ovirt_disk:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{% if item.1.name_prefix | default(true) %}{{ item.0.name }}_{% endif %}{{ item.1.name }}"
|
||||
vm_name: "{{ item.0.name }}"
|
||||
size: "{{ item.1.size | default(omit) }}"
|
||||
format: "{{ item.1.format | default(omit) }}"
|
||||
interface: "{{ item.1.interface | default(omit) }}"
|
||||
bootable: "{{ item.1.bootable | default(omit) }}"
|
||||
storage_domain: "{{ item.1.storage_domain | default(omit) }}"
|
||||
activate: yes
|
||||
state: present
|
||||
wait: yes
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: create_disks
|
||||
with_subelements:
|
||||
- "{{ nodes }}"
|
||||
- disks
|
||||
- skip_missing: yes
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.1 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
|
||||
with_items: "{{ create_disks.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- create_disks.results is defined
|
||||
- item.ansible_job_id is defined
|
||||
|
||||
- include_tasks: wait_for_disk_pre29.yml
|
||||
when: ansible_version.full is version('2.9', '<')
|
||||
|
||||
- include_tasks: wait_for_disk.yml
|
||||
when: ansible_version.full is version('2.9', '>=')
|
||||
|
||||
- name: linux - start and customize
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ item.name }}"
|
||||
state: running
|
||||
cloud_init:
|
||||
nic_boot_protocol: "{{ 'static' if item.networks[0].ip is defined and item.networks[0].netmask is defined and item.networks[0].gateway is defined else 'dhcp' }}"
|
||||
nic_ip_address: "{{ item.networks[0].ip | default('') }}"
|
||||
nic_netmask: "{{ item.networks[0].netmask | default('') }}"
|
||||
nic_gateway: "{{ item.networks[0].gateway | default('') }}"
|
||||
nic_name: "{{ item.networks[0].nic_name | default(item.networks[0].device_name) | default('eth0') }}"
|
||||
host_name: "{{ item.name }}.{{ item.domain | default('') }}"
|
||||
dns_servers: "{{ item.dns_servers|join(' ') | default([]) }}"
|
||||
custom_script: "{{ item.custom_script | default('') }}"
|
||||
user_name: "{{ item.user_name | default('') }}"
|
||||
root_password: "{{ item.root_password | default('') }}"
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: deploy_linux
|
||||
loop: "{{ nodes }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.sysprep is not defined
|
||||
|
||||
- name: windows - start and customize
|
||||
ovirt_vm:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ item.name }}"
|
||||
state: running
|
||||
sysprep:
|
||||
custom_script: "{{ lookup('template', 'templates/unattended.xml.j2') }}"
|
||||
host_name: "{{ item.name | default('') }}"
|
||||
domain: "{{ item.domain | default('') }}"
|
||||
user_name: "{{ item.user_name | default(ansible_user) }}"
|
||||
root_password: "{{ item.root_password | default(ansible_password) }}"
|
||||
async: 7200
|
||||
poll: 0
|
||||
register: deploy_windows
|
||||
loop: "{{ nodes }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.sysprep is defined
|
||||
|
||||
- name: combine deployment results
|
||||
set_fact:
|
||||
deploy_results: "{{ deploy_results|default([]) + [ item ] }}"
|
||||
with_items: "{{ deploy_linux.results + deploy_windows.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.ansible_job_id is defined
|
||||
|
||||
- name: wait for vms to be started
|
||||
async_status:
|
||||
jid: "{{ item.ansible_job_id }}"
|
||||
register: instances
|
||||
until: instances.finished
|
||||
retries: "{{ instance_wait_retry_limit }}"
|
||||
delay: 10
|
||||
with_items: "{{ deploy_results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- deploy_results is defined
|
||||
- item.ansible_job_id is defined
|
||||
|
||||
- name: assign tags to provisioned vms
|
||||
ovirt_tag:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
name: "{{ item.1 }}_{{ item.0.item.item[item.1] }}"
|
||||
vms: ["{{ item.0.item.item.name }}"]
|
||||
state: attached
|
||||
with_nested:
|
||||
- "{{ instances.results }}"
|
||||
- [ 'app_name', 'role' ]
|
||||
when:
|
||||
- nodes is defined
|
||||
- instances.results is defined
|
||||
- item.0.vm is defined
|
||||
- item.0.item.item[item.1] is defined
|
||||
|
||||
- include_tasks: wait_for_ip_pre29.yml
|
||||
when: ansible_version.full is version('2.9', '<')
|
||||
|
||||
- include_tasks: wait_for_ip.yml
|
||||
when: ansible_version.full is version('2.9', '>=')
|
||||
52
roles/oatakan.ansible-role-ovirt/tasks/template_check.yml
Normal file
52
roles/oatakan.ansible-role-ovirt/tasks/template_check.yml
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
|
||||
- name: fail if no template and disk specified
|
||||
fail:
|
||||
msg: "at least one disk must be specified when no template is used"
|
||||
when:
|
||||
- node.template is undefined
|
||||
- node.disks[0].size is undefined | default(False)
|
||||
|
||||
- name: fail if both template and iso is specified
|
||||
fail:
|
||||
msg: "template and cd_iso are mutually exclusive, only define one of them"
|
||||
when:
|
||||
- node.template is defined
|
||||
- node.cd_iso is defined
|
||||
|
||||
- block:
|
||||
- name: check if template exists
|
||||
ovirt_template_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ node.template }} and datacenter={{ datacenter_info.ovirt_datacenters[0].name }}"
|
||||
register: template_info
|
||||
|
||||
- name: fail with message
|
||||
fail:
|
||||
msg: "template ({{ node.template }}) could not be found, make sure it exists"
|
||||
when: ( template_info.ovirt_templates | default([]) ) | length == 0
|
||||
when: node.template is defined
|
||||
|
||||
- block:
|
||||
- name: check iso file on data domain
|
||||
ovirt_disk_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={{ node.cd_iso }}"
|
||||
register: ovirt_disk_main_iso
|
||||
|
||||
- name: fail with message
|
||||
fail:
|
||||
msg: "iso file ({{ node.cd_iso }}) could not be found on the data domain and iso domain does not exists"
|
||||
when:
|
||||
- (ovirt_disk_main_iso.ovirt_disks[0].id | default(None)) is undefined
|
||||
- iso_domain is undefined or iso_domain|length == 0
|
||||
when: node.cd_iso is defined
|
||||
|
||||
- name: set iso file
|
||||
set_fact:
|
||||
node_iso_file: '{{ node_iso_file | default({}) | combine({node.name: ovirt_disk_main_iso.ovirt_disks[0].id | default(node.cd_iso) | default(None)}) }}'
|
||||
when: (node_iso_file[node.name] | default(None)) is undefined
|
||||
|
||||
- name: set os type
|
||||
set_fact:
|
||||
nodes_os_type: '{{ nodes_os_type | default({}) | combine({node.name: node.os_type | default(template_info.ovirt_templates[0].os.type) | default(None)}) }}'
|
||||
18
roles/oatakan.ansible-role-ovirt/tasks/wait_for_disk.yml
Normal file
18
roles/oatakan.ansible-role-ovirt/tasks/wait_for_disk.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
|
||||
- name: wait until the image is unlocked by the oVirt engine
|
||||
ovirt_disk_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={% if item.1.name_prefix | default(true) %}{{ item.0.name }}_{% endif %}{{ item.1.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
|
||||
with_subelements:
|
||||
- "{{ nodes }}"
|
||||
- disks
|
||||
- skip_missing: yes
|
||||
when:
|
||||
- nodes is defined
|
||||
- disks_creation.results is defined
|
||||
- item.1 is defined
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
|
||||
- name: wait until the image is unlocked by the oVirt engine (<2.9)
|
||||
ovirt_disk_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
pattern: "name={% if item.1.name_prefix | default(true) %}{{ item.0.name }}_{% endif %}{{ item.1.name }}"
|
||||
until: (ovirt_disks is defined) and (ovirt_disks | length > 0) and (ovirt_disks[0].status != "locked")
|
||||
retries: 10
|
||||
delay: 3
|
||||
with_subelements:
|
||||
- "{{ nodes }}"
|
||||
- disks
|
||||
- skip_missing: yes
|
||||
when:
|
||||
- nodes is defined
|
||||
- disks_creation.results is defined
|
||||
- item.1 is defined
|
||||
69
roles/oatakan.ansible-role-ovirt/tasks/wait_for_ip.yml
Normal file
69
roles/oatakan.ansible-role-ovirt/tasks/wait_for_ip.yml
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
|
||||
#- name: waiting for ip address to be assigned
|
||||
# ovirt_nic_info:
|
||||
# auth: "{{ ovirt_auth }}"
|
||||
# vm: "{{ item.vm.name }}"
|
||||
# name: nic1
|
||||
# register: nics
|
||||
# until:
|
||||
# - nics.ovirt_nics | length > 0
|
||||
# - nics.ovirt_nics[0].reported_devices | length > 0
|
||||
# - nics.ovirt_nics[0].reported_devices[0].ips is defined
|
||||
# - nics.ovirt_nics[0].reported_devices[0].ips | length > 0
|
||||
# - nics.ovirt_nics[0].reported_devices[0].ips[0].address is defined
|
||||
# - nics.ovirt_nics[0].reported_devices[0].ips[0].version == 'v4'
|
||||
# retries: 300
|
||||
# delay: 10
|
||||
# with_items: "{{ instances.results }}"
|
||||
# when:
|
||||
# - nodes is defined
|
||||
# - instances.results is defined
|
||||
# - item.vm is defined
|
||||
|
||||
- name: waiting for servers to come online on predefined ip
|
||||
wait_for:
|
||||
host: "{{ item.networks[0].ip }}"
|
||||
port: "{{ item.ansible_port | default(ansible_port) | default('22') }}"
|
||||
with_items: "{{ nodes }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.networks is defined
|
||||
- item.networks[0].ip is defined
|
||||
|
||||
- name: waiting for servers to come online on dhcp ip
|
||||
wait_for:
|
||||
host: "{{ (item.ovirt_nics[0].reported_devices[0].ips | json_query('[?version==`v4`].address'))[0] }}"
|
||||
port: "{{ item.item.item.item.ansible_port | default(ansible_port) | default('22') }}"
|
||||
with_items: "{{ nics.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- nics.results is defined
|
||||
- item.ovirt_nics is defined
|
||||
- item.item.item.item.networks is defined
|
||||
- item.item.item.item.networks[0].ip is not defined
|
||||
|
||||
- name: waiting for ovirt to show the predefined ip
|
||||
ovirt_nic_info:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
vm: "{{ item.name }}"
|
||||
name: nic1
|
||||
fetch_nested: yes
|
||||
nested_attributes:
|
||||
- ips
|
||||
register: nics
|
||||
until:
|
||||
- nics.ovirt_nics | length > 0
|
||||
- nics.ovirt_nics[0].reported_devices | length > 0
|
||||
- nics.ovirt_nics[0].reported_devices[0].ips | length > 0
|
||||
- nics.ovirt_nics[0].reported_devices[0].ips[0].address is defined
|
||||
- nics.ovirt_nics[0].reported_devices[0].ips[0].version == 'v4'
|
||||
- nics.ovirt_nics[0].reported_devices[0].ips[0].address == item.networks[0].ip
|
||||
retries: 300
|
||||
delay: 10
|
||||
with_items: "{{ nodes }}"
|
||||
when:
|
||||
- wait_for_static_ip_assigned|bool
|
||||
- nodes is defined
|
||||
- item.networks | length > 0
|
||||
- item.networks[0].ip is defined
|
||||
69
roles/oatakan.ansible-role-ovirt/tasks/wait_for_ip_pre29.yml
Normal file
69
roles/oatakan.ansible-role-ovirt/tasks/wait_for_ip_pre29.yml
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
|
||||
#- name: waiting for ip address to be assigned (<2.9)
|
||||
# ovirt_nic_facts:
|
||||
# auth: "{{ ovirt_auth }}"
|
||||
# vm: "{{ item.vm.name }}"
|
||||
# name: nic1
|
||||
# register: nics
|
||||
# until:
|
||||
# - nics.ansible_facts.ovirt_nics | length > 0
|
||||
# - nics.ansible_facts.ovirt_nics[0].reported_devices | length > 0
|
||||
# - nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips is defined
|
||||
# - nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips | length > 0
|
||||
# - nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips[0].address is defined
|
||||
# - nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips[0].version == 'v4'
|
||||
# retries: 300
|
||||
# delay: 10
|
||||
# with_items: "{{ instances.results }}"
|
||||
# when:
|
||||
# - nodes is defined
|
||||
# - instances.results is defined
|
||||
# - item.vm is defined
|
||||
|
||||
- name: waiting for servers to come online on predefined ip
|
||||
wait_for:
|
||||
host: "{{ item.networks[0].ip }}"
|
||||
port: "{{ item.ansible_port | default(ansible_port) | default('22') }}"
|
||||
with_items: "{{ nodes }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- item.networks is defined
|
||||
- item.networks[0].ip is defined
|
||||
|
||||
- name: waiting for servers to come online on dhcp ip (<2.9)
|
||||
wait_for:
|
||||
host: "{{ (item.ansible_facts.ovirt_nics[0].reported_devices[0].ips | json_query('[?version==`v4`].address'))[0] }}"
|
||||
port: "{{ item.item.item.item.ansible_port | default(ansible_port) | default('22') }}"
|
||||
with_items: "{{ nics.results }}"
|
||||
when:
|
||||
- nodes is defined
|
||||
- nics.results is defined
|
||||
- item.ansible_facts is defined
|
||||
- item.item.item.item.networks is defined
|
||||
- item.item.item.item.networks[0].ip is not defined
|
||||
|
||||
- name: waiting for ovirt to show the predefined ip (<2.9)
|
||||
ovirt_nic_facts:
|
||||
auth: "{{ ovirt_auth }}"
|
||||
vm: "{{ item.name }}"
|
||||
name: nic1
|
||||
fetch_nested: yes
|
||||
nested_attributes:
|
||||
- ips
|
||||
register: nics
|
||||
until:
|
||||
- nics.ansible_facts.ovirt_nics | length > 0
|
||||
- nics.ansible_facts.ovirt_nics[0].reported_devices | length > 0
|
||||
- nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips | length > 0
|
||||
- nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips[0].address is defined
|
||||
- nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips[0].version == 'v4'
|
||||
- nics.ansible_facts.ovirt_nics[0].reported_devices[0].ips[0].address == item.networks[0].ip
|
||||
retries: 300
|
||||
delay: 10
|
||||
with_items: "{{ nodes }}"
|
||||
when:
|
||||
- wait_for_static_ip_assigned|bool
|
||||
- nodes is defined
|
||||
- item.networks | length > 0
|
||||
- item.networks[0].ip is defined
|
||||
Reference in New Issue
Block a user