89e09b58fb
The inventory now uses host names in groups instead of IPs which cannot be directly used to ping hosts in the node health validation. The IPs are now collected from the meta hostvars dictionary. Change-Id: I75f3dcd5e29ae26fdc65ef093f8c207163ed1fff
40 lines
1.4 KiB
YAML
40 lines
1.4 KiB
YAML
---
|
|
- hosts: undercloud
|
|
vars:
|
|
metadata:
|
|
name: Node health check
|
|
description: >
|
|
Check if all overcloud nodes can be connected to before starting a
|
|
scale-up or an upgrade.
|
|
groups:
|
|
- pre-upgrade
|
|
tasks:
|
|
- name: Collect IPs for overcloud nodes
|
|
set_fact: ansible_host="{{ hostvars[item]['ansible_host'] }}"
|
|
register: oc_ips
|
|
with_items: "{{ groups.overcloud }}"
|
|
- name: Ping all overcloud nodes
|
|
icmp_ping:
|
|
host: "{{ item }}"
|
|
with_items: "{{ oc_ips.results | map(attribute='ansible_facts.ansible_host') | list }}"
|
|
ignore_errors: true
|
|
register: ping_results
|
|
- name: Extract failed pings
|
|
set_fact:
|
|
failed_ips: "{{ ping_results.results | selectattr('failed', 'equalto', True) | map(attribute='item') | list }}"
|
|
- name: Lookup nova servers for each failed IP
|
|
set_fact:
|
|
servers: "{{ lookup('nova_servers', 'ip', 'ctlplane', failed_ips, wantlist=True) }}"
|
|
- name: Extract nova ids
|
|
set_fact:
|
|
server_ids: "{{ servers | map(attribute='id') | list }}"
|
|
- name: Lookup ironic nodes for unreachable nova servers
|
|
set_fact:
|
|
nodes: "{{ lookup('ironic_nodes', 'instance_uuid', server_ids, wantlist=True) }}"
|
|
- name: Fail if there are unreachable nodes
|
|
fail:
|
|
msg: |
|
|
{{ lookup('template', './templates/unreachable_nodes.j2',
|
|
template_vars=dict(nodes=nodes)) }}
|
|
when: nodes|length > 0
|