diff options
| author | Dan Prince <dprince@redhat.com> | 2013-01-27 17:57:56 -0500 |
|---|---|---|
| committer | Dan Prince <dprince@redhat.com> | 2013-01-27 17:57:56 -0500 |
| commit | 2ca9553d7c5b4f244532caaa9219d1a8d560284b (patch) | |
| tree | a7cc1be6642552a4d3aef0b69717f5ff68af7261 /nova/api | |
| parent | e1ce3878b951ea491548c129453bb84a77205649 (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.py | 11 |
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) |
