org.arquillian.cube.openshift.impl.model.Template Maven / Gradle / Ivy
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;
}
}
}