dockerServer.detachDockerContainer(user);
}
// make sure the image for the user has been created
String userBase = user + "-base";
DockerImage dockerImage = dockerServer.getDockerImage(userBase);
if (dockerImage.getStatusCode() != DockerResponse.StatusCode.OK) {
// user does not have a image, create one
dockerImage = dockerServer.createDockerUserBaseImage(user);
if (dockerImage.getStatusCode() != DockerResponse.StatusCode.CREATED) {
return statusHandler.handleRequest(request, response, new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_BAD_REQUEST, dockerImage.getStatusMessage(), null));
}
if (logger.isInfoEnabled()) {
logger.info("Created Docker Image " + userBase + " for user " + user);
}
}
// get the volume (workspace root) for the user
String volume = getDockerVolume(user);
// get the container for the user
DockerContainer dockerContainer = dockerServer.getDockerContainer(user);
if (dockerContainer.getStatusCode() != DockerResponse.StatusCode.OK) {
// user does not have a container, create one
dockerContainer = dockerServer.createDockerContainer(userBase, user, volume);
if (dockerContainer.getStatusCode() != DockerResponse.StatusCode.CREATED) {
return statusHandler.handleRequest(request, response, new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_BAD_REQUEST, dockerContainer.getStatusMessage(), null));
}
if (logger.isInfoEnabled()) {
logger.info("Created Docker Container " + dockerContainer.getIdShort() + " for user " + user);
}
// if the user does not have a bashrc, create one
createBashrc(user);
}
// get the exposed ports from the docker image
List<String> portNumbers = new ArrayList<String>();
for (String port : dockerImage.getPorts()) {
if (port.contains("/tcp")) {
port = port.substring(0, port.indexOf("/tcp"));
}
portNumbers.add(port);
}