summaryrefslogtreecommitdiff
path: root/openstackclient/common
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/common')
-rw-r--r--openstackclient/common/client_config.py43
-rw-r--r--openstackclient/common/clientmanager.py2
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