@Override public void contribute(Builder builder) { try { Pod current = utils.currentPod().get(); Map<String, Object> details = new HashMap<>(); if (current != null) { details.put("inside", true); details.put("namespace", current.getMetadata().getNamespace()); details.put("podName", current.getMetadata().getName()); details.put("podIp", current.getStatus().getPodIP()); details.put("serviceAccount", current.getSpec().getServiceAccountName()); details.put("nodeName", current.getSpec().getNodeName()); details.put("hostIp", current.getStatus().getHostIP()); } else { details.put("inside", false); } builder.withDetail("kubernetes", details); } catch (Exception e) { LOG.warn("Failed to get pod details", e); } } }
/** * Null safe get operation for getting namespace from Kubernetes Resource's MetaData * * @param entity Kubernetes Resource * @return */ public static String getNamespace(ObjectMeta entity) { if (entity != null) { return entity.getNamespace(); } else { return null; } }
@Override protected void doHealthCheck(Health.Builder builder) throws Exception { try { Pod current = utils.currentPod().get(); if (current != null) { builder.up().withDetail("inside", true) .withDetail("namespace", current.getMetadata().getNamespace()) .withDetail("podName", current.getMetadata().getName()) .withDetail("podIp", current.getStatus().getPodIP()) .withDetail("serviceAccount", current.getSpec().getServiceAccountName()) .withDetail("nodeName", current.getSpec().getNodeName()) .withDetail("hostIp", current.getStatus().getHostIP()); } else { builder.up().withDetail("inside", false); } } catch (Exception e) { builder.down(e); } } }
public static String getNamespace(HasMetadata entity) { if (entity != null) { return entity.getMetadata() != null ? entity.getMetadata().getNamespace() : null; } else { return null; } }
public KubernetesClientTimeoutException(HasMetadata resource, long amount, TimeUnit timeUnit) { super(String.format(RESOURCE_FORMAT, timeUnit.toMillis(amount), resource.getKind(), resource.getMetadata().getName(), resource.getMetadata().getNamespace())); this.resourcesNotReady = Collections.unmodifiableList(Arrays.asList(resource)); }
/** * Creates a string listing all the resources that are not ready. * @param resources The resources that are not ready. * @return */ private static String notReadyToString(Iterable<HasMetadata> resources) { StringBuilder sb = new StringBuilder(); sb.append("Resources that are not ready: "); boolean first = true; for (HasMetadata r : resources) { if (first) { first = false; } else { sb.append(", "); } sb.append("[Kind:").append(r.getKind()) .append(" Name:").append(r.getMetadata().getName()) .append(" Namespace:").append(r.getMetadata().getNamespace()) .append("]"); } return sb.toString(); } }
@Override public Watch watch(Watcher<HasMetadata> watcher) { HasMetadata meta = acceptVisitors(asHasMetadata(item), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); return h.watch(client, config, meta.getMetadata().getNamespace(), meta, watcher); }
@Override public Boolean delete() { //First pass check before deleting HasMetadata meta = acceptVisitors(asHasMetadata(item), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); return h.delete(client, config, meta.getMetadata().getNamespace(), meta); }
@Override public Watch watch(String resourceVersion, Watcher<HasMetadata> watcher) { HasMetadata meta = acceptVisitors(asHasMetadata(item), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); return h.watch(client, config, meta.getMetadata().getNamespace(), meta, watcher); }
@Override public HasMetadata waitUntilReady(long amount, TimeUnit timeUnit) throws InterruptedException { HasMetadata meta = acceptVisitors(asHasMetadata(get()), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); return h.waitUntilReady(client, config, meta.getMetadata().getNamespace(), meta, amount, timeUnit); }
@Override public HasMetadata waitUntilCondition(Predicate<HasMetadata> condition, long amount, TimeUnit timeUnit) throws InterruptedException { HasMetadata meta = acceptVisitors(asHasMetadata(get()), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); return h.waitUntilCondition(client, config, meta.getMetadata().getNamespace(), meta, condition, amount, timeUnit); }
@Override protected <T> String checkNamespace(T item) { String operationNs = getNamespace(); String itemNs = (item instanceof HasMetadata && ((HasMetadata)item).getMetadata() != null) ? ((HasMetadata) item).getMetadata().getNamespace() : null; if (Utils.isNullOrEmpty(operationNs) && Utils.isNullOrEmpty(itemNs)) { return null; } else if (Utils.isNullOrEmpty(itemNs)) { return operationNs; } else if (Utils.isNullOrEmpty(operationNs)) { return itemNs; } else if (itemNs.equals(operationNs)) { return itemNs; } throw new KubernetesClientException("Namespace mismatch. Item namespace:" + itemNs + ". Operation namespace:" + operationNs + "."); }
@Override public HasMetadata createOrReplace() { HasMetadata meta = acceptVisitors(asHasMetadata(item), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); HasMetadata r = h.reload(client, config, meta.getMetadata().getNamespace(), meta); String namespaceToUse = meta.getMetadata().getNamespace(); if (r == null) { return h.create(client, config, namespaceToUse, meta); } else if (deletingExisting) { Boolean deleted = h.delete(client, config, namespaceToUse, meta); if (!deleted) { throw new KubernetesClientException("Failed to delete existing item:" + meta); } return h.create(client, config, namespaceToUse, meta); } else if (ResourceCompare.equals(r, meta)) { LOGGER.debug("Item has not changed. Skipping"); return meta; } else { return h.replace(client, config, namespaceToUse, meta); } }
@Override public List<HasMetadata> get() { if (fromServer) { List<HasMetadata> result = new ArrayList<>(); for (HasMetadata meta : acceptVisitors(asHasMetadata(item, true), visitors)) { ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); HasMetadata reloaded = h.reload(client, config, meta.getMetadata().getNamespace(), meta); if (reloaded != null) { HasMetadata edited = reloaded; //Let's apply any visitor that might have been specified. for (Visitor v : visitors) { h.edit(edited).accept(v).build(); } result.add(reloaded); } } return result; } else { return acceptVisitors(asHasMetadata(item, true), visitors); } }
@Override public AttributeSet extract(HasMetadata o) { AttributeSet attributes = new AttributeSet(); if (!Utils.isNullOrEmpty(o.getKind())) { attributes = attributes.add(new Attribute(KIND, o.getKind().toLowerCase())); } if (!Utils.isNullOrEmpty(o.getMetadata().getName())) { attributes = attributes.add(new Attribute(NAME, o.getMetadata().getName())); } if (!Utils.isNullOrEmpty(o.getMetadata().getNamespace())) { attributes = attributes.add(new Attribute(NAMESPACE, o.getMetadata().getNamespace())); } if (o.getMetadata().getLabels() != null) { for (Map.Entry<String, String> label : o.getMetadata().getLabels().entrySet()) { attributes = attributes.add(new Attribute(LABEL_KEY_PREFIX + label.getKey(), label.getValue())); } } return attributes; }
private void deleteBuilds() { if (getName() == null) { return; } String buildConfigLabelValue = getName().substring(0, Math.min(getName().length(), 63)); BuildList matchingBuilds = new BuildOperationsImpl(client, (OpenShiftConfig) config, namespace).inNamespace(namespace).withLabel(BUILD_CONFIG_LABEL, buildConfigLabelValue).list(); if (matchingBuilds.getItems() != null) { for (Build matchingBuild : matchingBuilds.getItems()) { if (matchingBuild.getMetadata() != null && matchingBuild.getMetadata().getAnnotations() != null && getName().equals(matchingBuild.getMetadata().getAnnotations().get(BUILD_CONFIG_ANNOTATION))) { new BuildOperationsImpl(client, (OpenShiftConfig) config, namespace).inNamespace(matchingBuild.getMetadata().getNamespace()).withName(matchingBuild.getMetadata().getName()).delete(); } } } }
protected <T> String checkNamespace(T item) { String operationNs = getNamespace(); String itemNs = (item instanceof HasMetadata && ((HasMetadata)item).getMetadata() != null) ? ((HasMetadata) item).getMetadata().getNamespace() : null; if (Utils.isNullOrEmpty(operationNs) && Utils.isNullOrEmpty(itemNs)) { if (!isResourceNamespaced()) { return null; } else { throw new KubernetesClientException("Namespace not specified. But operation requires namespace."); } } else if (Utils.isNullOrEmpty(itemNs)) { return operationNs; } else if (Utils.isNullOrEmpty(operationNs)) { return itemNs; } else if (itemNs.equals(operationNs)) { return itemNs; } throw new KubernetesClientException("Namespace mismatch. Item namespace:" + itemNs + ". Operation namespace:" + operationNs + "."); }
@Override public Boolean delete() { //First pass check before deleting for (HasMetadata meta : acceptVisitors(asHasMetadata(item, true), visitors)) { if (handlerOf(meta) == null) { return false; } } //Second pass do delete for (HasMetadata meta : acceptVisitors(asHasMetadata(item, true), visitors)) { ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); if (!h.delete(client, config, meta.getMetadata().getNamespace(), meta)) { return false; } } return true; }
@Override public HasMetadata get() { if (fromServer) { HasMetadata meta = acceptVisitors(asHasMetadata(item), visitors); ResourceHandler<HasMetadata, HasMetadataVisitiableBuilder> h = handlerOf(meta); HasMetadata reloaded = h.reload(client, config, meta.getMetadata().getNamespace(), meta); if (reloaded != null) { HasMetadata edited = reloaded; //Let's apply any visitor that might have been specified. for (Visitor v : visitors) { edited = h.edit(edited).accept(v).build(); } return edited; } return null; } else { return acceptVisitors(asHasMetadata(item), visitors); } }
@Override protected void doHealthCheck(Health.Builder builder) throws Exception { try { Pod current = utils.currentPod().get(); if (current != null) { builder.up() .withDetail("inside", true) .withDetail("namespace", current.getMetadata().getNamespace()) .withDetail("podName", current.getMetadata().getName()) .withDetail("podIp", current.getStatus().getPodIP()) .withDetail("serviceAccount", current.getSpec().getServiceAccountName()) .withDetail("nodeName", current.getSpec().getNodeName()) .withDetail("hostIp", current.getStatus().getHostIP()); } else { builder.up() .withDetail("inside", false); } } catch (Exception e) { builder.down(e); } } }