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
This commit is contained in:
Feodor Tersin 2015-08-15 22:30:42 +03:00
parent f7fbf1424f
commit b1429ae195
3 changed files with 28 additions and 14 deletions

View File

@ -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

View File

@ -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 '

View File

@ -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):