Fix restore nova instance fail

Currently, restore nova feature is broken, it is because the
latest python-novaclient has removed the 'nova.network'. This
patch use python-neutronclient instead and will fix the issue.

Change-Id: Ifb2ab820a3cfc347d86a1b0b2fac79217752d227
Closes-Bug: #1693437
This commit is contained in:
Pengju Jiao 2017-05-25 15:42:36 +08:00
parent 293131ec8b
commit 5cb2c7a226
4 changed files with 34 additions and 5 deletions

View File

@ -38,6 +38,7 @@ class NovaEngine(engine.BackupEngine):
self.nova = self.client.create_nova()
self.glance = self.client.create_glance()
self.cinder = self.client.create_cinder()
self.neutron = self.client.create_neutron()
self.server_info = None
@property
@ -90,13 +91,13 @@ class NovaEngine(engine.BackupEngine):
server_info = metadata.get('server', {})
length = int(engine_metadata.get('length'))
available_networks = server_info.get('addresses')
nova_networks = self.nova.networks.findall()
nova_networks = self.neutron.list_networks()['networks']
net_names = [network for network, _ in
available_networks.iteritems()]
match_networks = [{"net-id": network.id} for network in
match_networks = [{"net-id": network.get('id')} for network in
nova_networks
if network.to_dict().get('label') in net_names]
if network.get('name') in net_names]
stream = self.stream_image(read_pipe)
data = utils.ReSizeStream(stream, length, 1)

View File

@ -20,6 +20,7 @@ from cinderclient import client as cinder_client
from glanceclient import client as glance_client
from keystoneauth1 import loading
from keystoneauth1 import session
from neutronclient.v2_0 import client as neutron_client
from novaclient import client as nova_client
from oslo_config import cfg
from oslo_log import log
@ -38,6 +39,7 @@ class OSClientManager(object):
self.glance = None
self.nova = None
self.cinder = None
self.neutron = None
self.dry_run = kwargs.pop('dry_run', None)
loader = loading.get_plugin_loader(auth_method)
# copy the args for swift authentication !
@ -69,6 +71,7 @@ class OSClientManager(object):
self.compute_version = kwargs.pop('compute_api_version', 2)
self.image_version = kwargs.pop('image_api_version', 2)
self.volume_version = kwargs.pop('volume_api_version', 2)
self.neutron_version = kwargs.pop('neutron_api_version', 2)
self.auth = loader.load_from_options(auth_url=auth_url, **kwargs)
self.sess = session.Session(auth=self.auth, **session_kwargs)
@ -82,6 +85,15 @@ class OSClientManager(object):
**self.client_kwargs)
return self.nova
def create_neutron(self):
"""
Use pre-initialized session to create an instance of neutron client.
:return: neutronclient instance
"""
self.neutron = neutron_client.Client(session=self.sess,
**self.client_kwargs)
return self.neutron
def create_glance(self):
"""
Use pre-initialized session to create an instance of glance client.
@ -165,6 +177,15 @@ class OSClientManager(object):
self.nova = self.create_nova()
return self.nova
def get_neutron(self):
"""
Get neutronclient instance
:return: neutronclient instance
"""
if not self.neutron:
self.neutron = self.create_neutron()
return self.neutron
def get_glance(self):
"""
Get glanceclient instance

View File

@ -44,6 +44,9 @@ class TestOsClients(unittest.TestCase):
def test_create_nova(self):
self.client_manager.create_nova()
def test_create_neutron(self):
self.client_manager.create_neutron()
def test_dry_run(self):
osclients.DryRunSwiftclientConnectionWrapper(mock.Mock())
@ -53,8 +56,11 @@ class TestOsClients(unittest.TestCase):
def test_get_swift(self):
self.client_manager.get_swift()
def get_glance(self):
def test_get_glance(self):
self.client_manager.get_glance()
def get_nova(self):
def test_get_nova(self):
self.client_manager.get_nova()
def test_get_neutron(self):
self.client_manager.get_neutron()

View File

@ -8,6 +8,7 @@ python-cinderclient>=2.0.1 # Apache-2.0
python-glanceclient>=2.5.0 # Apache-2.0
python-keystoneclient>=3.8.0 # Apache-2.0
python-novaclient>=7.1.0 # Apache-2.0
python-neutronclient>=5.1.0 # Apache-2.0
python-freezerclient>=1.3.0 # Apache-2.0
oslo.utils>=3.20.0 # Apache-2.0
oslo.log>=3.22.0 # Apache-2.0