diff options
| author | Dean Troyer <dtroyer@gmail.com> | 2016-08-29 11:07:49 -0500 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2016-08-29 11:58:49 -0500 |
| commit | bec206fa0a0214d856259661c5e32086f33d2f62 (patch) | |
| tree | b03c9dfe24b8bde7f0667e572b09625f3249b8b0 /openstackclient/common | |
| parent | a08b62523fa634d5a61d85d1e9f3b89ab2d4a14e (diff) | |
| download | python-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')
| -rw-r--r-- | openstackclient/common/client_config.py | 43 | ||||
| -rw-r--r-- | openstackclient/common/clientmanager.py | 2 |
2 files changed, 43 insertions, 2 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 diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py index ccfde2d0..9097543b 100644 --- a/openstackclient/common/clientmanager.py +++ b/openstackclient/common/clientmanager.py @@ -44,12 +44,10 @@ class ClientManager(clientmanager.ClientManager): self, cli_options=None, api_version=None, - pw_func=None, ): super(ClientManager, self).__init__( cli_options=cli_options, api_version=api_version, - pw_func=pw_func, ) # TODO(dtroyer): For compatibility; mark this for removal when plugin |
