async def deep_check():
    template = random.choice(
        list(XDS_TEMPLATES['default'].keys())
    )
    await discovery.response(
        mock_discovery_request(),
        xds_type=template
    )
    node = mock_discovery_request().node
    match_node(node_value=extract_node_key(node))
    return PlainTextResponse(f'Rendered {template} OK')
Пример #2
0
async def display_config(
        xds_type: DiscoveryTypes = Query(...,
                                         title='xDS type',
                                         description='The type of request',
                                         example='clusters'),
        service_cluster: str = Query(
            '*',
            title='The clients service cluster to emulate in this XDS request'
        ),
        resource_names: str = Query('',
                                    title='Envoy Resource names to request'),
        region: str = Query(
            None, title='The clients region to emulate in this XDS request'),
        version: str = Query(
            '1.11.1',
            title='The clients envoy version to emulate in this XDS request')):
    ret = defaultdict(list)
    mock_request = mock_discovery_request(service_cluster=service_cluster,
                                          resource_names=resource_names,
                                          version=version,
                                          region=region)
    response = await discovery.response(request=mock_request,
                                        xds_type=xds_type.value)
    ret['resources'] += response.get('resources', [])
    safe_response = jsonable_encoder(ret)
    return json_response_class(content=safe_response)
Пример #3
0
async def debug_template(
    xds_type: DiscoveryTypes = Query(...,
                                     title="xDS type",
                                     description="The type of request",
                                     example="clusters"),
    service_cluster: str = Query(
        "*",
        title="The clients service cluster to emulate in this XDS request"),
    resource_names: str = Query("", title="Envoy Resource names to request"),
    region: str = Query(
        None, title="The clients region to emulate in this XDS request"),
    version: str = Query(
        "1.11.1",
        title="The clients envoy version to emulate in this XDS request"),
) -> JSONResponse:
    mock_request = mock_discovery_request(
        service_cluster=service_cluster,
        resource_names=resource_names.split(","),
        version=version,
        region=region,
    )
    template = select_template(mock_request, xds_type.value)
    context = template_context.get_context(mock_request, template)
    context = dict(
        discovery_request=mock_request,
        host_header="debug",
        resource_names=mock_request.resources,
        **context,
    )
    raw_template_content = await template(**context)
    safe_response = jsonable_encoder(raw_template_content)
    return JSONResponse(content=safe_response)
Пример #4
0
async def display_config(
    xds_type: DiscoveryTypes = Query(...,
                                     title="xDS type",
                                     description="The type of request",
                                     example="clusters"),
    service_cluster: str = Query(
        "*",
        title="The clients service cluster to emulate in this XDS request"),
    resource_names: str = Query("", title="Envoy Resource names to request"),
    region: str = Query(
        None, title="The clients region to emulate in this XDS request"),
    version: str = Query(
        "1.11.1",
        title="The clients envoy version to emulate in this XDS request"),
) -> JSONResponse:
    ret: Dict[str, List[Dict[str, Any]]] = defaultdict(list)
    mock_request = mock_discovery_request(
        service_cluster=service_cluster,
        resource_names=resource_names.split(","),
        version=version,
        region=region,
    )
    response = await discovery.response(request=mock_request,
                                        xds_type=xds_type)
    ret["resources"] += response.resources
    safe_response = jsonable_encoder(ret)
    return JSONResponse(content=safe_response)
Пример #5
0
async def resource(
    xds_type: DiscoveryTypes = Path("clusters",
                                    title="xDS type",
                                    description="The type of request"),
    resource_name: str = Path(..., title="Name of the resource to view"),
    region: str = Query(
        None, title="The clients region to emulate in this XDS request"),
    api_version: str = Query("v2", title="The desired Envoy API version"),
    service_cluster: str = Cookie(
        "*",
        title="The clients service cluster to emulate in this XDS request"),
    envoy_version: str = Cookie(
        "__any__",
        title="The clients envoy version to emulate in this XDS request"),
) -> Response:
    response = await perform_discovery(
        req=mock_discovery_request(
            service_cluster=service_cluster,
            resource_names=[resource_name],
            version=envoy_version,
            region=region,
        ),
        api_version=api_version,
        xds=xds_type,
        skip_auth=True,
    )
    return Response(response.rendered, media_type="application/json")
Пример #6
0
async def virtual_hosts(
        route_configuration: str = Path(
            ..., title='Name of the route configuration'),
        virtual_host: str = Path(..., title='Name of the resource to view'),
        region: str = Query(
            None, title='The clients region to emulate in this XDS request'),
        service_cluster: str = Cookie(
            '*',
            title='The clients service cluster to emulate in this XDS request'
        ),
        envoy_version: str = Cookie(
            '__any__',
            title='The clients envoy version to emulate in this XDS request')):
    response = await discovery.response(request=mock_discovery_request(
        service_cluster=service_cluster,
        resource_names=[route_configuration],
        version=envoy_version,
        region=region),
                                        xds_type='routes')
    if isinstance(response, dict):
        route_configs = [
            resource_ for resource_ in response.get('resources', [])
            if resource_['name'] == route_configuration
        ]
        for route_config in route_configs:
            for vhost in route_config['virtual_hosts']:
                if vhost['name'] == virtual_host:
                    safe_response = jsonable_encoder(vhost)
                    try:
                        return json_response_class(content=safe_response)
                    except TypeError:
                        return JSONResponse(content=safe_response)
            break
Пример #7
0
async def resource(
        xds_type: DiscoveryTypes = Path('clusters',
                                        title='xDS type',
                                        description='The type of request'),
        resource_name: str = Path(..., title='Name of the resource to view'),
        region: str = Query(
            None, title='The clients region to emulate in this XDS request'),
        service_cluster: str = Cookie(
            '*',
            title='The clients service cluster to emulate in this XDS request'
        ),
        envoy_version: str = Cookie(
            '__any__',
            title='The clients envoy version to emulate in this XDS request')):
    response = await discovery.response(request=mock_discovery_request(
        service_cluster=service_cluster,
        resource_names=[resource_name],
        version=envoy_version,
        region=region),
                                        xds_type=xds_type.value)
    safe_response = jsonable_encoder(response)
    try:
        return json_response_class(content=safe_response)
    except TypeError:
        return JSONResponse(content=safe_response)
Пример #8
0
async def deep_check(response: Response) -> List[str]:
    response.status_code = 200
    ret = list()
    for template in list(XDS_TEMPLATES["default"].keys()):
        try:
            req = mock_discovery_request(service_cluster="*")
            await discovery.response(req,
                                     xds_type=getattr(discovery.DiscoveryTypes,
                                                      template, template))
        # pylint: disable=broad-except
        except Exception as e:
            ret.append(f"Failed {template}: {str(e)}")
        else:
            ret.append(f"Rendered {template} OK")
    return ret
Пример #9
0
async def resources(
    request: Request,
    xds_type: DiscoveryTypes = Path('clusters',
                                    title='xDS type',
                                    description='The type of request'),
    region: str = Query(
        None, title='The clients region to emulate in this XDS request'),
    service_cluster: str = Cookie(
        '*',
        title='The clients service cluster to emulate in this XDS request'),
    envoy_version: str = Cookie(
        '__any__',
        title='The clients envoy version to emulate in this XDS request')):
    ret = defaultdict(list)
    try:
        response = await discovery.response(request=mock_discovery_request(
            service_cluster=service_cluster,
            resource_names=[],
            version=envoy_version,
            region=region),
                                            xds_type=xds_type.value)
    except KeyError:
        ret['resources'] = []
    else:
        if isinstance(response, dict):
            ret['resources'] += response.get('resources') or []
    return html_templates.TemplateResponse(name='resources.html',
                                           media_type='text/html',
                                           context={
                                               'resources':
                                               ret['resources'],
                                               'request':
                                               request,
                                               'resource_type':
                                               xds_type.value,
                                               'all_types':
                                               all_types,
                                               'version':
                                               envoy_version,
                                               'available_versions':
                                               list(XDS_TEMPLATES.keys()),
                                               'service_cluster':
                                               service_cluster,
                                               'available_service_clusters':
                                               available_service_clusters(),
                                               'last_update':
                                               str(source_metadata),
                                           })
Пример #10
0
async def resources(
    request: Request,
    xds_type: DiscoveryTypes = Path("clusters",
                                    title="xDS type",
                                    description="The type of request"),
    region: str = Query(
        None, title="The clients region to emulate in this XDS request"),
    api_version: str = Query("v2", title="The desired Envoy API version"),
    service_cluster: str = Cookie(
        "*",
        title="The clients service cluster to emulate in this XDS request"),
    envoy_version: str = Cookie(
        "__any__",
        title="The clients envoy version to emulate in this XDS request"),
) -> Response:
    ret: Dict[str, List[Dict[str, Any]]] = defaultdict(list)
    try:
        response = await perform_discovery(
            req=mock_discovery_request(
                service_cluster=service_cluster,
                resource_names=[],
                version=envoy_version,
                region=region,
            ),
            api_version=api_version,
            xds=xds_type,
            skip_auth=True,
        )
    except KeyError:
        ret["resources"] = []
    else:
        ret["resources"] += response.deserialize_resources()
    return html_templates.TemplateResponse(
        name="resources.html",
        media_type="text/html",
        context={
            "resources": ret["resources"],
            "request": request,
            "resource_type": xds_type.value,
            "all_types": all_types,
            "version": envoy_version,
            "available_versions": list(XDS_TEMPLATES.keys()),
            "service_cluster": service_cluster,
            "available_service_clusters": poller.match_keys,
            "last_update": str(poller.last_updated),
        },
    )
Пример #11
0
def instances(
    service_cluster: str = Query(
        "*",
        title="The clients service cluster to emulate in this XDS request"),
    modified: str = Query(
        "yes",
        title=
        "Whether the sources should run Modifiers/Global Modifiers prior to being returned",
    ),
) -> JSONResponse:
    node = mock_discovery_request(service_cluster=service_cluster).node
    args = {
        "modify": yaml.safe_load(modified),
        "node_value": poller.extract_node_key(node),
    }
    ret = poller.match_node(**args)
    safe_response = jsonable_encoder(ret)
    return JSONResponse(content=safe_response)
Пример #12
0
def instances(
        service_cluster: str = Query(
            '*',
            title='The clients service cluster to emulate in this XDS request'
        ),
        modified:
    str = Query(
        'yes',
        title=
        'Whether the sources should run Modifiers/Global Modifiers prior to being returned'
    )):
    node = mock_discovery_request(service_cluster=service_cluster).node
    args = {
        'modify': yaml.safe_load(modified),
        'node_value': extract_node_key(node)
    }
    ret = match_node(**args)
    safe_response = jsonable_encoder(ret)
    return json_response_class(content=safe_response)
Пример #13
0
async def virtual_hosts(
    route_configuration: str = Path(...,
                                    title="Name of the route configuration"),
    virtual_host: str = Path(..., title="Name of the resource to view"),
    region: str = Query(
        None, title="The clients region to emulate in this XDS request"),
    api_version: str = Query("v2", title="The desired Envoy API version"),
    service_cluster: str = Cookie(
        "*",
        title="The clients service cluster to emulate in this XDS request"),
    envoy_version: str = Cookie(
        "__any__",
        title="The clients envoy version to emulate in this XDS request"),
) -> Response:
    response = await perform_discovery(
        req=mock_discovery_request(
            service_cluster=service_cluster,
            resource_names=[route_configuration],
            version=envoy_version,
            region=region,
        ),
        api_version=api_version,
        xds=getattr(DiscoveryTypes, "routes", "routes"),
        skip_auth=True,
    )
    route_configs = [
        resource_ for resource_ in response.deserialize_resources()
        if resource_["name"] == route_configuration
    ]
    for route_config in route_configs:
        for vhost in route_config["virtual_hosts"]:
            if vhost["name"] == virtual_host:
                safe_response = jsonable_encoder(vhost)
                try:
                    return json_response_class(content=safe_response)
                except TypeError:
                    return JSONResponse(content=safe_response)
        break
    return JSONResponse(content={})
Пример #14
0
def discovery_request_with_auth():
    """Envoy XDS Discovery request with the test auth defined in global"""
    return mock_discovery_request(service_cluster="T1",
                                  metadata={"auth": test_auth})
Пример #15
0
def discovery_request():
    """Envoy XDS Discovery request without authentication"""
    return mock_discovery_request(service_cluster="T1")