2121from cliff import command
2222from cliff import lister
2323from cliff import show
24+ from keystoneclient .openstack .common .apiclient import exceptions as ksc_exc
2425
2526from openstackclient .common import utils
27+ from openstackclient .i18n import _ # noqa
2628from openstackclient .identity import common
2729
2830
@@ -80,6 +82,11 @@ def get_parser(self, prog_name):
8082 action = 'store_true' ,
8183 help = 'Disable user' ,
8284 )
85+ parser .add_argument (
86+ '--or-show' ,
87+ action = 'store_true' ,
88+ help = _ ('Return existing user' ),
89+ )
8390 return parser
8491
8592 def take_action (self , parsed_args ):
@@ -106,15 +113,24 @@ def take_action(self, parsed_args):
106113 if parsed_args .password_prompt :
107114 parsed_args .password = utils .get_password (self .app .stdin )
108115
109- user = identity_client .users .create (
110- name = parsed_args .name ,
111- domain = domain_id ,
112- default_project = project_id ,
113- password = parsed_args .password ,
114- email = parsed_args .email ,
115- description = parsed_args .description ,
116- enabled = enabled
117- )
116+ try :
117+ user = identity_client .users .create (
118+ name = parsed_args .name ,
119+ domain = domain_id ,
120+ default_project = project_id ,
121+ password = parsed_args .password ,
122+ email = parsed_args .email ,
123+ description = parsed_args .description ,
124+ enabled = enabled
125+ )
126+ except ksc_exc .Conflict as e :
127+ if parsed_args .or_show :
128+ user = utils .find_resource (identity_client .users ,
129+ parsed_args .name ,
130+ domain_id = domain_id )
131+ self .log .info ('Returning existing user %s' , user .name )
132+ else :
133+ raise e
118134
119135 user ._info .pop ('links' )
120136 return zip (* sorted (six .iteritems (user ._info )))
0 commit comments