summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod
diff options
context:
space:
mode:
authorManuel Bentele2021-02-25 14:59:33 +0100
committerManuel Bentele2021-03-11 06:59:43 +0100
commit9eedf73295ad9e5b9764b2181fc95058d698011d (patch)
treef1882d97662d8611a94e40ce4d6f4c52b3eeda62 /dozentenmodul/src/main/java/org/openslx/dozmod
parentMerge branch 'feature/vmwarevm-support' into feature-merge (diff)
downloadtutor-module-9eedf73295ad9e5b9764b2181fc95058d698011d.tar.gz
tutor-module-9eedf73295ad9e5b9764b2181fc95058d698011d.tar.xz
tutor-module-9eedf73295ad9e5b9764b2181fc95058d698011d.zip
[client,server] Refactor disk image representation
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java6
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java14
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java2
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java41
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java2
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java20
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/VmWrapper.java30
11 files changed, 83 insertions, 55 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java
index cb207d34..8ea5372b 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtConfigEditorWindow.java
@@ -24,9 +24,9 @@ import org.openslx.dozmod.thrift.ImageDetailsActions;
import org.openslx.dozmod.thrift.ImageDetailsActions.VirtConfCallback;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.util.XmlHelper;
-import org.openslx.util.vm.VboxMetaData;
-import org.openslx.util.vm.VmMetaData;
-import org.openslx.util.vm.VmwareConfig;
+import org.openslx.vm.VboxMetaData;
+import org.openslx.vm.VmMetaData;
+import org.openslx.vm.VmwareConfig;
@SuppressWarnings("serial")
public class VirtConfigEditorWindow extends VirtConfigEditorWindowLayout implements UiFeedback {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java
index b6584b8e..200a9f0e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/VirtDropDownConfigEditorWindow.java
@@ -20,13 +20,13 @@ import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.sat.thrift.version.Feature;
import org.openslx.util.ThriftUtil;
import org.openslx.util.XmlHelper;
-import org.openslx.util.vm.VboxMetaData;
-import org.openslx.util.vm.VmMetaData;
-import org.openslx.util.vm.VmMetaData.DDAcceleration;
-import org.openslx.util.vm.VmMetaData.EthernetDevType;
-import org.openslx.util.vm.VmMetaData.HWVersion;
-import org.openslx.util.vm.VmMetaData.SoundCardType;
-import org.openslx.util.vm.VmMetaData.UsbSpeed;
+import org.openslx.vm.VboxMetaData;
+import org.openslx.vm.VmMetaData;
+import org.openslx.vm.VmMetaData.DDAcceleration;
+import org.openslx.vm.VmMetaData.EthernetDevType;
+import org.openslx.vm.VmMetaData.HWVersion;
+import org.openslx.vm.VmMetaData.SoundCardType;
+import org.openslx.vm.VmMetaData.UsbSpeed;
@SuppressWarnings("serial")
public class VirtDropDownConfigEditorWindow extends VirtDropDownConfigEditorWindowLayout
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java
index 1703e77e..bddf759e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/VirtDropDownConfigEditorWindowLayout.java
@@ -25,11 +25,11 @@ import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.thrift.Session;
import org.openslx.sat.thrift.version.Feature;
-import org.openslx.util.vm.VmMetaData.DDAcceleration;
-import org.openslx.util.vm.VmMetaData.EthernetDevType;
-import org.openslx.util.vm.VmMetaData.HWVersion;
-import org.openslx.util.vm.VmMetaData.SoundCardType;
-import org.openslx.util.vm.VmMetaData.UsbSpeed;
+import org.openslx.vm.VmMetaData.DDAcceleration;
+import org.openslx.vm.VmMetaData.EthernetDevType;
+import org.openslx.vm.VmMetaData.HWVersion;
+import org.openslx.vm.VmMetaData.SoundCardType;
+import org.openslx.vm.VmMetaData.UsbSpeed;
@SuppressWarnings("serial")
public class VirtDropDownConfigEditorWindowLayout extends JDialog {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java
index e7e7adf5..1954db28 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ContainerUploadPage.java
@@ -20,7 +20,7 @@ import org.openslx.dozmod.thrift.ThriftError;
import org.openslx.dozmod.thrift.UploadInitiator;
import org.openslx.dozmod.thrift.WrappedException;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
-import org.openslx.util.vm.DockerMetaDataDummy;
+import org.openslx.vm.DockerMetaDataDummy;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java
index a20ef8b6..19df525a 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java
@@ -14,8 +14,8 @@ import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.thrifthelper.Comparators;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
-import org.openslx.util.vm.DockerMetaDataDummy;
-import org.openslx.util.vm.QemuMetaData;
+import org.openslx.vm.DockerMetaDataDummy;
+import org.openslx.vm.QemuMetaData;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
index c764bee3..68bcbd50 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
@@ -35,12 +35,12 @@ import org.openslx.dozmod.thrift.WrappedException;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.sat.thrift.version.Feature;
import org.openslx.thrifthelper.TConst;
-import org.openslx.util.vm.DiskImage;
-import org.openslx.util.vm.DiskImage.ImageFormat;
-import org.openslx.util.vm.DiskImage.UnknownImageFormatException;
-import org.openslx.util.vm.VmMetaData;
-import org.openslx.util.vm.VmMetaData.HardDisk;
-import org.openslx.util.vm.VmwareMetaData;
+import org.openslx.vm.VmMetaData;
+import org.openslx.vm.VmwareMetaData;
+import org.openslx.vm.VmMetaData.HardDisk;
+import org.openslx.vm.disk.DiskImage;
+import org.openslx.vm.disk.DiskImage.ImageFormat;
+import org.openslx.vm.disk.DiskImageException;
/**
* Page for uploading a new image.
@@ -257,10 +257,14 @@ public class ImageUploadPage extends ImageUploadPageLayout {
File vmBaseDirectory = file.getParentFile();
vmDiskFileInfo = new File(vmBaseDirectory, hdds.get(0).diskImage);
}
- DiskImage diskImage;
- List<DiskImage.ImageFormat> supportedImageFormats = state.meta.getSupportedImageFormats();
+
+ final DiskImage diskImage;
+ final boolean diskImageIsSnapshot;
+ final boolean diskImageIsStandalone;
try {
- diskImage = new DiskImage(vmDiskFileInfo, supportedImageFormats);
+ diskImage = DiskImage.newInstance(vmDiskFileInfo);
+ diskImageIsSnapshot = diskImage.isSnapshot();
+ diskImageIsStandalone = diskImage.isStandalone();
} catch (FileNotFoundException e) {
setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageNotFound",
vmDiskFileInfo.getName()));
@@ -271,7 +275,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
vmDiskFileInfo.getName()));
setPageComplete(false);
return;
- } catch (UnknownImageFormatException e) {
+ } catch (DiskImageException e) {
setErrorMessage(
I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageHasUnknownFormat",
vmDiskFileInfo.getName()));
@@ -279,19 +283,28 @@ public class ImageUploadPage extends ImageUploadPageLayout {
setPageComplete(false);
return;
}
+
+ // check if disk image format is supported by the hypervisor's supported disk image formats
+ final List<ImageFormat> supportedImageFormats = state.meta.getSupportedImageFormats();
+ if (!diskImage.getFormat().isSupportedbyVirtualizer( supportedImageFormats )) {
+ Gui.showMessageBox(I18n.PAGE.getString("ImageUpload.Message.warning.diskImageNotSupportedByHypervisor",
+ Branding.getServiceName()), MessageType.WARNING, null, null);
+ setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageNotSupportedByHypervisor"));
+ setPageComplete(false);
+ return;
+ }
// Warn user about snapshot
- if (diskImage.isSnapshot || state.meta.isMachineSnapshot()) {
+ if (diskImageIsSnapshot || state.meta.isMachineSnapshot()) {
Gui.showMessageBox(I18n.PAGE.getString("ImageUpload.Message.warning.diskImageSnapshot",
Branding.getServiceName()), MessageType.WARNING, null, null);
setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageSnapshot"));
setPageComplete(false);
return;
}
- if (!diskImage.isStandalone) {
+ if (!diskImageIsStandalone) {
Gui.showMessageBox(
- I18n.PAGE.getString("ImageUpload.Message.warning.diskImageStandalone",
- diskImage.subFormat, Branding.getApplicationName()),
+ I18n.PAGE.getString("ImageUpload.Message.warning.diskImageStandalone", Branding.getApplicationName()),
MessageType.WARNING, null, null);
setErrorMessage(I18n.PAGE.getString("ImageUpload.WizardPage.errorMessage.diskImageStandalone"));
setPageComplete(false);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java
index 4f9be05e..35ef765d 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/model/ContainerDefinition.java
@@ -9,8 +9,8 @@ import org.kamranzafar.jtar.TarInputStream;
import org.kamranzafar.jtar.TarOutputStream;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.dozmod.util.TarArchiveUtil;
-import org.openslx.util.vm.DockerMetaDataDummy;
-import org.openslx.util.vm.UnsupportedVirtualizerFormatException;
+import org.openslx.vm.DockerMetaDataDummy;
+import org.openslx.vm.UnsupportedVirtualizerFormatException;
import java.io.*;
import java.nio.ByteBuffer;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java b/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java
index beea1a74..1485943a 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java
@@ -10,7 +10,7 @@ import org.openslx.bwlp.thrift.iface.ShareMode;
import org.openslx.dozmod.gui.wizard.WizardPage;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.UploadInitiator;
-import org.openslx.util.vm.VmMetaData;
+import org.openslx.vm.VmMetaData;
public class UploadWizardState {
// -- Objects of the GUI itself --
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
index ab3db38b..7d0fde5f 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
@@ -4,7 +4,6 @@ import java.awt.Frame;
import java.awt.Window;
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -19,7 +18,6 @@ import org.apache.thrift.transport.TTransportException;
import org.openslx.bwlp.thrift.iface.*;
import org.openslx.bwlp.thrift.iface.SatelliteServer.Client;
import org.openslx.dozmod.App;
-import org.openslx.dozmod.Branding;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.Config.SavedSession;
import org.openslx.dozmod.authentication.Authenticator.AuthenticationData;
@@ -40,13 +38,10 @@ import org.openslx.dozmod.thrift.cache.UserCache;
import org.openslx.dozmod.util.FormatHelper;
import org.openslx.dozmod.util.ImageWrapper;
import org.openslx.dozmod.util.VmWrapper;
-import org.openslx.dozmod.util.VmWrapper.MetaDataMissingException;
import org.openslx.sat.thrift.version.Version;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
-import org.openslx.util.vm.DiskImage;
-import org.openslx.util.vm.DiskImage.UnknownImageFormatException;
public class ThriftActions {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java
index 05ba40bd..8891bbac 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ImageWrapper.java
@@ -7,7 +7,8 @@ import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.model.ContainerDefinition;
import org.openslx.thrifthelper.TConst;
-import org.openslx.util.vm.DiskImage;
+import org.openslx.vm.disk.DiskImage;
+import org.openslx.vm.disk.DiskImageException;
import java.io.File;
import java.io.IOException;
@@ -42,6 +43,7 @@ public class ImageWrapper {
DiskImage diskImage = null;
String ext = virtualizerId;
+ boolean imageIsCompressed = false;
// unwrap each image individually
// TODO In future maybe this is a check to distinguish between VM-Image and Container Image
@@ -60,16 +62,22 @@ public class ImageWrapper {
} else {
try {
- diskImage = new DiskImage(tmpDiskFile);
- } catch (IOException | DiskImage.UnknownImageFormatException e) {
+ diskImage = DiskImage.newInstance(tmpDiskFile);
+ } catch (IOException | DiskImageException e) {
LOGGER.warn("Could not open downloaded image for analyze step", e);
}
if (diskImage != null) {
- if (diskImage.format != null) {
- ext = diskImage.format.extension;
+
+ ext = diskImage.getFormat().getExtension();
+
+ try {
+ imageIsCompressed = diskImage.isCompressed();
+ } catch (DiskImageException e) {
+ LOGGER.warn("Could not analyze if image is compressed", e);
}
- if (diskImage.isCompressed) {
+
+ if (imageIsCompressed) {
Gui.asyncMessageBox(
I18n.THRIFT.getString("ThriftActions.Message.warning.diskImageCompressed",
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmWrapper.java
index 3f3b9fac..d36384bc 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmWrapper.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/VmWrapper.java
@@ -24,12 +24,14 @@ import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.thrifthelper.TConst;
-import org.openslx.util.vm.DiskImage;
-import org.openslx.util.vm.QemuMetaData;
-import org.openslx.util.vm.VboxMetaData;
-import org.openslx.util.vm.VmMetaData;
-import org.openslx.util.vm.VmMetaData.UsbSpeed;
-import org.openslx.util.vm.VmwareMetaData;
+import org.openslx.vm.QemuMetaData;
+import org.openslx.vm.VboxMetaData;
+import org.openslx.vm.VmMetaData;
+import org.openslx.vm.VmwareMetaData;
+import org.openslx.vm.VmMetaData.UsbSpeed;
+import org.openslx.vm.disk.DiskImage;
+import org.openslx.vm.disk.DiskImageException;
+import org.openslx.vm.disk.DiskImageVmdk;
public class VmWrapper {
@@ -45,7 +47,17 @@ public class VmWrapper {
if (!TConst.VIRT_VMWARE.equals(virtualizerId)) {
throw new MetaDataMissingException();
}
- machineDescription = getFallbackVmx(diskImageInfo);
+
+ if (diskImageInfo instanceof DiskImageVmdk) {
+ final DiskImageVmdk vmdkImageInfo = DiskImageVmdk.class.cast( diskImageInfo );
+ try {
+ machineDescription = VmWrapper.getFallbackVmx(vmdkImageInfo);
+ } catch (DiskImageException e) {
+ throw new MetaDataMissingException();
+ }
+ } else {
+ throw new MetaDataMissingException();
+ }
}
// Handle machine description to generate configuration file
VmMetaData<?, ?, ?, ?, ?> vmMeta = VmMetaData.getInstance(MetaDataCache.getOperatingSystems(),
@@ -126,9 +138,9 @@ public class VmWrapper {
FileUtils.writeByteArrayToFile(vmFile, vmMeta.getFilteredDefinitionArray());
}
- private static byte[] getFallbackVmx(DiskImage diskImageInfo) throws IOException {
+ private static byte[] getFallbackVmx(DiskImageVmdk diskImageInfo) throws IOException, DiskImageException {
String vmx = ResourceLoader.getTextFile("/txt/vmx_template");
- return vmx.replace("%VM_HW_VERSION%", Integer.toString(diskImageInfo.hwVersion)).getBytes(
+ return vmx.replace("%VM_HW_VERSION%", Integer.toString(diskImageInfo.getHwVersion())).getBytes(
StandardCharsets.UTF_8);
}