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
This commit is contained in:
parent
8277d81d03
commit
9d107415f7
@ -111,38 +111,6 @@ class SessionEventTest(test.NoDBTestCase):
|
|||||||
200, -1)
|
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
|
@ddt.ddt
|
||||||
class SessionProfileTest(test.NoDBTestCase):
|
class SessionProfileTest(test.NoDBTestCase):
|
||||||
|
|
||||||
|
@ -1253,8 +1253,12 @@ class LXDDriver(driver.ComputeDriver):
|
|||||||
instance.image_ref),
|
instance.image_ref),
|
||||||
external=True):
|
external=True):
|
||||||
|
|
||||||
if self.session.image_defined(instance):
|
try:
|
||||||
|
self.client.images.get(instance.name)
|
||||||
return
|
return
|
||||||
|
except lxd_exceptions.LXDAPIException as e:
|
||||||
|
if e.response.status_code != 404:
|
||||||
|
raise
|
||||||
|
|
||||||
base_dir = BASE_DIR
|
base_dir = BASE_DIR
|
||||||
if not os.path.exists(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:
|
with open(container_image, "rb") as rootfs_fd:
|
||||||
fingerprint = hashlib.sha256(
|
fingerprint = hashlib.sha256(
|
||||||
meta_fd.read() + rootfs_fd.read()).hexdigest()
|
meta_fd.read() + rootfs_fd.read()).hexdigest()
|
||||||
alias_config = {
|
image = self.client.images.get(fingerprint)
|
||||||
'name': instance.image_ref,
|
image.add_alias(instance.image_ref)
|
||||||
'target': fingerprint
|
|
||||||
}
|
|
||||||
self.session.create_alias(alias_config, instance)
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
with excutils.save_and_reraise_exception:
|
with excutils.save_and_reraise_exception:
|
||||||
LOG.error(
|
LOG.error(
|
||||||
|
@ -108,59 +108,6 @@ class LXDAPISession(object):
|
|||||||
#
|
#
|
||||||
# Image related API methods.
|
# 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):
|
def image_upload(self, data, headers, instance):
|
||||||
"""Upload an image to the local LXD image store
|
"""Upload an image to the local LXD image store
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user