summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-10-11 11:59:47 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2012-10-12 10:15:22 -0700
commitfead6dcd53e77240767063fc6e885f9c138c2776 (patch)
tree3775efef9ca392bcf76f64c7035d7e99d3a9acb0
parent3337da9dfdd4cddff85150b95f38052f2d9daa47 (diff)
Stops compute api import at import time
There is an automatic import of compute.api at import time whenever anything under compute is imported. This leads to all sorts of weird dependency problems such as the one here: https://review.openstack.org/#/c/14170/ This modifies the import to happen when compute.API() is called, which is how we handle it for network and volume. A few imports were also modified to make it consistent with this new style. Change-Id: Ic748376510aa4cc48dfefc6ec36621d0ae498bfc
-rw-r--r--nova/api/ec2/cloud.py5
-rw-r--r--nova/api/openstack/compute/contrib/security_groups.py3
-rw-r--r--nova/compute/__init__.py7
-rw-r--r--nova/tests/api/openstack/fakes.py5
-rw-r--r--nova/tests/compute/test_compute.py8
5 files changed, 17 insertions, 11 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index aa7e880df..7bba05f3b 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -30,6 +30,7 @@ from nova.api.ec2 import inst_state
from nova.api import validator
from nova import block_device
from nova import compute
+from nova.compute import api as compute_api
from nova.compute import instance_types
from nova.compute import vm_states
from nova import db
@@ -187,7 +188,7 @@ class CloudController(object):
self.compute_api = compute.API(network_api=self.network_api,
volume_api=self.volume_api,
security_group_api=self.security_group_api)
- self.keypair_api = compute.api.KeypairAPI()
+ self.keypair_api = compute_api.KeypairAPI()
def __str__(self):
return 'CloudController'
@@ -1580,7 +1581,7 @@ class CloudController(object):
return {'imageId': ec2_id}
-class CloudSecurityGroupAPI(compute.api.SecurityGroupAPI):
+class CloudSecurityGroupAPI(compute_api.SecurityGroupAPI):
@staticmethod
def raise_invalid_property(msg):
raise exception.InvalidParameterValue(err=msg)
diff --git a/nova/api/openstack/compute/contrib/security_groups.py b/nova/api/openstack/compute/contrib/security_groups.py
index e5b1797b4..ee36ee58d 100644
--- a/nova/api/openstack/compute/contrib/security_groups.py
+++ b/nova/api/openstack/compute/contrib/security_groups.py
@@ -26,6 +26,7 @@ from nova.api.openstack import extensions
from nova.api.openstack import wsgi
from nova.api.openstack import xmlutil
from nova import compute
+from nova.compute import api as compute_api
from nova import db
from nova import exception
from nova import flags
@@ -558,7 +559,7 @@ class Security_groups(extensions.ExtensionDescriptor):
return resources
-class NativeSecurityGroupAPI(compute.api.SecurityGroupAPI):
+class NativeSecurityGroupAPI(compute_api.SecurityGroupAPI):
@staticmethod
def raise_invalid_property(msg):
raise exc.HTTPBadRequest(explanation=msg)
diff --git a/nova/compute/__init__.py b/nova/compute/__init__.py
index 2916ff048..b770778aa 100644
--- a/nova/compute/__init__.py
+++ b/nova/compute/__init__.py
@@ -21,5 +21,8 @@
import nova.flags
import nova.openstack.common.importutils
-API = nova.openstack.common.importutils.import_class(
- nova.flags.FLAGS.compute_api_class)
+
+def API(*args, **kwargs):
+ importutils = nova.openstack.common.importutils
+ cls = importutils.import_class(nova.flags.FLAGS.compute_api_class)
+ return cls(*args, **kwargs)
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index bb6542c16..dc83447e4 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -32,6 +32,7 @@ from nova.api.openstack.compute import versions
from nova.api.openstack import urlmap
from nova.api.openstack import volume
from nova.api.openstack import wsgi as os_wsgi
+from nova.compute import api as compute_api
from nova.compute import instance_types
from nova.compute import vm_states
from nova import context
@@ -160,7 +161,7 @@ def stub_out_compute_api_snapshot(stubs):
return dict(id='123', status='ACTIVE', name=name,
properties=extra_properties)
- stubs.Set(nova.compute.API, 'snapshot', snapshot)
+ stubs.Set(compute_api.API, 'snapshot', snapshot)
class stub_out_compute_api_backup(object):
@@ -168,7 +169,7 @@ class stub_out_compute_api_backup(object):
def __init__(self, stubs):
self.stubs = stubs
self.extra_props_last_call = None
- stubs.Set(nova.compute.API, 'backup', self.backup)
+ stubs.Set(compute_api.API, 'backup', self.backup)
def backup(self, context, instance, name, backup_type, rotation,
extra_properties=None):
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index cad27b544..cf81c699d 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -218,7 +218,7 @@ class ComputeTestCase(BaseTestCase):
self.stubs.Set(compute_utils, 'add_instance_fault_from_exc',
did_it_add_fault)
- @nova.compute.manager.wrap_instance_fault
+ @compute_manager.wrap_instance_fault
def failer(self2, context, instance):
raise NotImplementedError()
@@ -238,7 +238,7 @@ class ComputeTestCase(BaseTestCase):
self.stubs.Set(compute_utils, 'add_instance_fault_from_exc',
did_it_add_fault)
- @nova.compute.manager.wrap_instance_fault
+ @compute_manager.wrap_instance_fault
def failer(self2, context, instance_uuid):
raise exception.InstanceNotFound()
@@ -2667,7 +2667,7 @@ class ComputeAPITestCase(BaseTestCase):
super(ComputeAPITestCase, self).setUp()
self.stubs.Set(network_api.API, 'get_instance_nw_info',
fake_get_nw_info)
- self.security_group_api = compute.api.SecurityGroupAPI()
+ self.security_group_api = compute_api.SecurityGroupAPI()
self.compute_api = compute.API(
security_group_api=self.security_group_api)
self.fake_image = {
@@ -4916,7 +4916,7 @@ class ComputePolicyTestCase(BaseTestCase):
self.mox.StubOutWithMock(nova.policy, 'enforce')
nova.policy.enforce(self.context, 'compute:reboot', {})
self.mox.ReplayAll()
- nova.compute.api.check_policy(self.context, 'reboot', {})
+ compute_api.check_policy(self.context, 'reboot', {})
def test_wrapped_method(self):
instance = self._create_fake_instance(params={'host': None})