in pkg/infrastructure/spRoleAssignmentManager/defaultSPRoleAssignmentManager.go [52:79]
func (r *SPRoleAssignmentManager) CreateUpdateCustomRole(subscription string, role domain.Role, permissions []string) error {
retryCount := 3
permissionsToAdd := permissions
for i := 0; i < retryCount; i++ {
log.Debugf("Creating/Updating Role Definition: %s, Retry: %d", role.RoleDefinitionName, i+1)
err := r.createUpdateCustomRole(subscription, role, permissionsToAdd)
if err != nil && strings.Contains(err.Error(), "InvalidActionOrNotAction") {
errMsg := err.Error()
log.Warnf("InvalidActionOrNotAction error occured. Atempting to remove invalid action...")
actionsToRemove, err := domain.GetDeleteActionFromInvalidActionOrNotActionError(errMsg)
if err != nil {
log.Warnf("Could not get actions to remove from error: %s", err.Error())
return err
}
log.Debug("Filtering Invalid Actions: ", actionsToRemove)
permissionsToAdd = filterInvalidActions(permissionsToAdd, actionsToRemove)
continue // retry
}
if err != nil { // not retrying for other errors
log.Debugf("Error when updating role: %s", err.Error())
return err
}
log.Infof("Role definition created/updated successfully")
break
}
return nil
}