private ImageConfiguration getImageWithContainerName(String containerName) { if (containerName == null) { return null; } List<ImageConfiguration> images = getImages().orElse(Collections.emptyList()); for (ImageConfiguration image : images) { String imageContainerName = KubernetesResourceUtil.extractContainerName(getContext().getGav(), image); if (Objects.equal(containerName, imageContainerName)) { return image; } } return null; }
public static LabelSelector getPodLabelSelector(Set<HasMetadata> entities) { LabelSelector chosenSelector = null; for (HasMetadata entity : entities) { LabelSelector selector = getPodLabelSelector(entity); if (selector != null) { if (chosenSelector != null && !chosenSelector.equals(selector)) { throw new IllegalArgumentException("Multiple selectors found for the given entities: " + chosenSelector + " - " + selector); } chosenSelector = selector; } } return chosenSelector; }
@Override protected synchronized void executeInternal(ServiceHub hub) throws MojoExecutionException { this.hub = hub; URL masterUrl = kubernetes.getMasterUrl(); KubernetesResourceUtil.validateKubernetesMasterUrl(masterUrl); File manifest; boolean isOpenshift = OpenshiftHelper.isOpenShift(kubernetes); if (isOpenshift) { manifest = openshiftManifest; } else { manifest = kubernetesManifest; } try { Set<HasMetadata> resources = KubernetesResourceUtil.loadResources(manifest); WatcherContext context = getWatcherContext(); WatcherManager.watch(getResolvedImages(), resources, context); } catch (KubernetesClientException ex) { KubernetesResourceUtil.handleKubernetesClientException(ex, this.log); } catch (Exception ex) { throw new MojoExecutionException("An error has occurred while while trying to watch the resources", ex); } }
public void addOpenShiftResources(List<HasMetadata> items) { for (HasMetadata item : items) { if (item instanceof Template) { Template template = (Template) item; if (!KubernetesResourceUtil.isAppCatalogResource(template)) { List<HasMetadata> objects = notNullList(template.getObjects()); String sourceUrl = getSourceUrlAnnotation(template); if (StringUtils.isNotBlank(sourceUrl)) { for (HasMetadata object : objects) { setSourceUrlAnnotationIfNotSet(object, sourceUrl); } } addOpenShiftResources(objects); mergeParametersIntoMap(templateParameters, notNullList(template.getParameters())); continue; } } KindAndName key = new KindAndName(item); HasMetadata old = openshiftDependencyResources.get(key); if (old != null) { log.warn("Duplicate OpenShift resources for %s at %s and %s", key, getSourceUrlAnnotation(old), getSourceUrlAnnotation(item)); } openshiftDependencyResources.put(key, item); } }
env = new ArrayList<>(); remoteDebugPort = KubernetesResourceUtil.getEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_PORT, DebugConstants.ENV_VAR_JAVA_DEBUG_PORT_DEFAULT); if (KubernetesResourceUtil.setEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG, "true")) { container.setEnv(env); enabled = true; if (KubernetesResourceUtil.setEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_SUSPEND, String.valueOf(debugSuspend))) { container.setEnv(env); enabled = true; ports = new ArrayList<>(); if (KubernetesResourceUtil.addPort(ports, remoteDebugPort, "debug", log)) { container.setPorts(ports); enabled = true; KubernetesResourceUtil.setEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_SESSION, this.debugSuspendValue); container.setEnv(env); if (container.getReadinessProbe() != null) { if (KubernetesResourceUtil.removeEnvVar(env, DebugConstants.ENV_VAR_JAVA_DEBUG_SESSION)) { container.setEnv(env); enabled = true;
KubernetesResourceUtil.getEnvVar(env, ENV_VAR_JAVA_DEBUG_PORT, ENV_VAR_JAVA_DEBUG_PORT_DEFAULT); boolean enabled = false; if (KubernetesResourceUtil.setEnvVar(env, ENV_VAR_JAVA_DEBUG, "true")) { container.setEnv(env); enabled = true; ports = new ArrayList<>(); if (KubernetesResourceUtil.addPort(ports, remoteDebugPort, "debug", log)) { container.setPorts(ports); enabled = true;
mergeMetadata(template1, template2); if (switchOnLocalCustomisation) { HasMetadata override = resource2; if (isLocalCustomisation(podSpec1)) { updateTemplate = template2; PodSpec tmp = podSpec1; override = resource1OrCopy; mergeMetadata(answer, override); } else { mergeMetadata(resource1OrCopy, resource2); } else { PodSpecBuilder podSpecBuilder = new PodSpecBuilder(podSpec1); mergePodSpec(podSpecBuilder, podSpec2, defaultName); updateTemplate.setSpec(podSpecBuilder.build()); log.info("Merging 2 resources for " + KubernetesHelper.getKind(resource1OrCopy) + " " + KubernetesHelper.getName(resource1OrCopy) + " from " + getSourceUrlAnnotation(resource1OrCopy) + " and " + getSourceUrlAnnotation(resource2) + " and removing " + getSourceUrlAnnotation(resource1OrCopy)); return resource1OrCopy;
protected void restartContainer(WatchService.ImageWatcher watcher, Set<HasMetadata> resources) throws MojoExecutionException { ImageConfiguration imageConfig = watcher.getImageConfiguration(); String imageName = imageConfig.getName(); try { ClusterAccess clusterAccess = new ClusterAccess(getContext().getClusterConfiguration()); KubernetesClient client = clusterAccess.createDefaultClient(log); String namespace = clusterAccess.getNamespace(); String imagePrefix = getImagePrefix(imageName); for (HasMetadata entity : resources) { updateImageName(client, namespace, entity, imagePrefix, imageName); } } catch (KubernetesClientException e) { KubernetesResourceUtil.handleKubernetesClientException(e, this.log); } catch (MojoExecutionException e) { throw e; } catch (Exception e) { throw new MojoExecutionException(e.getMessage(), e); } }
@Override public void visit(PodSpecBuilder builder) { KubernetesResourceUtil.mergePodSpec(builder, podSpec, name); } });
/** * Applies any overrides if we have any for the given item */ public HasMetadata overrideResource(HasMetadata item) { KindAndName key = new KindAndName(item); HasMetadata override = map.get(key); if (override != null) { log.info("Overriding " + key); HasMetadata answer = KubernetesResourceUtil.mergeResources(item, override, log, false); if (answer != null) { return answer; } } return item; } }
private void onPod(Watcher.Action action, Pod pod, KubernetesClient kubernetes, String namespace, String ctrlCMessage, boolean followLog) { String name = KubernetesHelper.getName(pod); if (action.equals(Watcher.Action.DELETED)) { addedPods.remove(name); if (Objects.equals(watchingPodName, name)) { watchingPodName = null; addedPods.remove(name); } } else { if (action.equals(Watcher.Action.ADDED) || action.equals(Watcher.Action.MODIFIED)) { addedPods.put(name, pod); } } Pod watchPod = KubernetesResourceUtil.getNewestPod(addedPods.values()); newestPodName = KubernetesHelper.getName(watchPod); Logger statusLog = Objects.equals(name, newestPodName) ? context.getNewPodLog() : context.getOldPodLog(); if (!action.equals(Watcher.Action.MODIFIED) || watchingPodName == null || !watchingPodName.equals(name)) { statusLog.info("%s status: %s%s", name, getPodStatusDescription(pod), getPodStatusMessagePostfix(action)); } if (watchPod != null && KubernetesHelper.isPodRunning(watchPod)) { watchLogOfPodName(kubernetes, namespace, ctrlCMessage, followLog, watchPod, KubernetesHelper.getName(watchPod)); } }
private Map<String, ImageStream> readAlreadyExtractedImageStreams(File target) throws IOException { // If it already exists, read in the file and use it for update Map<String, ImageStream> imageStreams = new HashMap<>(); if (target.length() > 0) { for (HasMetadata entity : KubernetesResourceUtil.loadResources(target)) { if ("ImageStream".equals(KubernetesHelper.getKind(entity))) { imageStreams.put(entity.getMetadata().getName(), (ImageStream) entity); } // Ignore all other kind of entities. There shouldn't be any included anyway } } return imageStreams; }
private Template extractAndRemoveTemplates(List<HasMetadata> items) { Template extractedTemplate = null; for (HasMetadata item : new ArrayList<>(items)) { if (item instanceof Template && !KubernetesResourceUtil.isAppCatalogResource(item)) { Template template = (Template) item; if (extractedTemplate == null) { extractedTemplate = template; } else { extractedTemplate = OpenshiftHelper.combineTemplates(extractedTemplate, template); } items.remove(item); } } if (extractedTemplate != null) { extractedTemplate.setObjects(items); } return extractedTemplate; }
/** * Save the images stream to a file * @param imageName name of the image for which the stream should be extracted * @param target file to store the image stream */ public void appendImageStreamResource(ImageName imageName, File target) throws MojoExecutionException { String tag = StringUtils.isBlank(imageName.getTag()) ? "latest" : imageName.getTag(); try { ImageStream is = new ImageStreamBuilder() .withNewMetadata() .withName(imageName.getSimpleName()) .endMetadata() .withNewSpec() .addNewTag() .withName(tag) .withNewFrom().withKind("ImageStreamImage").endFrom() .endTag() .endSpec() .build(); createOrUpdateImageStreamTag(client, imageName, is); appendImageStreamToFile(is, target); log.info("ImageStream %s written to %s", imageName.getSimpleName(), target); } catch (KubernetesClientException e) { KubernetesResourceUtil.handleKubernetesClientException(e, this.log); } catch (IOException e) { throw new MojoExecutionException(String.format("Cannot write ImageStream descriptor for %s to %s : %s", imageName.getFullName(), target.getAbsoluteFile(), e.getMessage()),e); } }
@Override public void visit(PodSpecBuilder builder) { KubernetesResourceUtil.mergePodSpec(builder, podSpec, name); } });
public void filterAndAddItemsToBuilder(KubernetesListBuilder builder, List<HasMetadata> items) { Map<KindAndName, Integer> aIndexMap = new HashMap<>(); int nItems = 0; // Populate map with existing items in the builder for(int index = 0; index < builder.getItems().size(); index++, nItems++) { HasMetadata aItem = builder.getItems().get(index); KindAndName aKey = new KindAndName(aItem); aIndexMap.put(aKey, index); } for(HasMetadata item : items) { KindAndName aKey = new KindAndName(item); if(aIndexMap.containsKey(aKey)) { // Merge the override fragments, and remove duplicate HasMetadata duplicateItem = builder.getItems().get(aIndexMap.get(aKey)); item = KubernetesResourceUtil.mergeResources(item, duplicateItem, log, false); builder.setToItems(aIndexMap.get(aKey), item); } else { aIndexMap.put(aKey, nItems++); builder.addToItems(item); } } }
PodList list = pods.list(); if (list != null) { Pod latestPod = KubernetesResourceUtil.getNewestPod(list.getItems()); if (latestPod != null && podHasEnvVars(latestPod, envVars)) { return getName(latestPod);
clusterKind = "OpenShift"; KubernetesResourceUtil.validateKubernetesMasterUrl(masterUrl); log.info("Using %s at %s in namespace %s with manifest %s ", clusterKind, masterUrl, clusterAccess.getNamespace(), manifest); applyService.setNamespace(namespace); Set<HasMetadata> entities = KubernetesResourceUtil.loadResources(manifest); KubernetesResourceUtil.handleKubernetesClientException(e, this.log); } catch (MojoExecutionException e) { throw e;
Date ignorePodsOlderThan, boolean waitInCurrentThread) { LabelSelector selector = KubernetesResourceUtil.getPodLabelSelector(entities);
private void mergeContainerName(ImageConfiguration imageConfiguration, Container container) { if (StringUtils.isBlank(container.getName())) { String containerName = extractContainerName(getContext().getGav(), imageConfiguration); log.verbose("Setting container name %s",containerName); container.setName(containerName); } }