Search in sources :

Example 41 with Endpoint

use of io.fabric8.annotations.Endpoint in project fabric8 by jboss-fuse.

the class SessionServicesAreReady method isEndpointAvailable.

/**
 * Checks if there is an endpoint for the service available.
 * @param s The target service.
 * @return  Returns true if a connection to at least one of the endpoints is possible.
 */
private boolean isEndpointAvailable(Service s) {
    String serviceStatus = null;
    boolean result = false;
    String sid = getName(s);
    String namespace = session.getNamespace();
    Endpoints endpoints = kubernetesClient.endpoints().inNamespace(namespace).withName(sid).get();
    ServiceSpec spec = s.getSpec();
    if (endpoints != null && spec != null) {
        List<EndpointSubset> subsets = endpoints.getSubsets();
        if (subsets != null) {
            for (EndpointSubset subset : subsets) {
                List<EndpointAddress> addresses = subset.getAddresses();
                if (addresses != null) {
                    for (EndpointAddress address : addresses) {
                        String ip = address.getIp();
                        String addr = ip;
                        /*
    TODO v1beta2...
                            String addr = endpoit.substring(0, endpoit.indexOf(":"));
                            Integer port = Integer.parseInt(endpoit.substring(endpoit.indexOf(":") + 1));
*/
                        List<ServicePort> ports = spec.getPorts();
                        for (ServicePort port : ports) {
                            Integer portNumber = port.getPort();
                            if (portNumber != null && portNumber > 0) {
                                if (configuration.isWaitForServiceConnectionEnabled()) {
                                    try (Socket socket = new Socket()) {
                                        socket.connect(new InetSocketAddress(ip, portNumber), (int) configuration.getWaitForServiceConnectionTimeout());
                                        serviceStatus = "Service: " + sid + " is ready. Provider:" + addr + ".";
                                        return true;
                                    } catch (Exception e) {
                                        serviceStatus = "Service: " + sid + " is not ready! in namespace " + namespace + ". Error: " + e.getMessage();
                                    } finally {
                                        session.getLogger().warn(serviceStatus);
                                    }
                                } else {
                                    serviceStatus = "Service: " + sid + " is ready. Not testing connecting to it!. Provider:" + addr + ".";
                                    session.getLogger().warn(serviceStatus);
                                    return true;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    session.getLogger().warn("Service: " + sid + " has no valid endpoints");
    return result;
}
Also used : ServicePort(io.fabric8.kubernetes.api.model.ServicePort) InetSocketAddress(java.net.InetSocketAddress) ServiceSpec(io.fabric8.kubernetes.api.model.ServiceSpec) Endpoints(io.fabric8.kubernetes.api.model.Endpoints) EndpointSubset(io.fabric8.kubernetes.api.model.EndpointSubset) Socket(java.net.Socket) EndpointAddress(io.fabric8.kubernetes.api.model.EndpointAddress)

Aggregations

Endpoint (org.wso2.carbon.apimgt.core.models.Endpoint)12 ArrayList (java.util.ArrayList)11 Service (io.fabric8.kubernetes.api.model.Service)9 Endpoints (io.fabric8.kubernetes.api.model.Endpoints)8 NonNamespaceOperation (io.fabric8.kubernetes.client.dsl.NonNamespaceOperation)7 OpenShiftClient (io.fabric8.openshift.client.OpenShiftClient)7 URL (java.net.URL)7 BeforeTest (org.testng.annotations.BeforeTest)7 Test (org.testng.annotations.Test)7 EndpointsList (io.fabric8.kubernetes.api.model.EndpointsList)5 KubernetesClientException (io.fabric8.kubernetes.client.KubernetesClientException)5 IOException (java.io.IOException)5 MalformedURLException (java.net.MalformedURLException)5 List (java.util.List)5 Set (java.util.Set)5 Configuration (io.fabric8.annotations.Configuration)4 Endpoint (io.fabric8.annotations.Endpoint)4 External (io.fabric8.annotations.External)4 Path (io.fabric8.annotations.Path)4 PortName (io.fabric8.annotations.PortName)4