From fead6dcd53e77240767063fc6e885f9c138c2776 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Thu, 11 Oct 2012 11:59:47 -0700 Subject: 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 --- nova/api/ec2/cloud.py | 5 +++-- nova/api/openstack/compute/contrib/security_groups.py | 3 ++- nova/compute/__init__.py | 7 +++++-- nova/tests/api/openstack/fakes.py | 5 +++-- nova/tests/compute/test_compute.py | 8 ++++---- 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}) -- cgit