From 1c3cb0a3b54cdb6cd5b27e88372b65cfac844422 Mon Sep 17 00:00:00 2001
From: Dean Troyer <dtroyer@gmail.com>
Date: Mon, 27 Mar 2017 15:52:04 -0500
Subject: [PATCH] Change noauth strategy for plugin loading

Don't do it.

os-client-config's plugin loading has been causing this pain for a long
time, removing the KSC hack-around in o-c-c unmasked this again.  So when
auth is not reuired, just don't let o-c-c do any plugin loading at all.

Ever.

Of course, this shouldn't be in OSC either, but we have to do this until
the equivalent fix lands in osc-lib, is released and makes it into the
global requirements minimum version.

Depends-on: Ie68c82f7b073012685f0513b615ab1bf00bc0c3a
Change-Id: Ifdf65f3bb90fb923947a2cbe80a881d71a3fee56
---
 openstackclient/shell.py | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/openstackclient/shell.py b/openstackclient/shell.py
index d7fe6ac193..4ec357cde0 100644
--- a/openstackclient/shell.py
+++ b/openstackclient/shell.py
@@ -175,24 +175,17 @@ class OpenStackShell(shell.OpenStackShell):
     def prepare_to_run_command(self, cmd):
         """Set up auth and API versions"""
 
-        # TODO(dtroyer): Move this to osc-lib
-        # NOTE(dtroyer): If auth is not required for a command, force fake
-        #                token auth so KSA plugins are happy
-
-        kwargs = {}
-        if not cmd.auth_required:
-            # Build fake token creds to keep ksa and o-c-c hushed
-            kwargs['auth_type'] = 'token_endpoint'
-            kwargs['auth'] = {}
-            kwargs['auth']['token'] = 'x'
-            kwargs['auth']['url'] = 'x'
+        # TODO(dtroyer): Move this to osc-lib, remove entire method when 1.4.0
+        #                release is minimum version is in global-requirements
+        # NOTE(dtroyer): If auth is not required for a command, skip
+        #                get_one_Cloud()'s validation to avoid loading plugins
+        validate = cmd.auth_required
 
         # Validate auth options
         self.cloud = self.cloud_config.get_one_cloud(
             cloud=self.options.cloud,
             argparse=self.options,
-            validate=True,
-            **kwargs
+            validate=validate,
         )
         # Push the updated args into ClientManager
         self.client_manager._cli_options = self.cloud