Use fields="instance_uuid" when calling Ironic API
IronicDriver should be using fields="instance_uuid" when calling Ironic API via the OpenStack SDK, but instead is using fields="instance_id". This patch corrects the calls and adds new tests to cover it. Change-Id: I4b976b7ea60c63ec334b5eb78c1ad7972fbed574 Closes-Bug: #1842989
This commit is contained in:
parent
c84400f152
commit
19f01023c2
|
@ -594,13 +594,22 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
response = self.driver.list_instances()
|
||||
|
||||
self.mock_conn.nodes.assert_called_with(associated=True,
|
||||
fields=['instance_id'])
|
||||
fields=['instance_uuid'])
|
||||
expected_calls = [mock.call(mock.ANY, instances[0].uuid),
|
||||
mock.call(mock.ANY, instances[1].uuid)]
|
||||
mock_inst_by_uuid.assert_has_calls(expected_calls)
|
||||
self.assertEqual(['instance-00000000', 'instance-00000001'],
|
||||
sorted(response))
|
||||
|
||||
# NOTE(dustinc) This test ensures we use instance_uuid not instance_id in
|
||||
# 'fields' when calling ironic.
|
||||
@mock.patch.object(objects.Instance, 'get_by_uuid')
|
||||
def test_list_instances_uses_instance_uuid(self, mock_inst_by_uuid):
|
||||
self.driver.list_instances()
|
||||
|
||||
self.mock_conn.nodes.assert_called_with(associated=True,
|
||||
fields=['instance_uuid'])
|
||||
|
||||
@mock.patch.object(objects.Instance, 'get_by_uuid')
|
||||
def test_list_instances_fail(self, mock_inst_by_uuid):
|
||||
self.mock_conn.nodes.side_effect = exception.NovaException
|
||||
|
@ -608,7 +617,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
self.assertRaises(exception.VirtDriverNotReady,
|
||||
self.driver.list_instances)
|
||||
self.mock_conn.nodes.assert_called_with(associated=True,
|
||||
fields=['instance_id'])
|
||||
fields=['instance_uuid'])
|
||||
self.assertFalse(mock_inst_by_uuid.called)
|
||||
|
||||
def test_list_instance_uuids(self):
|
||||
|
@ -616,17 +625,26 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
nodes = []
|
||||
for n in range(num_nodes):
|
||||
nodes.append(ironic_utils.get_test_node(
|
||||
instance_uuid=uuidutils.generate_uuid(),
|
||||
instance_id=uuidutils.generate_uuid(),
|
||||
fields=['instance_id']))
|
||||
self.mock_conn.nodes.return_value = iter(nodes)
|
||||
|
||||
uuids = self.driver.list_instance_uuids()
|
||||
|
||||
self.mock_conn.nodes.assert_called_with(associated=True,
|
||||
fields=['instance_id'])
|
||||
fields=['instance_uuid'])
|
||||
expected = [n.instance_id for n in nodes]
|
||||
self.assertEqual(sorted(expected), sorted(uuids))
|
||||
|
||||
# NOTE(dustinc) This test ensures we use instance_uuid not instance_id in
|
||||
# 'fields' when calling ironic.
|
||||
@mock.patch.object(objects.Instance, 'get_by_uuid')
|
||||
def test_list_instance_uuids_uses_instance_uuid(self, mock_inst_by_uuid):
|
||||
self.driver.list_instance_uuids()
|
||||
|
||||
self.mock_conn.nodes.assert_called_with(associated=True,
|
||||
fields=['instance_uuid'])
|
||||
|
||||
@mock.patch.object(objects.InstanceList, 'get_uuids_by_host')
|
||||
@mock.patch.object(objects.ServiceList, 'get_all_computes_by_hv_type')
|
||||
def test_node_is_available_empty_cache_empty_list(self, mock_services,
|
||||
|
|
|
@ -688,11 +688,13 @@ class IronicDriver(virt_driver.ComputeDriver):
|
|||
:raises: VirtDriverNotReady
|
||||
|
||||
"""
|
||||
# NOTE(dustinc): The SDK returns an object with instance_id,
|
||||
# but the Ironic API expects instance_uuid in query.
|
||||
context = nova_context.get_admin_context()
|
||||
return [objects.Instance.get_by_uuid(context, i.instance_id).name
|
||||
for i in self._get_node_list(return_generator=True,
|
||||
associated=True,
|
||||
fields=['instance_id'])]
|
||||
fields=['instance_uuid'])]
|
||||
|
||||
def list_instance_uuids(self):
|
||||
"""Return the IDs of all the instances provisioned.
|
||||
|
@ -701,8 +703,10 @@ class IronicDriver(virt_driver.ComputeDriver):
|
|||
:raises: VirtDriverNotReady
|
||||
|
||||
"""
|
||||
# NOTE(dustinc): The SDK returns an object with instance_id,
|
||||
# but the Ironic API expects instance_uuid in query.
|
||||
return [node.instance_id for node in self._get_node_list(
|
||||
return_generator=True, associated=True, fields=['instance_id'])]
|
||||
return_generator=True, associated=True, fields=['instance_uuid'])]
|
||||
|
||||
def node_is_available(self, nodename):
|
||||
"""Confirms a Nova hypervisor node exists in the Ironic inventory.
|
||||
|
|
Loading…
Reference in New Issue