summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org
diff options
context:
space:
mode:
authorSimon Rettberg2016-08-30 18:00:40 +0200
committerSimon Rettberg2016-08-30 18:00:40 +0200
commit03eec95c05a01884c02058a78ca4b77fb3bae982 (patch)
tree3845ce0432f20326d27f55e6e3e1a543e1007a39 /dozentenmodul/src/main/java/org
parent[server] Improve thrift retry handling: Don't retry for TInvalidTokenException (diff)
downloadtutor-module-03eec95c05a01884c02058a78ca4b77fb3bae982.tar.gz
tutor-module-03eec95c05a01884c02058a78ca4b77fb3bae982.tar.xz
tutor-module-03eec95c05a01884c02058a78ca4b77fb3bae982.zip
[client] Don't allow upload of snapshotted VMs
Diffstat (limited to 'dozentenmodul/src/main/java/org')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java49
1 files changed, 43 insertions, 6 deletions
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 22939cc4..0e868b81 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
@@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
@@ -27,7 +28,9 @@ 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.DiskImage.UnknownImageFormatException;
import org.openslx.util.vm.VmMetaData.HardDisk;
+import org.openslx.util.vm.DiskImage;
import org.openslx.util.vm.VmwareMetaData;
/**
@@ -89,6 +92,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
private void vmxSelected(File file) {
Config.setUploadPath(file.getParent());
+ txtImageFile.setText("");
+ txtImageName.setText("");
try {
state.meta = new VmwareMetaData(MetaDataCache.getOperatingSystems(), file);
} catch (IOException e) {
@@ -117,27 +122,52 @@ public class ImageUploadPage extends ImageUploadPageLayout {
}
// now check the disk files
+ // TODO: Use disk image class, check for standalone/snapshot flags
File vmDiskFileInfo = new File(hdds.get(0).diskImage);
if (!vmDiskFileInfo.isAbsolute()) {
// it's relative, compose path using the vmx location
File vmxBaseDirectory = file.getParentFile();
vmDiskFileInfo = new File(vmxBaseDirectory, hdds.get(0).diskImage);
}
- if (vmDiskFileInfo.canRead()) {
- state.diskFile = vmDiskFileInfo;
- } else {
+ DiskImage diskImage;
+ try {
+ diskImage = new DiskImage(vmDiskFileInfo);
+ } catch (FileNotFoundException e) {
+ setErrorMessage("'" + vmDiskFileInfo.getName() + "' kann nicht gefunden werden!");
+ setPageComplete(false);
+ return;
+ } catch (IOException e) {
setErrorMessage("'" + vmDiskFileInfo.getName() + "' kann nicht gelesen werden!");
setPageComplete(false);
return;
+ } catch (UnknownImageFormatException e) {
+ setErrorMessage("'" + vmDiskFileInfo.getName() + "' hat unbekanntes Dateiformat!");
+ setPageComplete(false);
+ return;
}
- if (askCancelLockFile(file.getAbsolutePath() + ".lck", vmDiskFileInfo.getAbsolutePath() + ".lck")) {
- setErrorMessage("Die gewählte VM wird noch verwendet");
+ // Warn user about snapshot
+ if (diskImage.isSnapshot) {
+ Gui.showMessageBox(
+ "Von der ausgewählten VM wurde ein Snapshot erstellt. In diesem Zustand kann\n"
+ + "die VM leider nicht ins bwLehrpool-System geladen werden. Bitte konsolidieren Sie zunächst\n"
+ + "den Snapshot und versuchen Sie es erneut.", MessageType.WARNING, null, null);
+ setErrorMessage("Die gewählte VM befindet sich im Snapshot-Zustand");
+ setPageComplete(false);
+ return;
+ }
+ if (!diskImage.isStandalone) {
+ Gui.showMessageBox(
+ "Die zu dieser VM gehörige VMDK (Virtuelle Festplatte) ist im Format '" + diskImage.subFormat + "'.\n"
+ + "Dieses Format wird von bwLehrpool nicht unterstützt. Bitte konvertieren Sie die VM\n"
+ + "in das Format 'monolithicSparse'.", MessageType.WARNING, null, null);
+ setErrorMessage("Die VMDK Datei der VM hat ein inkompatibles Format");
setPageComplete(false);
return;
}
- // vmx ok, set it as our description file
+ // everything seems fine so far
+ state.diskFile = vmDiskFileInfo;
state.descriptionFile = file;
if (existingImage == null) {
@@ -187,6 +217,13 @@ public class ImageUploadPage extends ImageUploadPageLayout {
*/
@Override
protected boolean wantNextOrFinish() {
+ // Check for vmware player lock files - warn user if found, might corrupt upload
+ if (askCancelLockFile(state.descriptionFile.getAbsolutePath() + ".lck",
+ state.diskFile.getAbsolutePath() + ".lck")) {
+ setErrorMessage("Die gewählte VM wird noch verwendet");
+ return false;
+ }
+
// are we creating a new image? then either:
// get the image name either auto filled by VmwareMetaData or by user
// get the image name from the image we are uploading a new version of