diff options
Diffstat (limited to 'src/main/java/io/github/jshipit/ContainerManager.java')
-rw-r--r-- | src/main/java/io/github/jshipit/ContainerManager.java | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/src/main/java/io/github/jshipit/ContainerManager.java b/src/main/java/io/github/jshipit/ContainerManager.java index e8e2dad..3121061 100644 --- a/src/main/java/io/github/jshipit/ContainerManager.java +++ b/src/main/java/io/github/jshipit/ContainerManager.java @@ -1,9 +1,15 @@ package io.github.jshipit; -import java.io.File; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class ContainerManager { @@ -16,20 +22,22 @@ public class ContainerManager { private String entryCommand; private OCIDataStore dataStore; - public ContainerManager(String containerName, String containerImage, String containerTag, String entryCommand, OCIDataStore dataStore) { + public ContainerManager(String containerName, String containerImage, String containerTag, String entryCommand, String containerApiRepo, String containerRepo, OCIDataStore dataStore) { this.containerName = containerName; this.containerImage = containerImage; this.containerTag = containerTag; this.entryCommand = entryCommand; + this.containerApiRepo = containerApiRepo; + this.containerRepo = containerRepo; this.dataStore = dataStore; } public void createContainer() { System.out.println("Creating container"); - if (!Files.isDirectory(Paths.get(dataStore.getPath() + this.containerImage + "/" + this.containerTag))) { - System.out.println("Image does not exist, pulling now"); - dataStore.createImage(this.containerApiRepo, this.containerRepo, this.containerImage, this.containerTag); + if (!Files.isDirectory(Paths.get(dataStore.getPath() + "/" + this.containerImage + "/" + this.containerTag))) { + System.out.println("Image does not exist"); + return; } if (this.containerID == null) { @@ -43,9 +51,37 @@ public class ContainerManager { new File(containerDirectory + "/containerOverlay").mkdirs(); new File(containerDirectory + "/root").mkdirs(); + } + + public void startContainer() { + System.out.println("Starting container"); + System.out.println("Container ID: " + this.containerID); + System.out.println("Container name: " + this.containerName); + System.out.println("Container image: " + this.containerImage); + System.out.println("Container tag: " + this.containerTag); + System.out.println("Container entry command: " + this.entryCommand); + System.out.println("Container data store: " + this.dataStore.getPath()); + String containerDirectory = dataStore.getContainerPath(this.containerName, this.containerID); + System.out.println("Container directory: " + containerDirectory); + + List<String> content = null; + try { + content = Files.readAllLines(Paths.get(this.dataStore.getPath() + "/" + this.containerImage + "/" + this.containerTag + "/layers")); + } catch (IOException e) { + throw new RuntimeException(e); + } + assert content != null; + List<String> layers = new ArrayList<>(); + for (String line : content) { + layers.add(this.dataStore.getPath() + "/blobs/" + line.replace("sha256:", "")); + } + assert layers.size() > 0; + Mount mount = new Mount(); + String[] diffs = layers.toArray(new String[0]); + mount.overlayMount(diffs, containerDirectory + "/containerOverlay", containerDirectory + "/root"); } |