Esempio n. 1
0
def _build_envoy_location_dict(
    envoy_host: str,
    envoy_admin_port: int,
    envoy_admin_endpoint_format: str,
    registration: str,
    pods: Iterable[V1Pod],
    location: str,
    should_return_individual_backends: bool,
) -> MutableMapping[str, Any]:
    backends = envoy_tools.get_backends(
        registration,
        envoy_host=envoy_host,
        envoy_admin_port=envoy_admin_port,
        envoy_admin_endpoint_format=envoy_admin_endpoint_format,
    )
    sorted_envoy_backends = sorted(
        [
            backend[0]
            for _, service_backends in backends.items()
            for backend in service_backends
        ],
        key=lambda backend: backend["eds_health_status"],
    )
    casper_proxied_backends = {
        (backend["address"], backend["port_value"])
        for _, service_backends in backends.items()
        for backend, is_casper_proxied_backend in service_backends
        if is_casper_proxied_backend
    }

    matched_envoy_backends_and_pods = envoy_tools.match_backends_and_pods(
        sorted_envoy_backends,
        pods,
    )

    return envoy_tools.build_envoy_location_dict(
        location,
        matched_envoy_backends_and_pods,
        should_return_individual_backends,
        casper_proxied_backends,
    )
Esempio n. 2
0
def test_match_backends_and_pods(mock_backends):
    backends = mock_backends

    good_pod_1 = mock.Mock(status=mock.Mock(pod_ip="10.50.2.4"))
    good_pod_2 = mock.Mock(status=mock.Mock(pod_ip="10.50.2.5"))
    bad_pod_1 = mock.Mock(status=mock.Mock(pod_ip="10.50.2.10"))
    pods = [good_pod_1, good_pod_2, bad_pod_1]

    expected = [
        (backends[0], good_pod_1),
        (backends[1], good_pod_2),
        (None, bad_pod_1),
        (backends[2], None),
        (backends[3], None),
        (backends[4], None),
    ]
    actual = match_backends_and_pods(backends, pods)

    def keyfunc(t):
        sorted_backend = tuple(sorted((t[0] or {}).items()))
        pod_ip = t[1].status.pod_ip if t[1] else ""
        return sorted_backend, pod_ip

    assert sorted(actual, key=keyfunc) == sorted(expected, key=keyfunc)