aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2023-05-24 23:43:57 +0200
committeraxtloss <axtlos@getcryst.al>2023-05-24 23:43:57 +0200
commit44ea7455e1f440a8df4070604213b390c21e7a3d (patch)
tree8c0cb535f4cb3588ef8bd610edfb418e15ec0ff2 /src
parenta881b5319b1a7d03f476231df9c8491fb4cdd451 (diff)
downloadjshipit-44ea7455e1f440a8df4070604213b390c21e7a3d.tar.gz
jshipit-44ea7455e1f440a8df4070604213b390c21e7a3d.tar.bz2
Add command line options
Diffstat (limited to 'src')
-rw-r--r--src/main/java/io/github/jshipit/BlobDownloader.java22
-rw-r--r--src/main/java/io/github/jshipit/Commands.java39
-rw-r--r--src/main/java/io/github/jshipit/ContainerManager.java19
-rwxr-xr-xsrc/main/java/io/github/jshipit/DockerAPIHelper.java7
-rwxr-xr-xsrc/main/java/io/github/jshipit/JshipIT.java59
-rw-r--r--src/main/java/io/github/jshipit/Main.java2
-rwxr-xr-xsrc/main/java/io/github/jshipit/OCIDataStore.java21
7 files changed, 84 insertions, 85 deletions
diff --git a/src/main/java/io/github/jshipit/BlobDownloader.java b/src/main/java/io/github/jshipit/BlobDownloader.java
index 3aafec4..850e1ac 100644
--- a/src/main/java/io/github/jshipit/BlobDownloader.java
+++ b/src/main/java/io/github/jshipit/BlobDownloader.java
@@ -53,7 +53,6 @@ public class BlobDownloader extends Thread {
throw new RuntimeException("Failed : HTTP error code : "
+ con.getResponseCode());
} else {
- System.out.println("Success: " + con.getResponseCode());
}
} catch (IOException e) {
System.out.println("Failed to connect");
@@ -79,17 +78,18 @@ public class BlobDownloader extends Thread {
e.printStackTrace();
}
- if (this.renameTo == null) {
+ if (this.renameTo == null && !extract) {
+ return;
+ } else if (this.renameTo != null) {
+ Path rename = new File(renameTo).toPath();
+ Path current = new File(tmpdir + "/" + digest.replace("sha256:", "")+".tar.gz").toPath();
+ try {
+ Files.move(current, rename);
+ } catch (IOException e) {
+ System.out.println("Failed to rename file "+digest);
+ e.printStackTrace();
+ }
return;
- }
-
- Path rename = new File(renameTo).toPath();
- Path current = new File(tmpdir + "/" + digest.replace("sha256:", "")+".tar.gz").toPath();
- try {
- Files.move(current, rename);
- } catch (IOException e) {
- System.out.println("Failed to rename file "+digest);
- e.printStackTrace();
}
if (!extract) {
diff --git a/src/main/java/io/github/jshipit/Commands.java b/src/main/java/io/github/jshipit/Commands.java
new file mode 100644
index 0000000..f4d301e
--- /dev/null
+++ b/src/main/java/io/github/jshipit/Commands.java
@@ -0,0 +1,39 @@
+package io.github.jshipit;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+
+@Parameters(commandDescription = "Create a container")
+class CommandCreate {
+ @Parameter(names = {"--name", "-n"}, description = "Name of the container")
+ public String containerName;
+
+ @Parameter(names = {"--image", "-i"}, description = "Image of the container")
+ public String containerImage;
+
+ @Parameter(names = {"--tag", "-t"}, description = "Tag of the container")
+ public String containerTag;
+
+ @Parameter(names = {"--api-repo", "-a"}, description = "API repository of the container")
+ public String containerApiRepo;
+
+ @Parameter(names = {"--repo", "-r"}, description = "Repository of the container")
+ public String containerRepo;
+
+}
+
+@Parameters(commandDescription = "Pull a container image")
+class CommandPull {
+ @Parameter(names = {"--image", "-i"}, description = "Image of the container")
+ public String containerImage;
+
+ @Parameter(names = {"--tag", "-t"}, description = "Tag of the container")
+ public String containerTag;
+
+ @Parameter(names = {"--api-repo", "-a"}, description = "API repository of the container")
+ public String containerApiRepo;
+
+ @Parameter(names = {"--repo", "-r"}, description = "Repository of the container")
+ public String containerRepo;
+
+}
diff --git a/src/main/java/io/github/jshipit/ContainerManager.java b/src/main/java/io/github/jshipit/ContainerManager.java
index 3121061..c8a0b96 100644
--- a/src/main/java/io/github/jshipit/ContainerManager.java
+++ b/src/main/java/io/github/jshipit/ContainerManager.java
@@ -1,12 +1,7 @@
package io.github.jshipit;
-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;
@@ -46,26 +41,13 @@ public class ContainerManager {
String containerDirectory = dataStore.createContainerDirectory(this.containerImage, this.containerTag, this.containerName, this.containerID);
- System.out.println("Container directory: " + containerDirectory);
- System.out.println("Container ID: " + this.containerID);
-
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"));
@@ -86,7 +68,6 @@ public class ContainerManager {
}
public String genContainerID() {
- System.out.println("Generating container ID");
return UUID.randomUUID().toString();
}
} \ No newline at end of file
diff --git a/src/main/java/io/github/jshipit/DockerAPIHelper.java b/src/main/java/io/github/jshipit/DockerAPIHelper.java
index 21fd9c3..7ebde24 100755
--- a/src/main/java/io/github/jshipit/DockerAPIHelper.java
+++ b/src/main/java/io/github/jshipit/DockerAPIHelper.java
@@ -43,7 +43,6 @@ public class DockerAPIHelper {
URL url_obj = null;
try {
url_obj = new URI("https://"+this.apiRepo+"/v2/").toURL();
- System.out.println(url_obj);
} catch (URISyntaxException | MalformedURLException e) {
e.printStackTrace();
}
@@ -71,7 +70,6 @@ public class DockerAPIHelper {
URL url_obj = null;
try {
url_obj = new URI(this.authURL + "?scope=repository:" + this.repository + "/" + this.image + ":pull" + "&service=" + this.authService).toURL();
- System.out.println(url_obj);
} catch (URISyntaxException | MalformedURLException e) {
System.out.println("URISyntaxException | MalformedURLException");
e.printStackTrace();
@@ -87,17 +85,14 @@ public class DockerAPIHelper {
throw new RuntimeException("Failed : HTTP error code : "
+ con.getResponseCode());
} else {
- System.out.println("Success: " + con.getResponseCode());
StringBuilder output = new StringBuilder();
Scanner scanner = new Scanner(url_obj.openStream());
while (scanner.hasNext()) {
output.append(scanner.nextLine());
}
scanner.close();
- System.out.println(output);
ObjectMapper mapper = new ObjectMapper();
JsonNode token = mapper.readTree(output.toString());
- System.out.println(token.get("token").asText());
return token.get("token").asText();
}
}
@@ -106,7 +101,6 @@ public class DockerAPIHelper {
URL url_obj = null;
try {
url_obj = new URI("https://" + this.apiRepo + "/v2/" + this.repository + "/" + this.image + "/manifests/"+this.tag).toURL();
- System.out.println(url_obj);
} catch(URISyntaxException | MalformedURLException e) {
System.out.println("URISyntaxException | MalformedURLException");
e.printStackTrace();
@@ -124,7 +118,6 @@ public class DockerAPIHelper {
throw new RuntimeException("Failed : HTTP error code : "
+ con.getResponseCode());
} else {
- System.out.println("Success: " + con.getResponseCode());
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
diff --git a/src/main/java/io/github/jshipit/JshipIT.java b/src/main/java/io/github/jshipit/JshipIT.java
index 5ccd96e..d51ddbe 100755
--- a/src/main/java/io/github/jshipit/JshipIT.java
+++ b/src/main/java/io/github/jshipit/JshipIT.java
@@ -1,51 +1,40 @@
package io.github.jshipit;
+import com.beust.jcommander.JCommander;
import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import com.beust.jcommander.Parameter;
public class JshipIT {
- public JshipIT() {
- /*
- DockerAPIHelper api = new DockerAPIHelper("registry.getcryst.al","crystal/misc", "docker", "latest");
- JsonNode manifest = null;
-
- System.out.println("API Token: " + api.getApiToken());
- try {
- manifest = api.fetchManifestJson();
- } catch (IOException ignored) {} // Proper error handling is bloat
-
- System.out.println("Manifest: " + manifest);
-
- Path path = Path.of("./tmp_"+api.getImage()+"_"+api.getTag());
- try {
- Files.createDirectory(path);
- } catch (IOException e) {
- System.out.println("Failed to create directory: " + path);
- e.printStackTrace();
- return;
- }
+ public JshipIT(String[] args) {
- assert manifest != null;
- JsonNode layers = manifest.get("layers");
- for (JsonNode layer : layers) {
- System.out.println("Layer: " + layer);
- try {
- api.fetchBlob(layer.get("digest").asText(), path.toString());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
+ CommandCreate commandCreate = new CommandCreate();
+ CommandPull commandPull = new CommandPull();
+ JCommander commands = JCommander.newBuilder()
+ .addCommand("create", commandCreate)
+ .addCommand("pull", commandPull)
+ .build();
- */
+ commands.parse(args);
OCIDataStore dataStore = new OCIDataStore("./tmp");
- //dataStore.createImage("registry.docker.io","library", "bash", "devel-alpine3.18");
- ContainerManager containerManager = new ContainerManager("testContainer", "bash", "devel-alpine3.18", "bash", "registry.docker.io", "library", dataStore);
- containerManager.createContainer();
- containerManager.startContainer();
+
+ if (commands.getParsedCommand() == null) {
+ commands.usage();
+ System.exit(1);
+ } else if (commands.getParsedCommand().equals("create")) {
+ ContainerManager containerManager = new ContainerManager(commandCreate.containerName, commandCreate.containerImage, commandCreate.containerTag, "bash", commandCreate.containerApiRepo, commandCreate.containerRepo, dataStore);
+ containerManager.createContainer();
+ containerManager.startContainer();
+ } else if (commands.getParsedCommand().equals("pull")) {
+ dataStore.createImage(commandPull.containerApiRepo, commandPull.containerRepo, commandPull.containerImage, commandPull.containerTag);
+ }
+
+
+
}
} \ No newline at end of file
diff --git a/src/main/java/io/github/jshipit/Main.java b/src/main/java/io/github/jshipit/Main.java
index bb33fa5..51a88a7 100644
--- a/src/main/java/io/github/jshipit/Main.java
+++ b/src/main/java/io/github/jshipit/Main.java
@@ -3,7 +3,7 @@ package io.github.jshipit;
public class Main {
public static void main(String[] args) {
- new JshipIT(); // I HATE STATIC FUNCTIONS
+ new JshipIT(args); // I HATE STATIC FUNCTIONS
}
}
diff --git a/src/main/java/io/github/jshipit/OCIDataStore.java b/src/main/java/io/github/jshipit/OCIDataStore.java
index 92db6c2..6991af4 100755
--- a/src/main/java/io/github/jshipit/OCIDataStore.java
+++ b/src/main/java/io/github/jshipit/OCIDataStore.java
@@ -20,13 +20,16 @@ public class OCIDataStore {
public OCIDataStore(String path) {
this.path = path;
this.databasePath = path + "/datastore.db";
- createStore();
- try {
- createStoreDatabase();
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
- throw new RuntimeException(e);
+ if (!Files.isDirectory(Path.of(path))) {
+ createStore();
+ }
+ if (!Files.exists(Path.of(this.databasePath))) {
+ try {
+ createStoreDatabase();
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
}
-
}
private void createStore() {
@@ -162,16 +165,12 @@ public class OCIDataStore {
DockerAPIHelper api = new DockerAPIHelper(apiRepo, repo, image, tag);
- System.out.println("API Token: " + api.getApiToken());
-
JsonNode manifest = null;
try {
manifest = api.fetchManifestJson();
} catch (IOException ignored) {} // Proper error handling is bloat
- System.out.println("Manifest: " + manifest);
-
Path path = Path.of(this.path+"/"+api.getImage()+"/"+api.getTag());
try {
Files.createDirectory(path);
@@ -197,8 +196,6 @@ public class OCIDataStore {
}
List <String> layerDigests = new ArrayList<>();
for (JsonNode layer : layers) {
- System.out.println("Layer: " + layer);
-
try {
if (!isBlobInDatabase(layer.get("digest").asText())) {
api.fetchBlob(layer.get("digest").asText(), layerpath, true, null);