Fix service-get-log to respect server filters

The service-get-log command returns always the same output ignoring
the 'server' filters.

This fix avoid returning all the results when using the 'server' filter.

How to reproduce:
'cinder  --os-volume-api-version 3.52 service-get-log
--server localhost.localdomain@cep'
return the same output than
'cinder  --os-volume-api-version 3.52 service-get-log'

Also includes squash to fix unit test from:
Fix service_get_log tests
Change-Id: I633e67efa4869816786011c3d093dc81e177010c

Change-Id: Iecb3faad9270f969185089cc291127b340483a46
(cherry picked from commit e793c5e249)
(cherry picked from commit 0f6b4cdcd4)
(cherry picked from commit 915aab4dbb)
This commit is contained in:
Sofia Enriquez 2019-10-01 18:16:27 +02:00
parent 13d48f8589
commit 10495c5643
2 changed files with 37 additions and 5 deletions

View File

@ -202,6 +202,9 @@ class ServiceController(wsgi.Controller):
log_req = objects.LogLevel(context, prefix=prefix)
# Avoid showing constants if 'server' is set.
server_filter = body.get('server')
if not server_filter or server_filter == CONF.host:
if constants.API_BINARY in binaries:
levels = utils.get_log_levels(prefix)
result.append({'host': CONF.host,

View File

@ -825,6 +825,35 @@ class ServicesTest(test.TestCase):
self.controller._get_log, req, self.context,
body=body)
def test_get_log_w_server_filter_same_host(self):
server_filter = 'controller-0'
CONF.set_override('host', server_filter)
body = {'binary': constants.API_BINARY, 'server': server_filter}
req = FakeRequest(version=mv.LOG_LEVEL)
log_levels = self.controller._get_log(
req=req, context=mock.sentinel.context, body=body)
log_levels = log_levels['log_levels']
self.assertEqual(1, len(log_levels))
self.assertEqual('controller-0', log_levels[0]['host'])
self.assertEqual('cinder-api', log_levels[0]['binary'])
# since there are a lot of log levels, we just check if the key-value
# exists for levels
self.assertIsNotNone(log_levels[0]['levels'])
def test_get_log_w_server_filter_different_host(self):
server_filter = 'controller-0'
CONF.set_override('host', 'controller-different-host')
body = {'binary': constants.API_BINARY, 'server': server_filter}
req = FakeRequest(version=mv.LOG_LEVEL)
log_levels = self.controller._get_log(
req=req, context=mock.sentinel.context, body=body)
log_levels = log_levels['log_levels']
self.assertEqual(0, len(log_levels))
@ddt.data(None, '', '*')
@mock.patch('cinder.objects.ServiceList.get_all')
def test__log_params_binaries_service_all(self, binary, service_list_mock):