diff options
| author | Dean Troyer <dtroyer@gmail.com> | 2017-04-24 18:57:05 -0500 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2017-04-24 18:57:10 -0500 |
| commit | ef99f444628282d06feae04514bd2a6328d87b93 (patch) | |
| tree | 679a61d840cef175b03ba2f12c4ef5b47f932b29 /openstackclient | |
| parent | db6081fb802559cdb6623bbc5dbff597cd287b07 (diff) | |
| download | python-openstackclient-ef99f444628282d06feae04514bd2a6328d87b93.tar.gz | |
Improve no-auth path
The commands that do not require authentication sometimes still need
to call ClientManager.is_network_endpoint_enabled() to see if Neutron
is available. Optimize the paths a bit to skip auth when it is not
necessary; the upshot is Neutron will be assumed in these cases now.
This gets a LOT cleaner when it appears is a future osc-lib.
Change-Id: Ifaddc57dfa192bde04d0482e2cdcce111313a22a
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/common/clientmanager.py | 15 | ||||
| -rw-r--r-- | openstackclient/shell.py | 6 | ||||
| -rw-r--r-- | openstackclient/tests/unit/common/test_clientmanager.py | 4 |
3 files changed, 23 insertions, 2 deletions
diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py index 27f3b705..67912f0c 100644 --- a/openstackclient/common/clientmanager.py +++ b/openstackclient/common/clientmanager.py @@ -41,6 +41,9 @@ class ClientManager(clientmanager.ClientManager): # A simple incrementing version for the plugin to know what is available PLUGIN_INTERFACE_VERSION = "2" + # Let the commands set this + _auth_required = False + def __init__( self, cli_options=None, @@ -72,7 +75,10 @@ class ClientManager(clientmanager.ClientManager): # because openstack_config is an optional argument to # CloudConfig.__init__() and we'll die if it was not # passed. - if self._cli_options._openstack_config is not None: + if ( + self._auth_required and + self._cli_options._openstack_config is not None + ): self._cli_options._openstack_config._pw_callback = \ shell.prompt_for_password try: @@ -85,6 +91,13 @@ class ClientManager(clientmanager.ClientManager): return super(ClientManager, self).setup_auth() + @property + def auth_ref(self): + if not self._auth_required: + return None + else: + return super(ClientManager, self).auth_ref + def _fallback_load_auth_plugin(self, e): # NOTES(RuiChen): Hack to avoid auth plugins choking on data they don't # expect, delete fake token and endpoint, then try to diff --git a/openstackclient/shell.py b/openstackclient/shell.py index 8fdf0b61..2e384f8f 100644 --- a/openstackclient/shell.py +++ b/openstackclient/shell.py @@ -182,6 +182,12 @@ class OpenStackShell(shell.OpenStackShell): # get_one_Cloud()'s validation to avoid loading plugins validate = cmd.auth_required + # Force skipping auth for commands that do not need it + # NOTE(dtroyer): This is here because ClientManager does not have + # visibility into the Command object to get + # auth_required. It needs to move into osc-lib + self.client_manager._auth_required = cmd.auth_required + # Validate auth options self.cloud = self.cloud_config.get_one_cloud( cloud=self.options.cloud, diff --git a/openstackclient/tests/unit/common/test_clientmanager.py b/openstackclient/tests/unit/common/test_clientmanager.py index 7f82c35d..f15f9af1 100644 --- a/openstackclient/tests/unit/common/test_clientmanager.py +++ b/openstackclient/tests/unit/common/test_clientmanager.py @@ -66,4 +66,6 @@ class TestClientManager(osc_lib_test_utils.TestClientManager): ) self.assertFalse(client_manager.is_service_available('network')) - self.assertFalse(client_manager.is_network_endpoint_enabled()) + # This is True because ClientManager.auth_ref returns None in this + # test; "no service catalog" means use Network API by default now + self.assertTrue(client_manager.is_network_endpoint_enabled()) |
