From b1429ae195304dbe99486978179eeb332bc44556 Mon Sep 17 00:00:00 2001 From: Feodor Tersin Date: Sat, 15 Aug 2015 22:30:42 +0300 Subject: [PATCH] Enable debug logging for Nova, Glance, Cinder requests Currently requests to these services are not logged with debug=True config option by default. This makes debugging difficult. Also set default log level for keystoneclient.auth to WARN, because it floods logs with useless info. Change-Id: Idfe2684b4146bb3c44159a08572e3c0eeff85f5f --- ec2api/api/clients.py | 4 ++-- ec2api/config.py | 2 +- ec2api/tests/unit/test_clients.py | 36 +++++++++++++++++++++---------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/ec2api/api/clients.py b/ec2api/api/clients.py index 4d4b8075..6d2050fc 100644 --- a/ec2api/api/clients.py +++ b/ec2api/api/clients.py @@ -73,7 +73,7 @@ def nova(context): return nova(context) try: return novaclient.Client(_novaclient_vertion, bypass_url=bypass_url, - **args) + http_log_debug=CONF.debug, **args) except nova_exception.UnsupportedVersion: if _novaclient_vertion == '2': raise @@ -125,7 +125,7 @@ def cinder(context): 'api_key': None, } - _cinder = cinderclient.Client('1', **args) + _cinder = cinderclient.Client('1', http_log_debug=CONF.debug, **args) management_url = _url_for(context, service_type='volume') _cinder.client.auth_token = context.auth_token _cinder.client.management_url = management_url diff --git a/ec2api/config.py b/ec2api/config.py index 408466a8..ea498328 100644 --- a/ec2api/config.py +++ b/ec2api/config.py @@ -30,7 +30,7 @@ _DEFAULT_LOG_LEVELS = ['amqp=WARN', 'amqplib=WARN', 'boto=WARN', 'requests.packages.urllib3.connectionpool=WARN', 'urllib3.connectionpool=WARN', 'websocket=WARN', 'keystonemiddleware=WARN', 'routes.middleware=WARN', - 'stevedore=WARN', 'glanceclient=WARN'] + 'stevedore=WARN', 'keystoneclient.auth=WARN'] _DEFAULT_LOGGING_CONTEXT_FORMAT = ('%(asctime)s.%(msecs)03d %(process)d ' '%(levelname)s %(name)s [%(request_id)s ' diff --git a/ec2api/tests/unit/test_clients.py b/ec2api/tests/unit/test_clients.py index 7150190e..20722d30 100644 --- a/ec2api/tests/unit/test_clients.py +++ b/ec2api/tests/unit/test_clients.py @@ -15,19 +15,16 @@ import fixtures import mock from novaclient import exceptions as nova_exception -from oslo_config import fixture as config_fixture -from oslotest import base as test_base from ec2api.api import clients +from ec2api.tests.unit import base -class ClientsTestCase(test_base.BaseTestCase): +class ClientsTestCase(base.BaseTestCase): def setUp(self): super(ClientsTestCase, self).setUp() - - conf = self.useFixture(config_fixture.Config()) - conf.config(keystone_url='keystone_url') + self.configure(keystone_url='keystone_url') @mock.patch('novaclient.client.Client') def test_nova(self, nova): @@ -42,18 +39,27 @@ class ClientsTestCase(test_base.BaseTestCase): res = clients.nova(context) self.assertEqual(nova.return_value, res) nova.assert_called_with( - '2.3', bypass_url='novav21_url', + '2.3', bypass_url='novav21_url', http_log_debug=False, auth_url='keystone_url', auth_token='fake_token', username=None, api_key=None, project_id=None) self.assertEqual(0, len(logs.output)) + # test logging with debug option + self.configure(debug=True) + clients.nova(context) + nova.assert_called_with( + '2.3', bypass_url='novav21_url', http_log_debug=True, + auth_url='keystone_url', auth_token='fake_token', + username=None, api_key=None, project_id=None) + self.configure(debug=False) + # test switching to v2 client nova.side_effect = [nova_exception.UnsupportedVersion(), 'v2_client'] with fixtures.LoggerFixture() as logs: res = clients.nova(context) self.assertEqual('v2_client', res) nova.assert_called_with( - '2', bypass_url='novav21_url', + '2', bypass_url='novav21_url', http_log_debug=False, auth_url='keystone_url', auth_token='fake_token', username=None, api_key=None, project_id=None) self.assertNotEqual(0, len(logs.output)) @@ -72,7 +78,7 @@ class ClientsTestCase(test_base.BaseTestCase): with fixtures.LoggerFixture() as logs: res = clients.nova(context) nova.assert_called_with( - '2.3', bypass_url='nova_url', + '2.3', bypass_url='nova_url', http_log_debug=False, auth_url='keystone_url', auth_token='fake_token', username=None, api_key=None, project_id=None) self.assertNotEqual(0, len(logs.output)) @@ -81,7 +87,7 @@ class ClientsTestCase(test_base.BaseTestCase): context.service_catalog = [{'type': 'fake'}] clients.nova(context) nova.assert_called_with( - '2.3', bypass_url=None, + '2.3', bypass_url=None, http_log_debug=False, auth_url='keystone_url', auth_token='fake_token', username=None, api_key=None, project_id=None) @@ -111,6 +117,7 @@ class ClientsTestCase(test_base.BaseTestCase): @mock.patch('cinderclient.client.Client') def test_cinder(self, cinder): + # test normal flow context = mock.NonCallableMock( auth_token='fake_token', service_catalog=[{'type': 'volume', @@ -119,10 +126,17 @@ class ClientsTestCase(test_base.BaseTestCase): self.assertEqual(cinder.return_value, res) cinder.assert_called_with( '1', auth_url='keystone_url', service_type='volume', - username=None, api_key=None) + username=None, api_key=None, http_log_debug=False) self.assertEqual('fake_token', res.client.auth_token) self.assertEqual('cinder_url', res.client.management_url) + # test logging with debug option + self.configure(debug=True) + clients.cinder(context) + cinder.assert_called_with( + '1', auth_url='keystone_url', service_type='volume', + username=None, api_key=None, http_log_debug=True) + @mock.patch('ec2api.context.get_keystone_client_class', return_value=mock.Mock(return_value=mock.Mock())) def test_keystone(self, keystone_client_class):