@@ -63,6 +63,27 @@ def get_parser(self, prog_name):
6363 metavar = '<group>' ,
6464 help = 'Include <group> (name or ID)' ,
6565 )
66+ parser .add_argument (
67+ '--user-domain' ,
68+ metavar = '<user-domain>' ,
69+ help = ('Domain the user belongs to (name or ID). '
70+ 'This can be used in case collisions between user names '
71+ 'exist.' )
72+ )
73+ parser .add_argument (
74+ '--group-domain' ,
75+ metavar = '<group-domain>' ,
76+ help = ('Domain the group belongs to (name or ID). '
77+ 'This can be used in case collisions between group names '
78+ 'exist.' )
79+ )
80+ parser .add_argument (
81+ '--project-domain' ,
82+ metavar = '<project-domain>' ,
83+ help = ('Domain the project belongs to (name or ID). '
84+ 'This can be used in case collisions between project names '
85+ 'exist.' )
86+ )
6687 return parser
6788
6889 def take_action (self , parsed_args ):
@@ -78,67 +99,76 @@ def take_action(self, parsed_args):
7899 parsed_args .role ,
79100 )
80101
102+ kwargs = {}
81103 if parsed_args .user and parsed_args .domain :
82- user = common .find_user (
104+ user_domain_id = self ._get_domain_id_if_requested (
105+ parsed_args .user_domain )
106+ kwargs ['user' ] = common .find_user (
83107 identity_client ,
84108 parsed_args .user ,
85- )
86- domain = common .find_domain (
109+ user_domain_id ,
110+ ).id
111+ kwargs ['domain' ] = common .find_domain (
87112 identity_client ,
88113 parsed_args .domain ,
89- )
90- identity_client .roles .grant (
91- role .id ,
92- user = user .id ,
93- domain = domain .id ,
94- )
114+ ).id
95115 elif parsed_args .user and parsed_args .project :
96- user = common .find_user (
116+ user_domain_id = self ._get_domain_id_if_requested (
117+ parsed_args .user_domain )
118+ kwargs ['user' ] = common .find_user (
97119 identity_client ,
98120 parsed_args .user ,
99- )
100- project = common .find_project (
121+ user_domain_id ,
122+ ).id
123+ project_domain_id = self ._get_domain_id_if_requested (
124+ parsed_args .project_domain )
125+ kwargs ['project' ] = common .find_project (
101126 identity_client ,
102127 parsed_args .project ,
103- )
104- identity_client .roles .grant (
105- role .id ,
106- user = user .id ,
107- project = project .id ,
108- )
128+ project_domain_id ,
129+ ).id
109130 elif parsed_args .group and parsed_args .domain :
110- group = common .find_group (
131+ group_domain_id = self ._get_domain_id_if_requested (
132+ parsed_args .group_domain )
133+ kwargs ['group' ] = common .find_group (
111134 identity_client ,
112135 parsed_args .group ,
113- )
114- domain = common .find_domain (
136+ group_domain_id ,
137+ ).id
138+ kwargs ['domain' ] = common .find_domain (
115139 identity_client ,
116140 parsed_args .domain ,
117- )
118- identity_client .roles .grant (
119- role .id ,
120- group = group .id ,
121- domain = domain .id ,
122- )
141+ ).id
123142 elif parsed_args .group and parsed_args .project :
124- group = common .find_group (
143+ group_domain_id = self ._get_domain_id_if_requested (
144+ parsed_args .group_domain )
145+ kwargs ['group' ] = common .find_group (
125146 identity_client ,
126147 parsed_args .group ,
127- )
128- project = common .find_project (
148+ group_domain_id ,
149+ ).id
150+ project_domain_id = self ._get_domain_id_if_requested (
151+ parsed_args .project_domain )
152+ kwargs ['project' ] = common .find_project (
129153 identity_client ,
130154 parsed_args .project ,
131- )
132- identity_client .roles .grant (
133- role .id ,
134- group = group .id ,
135- project = project .id ,
136- )
155+ project_domain_id ,
156+ ).id
137157 else :
138158 sys .stderr .write ("Role not added, incorrect set of arguments \
139159 provided. See openstack --help for more details\n " )
160+ return
161+
162+ identity_client .roles .grant (role .id , ** kwargs )
140163 return
141164
165+ def _get_domain_id_if_requested (self , domain_name_or_id ):
166+ if domain_name_or_id is None :
167+ return None
168+ domain = common .find_domain (self .app .client_manager .identity ,
169+ domain_name_or_id )
170+ return domain .id
171+
142172
143173class CreateRole (show .ShowOne ):
144174 """Create new role"""
0 commit comments