From bf582a2d56e6eaaaf20f8b399dd6bdd7789e056f Mon Sep 17 00:00:00 2001 From: Doug Hellmann <doug.hellmann@dreamhost.com> Date: Thu, 10 May 2012 15:20:40 -0400 Subject: [PATCH] look at the command the user is going to run before trying to authenticate them Change-Id: I4edc6a0f1e16be4cd80fe01f62869094b50ef120 --- openstackclient/common/clientmanager.py | 3 -- openstackclient/shell.py | 46 ++++++++++++++++--------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py index aa50e65253..e3f8588a28 100644 --- a/openstackclient/common/clientmanager.py +++ b/openstackclient/common/clientmanager.py @@ -71,9 +71,6 @@ class ClientManager(object): self._image_api_version = image_api_version self._service_catalog = None - # Create the identity client - self.identity - if not self._url: # Populate other password flow attributes self._token = self.identity.auth_token diff --git a/openstackclient/shell.py b/openstackclient/shell.py index 986cdcdbfa..8ffe81fd01 100644 --- a/openstackclient/shell.py +++ b/openstackclient/shell.py @@ -124,24 +124,10 @@ class OpenStackShell(App): return parser - def initialize_app(self): - """Global app init bits: - - * set up API versions - * validate authentication info - * authenticate against Identity if requested + def authenticate_user(self): + """Make sure the user has provided all of the authentication + info we need. """ - - super(OpenStackShell, self).initialize_app() - - # stash selected API versions for later - # TODO(dtroyer): how do extenstions add their version requirements? - self.api_version = { - 'compute': self.options.os_compute_api_version, - 'identity': self.options.os_identity_api_version, - 'image': self.options.os_image_api_version, - } - self.log.debug('validating authentication options') if self.options.os_token or self.options.os_url: # Token flow auth takes priority @@ -190,6 +176,32 @@ class OpenStackShell(App): compute_api_version=self.options.os_compute_api_version, image_api_version=self.options.os_image_api_version, ) + return + + def initialize_app(self, argv): + """Global app init bits: + + * set up API versions + * validate authentication info + * authenticate against Identity if requested + """ + + super(OpenStackShell, self).initialize_app(argv) + + # stash selected API versions for later + # TODO(dtroyer): how do extenstions add their version requirements? + self.api_version = { + 'compute': self.options.os_compute_api_version, + 'identity': self.options.os_identity_api_version, + 'image': self.options.os_image_api_version, + } + + # If the user is not asking for help, make sure they + # have given us auth. + cmd_info = self.command_manager.find_command(argv) + cmd_factory, cmd_name, sub_argv = cmd_info + if cmd_name != 'help': + self.authenticate_user() self.log.debug("API: Identity=%s Compute=%s Image=%s" % ( self.api_version['identity'],