aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/jshipit/ContainerManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/github/jshipit/ContainerManager.java')
-rw-r--r--src/main/java/io/github/jshipit/ContainerManager.java46
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");
}