From a5e087e7a9b88e2ce698ddc32d89e1462509fbb5 Mon Sep 17 00:00:00 2001 From: Florent Flament Date: Wed, 18 Dec 2013 15:07:03 +0000 Subject: [PATCH] Displaying curl commands for nova and cinder calls When using the -v option, displays curl equivalent commands and http messages exchanged with the nova and cinder API servers. Displays the same messages as those displayed with the --debug option of python-novaclient and python-cinderclient. Implements: blueprint curl-commands-in-debugging-messages for nova and cinder related calls Change-Id: Ibc8ef79d874334585b81d652b9c7df9e874fffa9 --- openstackclient/common/utils.py | 14 ++++++++++++++ openstackclient/compute/client.py | 7 ++++++- openstackclient/volume/client.py | 5 +++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py index 91a20895b2..94ea22253a 100644 --- a/openstackclient/common/utils.py +++ b/openstackclient/common/utils.py @@ -15,6 +15,7 @@ """Common client utilities""" +import logging import os import six import sys @@ -215,3 +216,16 @@ def wait_for_status(status_f, callback(progress) time.sleep(sleep_time) return retval + + +def get_effective_log_level(): + """Returns the lowest logging level considered by logging handlers + + Retrieve an return the smallest log level set among the root + logger's handlers (in case of multiple handlers). + """ + root_log = logging.getLogger() + min_log_lvl = logging.CRITICAL + for handler in root_log.handlers: + min_log_lvl = min(min_log_lvl, handler.level) + return min_log_lvl diff --git a/openstackclient/compute/client.py b/openstackclient/compute/client.py index 4ccb2f6d40..765a48db99 100644 --- a/openstackclient/compute/client.py +++ b/openstackclient/compute/client.py @@ -35,6 +35,10 @@ def make_client(instance): instance._api_version[API_NAME], API_VERSIONS) LOG.debug('instantiating compute client: %s' % compute_client) + + # Set client http_log_debug to True if verbosity level is high enough + http_log_debug = utils.get_effective_log_level() <= logging.DEBUG + client = compute_client( username=instance._username, api_key=instance._password, @@ -49,7 +53,8 @@ def make_client(instance): extensions=[], service_type=API_NAME, # FIXME(dhellmann): what is service_name? - service_name='') + service_name='', + http_log_debug=http_log_debug) # Populate the Nova client to skip another auth query to Identity if instance._url: diff --git a/openstackclient/volume/client.py b/openstackclient/volume/client.py index e04e8cd7b8..a53203f1a8 100644 --- a/openstackclient/volume/client.py +++ b/openstackclient/volume/client.py @@ -37,6 +37,10 @@ def make_client(instance): ) LOG.debug('instantiating volume client') + + # Set client http_log_debug to True if verbosity level is high enough + http_log_debug = utils.get_effective_log_level() <= logging.DEBUG + client = volume_client( username=instance._username, api_key=instance._password, @@ -44,6 +48,7 @@ def make_client(instance): auth_url=instance._auth_url, cacert=instance._cacert, insecure=instance._insecure, + http_log_debug=http_log_debug ) return client