func()

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
}