ironic: convert driver to use nova.objects.ImageMeta
Convert the ironic driver and related files to make use of the nova.objects.ImageMeta object. Where an image_meta dict is passed in via the virt API, it is converted to object form before being used. Change-Id: Icc1c6ab43fd6ac61a979c6c6676c1960c9cd0639
This commit is contained in:
parent
3eea2a4492
commit
5a82d650bd
|
@ -799,11 +799,15 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
fake_looping_call = FakeLoopingCall()
|
||||
mock_looping.return_value = fake_looping_call
|
||||
|
||||
self.driver.spawn(self.ctx, instance, None, [], None)
|
||||
image_meta = ironic_utils.get_test_image_meta()
|
||||
|
||||
self.driver.spawn(self.ctx, instance, image_meta, [], None)
|
||||
|
||||
mock_node.get.assert_called_once_with(node_uuid)
|
||||
mock_node.validate.assert_called_once_with(node_uuid)
|
||||
mock_adf.assert_called_once_with(node, instance, None, fake_flavor)
|
||||
mock_adf.assert_called_once_with(node, instance,
|
||||
test.MatchType(objects.ImageMeta),
|
||||
fake_flavor)
|
||||
mock_pvifs.assert_called_once_with(node, instance, None)
|
||||
mock_sf.assert_called_once_with(instance, None)
|
||||
mock_node.set_provision_state.assert_called_once_with(node_uuid,
|
||||
|
@ -875,11 +879,11 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
node = ironic_utils.get_test_node(driver='fake')
|
||||
instance = fake_instance.fake_instance_obj(self.ctx,
|
||||
node=node.uuid)
|
||||
image_meta = ironic_utils.get_test_image_meta()
|
||||
image_meta = ironic_utils.get_test_image_meta_object()
|
||||
flavor = ironic_utils.get_test_flavor()
|
||||
self.driver._add_driver_fields(node, instance, image_meta, flavor)
|
||||
expected_patch = [{'path': '/instance_info/image_source', 'op': 'add',
|
||||
'value': image_meta['id']},
|
||||
'value': image_meta.id},
|
||||
{'path': '/instance_info/root_gb', 'op': 'add',
|
||||
'value': str(instance.root_gb)},
|
||||
{'path': '/instance_info/swap_mb', 'op': 'add',
|
||||
|
@ -902,7 +906,7 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
node = ironic_utils.get_test_node(driver='fake')
|
||||
instance = fake_instance.fake_instance_obj(self.ctx,
|
||||
node=node.uuid)
|
||||
image_meta = ironic_utils.get_test_image_meta()
|
||||
image_meta = ironic_utils.get_test_image_meta_object()
|
||||
flavor = ironic_utils.get_test_flavor()
|
||||
self.assertRaises(exception.InstanceDeployFailure,
|
||||
self.driver._add_driver_fields,
|
||||
|
@ -1541,8 +1545,10 @@ class IronicDriverTestCase(test.NoDBTestCase):
|
|||
|
||||
mock_save.assert_called_once_with(
|
||||
expected_task_state=[task_states.REBUILDING])
|
||||
mock_driver_fields.assert_called_once_with(node, instance, image_meta,
|
||||
flavor, preserve)
|
||||
mock_driver_fields.assert_called_once_with(
|
||||
node, instance,
|
||||
test.MatchType(objects.ImageMeta),
|
||||
flavor, preserve)
|
||||
mock_set_pstate.assert_called_once_with(node_uuid,
|
||||
ironic_states.REBUILD)
|
||||
mock_looping.assert_called_once_with(mock_wait_active,
|
||||
|
|
|
@ -28,7 +28,7 @@ class IronicDriverFieldsTestCase(test.NoDBTestCase):
|
|||
|
||||
def setUp(self):
|
||||
super(IronicDriverFieldsTestCase, self).setUp()
|
||||
self.image_meta = ironic_utils.get_test_image_meta()
|
||||
self.image_meta = ironic_utils.get_test_image_meta_object()
|
||||
self.flavor = ironic_utils.get_test_flavor()
|
||||
self.ctx = nova_context.get_admin_context()
|
||||
self.instance = fake_instance.fake_instance_obj(self.ctx)
|
||||
|
@ -36,7 +36,7 @@ class IronicDriverFieldsTestCase(test.NoDBTestCase):
|
|||
# Generic expected patches
|
||||
self._expected_deploy_patch = [
|
||||
{'path': '/instance_info/image_source',
|
||||
'value': self.image_meta['id'],
|
||||
'value': self.image_meta.id,
|
||||
'op': 'add'},
|
||||
{'path': '/instance_info/root_gb',
|
||||
'value': str(self.instance['root_gb']),
|
||||
|
|
|
@ -76,6 +76,11 @@ def get_test_image_meta(**kw):
|
|||
return {'id': kw.get('id', 'cccccccc-cccc-cccc-cccc-cccccccccccc')}
|
||||
|
||||
|
||||
def get_test_image_meta_object(**kw):
|
||||
return objects.ImageMeta.from_dict(
|
||||
get_test_image_meta(**kw))
|
||||
|
||||
|
||||
class FakePortClient(object):
|
||||
|
||||
def get(self, port_uuid):
|
||||
|
|
|
@ -727,6 +727,9 @@ class IronicDriver(virt_driver.ComputeDriver):
|
|||
information. Ignored by this driver.
|
||||
"""
|
||||
LOG.debug('Spawn called for instance', instance=instance)
|
||||
|
||||
image_meta = objects.ImageMeta.from_dict(image_meta)
|
||||
|
||||
# The compute manager is meant to know the node uuid, so missing uuid
|
||||
# is a significant issue. It may mean we've been passed the wrong data.
|
||||
node_uuid = instance.get('node')
|
||||
|
@ -1165,6 +1168,9 @@ class IronicDriver(virt_driver.ComputeDriver):
|
|||
|
||||
"""
|
||||
LOG.debug('Rebuild called for instance', instance=instance)
|
||||
|
||||
image_meta = objects.ImageMeta.from_dict(image_meta)
|
||||
|
||||
instance.task_state = task_states.REBUILD_SPAWNING
|
||||
instance.save(expected_task_state=[task_states.REBUILDING])
|
||||
|
||||
|
|
|
@ -47,8 +47,7 @@ class GenericDriverFields(object):
|
|||
"""Build a patch to add the required fields to deploy a node.
|
||||
|
||||
:param instance: the instance object.
|
||||
:param image_meta: the metadata associated with the instance
|
||||
image.
|
||||
:param image_meta: the nova.objects.ImageMeta object instance
|
||||
:param flavor: the flavor object.
|
||||
:param preserve_ephemeral: preserve_ephemeral status (bool) to be
|
||||
specified during rebuild.
|
||||
|
@ -57,7 +56,7 @@ class GenericDriverFields(object):
|
|||
"""
|
||||
patch = []
|
||||
patch.append({'path': '/instance_info/image_source', 'op': 'add',
|
||||
'value': image_meta['id']})
|
||||
'value': image_meta.id})
|
||||
patch.append({'path': '/instance_info/root_gb', 'op': 'add',
|
||||
'value': str(instance.root_gb)})
|
||||
patch.append({'path': '/instance_info/swap_mb', 'op': 'add',
|
||||
|
|
Loading…
Reference in New Issue