diff options
| author | Simon Rettberg | 2016-08-30 18:00:40 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2016-08-30 18:00:40 +0200 |
| commit | 03eec95c05a01884c02058a78ca4b77fb3bae982 (patch) | |
| tree | 3845ce0432f20326d27f55e6e3e1a543e1007a39 | |
| parent | [server] Improve thrift retry handling: Don't retry for TInvalidTokenException (diff) | |
| download | tutor-module-03eec95c05a01884c02058a78ca4b77fb3bae982.tar.gz tutor-module-03eec95c05a01884c02058a78ca4b77fb3bae982.tar.xz tutor-module-03eec95c05a01884c02058a78ca4b77fb3bae982.zip | |
[client] Don't allow upload of snapshotted VMs
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java | 49 |
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 |
