diff options
author | axtloss <axtlos@getcryst.al> | 2023-05-24 19:23:30 +0200 |
---|---|---|
committer | axtloss <axtlos@getcryst.al> | 2023-05-24 19:23:30 +0200 |
commit | 63146274f8cbe759742aa18413054515c0f81583 (patch) | |
tree | c6cddc91db04b04f31f8ab3c76406f9c53c0587c /src/main/java/io/github/jshipit/OCIDataStore.java | |
parent | 732147566e83c1e160154b18c33618a36fac30e0 (diff) | |
download | jshipit-63146274f8cbe759742aa18413054515c0f81583.tar.gz jshipit-63146274f8cbe759742aa18413054515c0f81583.tar.bz2 |
Automatically extract downloaded blobs
Diffstat (limited to 'src/main/java/io/github/jshipit/OCIDataStore.java')
-rwxr-xr-x | src/main/java/io/github/jshipit/OCIDataStore.java | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/src/main/java/io/github/jshipit/OCIDataStore.java b/src/main/java/io/github/jshipit/OCIDataStore.java index d2c3a25..3e0b9f3 100755 --- a/src/main/java/io/github/jshipit/OCIDataStore.java +++ b/src/main/java/io/github/jshipit/OCIDataStore.java @@ -2,6 +2,7 @@ package io.github.jshipit; import com.fasterxml.jackson.databind.JsonNode; +import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.nio.file.FileAlreadyExistsException; @@ -37,7 +38,6 @@ public class OCIDataStore { if (!(e instanceof FileAlreadyExistsException)) { System.out.println("Failed to create directory: " + path); e.printStackTrace(); - return; } } } @@ -52,6 +52,7 @@ public class OCIDataStore { statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate("CREATE TABLE IF NOT EXISTS blobs (id INTEGER PRIMARY KEY AUTOINCREMENT, digest TEXT, path TEXT)"); + statement.executeUpdate("CREATE TABLE IF NOT EXISTS containers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, id TEXT, path TEXT)"); System.out.println("A new database has been created."); } @@ -94,6 +95,35 @@ public class OCIDataStore { return false; } + public void addContainerToDatabase(String path, String name, String id) { + String url = "jdbc:sqlite:" + this.databasePath; + + try (Connection conn = DriverManager.getConnection(url)) { + if (conn != null) { + Statement statement = conn.createStatement(); + statement.setQueryTimeout(30); // set timeout to 30 sec. + + statement.executeUpdate("INSERT INTO containers (name, id, path) VALUES ('" + name + "', '" + id + "', '" + path + "')"); + } + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } + } + + public String createContainerDirectory(String image, String tag, String name, String id) { + Path containerPath = Path.of(this.path+"/"+image+"/"+tag+"/"+name+"_"+id); + try { + Files.createDirectory(containerPath); + } catch (IOException e) { + System.out.println("Failed to create directory: " + containerPath); + e.printStackTrace(); + return null; + } + addContainerToDatabase(containerPath.toString(), name, id); + return containerPath.toString(); + } + public void createImage(String apiRepo, String repo, String image, String tag) { Path imgPath = Path.of(this.path+"/"+image); @@ -153,7 +183,7 @@ public class OCIDataStore { try { if (!isBlobInDatabase(layer.get("digest").asText())) { - api.fetchBlob(layer.get("digest").asText(), layerpath); + api.fetchBlob(layer.get("digest").asText(), layerpath, true); addBlobToDatabase(layer.get("digest").asText()); } else { System.out.println("Blob already in database: " + layer.get("digest").asText()); @@ -164,6 +194,14 @@ public class OCIDataStore { } } + try { + api.fetchBlob(manifest.get("config").get("digest").asText(), this.path+"/"+image+"/"+tag, false); + File config = new File(this.path+"/"+image+"/"+tag+manifest.get("config").get("digest").asText().replace("sha256:", "")); + config.renameTo(new File(this.path+"/"+image+"/"+tag+"/config")); + } catch (IOException e) { + e.printStackTrace(); + } + FileWriter writer = null; try { writer = new FileWriter(this.path+"/"+image+"/"+tag+"/layers"); @@ -174,4 +212,19 @@ public class OCIDataStore { } } + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getDatabasePath() { + return databasePath; + } + + public void setDatabasePath(String databasePath) { + this.databasePath = databasePath; + } } |