From c8ab09d70ed59123605ae9c007a29c6818168d43 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Fri, 15 Oct 2021 15:11:44 +0200 Subject: [container] Add ContainerBuildContextMehtod, refactoring - add docker-tar - only persist dockerfile and not the internals. --- .../container/ContainerBuildContextMethod.java | 2 +- .../container/ContainerDefinition.java | 72 +++++++++------------- 2 files changed, 29 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java b/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java index 760dc61..72b6c4c 100644 --- a/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java +++ b/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java @@ -2,7 +2,7 @@ package org.openslx.virtualization.configuration.container; public enum ContainerBuildContextMethod { - FILE, GIT_REPOSITORY,IMAGE_REPO; + FILE, GIT_REPOSITORY, IMAGE_REPO, DOCKER_TAR; public static ContainerBuildContextMethod fromInt(int index) { return values()[index]; diff --git a/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java b/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java index ef493f9..0ca629d 100644 --- a/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java +++ b/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java @@ -21,7 +21,6 @@ public class ContainerDefinition { // TODO database needs a refactoring to store container details // TODO tar.gz of this object is not useful, for smaller dockerfiles it makes the package lager. - protected static final Logger LOGGER = Logger.getLogger(ContainerDefinition.class); protected static final String CONTAINER_FILE = "dockerfile"; @@ -51,45 +50,6 @@ public class ContainerDefinition { containerMeta = new ContainerMeta(containerDef.getContainerMeta()); } - public String getContainerRecipe() { - return containerRecipe; - } - - public void setContainerRecipe(String containerRecipe) { - this.containerRecipe = containerRecipe; - } - - public void setContainerRecipe(File containerRecipeFile) { - this.containerRecipe = readContainerRecipe(containerRecipeFile); - } - - public void setContainerRecipe(byte[] rawContainerRecipe) { - this.containerRecipe = new String(rawContainerRecipe, StandardCharsets.UTF_8); - } - - public void setContainerMeta(byte[] containerMeta) { - Gson gson = new GsonBuilder().create(); - this.containerMeta = gson.fromJson(new JsonReader( - new InputStreamReader(new ByteArrayInputStream(containerMeta), StandardCharsets.UTF_8)), - ContainerMeta.class); - } - - public ContainerMeta getContainerMeta() { - return containerMeta; - } - -// public VirtualizationConfigurationDocker createVirtualizationConfig() { -// byte[] rawContainerRecipe = toByteBuffer().array(); -// try { -// return new VirtualizationConfigurationDocker(MetaDataCache.getOperatingSystems(), rawContainerRecipe, -// rawContainerRecipe.length); -// } catch (VirtualizationConfigurationException e) { -// e.printStackTrace(); -// LOGGER.error("Could not create ContainerMetaDataDummy"); -// } -// return null; -// } - /** * Utility function to create a {@link ContainerDefinition} object for a byte array downloaded from the server. * @@ -129,6 +89,33 @@ public class ContainerDefinition { return containerDef; } + public String getContainerRecipe() { + return containerRecipe; + } + + public void setContainerRecipe(String containerRecipe) { + this.containerRecipe = containerRecipe; + } + + public void setContainerRecipe(File containerRecipeFile) { + this.containerRecipe = readContainerRecipe(containerRecipeFile); + } + + public void setContainerRecipe(byte[] rawContainerRecipe) { + this.containerRecipe = new String(rawContainerRecipe, StandardCharsets.UTF_8); + } + + public ContainerMeta getContainerMeta() { + return containerMeta; + } + + public void setContainerMeta(byte[] containerMeta) { + Gson gson = new GsonBuilder().create(); + this.containerMeta = gson.fromJson(new JsonReader( + new InputStreamReader(new ByteArrayInputStream(containerMeta), StandardCharsets.UTF_8)), + ContainerMeta.class); + } + /** * Serializes the ContainerMeta and Container Description (e.g. dockerfile) into an tar.gz archive. * @@ -172,7 +159,7 @@ public class ContainerDefinition { // replace windows by unix EOL recipe = rawRecipe.replaceAll("\\r\\n", "\n"); - + bis.close(); } catch (IOException e) { @@ -187,10 +174,7 @@ public class ContainerDefinition { * @param destDir destination directory for containerRecipe and containerMeta. */ public void saveLocal(File destDir) { - writeFile(destDir, containerRecipe, CONTAINER_FILE); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - writeFile(destDir, gson.toJson(containerMeta), CONTAINER_META_FILE); } private void writeFile(File destDir, String fileContent, String filename) { -- cgit v1.2.3-55-g7522 From e247ac35b3bb089d4ee1b4deb1a4d29918cce068 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Fri, 15 Oct 2021 15:21:35 +0200 Subject: [container] refactoring - rename enum ContainerBuildContextMethod to ContainerImageContext - rename enum values of ContainerImageContext - rename methods referncing ContainerBuildContextMethod --- .../container/ContainerBuildContextMethod.java | 10 --- .../container/ContainerDefinition.java | 7 +- .../container/ContainerImageContext.java | 10 +++ .../configuration/container/ContainerMeta.java | 94 ++++++++++++---------- 4 files changed, 65 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java create mode 100644 src/main/java/org/openslx/virtualization/configuration/container/ContainerImageContext.java diff --git a/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java b/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java deleted file mode 100644 index 72b6c4c..0000000 --- a/src/main/java/org/openslx/virtualization/configuration/container/ContainerBuildContextMethod.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.openslx.virtualization.configuration.container; - -public enum ContainerBuildContextMethod { - - FILE, GIT_REPOSITORY, IMAGE_REPO, DOCKER_TAR; - - public static ContainerBuildContextMethod fromInt(int index) { - return values()[index]; - } -} diff --git a/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java b/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java index 0ca629d..167a11f 100644 --- a/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java +++ b/src/main/java/org/openslx/virtualization/configuration/container/ContainerDefinition.java @@ -19,7 +19,8 @@ import java.util.zip.GZIPOutputStream; public class ContainerDefinition { // TODO database needs a refactoring to store container details - // TODO tar.gz of this object is not useful, for smaller dockerfiles it makes the package lager. + // TODO refatoring: tar.gz of this object is not useful, for smaller dockerfiles it makes the package lager. + // remove the containerRecipe, ContainerMeta holds in build_context the dockerfile. protected static final Logger LOGGER = Logger.getLogger(ContainerDefinition.class); @@ -190,8 +191,8 @@ public class ContainerDefinition { } } - public ContainerBuildContextMethod getBuildContextMethod() { - return ContainerBuildContextMethod.fromInt(containerMeta.getBuildContextMethod()); + public ContainerImageContext getContainerImageContext() { + return ContainerImageContext.fromInt(containerMeta.getContainerImageContext()); } @Override public boolean equals(Object o) { diff --git a/src/main/java/org/openslx/virtualization/configuration/container/ContainerImageContext.java b/src/main/java/org/openslx/virtualization/configuration/container/ContainerImageContext.java new file mode 100644 index 0000000..f19d419 --- /dev/null +++ b/src/main/java/org/openslx/virtualization/configuration/container/ContainerImageContext.java @@ -0,0 +1,10 @@ +package org.openslx.virtualization.configuration.container; + +public enum ContainerImageContext { + + DOCKERFILE, GIT_REPOSITORY, IMAGE_REPOSITORY, DOCKER_ARCHIVE; + + public static ContainerImageContext fromInt(int index) { + return values()[index]; + } +} diff --git a/src/main/java/org/openslx/virtualization/configuration/container/ContainerMeta.java b/src/main/java/org/openslx/virtualization/configuration/container/ContainerMeta.java index 577a670..4dbf64b 100644 --- a/src/main/java/org/openslx/virtualization/configuration/container/ContainerMeta.java +++ b/src/main/java/org/openslx/virtualization/configuration/container/ContainerMeta.java @@ -5,37 +5,17 @@ import java.util.List; import java.util.Objects; /** - * ContainerMeta is used to store container specific information. - * An object of this class will be serialized with gson to a json file. + * ContainerMeta is used to store container specific information. An object of + * this class will be serialized with gson to a json file. *

- * TODO remove build_context_method - * no need to distinguish between methods - * TODO rename build_context_url to build_context + * TODO rename build_context_method to container_image_context, requires update + * in database(json) + *

+ * TODO rename build_context_url to build_context TODO refactoring build_context + * is either a dockerfile or a git url with a dockerfile. */ public class ContainerMeta { - public enum ContainerImageType implements org.apache.thrift.TEnum { - LECTURE("Lecture"), BATCH("Batch"), DATA("Data"); - - private final String displayLable; - - ContainerImageType(String name) { - this.displayLable = name; - } - - public boolean equalNames(String other) { - return displayLable.equals(other); - } - - @Override public String toString() { - return this.displayLable; - } - - @Override public int getValue() { - return this.ordinal(); - } - } - private int build_context_method; private String image_repo; private String build_context_url; @@ -48,7 +28,7 @@ public class ContainerMeta { public ContainerMeta() { image_repo = ""; - build_context_method = ContainerBuildContextMethod.FILE.ordinal(); + build_context_method = ContainerImageContext.DOCKERFILE.ordinal(); build_context_url = ""; image_name = ""; run_options = ""; @@ -70,11 +50,11 @@ public class ContainerMeta { } - public int getBuildContextMethod() { + public int getContainerImageContext() { return build_context_method; } - public void setBuildContextMethod(int buildContextMethod) { + public void setContainerImageContext(int buildContextMethod) { this.build_context_method = buildContextMethod; } @@ -94,14 +74,14 @@ public class ContainerMeta { this.run_options = run_options; } - public void setRunCommand(String run_command) { - this.run_command = run_command; - } - public String getRunCommand() { return this.run_command; } + public void setRunCommand(String run_command) { + this.run_command = run_command; + } + public String getImageName() { return image_name; } @@ -130,29 +110,57 @@ public class ContainerMeta { if (image_type == null || image_type.length() == 0) return ContainerImageType.LECTURE; - // turn string representation into enum-var 'LECTURE' -> ContainerImageType.LECTURE + // turn string representation into enum-var 'LECTURE' -> + // ContainerImageType.LECTURE return ContainerImageType.valueOf(image_type); } public void setImageType(ContainerImageType image_type) { - // set constant representation of the enum-var e.g. ContainerImageType.LECTURE -> 'LECTURE' + // set constant representation of the enum-var e.g. ContainerImageType.LECTURE + // -> 'LECTURE' this.image_type = image_type.name(); } - @Override public boolean equals(Object o) { + @Override + public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ContainerMeta that = (ContainerMeta) o; - return Objects.equals(build_context_url, that.build_context_url) && Objects.equals(image_name, - that.image_name) && Objects.equals(run_options, that.run_options) && Objects.equals( - run_command, that.run_command) && Objects.equals(bind_mount_config, that.bind_mount_config) + return Objects.equals(build_context_url, that.build_context_url) && Objects.equals(image_name, that.image_name) + && Objects.equals(run_options, that.run_options) && Objects.equals(run_command, that.run_command) + && Objects.equals(bind_mount_config, that.bind_mount_config) && Objects.equals(image_repo, that.image_repo) && Objects.equals(image_type, that.image_type); } - @Override public int hashCode() { - return Objects.hash(build_context_url, image_name, run_options, run_command, bind_mount_config, - image_repo, image_type); + @Override + public int hashCode() { + return Objects.hash(build_context_url, image_name, run_options, run_command, bind_mount_config, image_repo, + image_type); + } + + public enum ContainerImageType implements org.apache.thrift.TEnum { + LECTURE("Lecture"), BATCH("Batch"), DATA("Data"); + + private final String displayLable; + + ContainerImageType(String name) { + this.displayLable = name; + } + + public boolean equalNames(String other) { + return displayLable.equals(other); + } + + @Override + public String toString() { + return this.displayLable; + } + + @Override + public int getValue() { + return this.ordinal(); + } } } -- cgit v1.2.3-55-g7522