--- - name: Get list of baremetal nodes openstack.cloud.baremetal_node_info: cloud: undercloud register: baremetal_nodes - name: Get baremetal node details openstack.cloud.baremetal_node_info: cloud: undercloud node: "{{ item }}" with_items: "{{ baremetal_nodes | community.general.json_query('baremetal_nodes[*].name') }}" register: node_details - name: Get clean node list set_fact: baremetal_nodes_details: "{{ [item] + baremetal_nodes_details }}" with_items: "{{ node_details | community.general.json_query('results[*].baremetal_nodes') }}" - name: Get active node count set_fact: active_nodes: "{{ baremetal_nodes_details | community.general.json_query('[?provision_state==`available`]') | count() }}" - name: Get associated node count set_fact: associated_nodes: "{{ baremetal_nodes_details | community.general.json_query('[*].associated') | count() }}" - name: Set total available node count set_fact: available_count: "{{ active_nodes | int + associated_nodes | int }}" - name: Get overcloud role list tripleo_overcloud_role_list: register: role_list - name: Get details for each role tripleo_overcloud_role_show: role_name: "{{ item }}" default_values: CountDefault: 0 FlavorDefault: 'baremetal' with_items: "{{ role_list.role_list }}" register: role_details - name: Get requested node count set_fact: requested_node_count: "{{ role_details | community.general.json_query('results[*].role_detail.CountDefault') | sum() }}" - name: Fail when requested is more than available fail: msg: > Not enough baremetal nodes - available: {{ available_count }}, requested: {{ requested_node_count }} failed_when: requested_node_count|int > available_count|int