Gilad Chaplik has uploaded a new change for review. Change subject: webadmin: cannot import collapsed snapshot VM (#845947) ......................................................................
webadmin: cannot import collapsed snapshot VM (#845947) https://bugzilla.redhat.com/845947 in case the template was missing in the system, but resided in the export domain, the dialog mistakenly denided importing the vm. now it just adding a comment and allowing import only with collapse snapshot. Change-Id: I80f1a8e999dda31f644cdf767eeb536109049a26 Signed-off-by: Gilad Chaplik <[email protected]> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/VmBackupModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java 3 files changed, 61 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/15/7815/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/VmBackupModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/VmBackupModel.java index f74a626..b97f318 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/VmBackupModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/VmBackupModel.java @@ -194,6 +194,7 @@ ImportVmModel model = new ImportVmModel(); model.setTitle(ConstantsManager.getInstance().getConstants().importVirtualMachinesTitle()); model.setHashName("import_virtual_machine"); //$NON-NLS-1$ + model.setEntity(getEntity()); return model; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java index d52ba90..1f61b8a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ImportVmModel.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; @@ -11,11 +12,14 @@ import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.DiskImageList; +import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters; import org.ovirt.engine.core.common.queries.GetAllRelevantQuotasForStorageParameters; import org.ovirt.engine.core.common.queries.GetAllRelevantQuotasForVdsGroupParameters; import org.ovirt.engine.core.common.queries.GetVmTemplatesDisksParameters; @@ -53,6 +57,7 @@ private VmImportDiskListModel importDiskListModel; private storage_pool storagePool; private boolean hasQuota; + private final Map<Guid, List<Disk>> missingTemplateDiskMap = new HashMap<Guid, List<Disk>>(); protected ArrayList<storage_domains> filteredStorageDomains; private HashMap<Guid, VM> alreadyInSystemVmMap; private Map<Guid, ArrayList<Quota>> storageQuotaMap; @@ -266,8 +271,10 @@ } } - setMessage(isDefaultStorageApplicableForAllDisks ? "" : - ConstantsManager.getInstance().getConstants().importNotApplicableForDefaultStorage()); + if ((getMessage() == null || getMessage().isEmpty()) + && !isDefaultStorageApplicableForAllDisks) { + setMessage(ConstantsManager.getInstance().getConstants().importNotApplicableForDefaultStorage()); + } } protected void checkDestFormatCompatibility() { @@ -345,16 +352,18 @@ if (storageDomains == null) { // Missing template disk - showCloseMessage( - ConstantsManager.getInstance().getConstants().importMissingStorages()); - return; + missingTemplateDiskMap.put(templateId, templateDiskMap.get(templateId)); } else { setDiskImportData(disk.getId(), storageDomains, diskImage.getvolume_type()); } } } } - postInitDisks(); + if (!missingTemplateDiskMap.keySet().isEmpty()) { + getTemplatesFromExportDomain(); + } else { + postInitDisks(); + } } }); } else { @@ -363,6 +372,46 @@ } + protected void getTemplatesFromExportDomain() { + GetAllFromExportDomainQueryParameters tempVar = + new GetAllFromExportDomainQueryParameters(storagePool.getId(), ((storage_domains) getEntity()) + .getId()); + tempVar.setGetAll(true); + Frontend.RunQuery(VdcQueryType.GetTemplatesFromExportDomain, tempVar, new AsyncQuery(ImportVmModel.this, + new INewAsyncCallback() { + + @Override + public void OnSuccess(Object model, Object returnValue) { + Map<VmTemplate, DiskImageList> dictionary = + (HashMap<VmTemplate, DiskImageList>) ((VdcQueryReturnValue) returnValue).getReturnValue(); + Map<Guid, Guid> tempMap = new HashMap<Guid, Guid>(); + for (Entry<VmTemplate, DiskImageList> entry : dictionary.entrySet()) { + tempMap.put(entry.getKey().getId(), null); + } + for (Guid templateId : missingTemplateDiskMap.keySet()) { + if (tempMap.containsKey(templateId)) { + for (Disk disk : missingTemplateDiskMap.get(templateId)) { + setDiskImportData(disk.getId(), + filteredStorageDomains, ((DiskImage) disk).getvolume_type()); + } + } else { + showCloseMessage(ConstantsManager.getInstance() + .getConstants() + .errorTemplateCannotBeFoundMessage()); + return; + } + } + ImportVmModel.this.setMessage(ConstantsManager.getInstance() + .getConstants() + .importMissingStorages()); + getCollapseSnapshots().setEntity(true); + getCollapseSnapshots().setIsChangable(false); + postInitDisks(); + } + })); + + } + protected void postInitDisks() { onDataLoad(); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java index adfedd2..a02f3f3 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java @@ -1516,12 +1516,15 @@ String assignQuotaForDisk(); @DefaultStringValue("Some imported VMs depend on one or more templates which are " + - "not available in the system. Either: 1. Import VMs with 'collapse snapshots' "+ - "option 2. Import missing templates first and then try importing the VMs again") + "not available in the system. Therefore you must Import VMs with 'collapse snapshots', "+ + "another option is to Import missing templates first and then try import the VMs again") String importMissingStorages(); @DefaultStringValue("The selected default Storage Domain is not applicable for all disks " + "(i.e. some disks will be imported to a different Storage Domain).") String importNotApplicableForDefaultStorage(); + @DefaultStringValue("Template cannot be found in the system, VM(s) cannot be imported") + String errorTemplateCannotBeFoundMessage(); + } -- To view, visit http://gerrit.ovirt.org/7815 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I80f1a8e999dda31f644cdf767eeb536109049a26 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
