コード例 #1
0
def _get_v35_url_data(method: str, url: str, api_version: str):
    """Parse url and http method to get CSE v35 data.

    Returns a dictionary with operation and url data.

    :param RequestMethod method: http verb
    :param str url: http url

    :rtype: dict
    """
    if api_version != VcdApiVersion.VERSION_35.value:
        raise cse_exception.NotFoundRequestError()

    tokens = url.split('/')
    num_tokens = len(tokens)

    if num_tokens < 5:
        raise cse_exception.NotFoundRequestError()

    operation_type = tokens[4].lower()
    if operation_type.endswith('s'):
        operation_type = operation_type[:-1]

    if operation_type == shared_constants.OperationType.CLUSTER:
        return _get_v35_cluster_url_data(method, tokens)

    if operation_type == shared_constants.OperationType.OVDC:
        return _get_v35_ovdc_url_data(method, tokens)

    raise cse_exception.NotFoundRequestError()
コード例 #2
0
def _get_url_data(method: str, url: str, api_version: str):
    """Parse url and http method to get desired CSE operation and url data.

    Url is processed like a tree to find the desired operation as fast as
    possible. These explicit checks allow any invalid urls or http methods to
    fall through and trigger the appropriate exception.

    Returns a data dictionary with 'operation' key and also any relevant url
    data.

    :param shared_constants.RequestMethod method:
    :param str url:

    :rtype: dict
    """
    tokens = url.split('/')
    num_tokens = len(tokens)

    if num_tokens < 4:
        raise cse_exception.NotFoundRequestError()

    if _is_pks_endpoint(url):
        return _get_pks_url_data(method, url)

    if _is_cse_3_0_endpoint(url):
        return _get_v35_url_data(method, url, api_version)

    return _get_legacy_url_data(method, url, api_version)
コード例 #3
0
def _get_url_data(method, url):
    """Parse url and http method to get desired CSE operation and url data.

    Url is processed like a tree to find the desired operation as fast as
    possible. These explicit checks allow any invalid urls or http methods to
    fall through and trigger the appropriate exception.

    Returns a data dictionary with 'operation' key and also any relevant url
    data.

    :param RequestMethod method:
    :param str url:

    :rtype: dict
    """
    tokens = url.split('/')
    num_tokens = len(tokens)

    if num_tokens < 4:
        raise e.NotFoundRequestError()

    if tokens[2] == PKS_SERVICE_NAME:
        return _get_pks_url_data(method, url)

    operation_type = tokens[3].lower()
    if operation_type.endswith('s'):
        operation_type = operation_type[:-1]

    if operation_type == OperationType.CLUSTER:
        if num_tokens == 4:
            if method == RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.CLUSTER_LIST}
            if method == RequestMethod.POST:
                return {_OPERATION_KEY: CseOperation.CLUSTER_CREATE}
            raise e.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.CLUSTER_INFO,
                    RequestKey.CLUSTER_NAME: tokens[4]
                }
            if method == RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.CLUSTER_RESIZE,
                    RequestKey.CLUSTER_NAME: tokens[4]
                }
            if method == RequestMethod.DELETE:
                return {
                    _OPERATION_KEY: CseOperation.CLUSTER_DELETE,
                    RequestKey.CLUSTER_NAME: tokens[4]
                }
            raise e.MethodNotAllowedRequestError()
        if num_tokens == 6:
            if method == RequestMethod.GET:
                if tokens[5] == 'config':
                    return {
                        _OPERATION_KEY: CseOperation.CLUSTER_CONFIG,
                        RequestKey.CLUSTER_NAME: tokens[4]
                    }
                if tokens[5] == 'upgrade-plan':
                    return {
                        _OPERATION_KEY: CseOperation.CLUSTER_UPGRADE_PLAN,
                        RequestKey.CLUSTER_NAME: tokens[4]
                    }
            raise e.MethodNotAllowedRequestError()
        if num_tokens == 7:
            if method == RequestMethod.POST:
                if tokens[5] == 'action' and tokens[6] == 'upgrade':
                    return {
                        _OPERATION_KEY: CseOperation.CLUSTER_UPGRADE,
                        RequestKey.CLUSTER_NAME: tokens[4]
                    }
            raise e.MethodNotAllowedRequestError()
    elif operation_type == OperationType.NODE:
        if num_tokens == 4:
            if method == RequestMethod.POST:
                return {_OPERATION_KEY: CseOperation.NODE_CREATE}
            if method == RequestMethod.DELETE:
                return {_OPERATION_KEY: CseOperation.NODE_DELETE}
            raise e.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.NODE_INFO,
                    RequestKey.NODE_NAME: tokens[4]
                }
            raise e.MethodNotAllowedRequestError()

    elif operation_type == OperationType.OVDC:
        if num_tokens == 4:
            if method == RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.OVDC_LIST}
            raise e.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_INFO,
                    RequestKey.OVDC_ID: tokens[4]
                }
            if method == RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_UPDATE,
                    RequestKey.OVDC_ID: tokens[4]
                }
            raise e.MethodNotAllowedRequestError()
        if num_tokens == 6 and tokens[5] == 'compute-policies':
            if method == RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_COMPUTE_POLICY_LIST,
                    RequestKey.OVDC_ID: tokens[4]
                }
            if method == RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_COMPUTE_POLICY_UPDATE,
                    RequestKey.OVDC_ID: tokens[4]
                }
            raise e.MethodNotAllowedRequestError()

    elif operation_type == OperationType.SYSTEM:
        if num_tokens == 4:
            if method == RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.SYSTEM_INFO}
            if method == RequestMethod.PUT:
                return {_OPERATION_KEY: CseOperation.SYSTEM_UPDATE}
            raise e.MethodNotAllowedRequestError()

    elif operation_type == OperationType.TEMPLATE:
        if num_tokens == 4:
            if method == RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.TEMPLATE_LIST}
            raise e.MethodNotAllowedRequestError()

    raise e.NotFoundRequestError()
コード例 #4
0
def _get_legacy_url_data(method: str, url: str, api_version: str):
    tokens = url.split('/')
    num_tokens = len(tokens)

    operation_type = tokens[3].lower()
    if operation_type.endswith('s'):
        operation_type = operation_type[:-1]

    if operation_type == shared_constants.OperationType.CLUSTER:
        if api_version not in (VcdApiVersion.VERSION_33.value,
                               VcdApiVersion.VERSION_34.value):
            raise cse_exception.NotFoundRequestError()

        if num_tokens == 4:
            if method == shared_constants.RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.CLUSTER_LIST}
            if method == shared_constants.RequestMethod.POST:
                return {_OPERATION_KEY: CseOperation.CLUSTER_CREATE}
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == shared_constants.RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.CLUSTER_INFO,
                    shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                }
            if method == shared_constants.RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.CLUSTER_RESIZE,
                    shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                }
            if method == shared_constants.RequestMethod.DELETE:
                return {
                    _OPERATION_KEY: CseOperation.CLUSTER_DELETE,
                    shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                }
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 6:
            if method == shared_constants.RequestMethod.GET:
                if tokens[5] == 'config':
                    return {
                        _OPERATION_KEY: CseOperation.CLUSTER_CONFIG,
                        shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                    }
                if tokens[5] == 'upgrade-plan':
                    return {
                        _OPERATION_KEY: CseOperation.CLUSTER_UPGRADE_PLAN,
                        shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                    }
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 7:
            if method == shared_constants.RequestMethod.POST:
                if tokens[5] == 'action' and tokens[6] == 'upgrade':
                    return {
                        _OPERATION_KEY: CseOperation.CLUSTER_UPGRADE,
                        shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                    }
            raise cse_exception.MethodNotAllowedRequestError()
    elif operation_type == shared_constants.OperationType.NODE:
        if api_version not in (VcdApiVersion.VERSION_33.value,
                               VcdApiVersion.VERSION_34.value):
            raise cse_exception.NotFoundRequestError()

        if num_tokens == 4:
            if method == shared_constants.RequestMethod.POST:
                return {_OPERATION_KEY: CseOperation.NODE_CREATE}
            if method == shared_constants.RequestMethod.DELETE:
                return {_OPERATION_KEY: CseOperation.NODE_DELETE}
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == shared_constants.RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.NODE_INFO,
                    shared_constants.RequestKey.NODE_NAME: tokens[4]
                }
            raise cse_exception.MethodNotAllowedRequestError()
    elif operation_type == shared_constants.OperationType.OVDC:
        if api_version not in (VcdApiVersion.VERSION_33.value,
                               VcdApiVersion.VERSION_34.value):
            raise cse_exception.NotFoundRequestError()

        if num_tokens == 4:
            if method == shared_constants.RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.OVDC_LIST}
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == shared_constants.RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_INFO,
                    shared_constants.RequestKey.OVDC_ID: tokens[4]
                }
            if method == shared_constants.RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_UPDATE,
                    shared_constants.RequestKey.OVDC_ID: tokens[4]
                }
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 6 and tokens[5] == 'compute-policies':
            if method == shared_constants.RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_COMPUTE_POLICY_LIST,
                    shared_constants.RequestKey.OVDC_ID: tokens[4]
                }
            if method == shared_constants.RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_COMPUTE_POLICY_UPDATE,
                    shared_constants.RequestKey.OVDC_ID: tokens[4]
                }
            raise cse_exception.MethodNotAllowedRequestError()
    elif operation_type == shared_constants.OperationType.SYSTEM:
        if num_tokens == 4:
            if method == shared_constants.RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.SYSTEM_INFO}
            if method == shared_constants.RequestMethod.PUT:
                return {_OPERATION_KEY: CseOperation.SYSTEM_UPDATE}
            raise cse_exception.MethodNotAllowedRequestError()
    elif operation_type == shared_constants.OperationType.TEMPLATE:
        if num_tokens == 4:
            if method == shared_constants.RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.TEMPLATE_LIST}
            raise cse_exception.MethodNotAllowedRequestError()

    raise cse_exception.NotFoundRequestError()
コード例 #5
0
def _get_pks_url_data(method: str, url: str):
    """Parse url and http method to get desired PKS operation and url data.

    Returns a data dictionary with 'operation' key and also any relevant url
    data.

    :param shared_constants.RequestMethod method:
    :param str url:

    :rtype: dict
    """
    tokens = url.split('/')
    num_tokens = len(tokens)

    operation_type = tokens[3].lower()
    if operation_type.endswith('s'):
        operation_type = operation_type[:-1]

    if operation_type == shared_constants.OperationType.CLUSTER:
        if num_tokens == 4:
            if method == shared_constants.RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.PKS_CLUSTER_LIST}
            if method == shared_constants.RequestMethod.POST:
                return {_OPERATION_KEY: CseOperation.PKS_CLUSTER_CREATE}
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == shared_constants.RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.PKS_CLUSTER_INFO,
                    shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                }
            if method == shared_constants.RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.PKS_CLUSTER_RESIZE,
                    shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                }
            if method == shared_constants.RequestMethod.DELETE:
                return {
                    _OPERATION_KEY: CseOperation.PKS_CLUSTER_DELETE,
                    shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                }
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 6:
            if method == shared_constants.RequestMethod.GET:
                if tokens[5] == 'config':
                    return {
                        _OPERATION_KEY: CseOperation.PKS_CLUSTER_CONFIG,
                        shared_constants.RequestKey.CLUSTER_NAME: tokens[4]
                    }
            raise cse_exception.MethodNotAllowedRequestError()
    elif operation_type == shared_constants.OperationType.OVDC:
        if num_tokens == 4:
            if method == shared_constants.RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.OVDC_LIST}
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 5:
            if method == shared_constants.RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_INFO,
                    shared_constants.RequestKey.OVDC_ID: tokens[4]
                }
            if method == shared_constants.RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.OVDC_UPDATE,
                    shared_constants.RequestKey.OVDC_ID: tokens[4]
                }
            raise cse_exception.MethodNotAllowedRequestError()

    raise cse_exception.NotFoundRequestError()
コード例 #6
0
def _get_v35_cluster_url_data(method: str, url: str):
    """Parse url and http method to get v35 cluster specific data.

    Returns a dictionary with operation and url data.

    :param RequestMethod method: http verb
    :param str url: http url

    :rtype: dict
    """
    tokens = url.split('/')
    num_tokens = len(tokens)

    if num_tokens < 5:
        raise cse_exception.NotFoundRequestError()

    operation_type = tokens[4].lower()
    if operation_type.endswith('s'):
        operation_type = operation_type[:-1]

    if operation_type == OperationType.CLUSTER:
        if num_tokens == 5:
            if method == RequestMethod.GET:
                return {_OPERATION_KEY: CseOperation.V35_CLUSTER_LIST}
            if method == RequestMethod.POST:
                return {_OPERATION_KEY: CseOperation.V35_CLUSTER_CREATE}
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 6:
            if method == RequestMethod.GET:
                return {
                    _OPERATION_KEY: CseOperation.V35_CLUSTER_INFO,
                    RequestKey.CLUSTER_ID: tokens[5]
                }
            if method == RequestMethod.PUT:
                return {
                    _OPERATION_KEY: CseOperation.V35_CLUSTER_RESIZE,
                    RequestKey.CLUSTER_ID: tokens[5]
                }
            if method == RequestMethod.DELETE:
                return {
                    _OPERATION_KEY: CseOperation.V35_CLUSTER_DELETE,
                    RequestKey.CLUSTER_ID: tokens[5]
                }
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 7:
            if method == RequestMethod.GET:
                if tokens[6] == 'config':
                    return {
                        _OPERATION_KEY: CseOperation.V35_CLUSTER_CONFIG,
                        RequestKey.CLUSTER_ID: tokens[5]
                    }
                if tokens[6] == 'upgrade-plan':
                    return {
                        _OPERATION_KEY:
                        CseOperation.V35_CLUSTER_UPGRADE_PLAN,  # noqa: E501
                        RequestKey.CLUSTER_ID: tokens[5]
                    }
            raise cse_exception.MethodNotAllowedRequestError()
        if num_tokens == 8:
            if method == RequestMethod.POST:
                if tokens[6] == 'action' and tokens[7] == 'upgrade':
                    return {
                        _OPERATION_KEY: CseOperation.V35_CLUSTER_UPGRADE,
                        RequestKey.CLUSTER_ID: tokens[5]
                    }
            raise cse_exception.MethodNotAllowedRequestError()