summaryrefslogtreecommitdiff
path: root/openstackclient/common/client_config.py
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2016-08-29 11:07:49 -0500
committerDean Troyer <dtroyer@gmail.com>2016-08-29 11:58:49 -0500
commitbec206fa0a0214d856259661c5e32086f33d2f62 (patch)
treeb03c9dfe24b8bde7f0667e572b09625f3249b8b0 /openstackclient/common/client_config.py
parenta08b62523fa634d5a61d85d1e9f3b89ab2d4a14e (diff)
downloadpython-openstackclient-bec206fa0a0214d856259661c5e32086f33d2f62.tar.gz
Fix auth prompt brokenness
We start by fixing this in the already-present OSC_Config class so OSC can move forward. This change needs to get ported down into os-client-config in the near future, maybe even soon enough to make the client library freeze this week. * Add the pw-func argument to the OSC_Config (or OpenStackConfig) __init__() * When looping through the auth options from the KSA plugin look for any that have a prompt defined and do not have a value already, so ask for one. Closes-bug: #1617384 Change-Id: Ic86d56b8a6844516292fb74513712b486fec4442
Diffstat (limited to 'openstackclient/common/client_config.py')
-rw-r--r--openstackclient/common/client_config.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/openstackclient/common/client_config.py b/openstackclient/common/client_config.py
index bbcb34eb..bc231438 100644
--- a/openstackclient/common/client_config.py
+++ b/openstackclient/common/client_config.py
@@ -25,6 +25,40 @@ LOG = logging.getLogger(__name__)
# before auth plugins are loaded
class OSC_Config(OpenStackConfig):
+ # TODO(dtroyer): Once os-client-config with pw_func argument is in
+ # global-requirements we can remove __init()__
+ def __init__(
+ self,
+ config_files=None,
+ vendor_files=None,
+ override_defaults=None,
+ force_ipv4=None,
+ envvar_prefix=None,
+ secure_files=None,
+ pw_func=None,
+ ):
+ ret = super(OSC_Config, self).__init__(
+ config_files=config_files,
+ vendor_files=vendor_files,
+ override_defaults=override_defaults,
+ force_ipv4=force_ipv4,
+ envvar_prefix=envvar_prefix,
+ secure_files=secure_files,
+ )
+
+ # NOTE(dtroyer): This will be pushed down into os-client-config
+ # The default is there is no callback, the calling
+ # application must specify what to use, typically
+ # it will be osc_lib.shell.prompt_for_password()
+ if '_pw_callback' not in vars(self):
+ # Set the default if it doesn't already exist
+ self._pw_callback = None
+ if pw_func is not None:
+ # Set the passed in value
+ self._pw_callback = pw_func
+
+ return ret
+
def _auth_select_default_plugin(self, config):
"""Select a default plugin based on supplied arguments
@@ -183,4 +217,13 @@ class OSC_Config(OpenStackConfig):
else:
config['auth'][p_opt.dest] = winning_value
+ # See if this needs a prompting
+ if (
+ 'prompt' in vars(p_opt) and
+ p_opt.prompt is not None and
+ p_opt.dest not in config['auth'] and
+ self._pw_callback is not None
+ ):
+ config['auth'][p_opt.dest] = self._pw_callback(p_opt.prompt)
+
return config