diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/io/github/jshipit/BlobDownloader.java | 22 | ||||
-rw-r--r-- | src/main/java/io/github/jshipit/Commands.java | 39 | ||||
-rw-r--r-- | src/main/java/io/github/jshipit/ContainerManager.java | 19 | ||||
-rwxr-xr-x | src/main/java/io/github/jshipit/DockerAPIHelper.java | 7 | ||||
-rwxr-xr-x | src/main/java/io/github/jshipit/JshipIT.java | 59 | ||||
-rw-r--r-- | src/main/java/io/github/jshipit/Main.java | 2 | ||||
-rwxr-xr-x | src/main/java/io/github/jshipit/OCIDataStore.java | 21 |
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); |