Remove the last remnants of LXDSession use

_container_init just changed to _migrate, and was dramatically
simplified because pylxd handles most of the work for us now.

Change-Id: I60e513e0ea5967a7f579918085b27b0c17aea802
This commit is contained in:
Paul Hummer 2016-12-14 19:11:12 +00:00
parent 473dfb629e
commit e6a584ea28
2 changed files with 17 additions and 60 deletions

View File

@ -36,8 +36,8 @@ class LXDTestLiveMigrate(test.NoDBTestCase):
self.driver.config = mock.MagicMock()
self.driver.operations = mock.MagicMock()
@mock.patch.object(driver.LXDDriver, '_container_init')
def test_live_migration(self, mock_container_init):
@mock.patch.object(driver.LXDDriver, '_migrate')
def test_live_migration(self, mock_migrate):
"""Verify that the correct live migration calls
are made.
"""
@ -48,19 +48,19 @@ class LXDTestLiveMigrate(test.NoDBTestCase):
mock.sentinel.dest, mock_post_method,
mock.sentinel.recover_method, mock.sentinel.block_migration,
mock.sentinel.migrate_data)
mock_container_init.assert_called_once_with(mock.sentinel.dest,
mock.sentinel.instance)
mock_migrate.assert_called_once_with(mock.sentinel.dest,
mock.sentinel.instance)
mock_post_method.assert_called_once_with(
mock.sentinel.context, mock.sentinel.instance, mock.sentinel.dest,
mock.sentinel.block_migration)
@mock.patch.object(driver.LXDDriver, '_container_init')
def test_live_migration_failed(self, mock_container_init):
@mock.patch.object(driver.LXDDriver, '_migrate')
def test_live_migration_failed(self, mock_migrate):
"""Verify that an exception is raised when live-migration
fails.
"""
self.flags(my_ip='fakeip')
mock_container_init.side_effect = \
mock_migrate.side_effect = \
lxd_exceptions.APIError(500, 'Fake')
self.assertRaises(
lxd_exceptions.APIError,

View File

@ -46,7 +46,6 @@ from pylxd import exceptions as lxd_exceptions
from nova.virt.lxd import vif as lxd_vif
from nova.virt.lxd import common
from nova.virt.lxd import flavor
from nova.virt.lxd import session
from nova.virt.lxd import storage
from nova.api.metadata import base as instance_metadata
@ -267,11 +266,6 @@ class LXDDriver(driver.ComputeDriver):
device_scan_attempts=CONF.libvirt.num_iscsi_scan_tries,
transport='default')
# XXX: rockstar (5 Jul 2016) - These attributes are temporary. We
# will know our cleanup of nova-lxd is complete when these
# attributes are no longer needed.
self.session = session.LXDAPISession()
def init_host(self, host):
"""Initialize the driver on the host.
@ -928,7 +922,7 @@ class LXDDriver(driver.ComputeDriver):
# Step 2 - Open a websocket on the srct and and
# generate the container config
self._container_init(migration['source_compute'], instance)
self._migrate(migration['source_compute'], instance)
# Step 3 - Start the network and container
self.plug_vifs(instance, network_info)
@ -960,7 +954,7 @@ class LXDDriver(driver.ComputeDriver):
def live_migration(self, context, instance, dest,
post_method, recover_method, block_migration=False,
migrate_data=None):
self._container_init(dest, instance)
self._migrate(dest, instance)
post_method(context, instance, dest, block_migration)
def post_live_migration(self, context, instance, block_device_info,
@ -1067,40 +1061,6 @@ class LXDDriver(driver.ComputeDriver):
return configdrive_dir
def get_container_migrate(self, container_migrate, host, instance):
"""Create the image source for a migrating container
:container_migrate: the container websocket information
:host: the source host
:instance: nova instance object
return dictionary of the image source
"""
LOG.debug('get_container_migrate called for instance',
instance=instance)
try:
# Generate the container config
container_metadata = container_migrate['metadata']
container_url = 'https://%s:8443%s' \
% (CONF.my_ip, container_migrate.get('operation'))
lxd_config = self.client.host_info['environment']
return {
'base_image': '',
'mode': 'pull',
'certificate': lxd_config['certificate'],
'operation': container_url,
'secrets': container_metadata['metadata'],
'type': 'migration'
}
except Exception as ex:
with excutils.save_and_reraise_exception():
LOG.error(_LE('Failed to configure migation source '
'%(instance)s: %(ex)s'),
{'instance': instance.name, 'ex': ex},
instance=instance)
def _after_reboot(self):
"""Perform sync operation after host reboot."""
context = nova.context.get_admin_context()
@ -1122,14 +1082,11 @@ class LXDDriver(driver.ComputeDriver):
instance, network_info)
self.firewall_driver.apply_instance_filter(instance, network_info)
def _container_init(self, host, instance):
(state, data) = (self.session.container_migrate(instance.name,
CONF.my_ip,
instance))
container_config = {
'name': instance.name,
'profiles': [instance.name],
'source': self.get_container_migrate(
data, host, instance)
}
self.session.container_init(container_config, instance, host)
def _migrate(self, source_host, instance):
"""Migrate an instance from source."""
source_client = pylxd.Client(
endpoint='https://{}'.format(source_host), verify=False)
container = source_client.containers.get(instance.name)
data = container.generate_migration_data()
self.containers.create(data, wait=True)