diff --git a/releasenotes/notes/fix_admin_keystoneauth1-ed534462434.yaml b/releasenotes/notes/fix_admin_keystoneauth1-ed534462434.yaml new file mode 100644 index 00000000..2bbb657b --- /dev/null +++ b/releasenotes/notes/fix_admin_keystoneauth1-ed534462434.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Having the CLI command display non-redundant information + for module-list when invoked with admin privileges now + works with both keystone V2 and V3. Bug 1622019 diff --git a/troveclient/utils.py b/troveclient/utils.py index 9fb12b1c..61216560 100644 --- a/troveclient/utils.py +++ b/troveclient/utils.py @@ -246,6 +246,17 @@ def find_resource(manager, name_or_id): raise exceptions.CommandError(msg) +def is_admin(cs): + is_admin = False + try: + is_admin = 'admin' in cs.client.auth.auth_ref.role_names + except Exception: + print("Warning: Could not determine current role. Assuming non-admin") + pass + + return is_admin + + class HookableMixin(object): """Mixin so classes can register and run hooks.""" _hooks_map = {} diff --git a/troveclient/v1/shell.py b/troveclient/v1/shell.py index 86eae0e8..08d1aedb 100644 --- a/troveclient/v1/shell.py +++ b/troveclient/v1/shell.py @@ -1736,19 +1736,7 @@ def do_module_list(cs, args): 'datastore_version', 'auto_apply', 'priority_apply', 'apply_order', 'is_admin', 'tenant', 'visible'] - is_admin = False - try: - try: - roles = cs.client.auth.auth_ref['user']['roles'] - except TypeError: - roles = cs.client.auth.auth_ref._data['access']['user']['roles'] - role_names = [role['name'] for role in roles] - is_admin = 'admin' in role_names - except TypeError: - pass - except AttributeError: - pass - if not is_admin: + if not utils.is_admin(cs): field_list = field_list[:-2] utils.print_list( module_list, field_list,