All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.arquillian.cube.openshift.impl.model.Template Maven / Gradle / Ivy

There is a newer version: 1.18.2
Show newest version
package org.arquillian.cube.openshift.impl.model;

import io.fabric8.kubernetes.api.model.v2_5.Container;
import io.fabric8.kubernetes.api.model.v2_5.Pod;
import io.fabric8.openshift.api.model.v2_5.DeploymentConfig;
import java.util.ArrayList;
import java.util.List;

public interface Template {

    T getTarget();

    List getRefs();

    void resolve(TemplateImageRef ref, String imageRef);

    public static abstract class ContainerTemplate implements Template {

        protected abstract List getContainers();

        @Override
        public List getRefs() {
            List refs = new ArrayList();
            for (Container container : getContainers()) {
                String image = container.getImage();
                if (image != null && image.startsWith("arquillian:")) {
                    refs.add(new TemplateImageRef(image.replaceFirst("arquillian\\:", ""), container.getName()));
                }
            }
            return refs;
        }

        @Override
        public void resolve(TemplateImageRef ref, String imageRef) {
            for (Container container : getContainers()) {
                if (container.getName().equals(ref.getContainerName())) {
                    container.setImage(imageRef);
                }
            }
        }
    }

    public static class DeploymentConfigTemplate extends ContainerTemplate {
        private DeploymentConfig config;

        public DeploymentConfigTemplate(DeploymentConfig config) {
            this.config = config;
        }

        @Override
        public DeploymentConfig getTarget() {
            return config;
        }

        @Override
        protected List getContainers() {
            return config.getSpec().getTemplate().getSpec().getContainers();
        }
    }

    public static class PodTemplate extends ContainerTemplate {
        private Pod pod;

        public PodTemplate(Pod pod) {
            this.pod = pod;
        }

        @Override
        public Pod getTarget() {
            return pod;
        }

        @Override
        protected List getContainers() {
            return pod.getSpec().getContainers();
        }
    }

    public static class TemplateImageRef {
        private String path;
        private String containerName;

        public TemplateImageRef(String path, String containerName) {
            this.path = path;
            this.containerName = containerName;
        }

        public String getContainerName() {
            return containerName;
        }

        public String getPath() {
            return path;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy