diff --git a/cinder/api/contrib/services.py b/cinder/api/contrib/services.py index 02180ba4c72..65d8fbb3c51 100644 --- a/cinder/api/contrib/services.py +++ b/cinder/api/contrib/services.py @@ -202,11 +202,14 @@ class ServiceController(wsgi.Controller): log_req = objects.LogLevel(context, prefix=prefix) - if constants.API_BINARY in binaries: - levels = utils.get_log_levels(prefix) - result.append({'host': CONF.host, - 'binary': constants.API_BINARY, - 'levels': levels}) + # 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, + 'binary': constants.API_BINARY, + 'levels': levels}) for service in services: levels = self.rpc_apis[service.binary].get_log_levels(context, service, diff --git a/cinder/tests/unit/api/contrib/test_services.py b/cinder/tests/unit/api/contrib/test_services.py index a6e5135c533..98776a1cffb 100644 --- a/cinder/tests/unit/api/contrib/test_services.py +++ b/cinder/tests/unit/api/contrib/test_services.py @@ -825,6 +825,33 @@ class ServicesTest(test.TestCase): self.controller._get_log, req, self.context, body=body) + @mock.patch('cinder.api.contrib.services.ServiceController._get_log') + def test_get_log_w_server_filter(self, get_log_mock): + server_filter = 'controller-0' + + body = {'host': CONF.host, 'server': server_filter} + req = FakeRequest(version=mv.LOG_LEVEL) + + log_levels = self.controller._get_log(req, mock.sentinel.context, body) + + self.assertEqual(get_log_mock.return_value, log_levels) + get_log_mock.assert_called_once_with(req, mock.sentinel.context, body) + self.assertNotEqual(log_levels['binary'], constants.API_BINARY) + self.assertIsNot(log_levels, constants.API_BINARY) + + @mock.patch('cinder.api.contrib.services.ServiceController._get_log') + def test_get_log_w_server_equals_to_host(self, get_log_mock): + server_filter = 'server-0' + + body = {'host': CONF.host, 'server': server_filter} + req = FakeRequest(version=mv.LOG_LEVEL) + + log_levels = self.controller._get_log(req, mock.sentinel.context, body) + + self.assertEqual(get_log_mock.return_value, log_levels) + self.assertNotEqual(log_levels['binary'], constants.API_BINARY) + self.assertIsNot(log_levels, constants.API_BINARY) + @ddt.data(None, '', '*') @mock.patch('cinder.objects.ServiceList.get_all') def test__log_params_binaries_service_all(self, binary, service_list_mock):