use of io.fabric8.annotations.Endpoint in project syndesis by syndesisio.
the class SupportUtil method getLogs.
public Optional<Reader> getLogs(String label, String integrationName) {
return client.pods().list().getItems().stream().filter(pod -> integrationName.equals(pod.getMetadata().getLabels().get(label))).findAny().map(pod -> pod.getMetadata().getName()).flatMap(podName -> {
PodOperationsImpl pod = (PodOperationsImpl) client.pods().withName(podName);
try {
Request request = new Request.Builder().url(pod.getResourceUrl().toString() + "/log?pretty=false×tamps=true").build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
if (!response.isSuccessful()) {
throw new IOException("Unexpected response from /log endpoint: " + response);
}
return Optional.of(new RegexBasedMasqueradeReader(new BufferedReader(response.body().charStream()), MASKING_REGEXP));
} catch (IOException e) {
// NOPMD
LOG.error("Error downloading log file for integration {}", integrationName, e);
if (response != null) {
response.close();
}
}
} catch (MalformedURLException e) {
LOG.error("Error downloading log file for integration {}", integrationName, e);
}
return Optional.empty();
});
}
use of io.fabric8.annotations.Endpoint in project flink by apache.
the class Fabric8FlinkKubeClient method getLoadBalancerRestEndpoint.
private Optional<Endpoint> getLoadBalancerRestEndpoint(LoadBalancerStatus loadBalancer, int restPort) {
boolean hasIngress = loadBalancer.getIngress() != null && !loadBalancer.getIngress().isEmpty();
String address;
if (hasIngress) {
address = loadBalancer.getIngress().get(0).getIp();
// Use hostname when the ip address is null
if (address == null || address.isEmpty()) {
address = loadBalancer.getIngress().get(0).getHostname();
}
} else {
// Use node port. Node port is accessible on any node within kubernetes cluster. We'll
// only consider IPs with the configured address type.
address = internalClient.nodes().list().getItems().stream().flatMap(node -> node.getStatus().getAddresses().stream()).filter(nodeAddress -> nodePortAddressType.name().equals(nodeAddress.getType())).map(NodeAddress::getAddress).filter(ip -> !ip.isEmpty()).findAny().orElse(null);
if (address == null) {
LOG.warn("Unable to find any node ip with type [{}]. Please see [{}] config option for more details.", nodePortAddressType, KubernetesConfigOptions.REST_SERVICE_EXPOSED_NODE_PORT_ADDRESS_TYPE.key());
}
}
boolean noAddress = address == null || address.isEmpty();
return noAddress ? Optional.empty() : Optional.of(new Endpoint(address, restPort));
}
use of io.fabric8.annotations.Endpoint in project flink by apache.
the class Fabric8FlinkKubeClient method getRestEndpoint.
@Override
public Optional<Endpoint> getRestEndpoint(String clusterId) {
Optional<KubernetesService> restService = getService(KubernetesService.ServiceType.REST_SERVICE, clusterId);
if (!restService.isPresent()) {
return Optional.empty();
}
final Service service = restService.get().getInternalResource();
final int restPort = getRestPortFromExternalService(service);
final KubernetesConfigOptions.ServiceExposedType serviceExposedType = ServiceType.classify(service);
// Return the external service.namespace directly when using ClusterIP.
if (serviceExposedType.isClusterIP()) {
return Optional.of(new Endpoint(ExternalServiceDecorator.getNamespacedExternalServiceName(clusterId, namespace), restPort));
}
return getRestEndPointFromService(service, restPort);
}
use of io.fabric8.annotations.Endpoint in project fabric8 by fabric8io.
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;
}
use of io.fabric8.annotations.Endpoint in project fabric8 by fabric8io.
the class ServicePodsAssert method hasEndpointOrReadyPod.
/**
* Asserts that either this service has a valid Endpoint or that a pod is Ready for a period of time
*/
public ServicePodsAssert hasEndpointOrReadyPod(long notReadyTimeoutMS, long readyPeriodMS) {
EndpointsList list = client.endpoints().withLabels(getLabels(actual)).list();
if (list != null) {
List<Endpoints> items = list.getItems();
if (items.size() > 0) {
return this;
}
}
pods().isPodReadyForPeriod(notReadyTimeoutMS, readyPeriodMS);
return this;
}
Aggregations