2121
2222from openstackclient .common import utils
2323from openstackclient .i18n import _ # noqa
24+ from openstackclient .identity import common
25+
26+
27+ def _determine_ec2_user (parsed_args , client_manager ):
28+ """Determine a user several different ways.
29+
30+ Assumes parsed_args has user and user_domain arguments. Attempts to find
31+ the user if domain scoping is provided, otherwise revert to a basic user
32+ call. Lastly use the currently authenticated user.
33+
34+ """
35+
36+ user_domain = None
37+ if parsed_args .user_domain :
38+ user_domain = common .find_domain (client_manager .identity ,
39+ parsed_args .user_domain )
40+ if parsed_args .user :
41+ if user_domain is not None :
42+ user = utils .find_resource (client_manager .identity .users ,
43+ parsed_args .user ,
44+ domain_id = user_domain .id ).id
45+ else :
46+ user = utils .find_resource (
47+ client_manager .identity .users ,
48+ parsed_args .user ).id
49+ else :
50+ # Get the user from the current auth
51+ user = client_manager .auth_ref .user_id
52+ return user
2453
2554
2655class CreateEC2Creds (show .ShowOne ):
@@ -42,28 +71,45 @@ def get_parser(self, prog_name):
4271 help = _ ('Specify an alternate user'
4372 ' (default: current authenticated user)' ),
4473 )
74+ parser .add_argument (
75+ '--user-domain' ,
76+ metavar = '<user-domain>' ,
77+ help = ('Domain the user belongs to (name or ID). '
78+ 'This can be used in case collisions between user names '
79+ 'exist.' )
80+ )
81+ parser .add_argument (
82+ '--project-domain' ,
83+ metavar = '<project-domain>' ,
84+ help = ('Domain the project belongs to (name or ID). '
85+ 'This can be used in case collisions between project names '
86+ 'exist.' )
87+ )
4588 return parser
4689
4790 def take_action (self , parsed_args ):
4891 self .log .debug ('take_action(%s)' , parsed_args )
4992 identity_client = self .app .client_manager .identity
93+ client_manager = self .app .client_manager
94+ user = self .determine_ec2_user (parsed_args , client_manager )
95+
96+ project_domain = None
97+ if parsed_args .project_domain :
98+ project_domain = common .find_domain (identity_client ,
99+ parsed_args .project_domain )
50100
51101 if parsed_args .project :
52- project = utils .find_resource (
53- identity_client .projects ,
54- parsed_args .project ,
55- ).id
102+ if project_domain is not None :
103+ project = utils .find_resource (identity_client .projects ,
104+ parsed_args .project ,
105+ domain_id = project_domain .id ).id
106+ else :
107+ project = utils .find_resource (
108+ identity_client .projects ,
109+ parsed_args .project ).id
56110 else :
57111 # Get the project from the current auth
58112 project = self .app .client_manager .auth_ref .project_id
59- if parsed_args .user :
60- user = utils .find_resource (
61- identity_client .users ,
62- parsed_args .user ,
63- ).id
64- else :
65- # Get the user from the current auth
66- user = self .app .client_manager .auth_ref .user_id
67113
68114 creds = identity_client .ec2 .create (user , project )
69115
@@ -95,22 +141,20 @@ def get_parser(self, prog_name):
95141 metavar = '<user>' ,
96142 help = _ ('Specify a user' ),
97143 )
144+ parser .add_argument (
145+ '--user-domain' ,
146+ metavar = '<user-domain>' ,
147+ help = ('Domain the user belongs to (name or ID). '
148+ 'This can be used in case collisions between user names '
149+ 'exist.' )
150+ )
98151 return parser
99152
100153 def take_action (self , parsed_args ):
101154 self .log .debug ('take_action(%s)' , parsed_args )
102- identity_client = self .app .client_manager .identity
103-
104- if parsed_args .user :
105- user = utils .find_resource (
106- identity_client .users ,
107- parsed_args .user ,
108- ).id
109- else :
110- # Get the user from the current auth
111- user = self .app .client_manager .auth_ref .user_id
112-
113- identity_client .ec2 .delete (user , parsed_args .access_key )
155+ client_manager = self .app .client_manager
156+ user = self .determine_ec2_user (parsed_args , client_manager )
157+ client_manager .identity .ec2 .delete (user , parsed_args .access_key )
114158
115159
116160class ListEC2Creds (lister .Lister ):
@@ -125,24 +169,23 @@ def get_parser(self, prog_name):
125169 metavar = '<user>' ,
126170 help = _ ('Specify a user' ),
127171 )
172+ parser .add_argument (
173+ '--user-domain' ,
174+ metavar = '<user-domain>' ,
175+ help = ('Domain the user belongs to (name or ID). '
176+ 'This can be used in case collisions between user names '
177+ 'exist.' )
178+ )
128179 return parser
129180
130181 def take_action (self , parsed_args ):
131182 self .log .debug ('take_action(%s)' , parsed_args )
132- identity_client = self .app .client_manager .identity
133-
134- if parsed_args .user :
135- user = utils .find_resource (
136- identity_client .users ,
137- parsed_args .user ,
138- ).id
139- else :
140- # Get the user from the current auth
141- user = self .app .client_manager .auth_ref .user_id
183+ client_manager = self .app .client_manager
184+ user = self .determine_ec2_user (parsed_args , client_manager )
142185
143186 columns = ('access' , 'secret' , 'tenant_id' , 'user_id' )
144187 column_headers = ('Access' , 'Secret' , 'Project ID' , 'User ID' )
145- data = identity_client .ec2 .list (user )
188+ data = client_manager . identity .ec2 .list (user )
146189
147190 return (column_headers ,
148191 (utils .get_item_properties (
@@ -168,22 +211,20 @@ def get_parser(self, prog_name):
168211 metavar = '<user>' ,
169212 help = _ ('Specify a user' ),
170213 )
214+ parser .add_argument (
215+ '--user-domain' ,
216+ metavar = '<user-domain>' ,
217+ help = ('Domain the user belongs to (name or ID). '
218+ 'This can be used in case collisions between user names '
219+ 'exist.' )
220+ )
171221 return parser
172222
173223 def take_action (self , parsed_args ):
174224 self .log .debug ('take_action(%s)' , parsed_args )
175- identity_client = self .app .client_manager .identity
176-
177- if parsed_args .user :
178- user = utils .find_resource (
179- identity_client .users ,
180- parsed_args .user ,
181- ).id
182- else :
183- # Get the user from the current auth
184- user = self .app .client_manager .auth_ref .user_id
185-
186- creds = identity_client .ec2 .get (user , parsed_args .access_key )
225+ client_manager = self .app .client_manager
226+ user = self .determine_ec2_user (parsed_args , client_manager )
227+ creds = client_manager .identity .ec2 .get (user , parsed_args .access_key )
187228
188229 info = {}
189230 info .update (creds ._info )
0 commit comments