@@ -50,16 +50,20 @@ func getLastAppliedCustomRoles(atlasProject *akov2.AtlasProject) ([]akov2.Custom
5050 return lastAppliedSpec .CustomRoles , nil
5151}
5252
53- func findRolesToDelete (prevSpec , atlasRoles []customroles.CustomRole ) map [string ]customroles.CustomRole {
53+ func findRolesToDelete (prevSpec , akoRoles , atlasRoles []customroles.CustomRole ) map [string ]customroles.CustomRole {
5454 result := map [string ]customroles.CustomRole {}
55- for atlasRoleIdx := range atlasRoles {
56- for specRoleIdx := range prevSpec {
57- if atlasRoles [atlasRoleIdx ].Name == prevSpec [specRoleIdx ].Name {
58- result [prevSpec [specRoleIdx ].Name ] = prevSpec [specRoleIdx ]
59- continue
60- }
55+ lastAppliedRolesMap := mapCustomRolesByName (prevSpec )
56+ akoRolesMap := mapCustomRolesByName (akoRoles )
57+ atlasRolesMap := mapCustomRolesByName (atlasRoles )
58+
59+ for atlasName , atlasRole := range atlasRolesMap {
60+ _ , inAKO := akoRolesMap [atlasName ]
61+ _ , inLastApplied := lastAppliedRolesMap [atlasName ]
62+ if ! inAKO && inLastApplied {
63+ result [atlasName ] = atlasRole
6164 }
6265 }
66+
6367 return result
6468}
6569
@@ -94,7 +98,7 @@ func ensureCustomRoles(workflowCtx *workflow.Context, project *akov2.AtlasProjec
9498 service : customroles .NewCustomRoles (workflowCtx .SdkClient .CustomDatabaseRolesApi ),
9599 }
96100
97- currentCustomRoles , err := r .service .List (r .ctx .Context , r .project .ID ())
101+ currentAtlasCustomRoles , err := r .service .List (r .ctx .Context , r .project .ID ())
98102 if err != nil {
99103 return workflow .Terminate (workflow .ProjectCustomRolesReady , err .Error ())
100104 }
@@ -104,12 +108,12 @@ func ensureCustomRoles(workflowCtx *workflow.Context, project *akov2.AtlasProjec
104108 akoRoles [i ] = customroles .NewCustomRole (& project .Spec .CustomRoles [i ])
105109 }
106110
107- ops := calculateChanges (currentCustomRoles , akoRoles )
111+ ops := calculateChanges (currentAtlasCustomRoles , akoRoles )
108112
109113 var deleteStatus map [string ]status.CustomRole
110114 if len (lastAppliedCustomRoles ) > 0 {
111115 deleteStatus = r .deleteCustomRoles (workflowCtx , project .ID (),
112- findRolesToDelete (convertToInternalRoles (lastAppliedCustomRoles ), currentCustomRoles ))
116+ findRolesToDelete (convertToInternalRoles (lastAppliedCustomRoles ), akoRoles , currentAtlasCustomRoles ))
113117 }
114118 updateStatus := r .updateCustomRoles (workflowCtx , project .ID (), ops .Update )
115119 createStatus := r .createCustomRoles (workflowCtx , project .ID (), ops .Create )
@@ -218,22 +222,13 @@ func mapCustomRolesByName(customRoles []customroles.CustomRole) map[string]custo
218222type CustomRolesOperations struct {
219223 Create map [string ]customroles.CustomRole
220224 Update map [string ]customroles.CustomRole
221- Delete map [string ]customroles.CustomRole
222225}
223226
224227func calculateChanges (currentCustomRoles []customroles.CustomRole , desiredCustomRoles []customroles.CustomRole ) CustomRolesOperations {
225228 currentCustomRolesByName := mapCustomRolesByName (currentCustomRoles )
226- desiredCustomRolesByName := mapCustomRolesByName (desiredCustomRoles )
227229 ops := CustomRolesOperations {
228230 Create : map [string ]customroles.CustomRole {},
229231 Update : map [string ]customroles.CustomRole {},
230- Delete : map [string ]customroles.CustomRole {},
231- }
232-
233- for _ , currentCustomRole := range currentCustomRoles {
234- if _ , ok := desiredCustomRolesByName [currentCustomRole .Name ]; ! ok {
235- ops .Delete [currentCustomRole .Name ] = currentCustomRole
236- }
237232 }
238233
239234 for _ , desiredCustomRole := range desiredCustomRoles {
0 commit comments