diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-03-04 16:54:32 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-03-04 16:54:32 +0000 |
| commit | 8f3a7f73ffad0c64b89e926e2a672f8333da3636 (patch) | |
| tree | 14803a4e5f56858ace05776bacab366e7eb1f070 | |
| parent | b3e097a0f45f6f3f7c005d469ad7513a2f5960a6 (diff) | |
| parent | 0ce8d40cc47580d202c8b5fd25d263bff78f7e8d (diff) | |
Merge "Fallback coverage backdoor telnet connection to lo"
| -rw-r--r-- | nova/api/openstack/compute/contrib/coverage_ext.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/nova/api/openstack/compute/contrib/coverage_ext.py b/nova/api/openstack/compute/contrib/coverage_ext.py index e7f3ceff7..e151082a3 100644 --- a/nova/api/openstack/compute/contrib/coverage_ext.py +++ b/nova/api/openstack/compute/contrib/coverage_ext.py @@ -19,10 +19,12 @@ import os import re +import socket import sys import telnetlib import tempfile +from oslo.config import cfg from webob import exc from nova.api.openstack import extensions @@ -39,6 +41,7 @@ from nova.scheduler import rpcapi as scheduler_api LOG = logging.getLogger(__name__) authorize = extensions.extension_authorizer('compute', 'coverage_ext') +CONF = cfg.CONF class CoverageController(object): @@ -55,6 +58,7 @@ class CoverageController(object): self.services = [] self.combine = False self._cover_inst = None + self.host = CONF.host super(CoverageController, self).__init__() @property @@ -71,7 +75,7 @@ class CoverageController(object): def _find_services(self, req): """Returns a list of services.""" context = req.environ['nova.context'] - services = db.service_get_all(context, False) + services = db.service_get_all(context) hosts = [] for serv in services: hosts.append({"service": serv["topic"], "host": serv["host"]}) @@ -140,8 +144,21 @@ class CoverageController(object): ports = self._find_ports(req, hosts) self.services = [] for service in ports: - service['telnet'] = telnetlib.Telnet(service['host'], - service['port']) + try: + service['telnet'] = telnetlib.Telnet(service['host'], + service['port']) + # NOTE(mtreinish): Fallback to try connecting to lo if + # ECONNREFUSED is raised. If using the hostname that is returned + # for the service from the service_get_all() DB query raises + # ECONNREFUSED it most likely means that the hostname in the DB + # doesn't resolve to 127.0.0.1. Currently backdoors only open on + # loopback so this is for covering the common single host use case + except socket.error as e: + if 'ECONNREFUSED' in e and service['host'] == self.host: + service['telnet'] = telnetlib.Telnet('127.0.0.1', + service['port']) + else: + raise e self.services.append(service) self._start_coverage_telnet(service['telnet'], service['service']) |
