Filter APIs out from services list

API services records are a special case (unlike RPC services they do
not report their state regularly) and must not be exposed out of
Compute API.

Closes-Bug: #1543625

Change-Id: Icadd380ea1ff75f0cca433b68441ac5dad0ead53
This commit is contained in:
Roman Podoliaka
2016-02-09 16:48:17 +02:00
parent 07ee7f049f
commit d89c50f18b
3 changed files with 38 additions and 3 deletions

View File

@@ -34,6 +34,8 @@ class ServiceController(object):
self.ext_mgr = ext_mgr
def _get_services(self, req):
api_services = ('nova-osapi_compute', 'nova-ec2', 'nova-metadata')
context = req.environ['nova.context']
authorize(context)
@@ -41,8 +43,11 @@ class ServiceController(object):
# permission checks
nova_context.require_admin_context(context)
services = self.host_api.service_get_all(
context, set_zones=True)
services = [
s
for s in self.host_api.service_get_all(context, set_zones=True)
if s['binary'] not in api_services
]
host = ''
if 'host' in req.GET:

View File

@@ -39,9 +39,16 @@ class ServiceController(wsgi.Controller):
"disable-log-reason": self._disable_log_reason}
def _get_services(self, req):
api_services = ('nova-osapi_compute', 'nova-ec2', 'nova-metadata')
context = req.environ['nova.context']
authorize(context)
_services = self.host_api.service_get_all(context, set_zones=True)
_services = [
s
for s in self.host_api.service_get_all(context, set_zones=True)
if s['binary'] not in api_services
]
host = ''
if 'host' in req.GET:

View File

@@ -84,6 +84,29 @@ fake_services_list = [
last_seen_up=datetime.datetime(2012, 9, 18, 8, 3, 38),
forced_down=False,
disabled_reason='test4'),
# NOTE(rpodolyaka): API services are special case and must be filtered out
dict(test_service.fake_service,
binary='nova-osapi_compute',
host='host2',
id=5,
disabled=False,
topic=None,
updated_at=None,
created_at=datetime.datetime(2012, 9, 18, 2, 46, 28),
last_seen_up=None,
forced_down=False,
disabled_reason=None),
dict(test_service.fake_service,
binary='nova-metadata',
host='host2',
id=6,
disabled=False,
topic=None,
updated_at=None,
created_at=datetime.datetime(2012, 9, 18, 2, 46, 28),
last_seen_up=None,
forced_down=False,
disabled_reason=None),
]