Standard implementation for the apply_connectivity_changes operation
    This function will accept as an input the actions to perform for add/remove vlan. It implements
    the basic flow of decoding the JSON connectivity changes requests, and combining the results
    of the add/remove vlan functions into a result object.

    :param str request: json string sent from the CloudShell server describing the connectivity changes to perform
    :param Function -> ConnectivityActionResult remove_vlan_action: This action will be called for VLAN remove operations
    :param Function -> ConnectivityActionResult add_vlan_action: This action will be called for VLAN add operations
    :param logger: logger to use for the operation, if you don't provide a logger, a default Python logger will be used
    :return Returns a driver action result object, this can be returned to CloudShell server by the command result
    :rtype: DriverResponseRoot

def apply_connectivity_changes(request, add_vlan_action, remove_vlan_action, logger=None):
    """
    Standard implementation for the apply_connectivity_changes operation
    This function will accept as an input the actions to perform for add/remove vlan. It implements
    the basic flow of decoding the JSON connectivity changes requests, and combining the results
    of the add/remove vlan functions into a result object.

    :param str request: json string sent from the CloudShell server describing the connectivity changes to perform
    :param Function -> ConnectivityActionResult remove_vlan_action: This action will be called for VLAN remove operations
    :param Function -> ConnectivityActionResult add_vlan_action: This action will be called for VLAN add operations
    :param logger: logger to use for the operation, if you don't provide a logger, a default Python logger will be used
    :return Returns a driver action result object, this can be returned to CloudShell server by the command result
    :rtype: DriverResponseRoot
    """

    if not logger:
        logger = logging.getLogger("apply_connectivity_changes")

    if request is None or request == '':
        raise Exception('ConnectivityOperations', 'request is None or empty')

    holder = connectivity_request_from_json(request)

    driver_response = DriverResponse()
    results = []
    driver_response_root = DriverResponseRoot()

    for action in holder.actions:
        logger.info('Action: ', action.__dict__)
        if action.type == ConnectivityActionRequest.SET_VLAN:
            action_result = add_vlan_action(action)

        elif action.type == ConnectivityActionRequest.REMOVE_VLAN:
            action_result = remove_vlan_action(action)

        else:
            continue
        results.append(action_result)

    driver_response.actionResults = results
    driver_response_root.driverResponse = driver_response
    return driver_response_root