summaryrefslogtreecommitdiff
path: root/openstackclient/common/clientmanager.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-02-21 04:31:50 +0000
committerGerrit Code Review <review@openstack.org>2016-02-21 04:31:51 +0000
commit867bcb0db8742fd2daa5c91dfd3c164ac4178f18 (patch)
treeab6312faf2d924879996e74bdfd5492b4f459598 /openstackclient/common/clientmanager.py
parentf4ca06cad6348b2a00d72d65c7a1c2f56e8df1d4 (diff)
parent41e1bd0be64e15a5e0c12b45bdf3dcde5fabf244 (diff)
downloadpython-openstackclient-867bcb0db8742fd2daa5c91dfd3c164ac4178f18.tar.gz
Merge "Support unscoped token request"
Diffstat (limited to 'openstackclient/common/clientmanager.py')
-rw-r--r--openstackclient/common/clientmanager.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py
index 5696b9e1..78a0ae6e 100644
--- a/openstackclient/common/clientmanager.py
+++ b/openstackclient/common/clientmanager.py
@@ -113,19 +113,35 @@ class ClientManager(object):
root_logger = logging.getLogger('')
LOG.setLevel(root_logger.getEffectiveLevel())
- def setup_auth(self):
+ # NOTE(gyee): use this flag to indicate whether auth setup has already
+ # been completed. If so, do not perform auth setup again. The reason
+ # we need this flag is that we want to be able to perform auth setup
+ # outside of auth_ref as auth_ref itself is a property. We can not
+ # retrofit auth_ref to optionally skip scope check. Some operations
+ # do not require a scoped token. In those cases, we call setup_auth
+ # prior to dereferrencing auth_ref.
+ self._auth_setup_completed = False
+
+ def setup_auth(self, required_scope=True):
"""Set up authentication
+ :param required_scope: indicate whether a scoped token is required
+
This is deferred until authentication is actually attempted because
it gets in the way of things that do not require auth.
"""
+ if self._auth_setup_completed:
+ return
+
# If no auth type is named by the user, select one based on
# the supplied options
self.auth_plugin_name = auth.select_auth_plugin(self._cli_options)
# Basic option checking to avoid unhelpful error messages
- auth.check_valid_auth_options(self._cli_options, self.auth_plugin_name)
+ auth.check_valid_auth_options(self._cli_options,
+ self.auth_plugin_name,
+ required_scope=required_scope)
# Horrible hack alert...must handle prompt for null password if
# password auth is requested.
@@ -180,6 +196,8 @@ class ClientManager(object):
user_agent=USER_AGENT,
)
+ self._auth_setup_completed = True
+
return
@property