diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-10-01 10:30:48 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-10-04 09:49:24 -0700 |
| commit | 31764456bd4536c920fb1d768fbdebf93e016a8a (patch) | |
| tree | 1ca740e184677e538e428bb3d7168c0457f0a6f5 | |
| parent | b01c148f2fcf68514a276393a6b5a4f79a60f399 (diff) | |
| download | nova-31764456bd4536c920fb1d768fbdebf93e016a8a.tar.gz nova-31764456bd4536c920fb1d768fbdebf93e016a8a.tar.xz nova-31764456bd4536c920fb1d768fbdebf93e016a8a.zip | |
Stop network.api import on network import
The nova.network.__init__.py was importing the network.api
automatically at import time. This was leading to some silly
workarounds (for example in nova/virt/firewall.py) involving
late importing nova.network to stop circular imports.
It is also causing issues with https://review.openstack.org/#/c/13007/
because quantum api needs to import a flag from network manager
which is causing a circular import.
This fixes the issue by moving to use the code from volume_api
which only imports the api class when the method is called. It cleans
up the tests that were stubbing out network.API and also removes
the unneeded workarounds.
Change-Id: I4c9b372d078ab4398e797335a8de5e9e1077e31f
| -rw-r--r-- | nova/api/openstack/compute/contrib/networks.py | 4 | ||||
| -rw-r--r-- | nova/network/__init__.py | 8 | ||||
| -rw-r--r-- | nova/tests/api/openstack/fakes.py | 5 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 11 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute_utils.py | 3 | ||||
| -rw-r--r-- | nova/tests/fake_network.py | 4 | ||||
| -rw-r--r-- | nova/tests/test_metadata.py | 4 | ||||
| -rw-r--r-- | nova/tests/test_notifications.py | 4 | ||||
| -rw-r--r-- | nova/virt/firewall.py | 6 |
9 files changed, 27 insertions, 22 deletions
diff --git a/nova/api/openstack/compute/contrib/networks.py b/nova/api/openstack/compute/contrib/networks.py index f673bf43a..62b4a6c80 100644 --- a/nova/api/openstack/compute/contrib/networks.py +++ b/nova/api/openstack/compute/contrib/networks.py @@ -23,7 +23,7 @@ from webob import exc from nova.api.openstack import extensions from nova import exception from nova import flags -import nova.network.api +from nova import network from nova.openstack.common import log as logging @@ -58,7 +58,7 @@ def network_dict(context, network): class NetworkController(object): def __init__(self, network_api=None): - self.network_api = network_api or nova.network.api.API() + self.network_api = network_api or network.API() def action(self, req, id, body): _actions = { diff --git a/nova/network/__init__.py b/nova/network/__init__.py index ed84c5268..7cdef3f36 100644 --- a/nova/network/__init__.py +++ b/nova/network/__init__.py @@ -20,7 +20,9 @@ # collisions with use of 'from nova.network import <foo>' elsewhere. import nova.flags import nova.openstack.common.importutils -import nova.utils -API = nova.openstack.common.importutils.import_class( - nova.flags.FLAGS.network_api_class) + +def API(): + importutils = nova.openstack.common.importutils + cls = importutils.import_class(nova.flags.FLAGS.network_api_class) + return cls() diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py index fb7a7183c..bb6542c16 100644 --- a/nova/tests/api/openstack/fakes.py +++ b/nova/tests/api/openstack/fakes.py @@ -38,6 +38,7 @@ from nova import context from nova.db.sqlalchemy import models from nova import exception as exc import nova.image.glance +from nova.network import api as network_api from nova.openstack.common import jsonutils from nova.openstack.common import timeutils from nova import quota @@ -189,7 +190,7 @@ def stub_out_nw_api_get_floating_ips_by_fixed_address(stubs, func=None): if func is None: func = get_floating_ips_by_fixed_address - stubs.Set(nova.network.API, 'get_floating_ips_by_fixed_address', func) + stubs.Set(network_api.API, 'get_floating_ips_by_fixed_address', func) def stub_out_nw_api(stubs, cls=None, private=None, publics=None): @@ -207,7 +208,7 @@ def stub_out_nw_api(stubs, cls=None, private=None, publics=None): if cls is None: cls = Fake - stubs.Set(nova.network, 'API', cls) + stubs.Set(network_api, 'API', cls) fake_network.stub_out_nw_api_get_instance_nw_info(stubs, spectacular=True) diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 048c8414b..78968afab 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -41,6 +41,7 @@ from nova import context from nova import db from nova import exception from nova import flags +from nova.network import api as network_api from nova.openstack.common import importutils from nova.openstack.common import jsonutils from nova.openstack.common import log as logging @@ -196,9 +197,9 @@ class ComputeTestCase(BaseTestCase): spectacular=True) super(ComputeTestCase, self).setUp() - self.stubs.Set(nova.network.API, 'get_instance_nw_info', + self.stubs.Set(network_api.API, 'get_instance_nw_info', fake_get_nw_info) - self.stubs.Set(nova.network.API, 'allocate_for_instance', + self.stubs.Set(network_api.API, 'allocate_for_instance', fake_get_nw_info) self.compute_api = compute.API() @@ -1191,7 +1192,7 @@ class ComputeTestCase(BaseTestCase): def dummy(*args, **kwargs): pass - self.stubs.Set(nova.network.API, 'add_fixed_ip_to_instance', + self.stubs.Set(network_api.API, 'add_fixed_ip_to_instance', dummy) self.stubs.Set(nova.compute.manager.ComputeManager, 'inject_network_info', dummy) @@ -1212,7 +1213,7 @@ class ComputeTestCase(BaseTestCase): def dummy(*args, **kwargs): pass - self.stubs.Set(nova.network.API, 'remove_fixed_ip_from_instance', + self.stubs.Set(network_api.API, 'remove_fixed_ip_from_instance', dummy) self.stubs.Set(nova.compute.manager.ComputeManager, 'inject_network_info', dummy) @@ -2664,7 +2665,7 @@ class ComputeAPITestCase(BaseTestCase): spectacular=True) super(ComputeAPITestCase, self).setUp() - self.stubs.Set(nova.network.API, 'get_instance_nw_info', + self.stubs.Set(network_api.API, 'get_instance_nw_info', fake_get_nw_info) self.security_group_api = compute.api.SecurityGroupAPI() self.compute_api = compute.API( diff --git a/nova/tests/compute/test_compute_utils.py b/nova/tests/compute/test_compute_utils.py index aee8c0c02..1573d4919 100644 --- a/nova/tests/compute/test_compute_utils.py +++ b/nova/tests/compute/test_compute_utils.py @@ -25,6 +25,7 @@ from nova import context from nova import db from nova import exception from nova import flags +from nova.network import api as network_api from nova.openstack.common import importutils from nova.openstack.common import log as logging from nova.openstack.common.notifier import api as notifier_api @@ -194,7 +195,7 @@ class UsageInfoTestCase(test.TestCase): spectacular=True) super(UsageInfoTestCase, self).setUp() - self.stubs.Set(nova.network.API, 'get_instance_nw_info', + self.stubs.Set(network_api.API, 'get_instance_nw_info', fake_get_nw_info) self.flags(compute_driver='nova.virt.fake.FakeDriver', diff --git a/nova/tests/fake_network.py b/nova/tests/fake_network.py index ef256dec0..add6ecf4b 100644 --- a/nova/tests/fake_network.py +++ b/nova/tests/fake_network.py @@ -21,6 +21,7 @@ import nova.context from nova import db from nova import exception from nova import flags +from nova.network import api as network_api from nova.network import manager as network_manager from nova.network import model as network_model from nova.network import nova_ipam_lib @@ -362,7 +363,6 @@ def stub_out_nw_api_get_instance_nw_info(stubs, func=None, ips_per_vif=1, floating_ips_per_fixed_ip=0, spectacular=False): - import nova.network def get_instance_nw_info(self, context, instance): return fake_get_instance_nw_info(stubs, num_networks=num_networks, @@ -372,7 +372,7 @@ def stub_out_nw_api_get_instance_nw_info(stubs, func=None, if func is None: func = get_instance_nw_info - stubs.Set(nova.network.API, 'get_instance_nw_info', func) + stubs.Set(network_api.API, 'get_instance_nw_info', func) _real_functions = {} diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py index 45228b3bb..a8c78d4f5 100644 --- a/nova/tests/test_metadata.py +++ b/nova/tests/test_metadata.py @@ -32,7 +32,7 @@ from nova import db from nova.db.sqlalchemy import api from nova import exception from nova import flags -from nova import network +from nova.network import api as network_api from nova import test from nova.tests import fake_network @@ -362,7 +362,7 @@ class MetadataHandlerTestCase(test.TestCase): self.assertEqual(response.status_int, 404) def test_user_data_non_existing_fixed_address(self): - self.stubs.Set(network.API, 'get_fixed_ip_by_address', + self.stubs.Set(network_api.API, 'get_fixed_ip_by_address', return_non_existing_address) response = fake_request(None, self.mdinst, "/2009-04-04/user-data", "127.1.1.1") diff --git a/nova/tests/test_notifications.py b/nova/tests/test_notifications.py index d451d852c..5abe51486 100644 --- a/nova/tests/test_notifications.py +++ b/nova/tests/test_notifications.py @@ -25,7 +25,7 @@ from nova.compute import vm_states from nova import context from nova import db from nova import flags -import nova.network +from nova.network import api as network_api from nova import notifications from nova.openstack.common import log as logging from nova.openstack.common.notifier import api as notifier_api @@ -49,7 +49,7 @@ class NotificationsTestCase(test.TestCase): self.assertTrue(ctxt.is_admin) return self.net_info - self.stubs.Set(nova.network.API, 'get_instance_nw_info', + self.stubs.Set(network_api.API, 'get_instance_nw_info', fake_get_nw_info) fake_network.set_stub_network_methods(self.stubs) diff --git a/nova/virt/firewall.py b/nova/virt/firewall.py index 1da76edeb..eb14a92c5 100644 --- a/nova/virt/firewall.py +++ b/nova/virt/firewall.py @@ -20,6 +20,8 @@ from nova import context from nova import db from nova import flags +from nova import network +from nova.network import linux_net from nova.openstack.common import cfg from nova.openstack.common import importutils from nova.openstack.common import log as logging @@ -138,7 +140,6 @@ class IptablesFirewallDriver(FirewallDriver): """Driver which enforces security groups through iptables rules.""" def __init__(self, **kwargs): - from nova.network import linux_net self.iptables = linux_net.iptables_manager self.instances = {} self.network_infos = {} @@ -392,8 +393,7 @@ class IptablesFirewallDriver(FirewallDriver): # has access to a nw_api handle, # and should be the only one making # making rpc calls. - import nova.network - nw_api = nova.network.API() + nw_api = network.API() for instance in rule['grantee_group']['instances']: nw_info = nw_api.get_instance_nw_info(ctxt, instance) |
