@@ -228,12 +228,25 @@ def get_federated_user(self, username):
228228 logger .info (f"User ({ username } ) does not exist" )
229229
230230 def create_federated_user (self , unique_id ):
231- url = f"{ self .auth_url } /users/{ unique_id } "
232- try :
233- r = self .session .put (url )
234- self .check_response (r )
235- except Conflict :
236- pass
231+ user_def = {
232+ "metadata" : {"name" : unique_id },
233+ "fullName" : unique_id ,
234+ }
235+
236+ identity_def = {
237+ "providerName" : self .id_provider ,
238+ "providerUserName" : unique_id ,
239+ }
240+
241+ identity_mapping_def = {
242+ "user" : {"name" : unique_id },
243+ "identity" : {"name" : self .qualified_id_user (unique_id )},
244+ }
245+
246+ self ._openshift_create_user (user_def )
247+ self ._openshift_create_identity (identity_def )
248+ self ._openshift_create_useridentitymapping (identity_mapping_def )
249+ logger .info (f"User { unique_id } successfully created" )
237250
238251 def assign_role_on_user (self , username , project_id ):
239252 # /users/<user_name>/projects/<project>/roles/<role>
@@ -287,9 +300,9 @@ def _get_project(self, project_id):
287300 return self .check_response (r )
288301
289302 def _delete_user (self , username ):
290- url = f" { self .auth_url } /users/ { username } "
291- r = self .session . delete ( url )
292- return self . check_response ( r )
303+ self ._openshift_delete_user ( username )
304+ self ._openshift_delete_identity ( username )
305+ logger . info ( f"User { username } successfully deleted" )
293306
294307 def get_users (self , project_id ):
295308 url = f"{ self .auth_url } /projects/{ project_id } /users"
@@ -300,12 +313,38 @@ def _openshift_get_user(self, username):
300313 api = self .get_resource_api (API_USER , "User" )
301314 return clean_openshift_metadata (api .get (name = username ).to_dict ())
302315
316+ def _openshift_create_user (self , user_def ):
317+ api = self .get_resource_api (API_USER , "User" )
318+ return clean_openshift_metadata (api .create (body = user_def ).to_dict ())
319+
320+ def _openshift_delete_user (self , username ):
321+ api = self .get_resource_api (API_USER , "User" )
322+ return clean_openshift_metadata (api .delete (name = username ).to_dict ())
323+
303324 def _openshift_get_identity (self , id_user ):
304325 api = self .get_resource_api (API_USER , "Identity" )
305326 return clean_openshift_metadata (
306327 api .get (name = self .qualified_id_user (id_user )).to_dict ()
307328 )
308329
330+ def _openshift_create_identity (self , identity_def ):
331+ api = self .get_resource_api (API_USER , "Identity" )
332+ return clean_openshift_metadata (api .create (body = identity_def ).to_dict ())
333+
334+ def _openshift_delete_identity (self , username ):
335+ api = self .get_resource_api (API_USER , "Identity" )
336+ return api .delete (name = self .qualified_id_user (username )).to_dict ()
337+
338+ def _openshift_create_useridentitymapping (self , identity_mapping_def ):
339+ api = self .get_resource_api (API_USER , "UserIdentityMapping" )
340+ return clean_openshift_metadata (api .create (body = identity_mapping_def ).to_dict ())
341+
342+ def _openshift_create_rolebinding (self , project_name , role_binding_def ):
343+ api = self .get_resource_api (API_RBAC , "RoleBinding" )
344+ return clean_openshift_metadata (
345+ api .create (body = role_binding_def , namespace = project_name ).to_dict ()
346+ )
347+
309348 def _openshift_user_exists (self , user_name ):
310349 try :
311350 self ._openshift_get_user (user_name )
0 commit comments