Skip to content

Commit b26bbae

Browse files
author
Steve Martinelli
committed
Add functionality for add-role commands
keep the functions sorted Please review carefully as I intend to mimic this logic with list and remove, I'm open to suggestions about handling thigs differently Change-Id: Ia6359134c44447f3b758870c4dc306ec1f970852
1 parent 5f28377 commit b26bbae

2 files changed

Lines changed: 82 additions & 0 deletions

File tree

openstackclient/identity/v3/role.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,87 @@
2525
from openstackclient.common import utils
2626

2727

28+
class AddRole(command.Command):
29+
"""Add role command"""
30+
31+
api = 'identity'
32+
log = logging.getLogger(__name__ + '.AddRole')
33+
34+
def get_parser(self, prog_name):
35+
parser = super(AddRole, self).get_parser(prog_name)
36+
parser.add_argument(
37+
'role',
38+
metavar='<role>',
39+
help='Name or ID of role to add',
40+
)
41+
user_or_group = parser.add_mutually_exclusive_group()
42+
user_or_group.add_argument(
43+
'--user',
44+
metavar='<user>',
45+
help='Name or ID of user to assign a role',
46+
)
47+
user_or_group.add_argument(
48+
'--group',
49+
metavar='<group>',
50+
help='Name or ID of group to assign a role',
51+
)
52+
domain_or_project = parser.add_mutually_exclusive_group()
53+
domain_or_project.add_argument(
54+
'--domain',
55+
metavar='<domain>',
56+
help='Name or ID of domain where user or group resides',
57+
)
58+
domain_or_project.add_argument(
59+
'--project',
60+
metavar='<project>',
61+
help='Name or ID of project where user or group resides',
62+
)
63+
return parser
64+
65+
def take_action(self, parsed_args):
66+
self.log.debug('take_action(%s)' % parsed_args)
67+
identity_client = self.app.client_manager.identity
68+
69+
if (not parsed_args.user and not parsed_args.domain
70+
and not parsed_args.group and not parsed_args.project):
71+
sys.stdout.write("Role not updated, no arguments present \n")
72+
return
73+
74+
role_id = utils.find_resource(identity_client.roles,
75+
parsed_args.role).id
76+
77+
if (parsed_args.user and parsed_args.domain):
78+
user = utils.find_resource(identity_client.users,
79+
parsed_args.user)
80+
domain = utils.find_resource(identity_client.domains,
81+
parsed_args.domain)
82+
identity_client.roles.grant(role_id, user=user, domain=domain)
83+
return
84+
elif (parsed_args.user and parsed_args.project):
85+
user = utils.find_resource(identity_client.users,
86+
parsed_args.user)
87+
project = utils.find_resource(identity_client.projects,
88+
parsed_args.project)
89+
identity_client.roles.grant(role_id, user=user, project=project)
90+
return
91+
elif (parsed_args.group and parsed_args.project):
92+
group = utils.find_resource(identity_client.group,
93+
parsed_args.group)
94+
project = utils.find_resource(identity_client.projects,
95+
parsed_args.project)
96+
identity_client.roles.grant(role_id, group=group, project=project)
97+
return
98+
elif (parsed_args.group and parsed_args.domain):
99+
group = utils.find_resource(identity_client.group,
100+
parsed_args.group)
101+
domain = utils.find_resource(identity_client.domains,
102+
parsed_args.domain)
103+
identity_client.roles.grant(role_id, group=group, domain=domain)
104+
return
105+
else:
106+
return
107+
108+
28109
class CreateRole(show.ShowOne):
29110
"""Create new role"""
30111

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ def read(fname):
139139
'list_role=openstackclient.identity.v3.role:ListRole',
140140
'show_role=openstackclient.identity.v3.role:ShowRole',
141141
'set_role=openstackclient.identity.v3.role:SetRole',
142+
'add_role=openstackclient.identity.v3.role:AddRole',
142143
],
143144
'openstack.image.v2': [
144145
'list_image=openstackclient.image.v2.image:ListImage',

0 commit comments

Comments
 (0)