diff --git a/freezer/engine/nova/nova.py b/freezer/engine/nova/nova.py index 728779fc..4979f573 100644 --- a/freezer/engine/nova/nova.py +++ b/freezer/engine/nova/nova.py @@ -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) diff --git a/freezer/openstack/osclients.py b/freezer/openstack/osclients.py index efef0c55..b9ebfe9b 100644 --- a/freezer/openstack/osclients.py +++ b/freezer/openstack/osclients.py @@ -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 diff --git a/freezer/tests/unit/openstack/test_osclients.py b/freezer/tests/unit/openstack/test_osclients.py index ca21e500..7e5ff620 100644 --- a/freezer/tests/unit/openstack/test_osclients.py +++ b/freezer/tests/unit/openstack/test_osclients.py @@ -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() diff --git a/requirements.txt b/requirements.txt index 4986febc..617cb8f2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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