From 9d107415f7360d04435ecc5a122bfc883ade934b Mon Sep 17 00:00:00 2001 From: Paul Hummer Date: Wed, 9 Nov 2016 19:22:50 -0700 Subject: [PATCH] Remove the simple nova.virt.lxd.session image methods `image_upload` takes a bit more work, and will probably get sorted when `LXDDriver.setup_image` is reworked. Change-Id: I2950c6fb892b17c809aafdca38eee1e520340277 --- nova/tests/unit/virt/lxd/test_session.py | 32 -------------- nova/virt/lxd/driver.py | 13 +++--- nova/virt/lxd/session.py | 53 ------------------------ 3 files changed, 7 insertions(+), 91 deletions(-) diff --git a/nova/tests/unit/virt/lxd/test_session.py b/nova/tests/unit/virt/lxd/test_session.py index f77d1be7..8f5d8cc7 100644 --- a/nova/tests/unit/virt/lxd/test_session.py +++ b/nova/tests/unit/virt/lxd/test_session.py @@ -111,38 +111,6 @@ class SessionEventTest(test.NoDBTestCase): 200, -1) -@ddt.ddt -class SessionImageTest(test.NoDBTestCase): - - def setUp(self): - super(SessionImageTest, self).setUp() - - self.ml = stubs.lxd_mock() - lxd_patcher = mock.patch('pylxd.deprecated.api.API', - mock.Mock(return_value=self.ml)) - lxd_patcher.start() - self.addCleanup(lxd_patcher.stop) - - self.session = session.LXDAPISession() - - def test_image_defined(self): - """Test the image is defined in the LXD hypervisor.""" - instance = stubs._fake_instance() - self.ml.alias_defined.return_value = True - self.assertTrue(self.session.image_defined(instance)) - calls = [mock.call.alias_defined(instance.image_ref)] - self.assertEqual(calls, self.ml.method_calls) - - def test_alias_create(self): - """Test the alias is created.""" - instance = stubs._fake_instance() - alias = mock.Mock() - self.ml.alias_create.return_value = True - self.assertTrue(self.session.create_alias(alias, instance)) - calls = [mock.call.alias_create(alias)] - self.assertEqual(calls, self.ml.method_calls) - - @ddt.ddt class SessionProfileTest(test.NoDBTestCase): diff --git a/nova/virt/lxd/driver.py b/nova/virt/lxd/driver.py index ae06cdef..599373ca 100644 --- a/nova/virt/lxd/driver.py +++ b/nova/virt/lxd/driver.py @@ -1253,8 +1253,12 @@ class LXDDriver(driver.ComputeDriver): instance.image_ref), external=True): - if self.session.image_defined(instance): + try: + self.client.images.get(instance.name) return + except lxd_exceptions.LXDAPIException as e: + if e.response.status_code != 404: + raise base_dir = BASE_DIR if not os.path.exists(base_dir): @@ -1370,11 +1374,8 @@ class LXDDriver(driver.ComputeDriver): with open(container_image, "rb") as rootfs_fd: fingerprint = hashlib.sha256( meta_fd.read() + rootfs_fd.read()).hexdigest() - alias_config = { - 'name': instance.image_ref, - 'target': fingerprint - } - self.session.create_alias(alias_config, instance) + image = self.client.images.get(fingerprint) + image.add_alias(instance.image_ref) except Exception as ex: with excutils.save_and_reraise_exception: LOG.error( diff --git a/nova/virt/lxd/session.py b/nova/virt/lxd/session.py index 9ee9dc28..faede3b3 100644 --- a/nova/virt/lxd/session.py +++ b/nova/virt/lxd/session.py @@ -108,59 +108,6 @@ class LXDAPISession(object): # # Image related API methods. # - - def image_defined(self, instance): - """Checks existence of an image on the local LXD image store - - :param instance: The nova instance - - Returns True if supplied image exists on the host, False otherwise - """ - LOG.debug('image_defined called for instance', instance=instance) - try: - client = self.get_session() - return client.alias_defined(instance.image_ref) - except lxd_exceptions.APIError as ex: - if ex.status_code == 404: - return False - else: - msg = _('Failed to communicate with LXD API %(instance)s:' - ' %(reason)s') % {'instance': instance.image_ref, - 'reason': ex} - LOG.error(msg) - raise exception.NovaException(msg) - except Exception as e: - with excutils.save_and_reraise_exception(): - LOG.error(_LE('Error from LXD during image_defined ' - '%(instance)s: %(reason)s'), - {'instance': instance.image_ref, 'reason': e}, - instance=instance) - - def create_alias(self, alias, instance): - """Creates an alias for a given image - - :param alias: The alias to be crerated - :param instance: The nove instance - :return: true if alias is created, false otherwise - - """ - LOG.debug('create_alias called for instance', instance=instance) - try: - client = self.get_session() - return client.alias_create(alias) - except lxd_exceptions.APIError as ex: - msg = _('Failed to communicate with LXD API %(instance)s:' - ' %(reason)s') % {'instance': instance.image_ref, - 'reason': ex} - LOG.error(msg) - raise exception.NovaException(msg) - except Exception as e: - with excutils.save_and_reraise_exception(): - LOG.error(_LE('Error from LXD during create alias' - '%(instance)s: %(reason)s'), - {'instance': instance.image_ref, 'reason': e}, - instance=instance) - def image_upload(self, data, headers, instance): """Upload an image to the local LXD image store