summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-06-09 01:06:14 +0000
committerGerrit Code Review <review@openstack.org>2016-06-09 01:06:15 +0000
commitccfe4025ccc83d125fff420fbd7eb16f04b00155 (patch)
tree5980c63b9be99b4c450f2048960a7d96587f68ca
parent4fc8dc6bf51c4c9c91595fb2bc3497a46f083fd4 (diff)
parent8ed1c2da1d5aa3e645afac6fdbb64c11cb151664 (diff)
downloadnova-ccfe4025ccc83d125fff420fbd7eb16f04b00155.tar.gz
Merge "Ironic nodes with instance_uuid are not available" into stable/mitaka
-rw-r--r--nova/tests/unit/virt/ironic/test_driver.py10
-rw-r--r--nova/virt/ironic/driver.py4
2 files changed, 11 insertions, 3 deletions
diff --git a/nova/tests/unit/virt/ironic/test_driver.py b/nova/tests/unit/virt/ironic/test_driver.py
index 626a5737ee..7e7da56e4f 100644
--- a/nova/tests/unit/virt/ironic/test_driver.py
+++ b/nova/tests/unit/virt/ironic/test_driver.py
@@ -659,14 +659,20 @@ class IronicDriverTestCase(test.NoDBTestCase):
# a node in deleted
{'uuid': uuidutils.generate_uuid(),
'power_state': ironic_states.POWER_ON,
- 'provision_state': ironic_states.DELETED}
+ 'provision_state': ironic_states.DELETED},
+ # a node in AVAILABLE with an instance uuid
+ {'uuid': uuidutils.generate_uuid(),
+ 'instance_uuid': uuidutils.generate_uuid(),
+ 'power_state': ironic_states.POWER_OFF,
+ 'provision_state': ironic_states.AVAILABLE}
]
for n in node_dicts:
node = ironic_utils.get_test_node(**n)
self.assertTrue(self.driver._node_resources_unavailable(node))
for ok_state in (ironic_states.AVAILABLE, ironic_states.NOSTATE):
- # these are both ok and should present as available
+ # these are both ok and should present as available as they
+ # have no instance_uuid
avail_node = ironic_utils.get_test_node(
power_state=ironic_states.POWER_OFF,
provision_state=ok_state)
diff --git a/nova/virt/ironic/driver.py b/nova/virt/ironic/driver.py
index dd9234c9c7..3764fa9204 100644
--- a/nova/virt/ironic/driver.py
+++ b/nova/virt/ironic/driver.py
@@ -184,7 +184,9 @@ class IronicDriver(virt_driver.ComputeDriver):
ironic_states.AVAILABLE, ironic_states.NOSTATE]
return (node_obj.maintenance or
node_obj.power_state in bad_power_states or
- node_obj.provision_state not in good_provision_states)
+ node_obj.provision_state not in good_provision_states or
+ (node_obj.provision_state in good_provision_states and
+ node_obj.instance_uuid is not None))
def _node_resources_used(self, node_obj):
"""Determine whether the node's resources are currently used.