diff --git a/lib/ironic b/lib/ironic index 571202d2fd..3f7ae2111c 100644 --- a/lib/ironic +++ b/lib/ironic @@ -496,18 +496,20 @@ function create_bridge_and_vms { } function wait_for_nova_resources { - # After nodes have been enrolled, we need to wait for n-cpu's periodic - # task populate the resource tracker with available nodes. Wait for 2 - # minutes before timing out. - local expected_count=$1 - echo_summary "Waiting 2 minutes for Nova resource tracker to pick up $expected_count Ironic nodes" + # After nodes have been enrolled, we need to wait for both ironic and + # nova's periodic tasks to populate the resource tracker with available + # nodes and resources. Wait up to 2 minutes for a given resource before + # timing out. + local resource=$1 + local expected_count=$2 + echo_summary "Waiting 2 minutes for Nova resource tracker to pick up $resource >= $expected_count" for i in $(seq 1 120); do - if [ $(nova hypervisor-stats | grep " count " | get_field 2) -ge $expected_count ]; then + if [ $(nova hypervisor-stats | grep " $resource " | get_field 2) -ge $expected_count ]; then return 0 fi sleep 1 done - die $LINENO "Nova hypervisor-stats did not register at least $expected_count nodes" + die $LINENO "Timed out waiting for Nova hypervisor-stats $resource >= $expected_count" } function enroll_nodes { @@ -546,6 +548,7 @@ function enroll_nodes { fi local total_nodes=0 + local total_cpus=0 while read hardware_info; do if ! is_ironic_hardware; then local mac_address=$hardware_info @@ -575,6 +578,7 @@ function enroll_nodes { ironic port-create --address $mac_address --node_uuid $node_id total_nodes=$((total_nodes+1)) + total_cpus=$((total_cpus+$ironic_node_cpu)) done < $ironic_hwinfo_file # create the nova flavor @@ -587,7 +591,8 @@ function enroll_nodes { nova flavor-key baremetal set "cpu_arch"="x86_64" if [ "$VIRT_DRIVER" == "ironic" ]; then - wait_for_nova_resources $total_nodes + wait_for_nova_resources "count" $total_nodes + wait_for_nova_resources "vcpus" $total_cpus fi }