package com.hubspot.singularity.executor.models; import java.util.ArrayList; import java.util.List; import org.apache.mesos.Protos; import org.apache.mesos.Protos.Environment.Variable; import org.apache.mesos.Protos.Parameter; import org.apache.mesos.Protos.TaskInfo; import com.google.common.base.Strings; public class EnvironmentContext { private final TaskInfo taskInfo; public EnvironmentContext(TaskInfo taskInfo) { this.taskInfo = taskInfo; } public List<Variable> getEnv() { return taskInfo.getExecutor().getCommand().getEnvironment().getVariablesList(); } public Protos.ContainerInfo.DockerInfo getDockerInfo() { return taskInfo.getContainer().getDocker(); } public List<String> getDockerParameters() { List<String> args = new ArrayList<>(); for (Parameter parameter : taskInfo.getContainer().getDocker().getParametersList()) { args.add(toCmdLineArg(parameter)); } return args; } public boolean isDockerWorkdirOverriden() { for (Parameter parameter : taskInfo.getContainer().getDocker().getParametersList()) { if (parameter.hasKey() && (parameter.getKey().equals("w") || parameter.getKey().equals("workdir"))) { return true; } } return false; } public List<Protos.Volume> getContainerVolumes() { return taskInfo.getContainer().getVolumesList(); } private String toCmdLineArg(Parameter parameter) { if (parameter.hasKey() && parameter.getKey().length() > 1) { if (parameter.hasValue() && !Strings.isNullOrEmpty(parameter.getValue())) { return String.format("--%s=%s", parameter.getKey(), parameter.getValue()); } else { return String.format("--%s", parameter.getKey()); } } else { if (parameter.hasValue() && !Strings.isNullOrEmpty(parameter.getValue())) { return String.format("-%s=%s", parameter.getKey(), parameter.getValue()); } else { return String.format("-%s", parameter.getKey()); } } } @Override public String toString() { return "EnvironmentContext{" + "taskInfo=" + taskInfo + '}'; } }