private static <T> List<HasMetadata> asHasMetadata(T item, Boolean enableProccessing) { List<HasMetadata> result = new ArrayList<>(); if (item instanceof KubernetesList) { result.addAll(((KubernetesList) item).getItems()); } else if (item instanceof Template) { if (!enableProccessing) { result.addAll(((Template) item).getObjects()); } else { result.addAll(processTemplate((Template)item, false)); } } else if (item instanceof KubernetesResourceList) { result.addAll(((KubernetesResourceList) item).getItems()); } else if (item instanceof HasMetadata) { result.add((HasMetadata) item); } else if (item instanceof String) { try (InputStream is = new ByteArrayInputStream(((String)item).getBytes(StandardCharsets.UTF_8))) { return asHasMetadata(unmarshal(is), enableProccessing); } catch (IOException e) { throw KubernetesClientException.launderThrowable(e); } } else if (item instanceof Collection) { for (Object o : (Collection)item) { if (o instanceof HasMetadata) { result.add((HasMetadata) o); } } } return result; }
@Override public KubernetesList process(Map<String, String> valuesMap) { Template t = get(); try { List<Parameter> parameters = t.getParameters(); if (parameters != null) { for (Parameter p : parameters) { String v = valuesMap.get(p.getName()); if (v != null) { p.setGenerate(null); p.setValue(v); } } } RequestBody body = RequestBody.create(JSON, JSON_MAPPER.writeValueAsString(t)); Request.Builder requestBuilder = new Request.Builder().post(body).url(getProcessUrl()); t = handleResponse(requestBuilder); KubernetesList l = new KubernetesList(); l.setItems(t.getObjects()); return l; } catch (Exception e) { throw KubernetesClientException.launderThrowable(forOperationType("process"), e); } }
private static List<HasMetadata> processTemplate(Template template, Boolean failOnMissing) { List<Parameter> parameters = template != null ? template.getParameters() : null; KubernetesList list = new KubernetesListBuilder() .withItems(template.getObjects()) .build();
.withItems(t != null && t.getObjects() != null ? t.getObjects() : Collections.<HasMetadata>emptyList()) .build();
private static void addTemplateObject(Template template, HasMetadata object) { List<HasMetadata> objects = template.getObjects(); objects.add(object); template.setObjects(objects); }
@Override public Void apply(List<HasMetadata> items) { List<HasMetadata> templates = Arrays.asList(items.toArray(new HasMetadata[items.size()])); // lets remove all the plain resources (without any ${PARAM} expressions) which match objects // in the Templates found from the k8s-templates.yml files which still contain ${PARAM} expressions // to preserve the parameter expressions for dependent kubernetes resources for (HasMetadata resource : templates) { if (resource instanceof Template) { Template template = (Template) resource; List<HasMetadata> objects = template.getObjects(); if (objects != null) { removeTemplateObjects(kubernetesItems, objects); kubernetesItems.addAll(objects); } } } return null; } });
/** * Loads the Kubernetes JSON and converts it to a list of entities */ @SuppressWarnings("unchecked") public static List<HasMetadata> toItemList(Object entity) throws IOException { if (entity instanceof List) { return (List<HasMetadata>) entity; } else if (entity instanceof HasMetadata[]) { HasMetadata[] array = (HasMetadata[]) entity; return Arrays.asList(array); } else if (entity instanceof KubernetesList) { KubernetesList config = (KubernetesList) entity; return config.getItems(); } else if (entity instanceof Template) { Template objects = (Template) entity; return objects.getObjects(); } else { List<HasMetadata> answer = new ArrayList<>(); if (entity instanceof HasMetadata) { answer.add((HasMetadata) entity); } return answer; } }
private void copyTemplateResourcesToTemplatesDir(File templatesDir, Template template) throws MojoExecutionException { List<HasMetadata> objects = template.getObjects(); if (objects != null) { for (HasMetadata object : objects) { String name = KubernetesResourceUtil.getNameWithSuffix(KubernetesHelper.getName(object), KubernetesHelper.getKind(object)) + ".yaml"; File outFile = new File(templatesDir, name); try { ResourceUtil.save(outFile, object); } catch (IOException e) { throw new MojoExecutionException("Failed to save template " + outFile + ": " + e, e); } } } }
@Override public void adapt(final KubernetesListBuilder builder) { final List<HasMetadata> kubernetesItems = new ArrayList<>(); processArtifactSetResources(this.kubernetesDependencyArtifacts, items -> { kubernetesItems.addAll(Arrays.asList(items.toArray(new HasMetadata[items.size()]))); return null; }); processArtifactSetResources(this.kubernetesTemplateDependencyArtifacts, items -> { List<HasMetadata> templates = Arrays.asList(items.toArray(new HasMetadata[items.size()])); // lets remove all the plain resources (without any ${PARAM} expressions) which match objects // in the Templates found from the k8s-templates.yml files which still contain ${PARAM} expressions // to preserve the parameter expressions for dependent kubernetes resources for (HasMetadata resource : templates) { if (resource instanceof Template) { Template template = (Template) resource; List<HasMetadata> objects = template.getObjects(); if (objects != null) { removeTemplateObjects(kubernetesItems, objects); kubernetesItems.addAll(objects); } } } return null; }); filterAndAddItemsToBuilder(builder, kubernetesItems); processArtifactSetResources(this.openshiftDependencyArtifacts, items -> { getContext().getOpenshiftDependencyResources().addOpenShiftResources(items); return null; }); }
public static Template combineTemplates(Template firstTemplate, Template template) { List<HasMetadata> objects = template.getObjects(); if (objects != null) { for (HasMetadata object : objects) { addTemplateObject(firstTemplate, object); } } List<Parameter> parameters = firstTemplate.getParameters(); if (parameters == null) { parameters = new ArrayList<>(); firstTemplate.setParameters(parameters); } combineParameters(parameters, template.getParameters()); String name = KubernetesHelper.getName(template); if (StringUtils.isNotBlank(name)) { // lets merge all the fabric8 annotations using the template id qualifier as a postfix Map<String, String> annotations = KubernetesHelper.getOrCreateAnnotations(firstTemplate); Map<String, String> otherAnnotations = KubernetesHelper.getOrCreateAnnotations(template); Set<Map.Entry<String, String>> entries = otherAnnotations.entrySet(); for (Map.Entry<String, String> entry : entries) { String key = entry.getKey(); String value = entry.getValue(); if (!annotations.containsKey(key)) { annotations.put(key, value); } } } return firstTemplate; }
@Override public KubernetesList process(Map<String, String> valuesMap) { Template t = get(); try { List<Parameter> parameters = t.getParameters(); if (parameters != null) { for (Parameter p : parameters) { String v = valuesMap.get(p.getName()); if (v != null) { p.setGenerate(null); p.setValue(v); } } } RequestBody body = RequestBody.create(JSON, JSON_MAPPER.writeValueAsString(t)); Request.Builder requestBuilder = new Request.Builder().post(body).url(getProcessUrl()); t = handleResponse(requestBuilder); KubernetesList l = new KubernetesList(); l.setItems(t.getObjects()); return l; } catch (Exception e) { throw KubernetesClientException.launderThrowable(forOperationType("process"), e); } }
private void addEnvironmentAnnotations(Iterable<HasMetadata> items) throws Exception { if (items != null) { for (HasMetadata item : items) { if (item instanceof KubernetesList) { KubernetesList list = (KubernetesList) item; addEnvironmentAnnotations(list.getItems()); } else if (item instanceof Template) { Template template = (Template) item; addEnvironmentAnnotations(template.getObjects()); } else if (item instanceof ReplicationController) { addEnvironmentAnnotations(item); } else if (item instanceof DeploymentConfig) { addEnvironmentAnnotations(item); } } } }
private void addEnvironmentAnnotations(Iterable<HasMetadata> items) throws Exception { if (items != null) { for (HasMetadata item : items) { if (item instanceof KubernetesList) { KubernetesList list = (KubernetesList) item; addEnvironmentAnnotations(list.getItems()); } else if (item instanceof Template) { Template template = (Template) item; addEnvironmentAnnotations(template.getObjects()); } else if (item instanceof ReplicationController) { addEnvironmentAnnotations(item); } else if (item instanceof DeploymentConfig) { addEnvironmentAnnotations(item); } } } }
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); } }
public TemplateFluentImpl(Template instance){ this.withApiVersion(instance.getApiVersion()); this.withKind(instance.getKind()); this.withLabels(instance.getLabels()); this.withMetadata(instance.getMetadata()); this.withObjects(instance.getObjects()); this.withParameters(instance.getParameters()); }
public TemplateBuilder(Template instance,Boolean validationEnabled){ this.fluent = this; this.withApiVersion(instance.getApiVersion()); this.withKind(instance.getKind()); this.withLabels(instance.getLabels()); this.withMetadata(instance.getMetadata()); this.withObjects(instance.getObjects()); this.withParameters(instance.getParameters()); this.validationEnabled = validationEnabled; }
public TemplateBuilder(TemplateFluent<?> fluent,Template instance,Boolean validationEnabled){ this.fluent = fluent; fluent.withApiVersion(instance.getApiVersion()); fluent.withKind(instance.getKind()); fluent.withLabels(instance.getLabels()); fluent.withMetadata(instance.getMetadata()); fluent.withObjects(instance.getObjects()); fluent.withParameters(instance.getParameters()); this.validationEnabled = validationEnabled; } public TemplateBuilder(Template instance){
public void addRegistryToImageNameIfNotPresent(Iterable<HasMetadata> items, String registry) { if (items != null) { for (HasMetadata item : items) { if (item instanceof KubernetesList) { KubernetesList list = (KubernetesList) item; addRegistryToImageNameIfNotPresent(list.getItems(), registry); } else if (item instanceof Template) { Template template = (Template) item; addRegistryToImageNameIfNotPresent(template.getObjects(), registry); } else if (item instanceof Pod) { List<Container> containers = ((Pod) item).getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof ReplicationController) { List<Container> containers = ((ReplicationController) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof ReplicaSet) { List<Container> containers = ((ReplicaSet) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof DeploymentConfig) { List<Container> containers = ((DeploymentConfig) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof Deployment) { List<Container> containers = ((Deployment) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } } } }
public void addRegistryToImageNameIfNotPresent(Iterable<HasMetadata> items, String registry) throws Exception { if (items != null) { for (HasMetadata item : items) { if (item instanceof KubernetesList) { KubernetesList list = (KubernetesList) item; addRegistryToImageNameIfNotPresent(list.getItems(), registry); } else if (item instanceof Template) { Template template = (Template) item; addRegistryToImageNameIfNotPresent(template.getObjects(), registry); } else if (item instanceof Pod) { List<Container> containers = ((Pod) item).getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof ReplicationController) { List<Container> containers = ((ReplicationController) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof ReplicaSet) { List<Container> containers = ((ReplicaSet) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof DeploymentConfig) { List<Container> containers = ((DeploymentConfig) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof Deployment) { List<Container> containers = ((Deployment) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } } } }
public void addRegistryToImageNameIfNotPresent(Iterable<HasMetadata> items, String registry) { if (items != null) { for (HasMetadata item : items) { if (item instanceof KubernetesList) { KubernetesList list = (KubernetesList) item; addRegistryToImageNameIfNotPresent(list.getItems(), registry); } else if (item instanceof Template) { Template template = (Template) item; addRegistryToImageNameIfNotPresent(template.getObjects(), registry); } else if (item instanceof Pod) { List<Container> containers = ((Pod) item).getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof ReplicationController) { List<Container> containers = ((ReplicationController) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof ReplicaSet) { List<Container> containers = ((ReplicaSet) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof DeploymentConfig) { List<Container> containers = ((DeploymentConfig) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } else if (item instanceof Deployment) { List<Container> containers = ((Deployment) item).getSpec().getTemplate().getSpec().getContainers(); prefixRegistryIfNotPresent(containers, registry); } } } }