summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java')
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java174
1 files changed, 174 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java
new file mode 100644
index 0000000..3163ed2
--- /dev/null
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java
@@ -0,0 +1,174 @@
+package org.openslx.virtualization.configuration;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.openslx.bwlp.thrift.iface.OperatingSystem;
+import org.openslx.virtualization.Version;
+import org.openslx.virtualization.virtualizer.VirtualizerDocker;
+
+public class VirtualizationConfigurationDocker extends VirtualizationConfiguration {
+
+ /**
+ * File name extension for Docker virtualization configuration files.
+ */
+ private static final String FILE_NAME_EXTENSION = null;
+
+ private static final Logger LOGGER = LogManager.getLogger( VirtualizationConfigurationDocker.class);
+
+ /**
+ * containerDefinition is a serialized tar.gz archive and represents a
+ * ContainerDefinition. This archive contains a serialized Container Recipe (e.g. Dockerfile)
+ * and a ContainerMeta witch is serialized as a json file.
+ * <p>
+ * See ContainerDefintion in tutor-module (bwsuite).
+ * <p>
+ * This field is in vm context the machine description e.g. vmware = vmx.
+ * This field will be stored in table imageversion.virtualizerconfig
+ */
+ private byte[] containerDefinition;
+
+ public VirtualizationConfigurationDocker(List<OperatingSystem> osList, File file) throws VirtualizationConfigurationException {
+ super(new VirtualizerDocker(), osList);
+
+ BufferedInputStream bis = null;
+
+ try {
+ bis = new BufferedInputStream(new FileInputStream(file));
+ containerDefinition = new byte[(int) file.length()];
+ bis.read(containerDefinition);
+
+ checkIsTarGz();
+ } catch (IOException | VirtualizationConfigurationException e) {
+ LOGGER.error("Couldn't read dockerfile", e);
+ } finally {
+ try {
+ bis.close();
+ } catch ( IOException e ) {
+ LOGGER.warn( "Could not close the input stream!" );
+ }
+ }
+ }
+
+ public VirtualizationConfigurationDocker(List<OperatingSystem> osList, byte[] vmContent, int length)
+ throws VirtualizationConfigurationException {
+ super(new VirtualizerDocker(), osList);
+
+ containerDefinition = vmContent;
+
+ checkIsTarGz();
+ }
+
+ /*
+ TODO This is just a simple check to prevent the workflow from considering any content as acceptable.
+ */
+ /**
+ * Checks if the first two bytes of the content identifies a tar.gz archive.
+ * The first byte is 31 == 0x1f, the second byte has to be -117 == 0x8b.
+ *
+ * @throws VirtualizationConfigurationException
+ */
+ private void checkIsTarGz() throws VirtualizationConfigurationException {
+ if (!((31 == containerDefinition[0]) && (-117 == containerDefinition[1]))) {
+ LOGGER.debug("Not Supported Content.");
+ throw new VirtualizationConfigurationException(
+ "DockerMetaDataDummy: Not tar.gz encoded content!");
+ }
+ }
+
+ @Override public void transformEditable() throws VirtualizationConfigurationException {
+
+ }
+
+ @Override
+ public void transformPrivacy() throws VirtualizationConfigurationException {
+ }
+
+ @Override
+ public boolean addEmptyHddTemplate() {
+ return true;
+ }
+
+ @Override public boolean addHddTemplate(File diskImage, String hddMode, String redoDir) {
+ return true;
+ }
+
+ @Override public boolean addHddTemplate(String diskImagePath, String hddMode, String redoDir) {
+ return false;
+ }
+
+ @Override public boolean addDefaultNat() {
+ return true;
+ }
+
+ @Override public void setOs(String vendorOsId) {
+
+ }
+
+ @Override public boolean addDisplayName(String name) {
+ return true;
+ }
+
+ @Override public boolean addRam(int mem) {
+ return true;
+ }
+
+ @Override public void addFloppy(int index, String image, boolean readOnly) {
+
+ }
+
+ @Override public boolean addCdrom(String image) {
+ return true;
+ }
+
+ @Override public boolean addCpuCoreCount(int nrOfCores) {
+ return true;
+ }
+
+ @Override public void setVirtualizerVersion( Version type )
+ {
+ }
+
+ @Override public Version getVirtualizerVersion()
+ {
+ return null;
+ }
+
+ @Override public byte[] getConfigurationAsByteArray() {
+ return this.containerDefinition;
+ }
+
+ @Override public boolean addEthernet(EtherType type) {
+ return true;
+ }
+
+ @Override public void transformNonPersistent() throws VirtualizationConfigurationException {
+
+ }
+
+ @Override public void registerVirtualHW() {
+
+ }
+
+ @Override
+ public String getFileNameExtension() {
+ return VirtualizationConfigurationDocker.FILE_NAME_EXTENSION;
+ }
+
+ @Override
+ public void validate() throws VirtualizationConfigurationException
+ {
+ }
+
+ @Override
+ public void disableUsb()
+ {
+ // Not applicable, maybe some day via USBguard?
+ }
+
+}