From 2ca9553d7c5b4f244532caaa9219d1a8d560284b Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Sun, 27 Jan 2013 17:57:56 -0500 Subject: 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 --- nova/api/openstack/compute/contrib/coverage_ext.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'nova/api') 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) -- cgit