summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-10-01 10:30:48 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2012-10-04 09:49:24 -0700
commit31764456bd4536c920fb1d768fbdebf93e016a8a (patch)
tree1ca740e184677e538e428bb3d7168c0457f0a6f5
parentb01c148f2fcf68514a276393a6b5a4f79a60f399 (diff)
downloadnova-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.py4
-rw-r--r--nova/network/__init__.py8
-rw-r--r--nova/tests/api/openstack/fakes.py5
-rw-r--r--nova/tests/compute/test_compute.py11
-rw-r--r--nova/tests/compute/test_compute_utils.py3
-rw-r--r--nova/tests/fake_network.py4
-rw-r--r--nova/tests/test_metadata.py4
-rw-r--r--nova/tests/test_notifications.py4
-rw-r--r--nova/virt/firewall.py6
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)