Merge "Include only required fields in ironic node cache" into stable/pike

This commit is contained in:
Zuul 2021-04-10 07:02:09 +00:00 committed by Gerrit Code Review
commit 2bb0893d6a
3 changed files with 175 additions and 159 deletions

View File

@ -91,6 +91,11 @@ def _get_stats():
return {'cpu_arch': 'x86_64'}
def _get_cached_node(**kw):
"""Return a fake node object representative of objects in the cache."""
return ironic_utils.get_test_node(fields=ironic_driver._NODE_FIELDS, **kw)
def _make_compute_service(hostname):
return objects.Service(host=hostname)
@ -146,8 +151,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT.node, 'get_by_instance_uuid')
def test__validate_instance_and_node(self, mock_gbiui):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid,
instance_uuid=self.instance_uuid)
node = _get_cached_node(
uuid=node_uuid, instance_uuid=self.instance_uuid)
instance = fake_instance.fake_instance_obj(self.ctx,
uuid=self.instance_uuid)
mock_gbiui.return_value = node
@ -172,8 +177,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__wait_for_active_pass(self, fake_validate, fake_refresh):
instance = fake_instance.fake_instance_obj(self.ctx,
uuid=uuidutils.generate_uuid())
node = ironic_utils.get_test_node(
provision_state=ironic_states.DEPLOYING)
node = _get_cached_node(provision_state=ironic_states.DEPLOYING)
fake_validate.return_value = node
self.driver._wait_for_active(instance)
@ -186,8 +190,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__wait_for_active_done(self, fake_validate, fake_refresh):
instance = fake_instance.fake_instance_obj(self.ctx,
uuid=uuidutils.generate_uuid())
node = ironic_utils.get_test_node(
provision_state=ironic_states.ACTIVE)
node = _get_cached_node(provision_state=ironic_states.ACTIVE)
fake_validate.return_value = node
self.assertRaises(loopingcall.LoopingCallDone,
@ -201,8 +204,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__wait_for_active_fail(self, fake_validate, fake_refresh):
instance = fake_instance.fake_instance_obj(self.ctx,
uuid=uuidutils.generate_uuid())
node = ironic_utils.get_test_node(
provision_state=ironic_states.DEPLOYFAIL)
node = _get_cached_node(provision_state=ironic_states.DEPLOYFAIL)
fake_validate.return_value = node
self.assertRaises(exception.InstanceDeployFailure,
@ -238,8 +240,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__wait_for_power_state_pass(self, fake_validate):
instance = fake_instance.fake_instance_obj(self.ctx,
uuid=uuidutils.generate_uuid())
node = ironic_utils.get_test_node(
target_power_state=ironic_states.POWER_OFF)
node = _get_cached_node(target_power_state=ironic_states.POWER_OFF)
fake_validate.return_value = node
self.driver._wait_for_power_state(instance, 'fake message')
@ -250,8 +251,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__wait_for_power_state_ok(self, fake_validate):
instance = fake_instance.fake_instance_obj(self.ctx,
uuid=uuidutils.generate_uuid())
node = ironic_utils.get_test_node(
target_power_state=ironic_states.NOSTATE)
node = _get_cached_node(target_power_state=ironic_states.NOSTATE)
fake_validate.return_value = node
self.assertRaises(loopingcall.LoopingCallDone,
@ -262,10 +262,9 @@ class IronicDriverTestCase(test.NoDBTestCase):
node_uuid = uuidutils.generate_uuid()
props = _get_properties()
stats = _get_stats()
node = ironic_utils.get_test_node(uuid=node_uuid,
instance_uuid=self.instance_uuid,
properties=props,
resource_class='foo')
node = _get_cached_node(
uuid=node_uuid, instance_uuid=self.instance_uuid,
properties=props, resource_class='foo')
result = self.driver._node_resource(node)
@ -298,7 +297,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
node_uuid = uuidutils.generate_uuid()
props = _get_properties()
props['cpu_arch'] = 'i386'
node = ironic_utils.get_test_node(uuid=node_uuid, properties=props)
node = _get_cached_node(uuid=node_uuid, properties=props)
result = self.driver._node_resource(node)
self.assertEqual('i686', result['supported_instances'][0][0])
@ -308,7 +307,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
node_uuid = uuidutils.generate_uuid()
props = _get_properties()
del props['cpu_arch']
node = ironic_utils.get_test_node(uuid=node_uuid, properties=props)
node = _get_cached_node(uuid=node_uuid, properties=props)
result = self.driver._node_resource(node)
self.assertEqual([], result['supported_instances'])
@ -316,7 +315,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__node_resource_exposes_capabilities(self):
props = _get_properties()
props['capabilities'] = 'test:capability, test2:value2'
node = ironic_utils.get_test_node(properties=props)
node = _get_cached_node(properties=props)
result = self.driver._node_resource(node)
stats = result['stats']
self.assertIsNone(stats.get('capabilities'))
@ -326,14 +325,14 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__node_resource_no_capabilities(self):
props = _get_properties()
props['capabilities'] = None
node = ironic_utils.get_test_node(properties=props)
node = _get_cached_node(properties=props)
result = self.driver._node_resource(node)
self.assertIsNone(result['stats'].get('capabilities'))
def test__node_resource_malformed_capabilities(self):
props = _get_properties()
props['capabilities'] = 'test:capability,:no_key,no_val:'
node = ironic_utils.get_test_node(properties=props)
node = _get_cached_node(properties=props)
result = self.driver._node_resource(node)
stats = result['stats']
self.assertEqual('capability', stats.get('test'))
@ -342,7 +341,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
node_uuid = uuidutils.generate_uuid()
props = _get_properties()
stats = _get_stats()
node = ironic_utils.get_test_node(
node = _get_cached_node(
uuid=node_uuid,
instance_uuid=None,
power_state=ironic_states.POWER_OFF,
@ -366,9 +365,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
node_uuid = uuidutils.generate_uuid()
props = _get_properties()
stats = _get_stats()
node = ironic_utils.get_test_node(uuid=node_uuid,
instance_uuid=None,
properties=props)
node = _get_cached_node(
uuid=node_uuid, instance_uuid=None, properties=props)
result = self.driver._node_resource(node)
self.assertEqual(0, result['vcpus'])
@ -388,7 +386,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
props = _get_properties()
stats = _get_stats()
instance_info = _get_instance_info()
node = ironic_utils.get_test_node(
node = _get_cached_node(
uuid=node_uuid,
instance_uuid=uuidutils.generate_uuid(),
provision_state=ironic_states.ACTIVE,
@ -408,7 +406,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(ironic_driver.LOG, 'warning')
def test__parse_node_properties(self, mock_warning):
props = _get_properties()
node = ironic_utils.get_test_node(
node = _get_cached_node(
uuid=uuidutils.generate_uuid(),
properties=props)
# raw_cpu_arch is included because extra_specs filters do not
@ -428,7 +426,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
props['memory_mb'] = 'bad-value'
props['local_gb'] = 'bad-value'
props['cpu_arch'] = 'bad-value'
node = ironic_utils.get_test_node(
node = _get_cached_node(
uuid=uuidutils.generate_uuid(),
properties=props)
# raw_cpu_arch is included because extra_specs filters do not
@ -480,7 +478,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__parse_node_properties_canonicalize_cpu_arch(self, mock_warning):
props = _get_properties()
props['cpu_arch'] = 'amd64'
node = ironic_utils.get_test_node(
node = _get_cached_node(
uuid=uuidutils.generate_uuid(),
properties=props)
# raw_cpu_arch is included because extra_specs filters do not
@ -591,13 +589,14 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test_node_is_available_empty_cache_empty_list(self, mock_services,
mock_instances, mock_get,
mock_list):
node = ironic_utils.get_test_node()
node = _get_cached_node()
mock_get.return_value = node
mock_list.return_value = []
self.assertTrue(self.driver.node_is_available(node.uuid))
mock_get.assert_called_with(node.uuid,
fields=ironic_driver._NODE_FIELDS)
mock_list.assert_called_with(detail=True, limit=0)
mock_list.assert_called_with(fields=ironic_driver._NODE_FIELDS,
limit=0)
mock_get.side_effect = ironic_exception.NotFound
self.assertFalse(self.driver.node_is_available(node.uuid))
@ -608,11 +607,12 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(objects.ServiceList, 'get_all_computes_by_hv_type')
def test_node_is_available_empty_cache(self, mock_services, mock_instances,
mock_get, mock_list):
node = ironic_utils.get_test_node()
node = _get_cached_node()
mock_get.return_value = node
mock_list.return_value = [node]
self.assertTrue(self.driver.node_is_available(node.uuid))
mock_list.assert_called_with(detail=True, limit=0)
mock_list.assert_called_with(fields=ironic_driver._NODE_FIELDS,
limit=0)
self.assertEqual(0, mock_get.call_count)
@mock.patch.object(FAKE_CLIENT.node, 'list')
@ -621,7 +621,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(objects.ServiceList, 'get_all_computes_by_hv_type')
def test_node_is_available_with_cache(self, mock_services, mock_instances,
mock_get, mock_list):
node = ironic_utils.get_test_node()
node = _get_cached_node()
mock_get.return_value = node
mock_list.return_value = [node]
# populate the cache
@ -670,13 +670,13 @@ class IronicDriverTestCase(test.NoDBTestCase):
'provision_state': ironic_states.DELETED},
]
for n in node_dicts:
node = ironic_utils.get_test_node(**n)
node = _get_cached_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 as they
# have no instance_uuid
avail_node = ironic_utils.get_test_node(
avail_node = _get_cached_node(
power_state=ironic_states.POWER_OFF,
provision_state=ok_state)
unavailable = self.driver._node_resources_unavailable(avail_node)
@ -690,10 +690,10 @@ class IronicDriverTestCase(test.NoDBTestCase):
'provision_state': ironic_states.ACTIVE},
]
for n in node_dicts:
node = ironic_utils.get_test_node(**n)
node = _get_cached_node(**n)
self.assertTrue(self.driver._node_resources_used(node))
unused_node = ironic_utils.get_test_node(
unused_node = _get_cached_node(
instance_uuid=None,
provision_state=ironic_states.AVAILABLE)
self.assertFalse(self.driver._node_resources_used(unused_node))
@ -726,7 +726,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
'power_state': ironic_states.ERROR,
'expected': True},
]
nodes = [ironic_utils.get_test_node(**n) for n in node_dicts]
nodes = [_get_cached_node(**n)
for n in node_dicts]
mock_list.return_value = nodes
available_nodes = self.driver.get_available_nodes()
mock_gi.assert_called_once_with(mock.ANY, CONF.host)
@ -978,8 +979,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(ironic_driver.IronicDriver, '_node_resource')
def test_get_available_resource(self, mock_nr, mock_services,
mock_instances, mock_list, mock_get):
node = ironic_utils.get_test_node()
node_2 = ironic_utils.get_test_node(uuid=uuidutils.generate_uuid())
node = _get_cached_node()
node_2 = _get_cached_node(uuid=uuidutils.generate_uuid())
fake_resource = 'fake-resource'
mock_get.return_value = node
# ensure cache gets populated without the node we want
@ -1000,7 +1001,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test_get_available_resource_with_cache(self, mock_nr, mock_services,
mock_instances, mock_list,
mock_get):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_resource = 'fake-resource'
mock_list.return_value = [node]
mock_nr.return_value = fake_resource
@ -1018,9 +1019,9 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test_get_info(self, mock_gbiu):
properties = {'memory_mb': 512, 'cpus': 2}
power_state = ironic_states.POWER_ON
node = ironic_utils.get_test_node(instance_uuid=self.instance_uuid,
properties=properties,
power_state=power_state)
node = _get_cached_node(
instance_uuid=self.instance_uuid, properties=properties,
power_state=power_state)
mock_gbiu.return_value = node
@ -1058,7 +1059,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def _test_spawn(self, mock_sf, mock_pvifs, mock_aiitn, mock_wait_active,
mock_avti, mock_node, mock_looping, mock_save):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
fake_flavor = objects.Flavor(ephemeral_gb=0)
instance.flavor = fake_flavor
@ -1130,7 +1131,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_looping, mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
fake_flavor = objects.Flavor(ephemeral_gb=0)
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = fake_flavor
@ -1152,7 +1153,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
def _test_add_instance_info_to_node(self, mock_update=None,
mock_call=None):
node = ironic_utils.get_test_node(driver='fake')
node = _get_cached_node(driver='fake')
instance = fake_instance.fake_instance_obj(self.ctx,
node=node.uuid)
image_meta = ironic_utils.get_test_image_meta()
@ -1199,7 +1200,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT.node, 'update')
def test__add_instance_info_to_node_fail(self, mock_update):
mock_update.side_effect = ironic_exception.BadRequest()
node = ironic_utils.get_test_node(driver='fake')
node = _get_cached_node(driver='fake')
instance = fake_instance.fake_instance_obj(self.ctx,
node=node.uuid)
image_meta = ironic_utils.get_test_image_meta()
@ -1209,7 +1210,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
node, instance, image_meta, flavor)
def _test_remove_instance_info_from_node(self, mock_update):
node = ironic_utils.get_test_node(driver='fake')
node = _get_cached_node(driver='fake')
instance = fake_instance.fake_instance_obj(self.ctx,
node=node.uuid)
self.driver._remove_instance_info_from_node(node, instance)
@ -1357,7 +1358,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor()
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1386,7 +1387,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_node, mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor()
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1419,7 +1420,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_required_by):
mock_required_by.return_value = True
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor()
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1452,7 +1453,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_node, mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor()
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1481,7 +1482,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_node, mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor()
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1512,7 +1513,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor()
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1546,7 +1547,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_required_by):
mock_required_by.return_value = False
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
node = _get_cached_node(driver='fake', uuid=node_uuid)
flavor = ironic_utils.get_test_flavor(ephemeral_gb=1)
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
instance.flavor = flavor
@ -1567,8 +1568,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
network_info = 'foo'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid,
provision_state=state)
node = _get_cached_node(
driver='fake', uuid=node_uuid, provision_state=state)
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
def fake_set_provision_state(*_):
@ -1601,8 +1602,9 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
def test_destroy_trigger_undeploy_fail(self, fake_validate, mock_sps):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid,
provision_state=ironic_states.ACTIVE)
node = _get_cached_node(
driver='fake', uuid=node_uuid,
provision_state=ironic_states.ACTIVE)
fake_validate.return_value = node
instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
@ -1615,9 +1617,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
def _test__unprovision_instance(self, mock_validate_inst, mock_set_pstate,
state=None):
node = ironic_utils.get_test_node(
driver='fake',
provision_state=state)
node = _get_cached_node(driver='fake', provision_state=state)
instance = fake_instance.fake_instance_obj(self.ctx, node=node.uuid)
mock_validate_inst.return_value = node
self.driver._unprovision(instance, node)
@ -1636,9 +1636,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test__unprovision_fail_max_retries(self, mock_validate_inst,
mock_set_pstate):
CONF.set_default('api_max_retries', default=2, group='ironic')
node = ironic_utils.get_test_node(
driver='fake',
provision_state=ironic_states.ACTIVE)
node = _get_cached_node(
driver='fake', provision_state=ironic_states.ACTIVE)
instance = fake_instance.fake_instance_obj(self.ctx, node=node.uuid)
mock_validate_inst.return_value = node
@ -1654,7 +1653,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
def test__unprovision_instance_not_found(self, mock_validate_inst,
mock_set_pstate):
node = ironic_utils.get_test_node(
node = _get_cached_node(
driver='fake', provision_state=ironic_states.DELETING)
instance = fake_instance.fake_instance_obj(self.ctx, node=node.uuid)
@ -1667,8 +1666,9 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT, 'node')
def test_destroy_unassociate_fail(self, mock_node):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid,
provision_state=ironic_states.ACTIVE)
node = _get_cached_node(
driver='fake', uuid=node_uuid,
provision_state=ironic_states.ACTIVE)
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
mock_node.get_by_instance_uuid.return_value = node
@ -1685,7 +1685,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_reboot(self, mock_sp, fake_validate, mock_looping):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
fake_looping_call = FakeLoopingCall()
@ -1699,7 +1699,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'inject_nmi')
def test_trigger_crash_dump(self, mock_nmi, fake_validate):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.return_value = node
instance = fake_instance.fake_instance_obj(self.ctx,
node=node.uuid)
@ -1710,7 +1710,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'inject_nmi')
def test_trigger_crash_dump_error(self, mock_nmi, fake_validate):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.return_value = node
mock_nmi.side_effect = ironic_exception.BadRequest()
instance = fake_instance.fake_instance_obj(self.ctx,
@ -1723,7 +1723,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_reboot_soft(self, mock_sp, fake_validate, mock_looping):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
fake_looping_call = FakeLoopingCall()
@ -1739,7 +1739,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_reboot_soft_not_supported(self, mock_sp, fake_validate,
mock_looping):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
mock_sp.side_effect = [ironic_exception.BadRequest(), None]
@ -1756,7 +1756,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_power_on(self, mock_sp, fake_validate, mock_looping):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
fake_looping_call = FakeLoopingCall()
@ -1779,7 +1779,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_power_off(self, mock_sp, fake_validate):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
self._test_power_off()
@ -1789,9 +1789,8 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_power_off_soft(self, mock_sp, fake_validate):
node = ironic_utils.get_test_node()
power_off_node = ironic_utils.get_test_node(
power_state=ironic_states.POWER_OFF)
node = _get_cached_node()
power_off_node = _get_cached_node(power_state=ironic_states.POWER_OFF)
fake_validate.side_effect = [node, power_off_node]
self._test_power_off(timeout=30)
@ -1802,7 +1801,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_power_off_soft_exception(self, mock_sp, fake_validate):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
mock_sp.side_effect = [ironic_exception.BadRequest(), None]
@ -1815,7 +1814,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
'_validate_instance_and_node')
@mock.patch.object(FAKE_CLIENT.node, 'set_power_state')
def test_power_off_soft_not_stopped(self, mock_sp, fake_validate):
node = ironic_utils.get_test_node()
node = _get_cached_node()
fake_validate.side_effect = [node, node]
self._test_power_off(timeout=30)
@ -1826,7 +1825,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT.node, 'vif_attach')
def test_plug_vifs_with_port(self, mock_vatt):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
@ -1842,7 +1841,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(ironic_driver.IronicDriver, '_plug_vifs')
def test_plug_vifs(self, mock__plug_vifs, mock_get):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
mock_get.return_value = node
instance = fake_instance.fake_instance_obj(self.ctx,
@ -1857,7 +1856,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT.node, 'vif_attach')
def test_plug_vifs_multiple_ports(self, mock_vatt):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
first_vif_id = 'aaaaaaaa-vv11-cccc-dddd-eeeeeeeeeeee'
@ -1877,7 +1876,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT, 'node')
def test_plug_vifs_failure(self, mock_node):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
first_vif_id = 'aaaaaaaa-vv11-cccc-dddd-eeeeeeeeeeee'
@ -1896,7 +1895,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT, 'node')
def test_plug_vifs_already_attached(self, mock_node):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
first_vif_id = 'aaaaaaaa-vv11-cccc-dddd-eeeeeeeeeeee'
@ -1914,7 +1913,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT.node, 'vif_attach')
def test_plug_vifs_no_network_info(self, mock_vatt):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
@ -1927,7 +1926,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT, 'node')
def test_unplug_vifs(self, mock_node):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
mock_node.get.return_value = node
instance = fake_instance.fake_instance_obj(self.ctx,
@ -1944,7 +1943,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
@mock.patch.object(FAKE_CLIENT, 'node')
def test_unplug_vifs_port_not_associated(self, mock_node):
node_uuid = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
node = ironic_utils.get_test_node(uuid=node_uuid)
node = _get_cached_node(uuid=node_uuid)
mock_node.get.return_value = node
instance = fake_instance.fake_instance_obj(self.ctx, node=node_uuid)
@ -2019,9 +2018,9 @@ class IronicDriverTestCase(test.NoDBTestCase):
mock_set_pstate, mock_looping, mock_wait_active,
preserve=False):
node_uuid = uuidutils.generate_uuid()
node = ironic_utils.get_test_node(uuid=node_uuid,
instance_uuid=self.instance_uuid,
instance_type_id=5)
node = _get_cached_node(
uuid=node_uuid, instance_uuid=self.instance_uuid,
instance_type_id=5)
mock_get.return_value = node
image_meta = ironic_utils.get_test_image_meta()
@ -2070,9 +2069,9 @@ class IronicDriverTestCase(test.NoDBTestCase):
def test_rebuild_failures(self, mock_save, mock_get,
mock_add_instance_info, mock_set_pstate):
node_uuid = uuidutils.generate_uuid()
node = ironic_utils.get_test_node(uuid=node_uuid,
instance_uuid=self.instance_uuid,
instance_type_id=5)
node = _get_cached_node(
uuid=node_uuid, instance_uuid=self.instance_uuid,
instance_type_id=5)
mock_get.return_value = node
image_meta = ironic_utils.get_test_image_meta()
@ -2221,12 +2220,14 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
node=node2_uuid,
host=hostname,
flavor=fake_flavor2)
node1 = ironic_utils.get_test_node(uuid=node1_uuid,
node1 = _get_cached_node(
uuid=node1_uuid,
instance_uuid=inst1.uuid,
instance_type_id=1,
resource_class="first",
network_interface="flat")
node2 = ironic_utils.get_test_node(uuid=node2_uuid,
node2 = _get_cached_node(
uuid=node2_uuid,
instance_uuid=inst2.uuid,
instance_type_id=2,
resource_class="second",
@ -2275,12 +2276,14 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
node=node2_uuid,
host=hostname,
flavor=fake_flavor2)
node1 = ironic_utils.get_test_node(uuid=node1_uuid,
node1 = _get_cached_node(
uuid=node1_uuid,
instance_uuid=inst1.uuid,
instance_type_id=1,
resource_class="first",
network_interface="flat")
node2 = ironic_utils.get_test_node(uuid=node2_uuid,
node2 = _get_cached_node(
uuid=node2_uuid,
instance_uuid=inst2.uuid,
instance_type_id=2,
resource_class="second",
@ -2330,12 +2333,14 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
node=node2_uuid,
host=hostname,
flavor=fake_flavor2)
node1 = ironic_utils.get_test_node(uuid=node1_uuid,
node1 = _get_cached_node(
uuid=node1_uuid,
instance_uuid=inst1.uuid,
instance_type_id=1,
resource_class=None,
network_interface="flat")
node2 = ironic_utils.get_test_node(uuid=node2_uuid,
node2 = _get_cached_node(
uuid=node2_uuid,
instance_uuid=inst2.uuid,
instance_type_id=2,
resource_class="second",
@ -2388,12 +2393,14 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
node=node2_uuid,
host=hostname,
flavor=fake_flavor2)
node1 = ironic_utils.get_test_node(uuid=node1_uuid,
node1 = _get_cached_node(
uuid=node1_uuid,
instance_uuid=inst1.uuid,
instance_type_id=1,
resource_class="first",
network_interface="flat")
node2 = ironic_utils.get_test_node(uuid=node2_uuid,
node2 = _get_cached_node(
uuid=node2_uuid,
instance_uuid=inst2.uuid,
instance_type_id=2,
resource_class="second",
@ -2440,12 +2447,14 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
node=node2_uuid,
host=hostname,
flavor=fake_flavor2)
node1 = ironic_utils.get_test_node(uuid=node1_uuid,
node1 = _get_cached_node(
uuid=node1_uuid,
instance_uuid=inst1.uuid,
instance_type_id=1,
resource_class="first",
network_interface="flat")
node2 = ironic_utils.get_test_node(uuid=node2_uuid,
node2 = _get_cached_node(
uuid=node2_uuid,
instance_uuid=inst2.uuid,
instance_type_id=2,
resource_class="second",
@ -2499,12 +2508,14 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
node=node3_uuid,
host=hostname,
flavor=fake_flavor3)
node1 = ironic_utils.get_test_node(uuid=node1_uuid,
node1 = _get_cached_node(
uuid=node1_uuid,
instance_uuid=inst1.uuid,
instance_type_id=1,
resource_class="first",
network_interface="flat")
node2 = ironic_utils.get_test_node(uuid=node2_uuid,
node2 = _get_cached_node(
uuid=node2_uuid,
instance_uuid=inst2.uuid,
instance_type_id=2,
resource_class="second",
@ -2558,7 +2569,8 @@ class IronicDriverSyncTestCase(IronicDriverTestCase):
@mock.patch.object(ironic_driver.IronicDriver, '_node_from_cache')
def test_pike_flavor_migration_already_migrated(self, mock_node_from_cache,
mock_normalize):
node1 = ironic_utils.get_test_node(uuid=uuids.node1,
node1 = _get_cached_node(
uuid=uuids.node1,
instance_uuid=uuids.instance,
instance_type_id=1,
resource_class="first",
@ -2582,7 +2594,7 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
self.driver.virtapi = fake.FakeVirtAPI()
self.ctx = nova_context.get_admin_context()
node_uuid = uuidutils.generate_uuid()
self.node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
self.node = _get_cached_node(driver='fake', uuid=node_uuid)
self.instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)
self.network_info = utils.get_test_network_info()
@ -2801,19 +2813,20 @@ class NodeCacheTestCase(test.NoDBTestCase):
mock_hash_ring.assert_called_once_with(mock.ANY)
mock_instances.assert_called_once_with(mock.ANY, self.host)
mock_nodes.assert_called_once_with(detail=True, limit=0)
mock_nodes.assert_called_once_with(fields=ironic_driver._NODE_FIELDS,
limit=0)
self.assertIsNotNone(self.driver.node_cache_time)
def test__refresh_cache(self):
# normal operation, one compute service
instances = []
nodes = [
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
]
hosts = [self.host, self.host, self.host]
@ -2826,12 +2839,12 @@ class NodeCacheTestCase(test.NoDBTestCase):
# normal operation, many compute services
instances = []
nodes = [
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
]
hosts = [self.host, 'host2', 'host3']
@ -2845,12 +2858,12 @@ class NodeCacheTestCase(test.NoDBTestCase):
# map to us
instances = [uuidutils.generate_uuid()]
nodes = [
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=instances[0]),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=instances[0]),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
]
# only two calls, having the instance will short-circuit the first node
hosts = [{self.host}, {self.host}]
@ -2865,12 +2878,13 @@ class NodeCacheTestCase(test.NoDBTestCase):
# an instance for, even if it maps to us
instances = []
nodes = [
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
_get_cached_node(
uuid=uuidutils.generate_uuid(),
instance_uuid=uuidutils.generate_uuid()),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
ironic_utils.get_test_node(uuid=uuidutils.generate_uuid(),
instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
_get_cached_node(
uuid=uuidutils.generate_uuid(), instance_uuid=None),
]
hosts = [self.host, self.host]
@ -2892,7 +2906,7 @@ class IronicDriverConsoleTestCase(test.NoDBTestCase):
self.driver = ironic_driver.IronicDriver(fake.FakeVirtAPI())
self.ctx = nova_context.get_admin_context()
node_uuid = uuidutils.generate_uuid()
self.node = ironic_utils.get_test_node(driver='fake', uuid=node_uuid)
self.node = _get_cached_node(driver='fake', uuid=node_uuid)
self.instance = fake_instance.fake_instance_obj(self.ctx,
node=node_uuid)

View File

@ -26,31 +26,33 @@ def get_test_validation(**kw):
'storage': kw.get('storage', {'result': True})})()
def get_test_node(**kw):
return type('node', (object,),
{'uuid': kw.get('uuid', 'eeeeeeee-dddd-cccc-bbbb-aaaaaaaaaaaa'),
'chassis_uuid': kw.get('chassis_uuid'),
'power_state': kw.get('power_state',
def get_test_node(fields=None, **kw):
node = {'uuid': kw.get('uuid', 'eeeeeeee-dddd-cccc-bbbb-aaaaaaaaaaaa'),
'chassis_uuid': kw.get('chassis_uuid'),
'power_state': kw.get('power_state',
ironic_states.NOSTATE),
'target_power_state': kw.get('target_power_state',
ironic_states.NOSTATE),
'provision_state': kw.get('provision_state',
ironic_states.NOSTATE),
'target_power_state': kw.get('target_power_state',
'target_provision_state': kw.get('target_provision_state',
ironic_states.NOSTATE),
'provision_state': kw.get('provision_state',
ironic_states.NOSTATE),
'target_provision_state': kw.get('target_provision_state',
ironic_states.NOSTATE),
'last_error': kw.get('last_error'),
'instance_uuid': kw.get('instance_uuid'),
'instance_info': kw.get('instance_info'),
'driver': kw.get('driver', 'fake'),
'driver_info': kw.get('driver_info', {}),
'properties': kw.get('properties', {}),
'reservation': kw.get('reservation'),
'maintenance': kw.get('maintenance', False),
'network_interface': kw.get('network_interface'),
'resource_class': kw.get('resource_class'),
'extra': kw.get('extra', {}),
'updated_at': kw.get('created_at'),
'created_at': kw.get('updated_at')})()
'last_error': kw.get('last_error'),
'instance_uuid': kw.get('instance_uuid'),
'instance_info': kw.get('instance_info'),
'driver': kw.get('driver', 'fake'),
'driver_info': kw.get('driver_info', {}),
'properties': kw.get('properties', {}),
'reservation': kw.get('reservation'),
'maintenance': kw.get('maintenance', False),
'network_interface': kw.get('network_interface'),
'resource_class': kw.get('resource_class'),
'extra': kw.get('extra', {}),
'updated_at': kw.get('created_at'),
'created_at': kw.get('updated_at')}
if fields is not None:
node = {key: value for key, value in node.items() if key in fields}
return type('node', (object,), node)()
def get_test_port(**kw):

View File

@ -686,7 +686,7 @@ class IronicDriver(virt_driver.ComputeDriver):
instances = objects.InstanceList.get_uuids_by_host(ctxt, CONF.host)
node_cache = {}
for node in self._get_node_list(detail=True, limit=0):
for node in self._get_node_list(fields=_NODE_FIELDS, limit=0):
# NOTE(jroll): we always manage the nodes for instances we manage
if node.instance_uuid in instances:
node_cache[node.uuid] = node