@@ -64,17 +64,29 @@ func (o OktaPlugin) GroupUpdate(g pb.Group) (pb.Group, error) {
6464// GroupDestroy pushes the destruction of groups to Okta. It is
6565// recommended to never destroy a group, but if this is desired this
6666// function will ensure the group is removed in Okta as well.
67- func (o OktaPlugin ) GroupDestroy (g pb.Group ) error {
67+ func (o OktaPlugin ) GroupDestroy (g pb.Group ) (pb. Group , error ) {
6868 appLogger .Info ("Attempting to remove group from Okta" , "group" , g .GetName ())
6969 oktaID := getGroupOktaID (g )
7070 if oktaID == "" {
71- return nil
71+ return g , nil
7272 }
73- resp , err := o .c .Group .DeleteGroup (oktaID )
74- if err != nil {
75- appLogger .Warn ("Failed to delete Okta Group" , "group" , g .GetName (), "oktaID" , oktaID , "error" , err )
73+
74+ // Deleting groups in Okta appears to be very racy, and this
75+ // often leads to groups not actually being deleted. The fix
76+ // is to keep trying to get the group until it goes away since
77+ // that is the only way Okta provides to be sure that a group
78+ // is really gone.
79+ var err error
80+ err = nil
81+ for err == nil {
82+ _ , err = o .c .Group .DeleteGroup (oktaID )
83+ if err != nil {
84+ appLogger .Warn ("Failed to delete Okta Group" , "group" , g .GetName (), "oktaID" , oktaID , "error" , err )
85+ }
86+
87+ _ , _ , err = o .c .Group .GetGroup (oktaID , nil )
88+ appLogger .Debug ("Error after getting group" , "error" , err )
7689 }
7790
78- appLogger .Debug ("Okta Response" , "response" , resp )
79- return nil
91+ return g , nil
8092}
0 commit comments