package org.csanchez.jenkins.plugins.kubernetes;
import com.google.common.base.Preconditions;
import hudson.Extension;
import hudson.model.AbstractDescribableImpl;
import hudson.model.Descriptor;
import org.apache.commons.lang.StringUtils;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ContainerTemplate extends AbstractDescribableImpl<ContainerTemplate> implements Serializable {
private static final long serialVersionUID = 4212681620316294146L;
public static final String DEFAULT_WORKING_DIR = "/home/jenkins";
private String name;
private String image;
private boolean privileged;
private boolean alwaysPullImage;
private String workingDir = DEFAULT_WORKING_DIR;
private String command;
private String args;
private boolean ttyEnabled;
private String resourceRequestCpu;
private String resourceRequestMemory;
private String resourceLimitCpu;
private String resourceLimitMemory;
private final List<ContainerEnvVar> envVars = new ArrayList<ContainerEnvVar>();
@DataBoundConstructor
public ContainerTemplate(String image) {
this(null, image);
}
ContainerTemplate(String name, String image) {
Preconditions.checkArgument(!StringUtils.isBlank(image));
this.name = name;
this.image = image;
}
ContainerTemplate(String name, String image, String command, String args) {
Preconditions.checkArgument(!StringUtils.isBlank(image));
this.name = name;
this.image = image;
this.command = command;
this.args = args;
}
@DataBoundSetter
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@DataBoundSetter
public void setImage(String image) {
this.image = image;
}
public String getImage() {
return image;
}
@DataBoundSetter
public void setCommand(String command) {
this.command = command;
}
public String getCommand() {
return command;
}
@DataBoundSetter
public void setArgs(String args) {
this.args = args;
}
public String getArgs() {
return args;
}
@DataBoundSetter
public void setTtyEnabled(boolean ttyEnabled) {
this.ttyEnabled = ttyEnabled;
}
public boolean isTtyEnabled() {
return ttyEnabled;
}
public String getDisplayName() {
return "Container Pod Template";
}
@DataBoundSetter
public void setWorkingDir(String workingDir) {
this.workingDir = workingDir;
}
public String getWorkingDir() {
return workingDir;
}
@DataBoundSetter
public void setPrivileged(boolean privileged) {
this.privileged = privileged;
}
public boolean isPrivileged() {
return privileged;
}
@DataBoundSetter
public void setAlwaysPullImage(boolean alwaysPullImage) {
this.alwaysPullImage = alwaysPullImage;
}
public boolean isAlwaysPullImage() {
return alwaysPullImage;
}
public List<ContainerEnvVar> getEnvVars() {
return envVars != null ? envVars : Collections.emptyList();
}
@DataBoundSetter
public void setEnvVars(List<ContainerEnvVar> envVars) {
this.envVars.addAll(envVars);
}
public String getResourceRequestMemory() {
return resourceRequestMemory;
}
@DataBoundSetter
public void setResourceRequestMemory(String resourceRequestMemory) {
this.resourceRequestMemory = resourceRequestMemory;
}
public String getResourceLimitCpu() {
return resourceLimitCpu;
}
@DataBoundSetter
public void setResourceLimitCpu(String resourceLimitCpu) {
this.resourceLimitCpu = resourceLimitCpu;
}
public String getResourceLimitMemory() {
return resourceLimitMemory;
}
@DataBoundSetter
public void setResourceLimitMemory(String resourceLimitMemory) {
this.resourceLimitMemory = resourceLimitMemory;
}
public String getResourceRequestCpu() {
return resourceRequestCpu;
}
@DataBoundSetter
public void setResourceRequestCpu(String resourceRequestCpu) {
this.resourceRequestCpu = resourceRequestCpu;
}
@Extension
@Symbol("containerTemplate")
public static class DescriptorImpl extends Descriptor<ContainerTemplate> {
@Override
public String getDisplayName() {
return "Container Template";
}
}
}