From a014a0126fa72c9b1630c718d05f1652dfc13fb8 Mon Sep 17 00:00:00 2001 From: Georg Pfuetzenreuter Date: Sun, 8 May 2022 15:03:42 +0200 Subject: Shell creation logic Signed-off-by: Georg Pfuetzenreuter --- .../java/net/libertacasa/pubsh/web/Docker.java | 51 +++++++++++++++++----- 1 file changed, 40 insertions(+), 11 deletions(-) (limited to 'src/main/java/net/libertacasa/pubsh/web/Docker.java') diff --git a/src/main/java/net/libertacasa/pubsh/web/Docker.java b/src/main/java/net/libertacasa/pubsh/web/Docker.java index 9621978..a889703 100644 --- a/src/main/java/net/libertacasa/pubsh/web/Docker.java +++ b/src/main/java/net/libertacasa/pubsh/web/Docker.java @@ -11,11 +11,11 @@ import java.util.stream.Collectors; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.BuildImageResultCallback; import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; import com.github.dockerjava.api.command.WaitContainerResultCallback; import com.github.dockerjava.api.model.Image; +import com.github.dockerjava.api.model.SearchItem; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.DockerClientImpl; @@ -74,7 +74,7 @@ public class Docker { public static void deleteContainer(String id) { Collection stringifiedId = Arrays.asList(id); - System.out.println(id); + //System.out.println(id); System.out.println(stringifiedId); List containerQuery = dockerClient.listContainersCmd().withShowAll(false).withIdFilter(stringifiedId).exec(); //apparently listContainersCmd returns a bunch of garbled crap, hence the less ideal toString/contains @@ -93,7 +93,6 @@ public class Docker { dockerClient.stopContainerCmd(id).exec(); } - //System.out.println(containerQuery); dockerClient.removeContainerCmd(id).exec(); } @@ -135,10 +134,15 @@ public class Docker { } - public static String createContainer(String imgid) { + public static String createContainer(String name, String imgid) { //String containerid = dockerClient.createContainerCmd(imgid).exec(); WaitContainerResultCallback resultCallback = new WaitContainerResultCallback(); - CreateContainerResponse createContainerResponse = dockerClient.createContainerCmd(imgid).exec(); + CreateContainerResponse createContainerResponse = dockerClient + .createContainerCmd(imgid) + .withName(name) + .withTty(true) + .withAttachStdin(true) + .exec(); dockerClient.waitContainerCmd(createContainerResponse.getId()).exec(resultCallback); try { resultCallback.awaitCompletion(); @@ -153,24 +157,49 @@ public class Docker { return(containerid); } - public static String deleteShell(String user, String id) { + public static String createShell(String user, String os, Integer count) { + String name1 = user + "_" + os; + String name = name1 + "_" + count; + String imageid = null; + List imageQuery = Docker.getImages(user + ":" + os); + + System.out.printf("Image query: %s\n", imageQuery); + + if (imageQuery.isEmpty()) { + System.out.println("No result, building new image.\n"); + imageid = Docker.buildImage(user, os, count); + } + if (! imageQuery.isEmpty()) { + System.out.println("Found existing image.\n"); + Image image = imageQuery.get(0); + imageid = image.getId(); + } + + String containerid = createContainer(name, imageid); + System.out.printf("Initialized shell with image ID %s and container ID %s\n", imageid, containerid); + return(containerid); + } + + public static Integer deleteShell(String user, String id) { Docker.deleteContainer(id); List images = Docker.getImages(user); for (Image image : images) { - System.out.println(image.getLabels()); String imageid = image.getId(); System.out.println(imageid); try { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } Docker.deleteImage(imageid); System.out.println("Removed."); } catch (com.github.dockerjava.api.exception.ConflictException exception) { System.out.println("Still being used, skipping."); } - - } - - return("foo"); + return(null); } } -- cgit v1.2.3