summaryrefslogtreecommitdiff
path: root/openstackclient/identity/v3/role_assignment.py
diff options
context:
space:
mode:
authorLance Bragstad <lbragstad@gmail.com>2017-11-30 22:42:55 +0000
committerLance Bragstad <lbragstad@gmail.com>2018-06-04 20:09:14 +0000
commit8bfa180430354d1db11b11a3443486fe04415443 (patch)
treec289f85398a9c29d66e0b45c81dd4630c14483c6 /openstackclient/identity/v3/role_assignment.py
parent47d0d0e0c02529cf6516532758e1dc565ef7cc1a (diff)
downloadpython-openstackclient-8bfa180430354d1db11b11a3443486fe04415443.tar.gz
Add system role functionality
This commit adds the necessary bits to expose system role assignments to openstackclient via python-keystoneclient. bp system-scope Depends-On: Iecbcbf020a15f2bec777334c648d4477f89f3b2c Change-Id: I261e84700b51e8715eaebdc3f8f8bc46b68542c2
Diffstat (limited to 'openstackclient/identity/v3/role_assignment.py')
-rw-r--r--openstackclient/identity/v3/role_assignment.py35
1 files changed, 29 insertions, 6 deletions
diff --git a/openstackclient/identity/v3/role_assignment.py b/openstackclient/identity/v3/role_assignment.py
index a362adb0..9c2f3d24 100644
--- a/openstackclient/identity/v3/role_assignment.py
+++ b/openstackclient/identity/v3/role_assignment.py
@@ -55,17 +55,22 @@ class ListRoleAssignment(command.Lister):
help=_('Group to filter (name or ID)'),
)
common.add_group_domain_option_to_parser(parser)
- domain_or_project = parser.add_mutually_exclusive_group()
- domain_or_project.add_argument(
+ system_or_domain_or_project = parser.add_mutually_exclusive_group()
+ system_or_domain_or_project.add_argument(
'--domain',
metavar='<domain>',
help=_('Domain to filter (name or ID)'),
)
- domain_or_project.add_argument(
+ system_or_domain_or_project.add_argument(
'--project',
metavar='<project>',
help=_('Project to filter (name or ID)'),
)
+ system_or_domain_or_project.add_argument(
+ '--system',
+ metavar='<system>',
+ help=_('Filter based on system role assignments'),
+ )
common.add_project_domain_option_to_parser(parser)
common.add_inherited_option_to_parser(parser)
parser.add_argument(
@@ -85,7 +90,8 @@ class ListRoleAssignment(command.Lister):
def _as_tuple(self, assignment):
return (assignment.role, assignment.user, assignment.group,
- assignment.project, assignment.domain, assignment.inherited)
+ assignment.project, assignment.domain, assignment.system,
+ assignment.inherited)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -117,6 +123,10 @@ class ListRoleAssignment(command.Lister):
auth_ref.user_id
)
+ system = None
+ if parsed_args.system:
+ system = parsed_args.system
+
domain = None
if parsed_args.domain:
domain = common.find_domain(
@@ -149,7 +159,9 @@ class ListRoleAssignment(command.Lister):
include_names = True if parsed_args.names else False
effective = True if parsed_args.effective else False
- columns = ('Role', 'User', 'Group', 'Project', 'Domain', 'Inherited')
+ columns = (
+ 'Role', 'User', 'Group', 'Project', 'Domain', 'System', 'Inherited'
+ )
inherited_to = 'projects' if parsed_args.inherited else None
data = identity_client.role_assignments.list(
@@ -157,6 +169,7 @@ class ListRoleAssignment(command.Lister):
user=user,
group=group,
project=project,
+ system=system,
role=role,
effective=effective,
os_inherit_extension_inherited_to=inherited_to,
@@ -174,14 +187,24 @@ class ListRoleAssignment(command.Lister):
else:
setattr(assignment, 'project', scope['project']['id'])
assignment.domain = ''
+ assignment.system = ''
elif 'domain' in scope:
if include_names:
setattr(assignment, 'domain', scope['domain']['name'])
else:
setattr(assignment, 'domain', scope['domain']['id'])
assignment.project = ''
-
+ assignment.system = ''
+ elif 'system' in scope:
+ # NOTE(lbragstad): If, or when, keystone supports role
+ # assignments on subsets of a system, this will have to evolve
+ # to handle that case instead of hardcoding to the entire
+ # system.
+ setattr(assignment, 'system', 'all')
+ assignment.domain = ''
+ assignment.project = ''
else:
+ assignment.system = ''
assignment.domain = ''
assignment.project = ''