summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2013-01-27 17:57:56 -0500
committerDan Prince <dprince@redhat.com>2013-01-27 17:57:56 -0500
commit2ca9553d7c5b4f244532caaa9219d1a8d560284b (patch)
treea7cc1be6642552a4d3aef0b69717f5ff68af7261 /nova/api
parente1ce3878b951ea491548c129453bb84a77205649 (diff)
Avoid hard dependency on python-coverage.
Updates the coverage extension in the OpenStack Compute API to avoid a hard dependency on the python coverage module. We now try to import 'coverage' and if it isn't present we return an HTTP 503 (service unavailable error). This gets rid of WARNING errors which occur when running Nova API when the 'coverage' module is not available: 2013-01-27 17:10:28.938 16018 WARNING nova.api.openstack.compute.contrib [-] Failed to load extension nova.api.openstack.compute.contrib.coverage_ext.Coverage_ext: No module named coverage Fixes LP Bug #1101057. Change-Id: I573180aead44d68b8377cd66f30fc6ac849d0272
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/compute/contrib/coverage_ext.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/nova/api/openstack/compute/contrib/coverage_ext.py b/nova/api/openstack/compute/contrib/coverage_ext.py
index bc4d0f0f9..6edf9244f 100644
--- a/nova/api/openstack/compute/contrib/coverage_ext.py
+++ b/nova/api/openstack/compute/contrib/coverage_ext.py
@@ -23,7 +23,6 @@ import sys
import telnetlib
import tempfile
-import coverage
from webob import exc
from nova.api.openstack import extensions
@@ -47,7 +46,6 @@ class CoverageController(object):
def __init__(self):
self.data_path = tempfile.mkdtemp(prefix='nova-coverage_')
data_out = os.path.join(self.data_path, '.nova-coverage')
- self.coverInst = coverage.coverage(data_file=data_out)
self.compute_api = compute_api.API()
self.network_api = network_api.API()
self.conductor_api = conductor_api.API()
@@ -57,6 +55,12 @@ class CoverageController(object):
self.cert_api = cert_api.CertAPI()
self.services = []
self.combine = False
+ try:
+ import coverage
+ self.coverInst = coverage.coverage(data_file=data_out)
+ self.has_coverage = True
+ except ImportError:
+ self.has_coverage = False
super(CoverageController, self).__init__()
def _find_services(self, req):
@@ -238,6 +242,9 @@ class CoverageController(object):
'report': self._report_coverage,
}
authorize(req.environ['nova.context'])
+ if not self.has_coverage:
+ msg = _("Python coverage module is not installed.")
+ raise exc.HTTPServiceUnavailable(explanation=msg)
for action, data in body.iteritems():
if action == 'stop':
return _actions[action](req)