Tal Nisan has uploaded a new change for review. Change subject: core: Plug disk to VM when adding a new disk ......................................................................
core: Plug disk to VM when adding a new disk When adding a new disk to a VM the disk is plugged upon creation only if the VM is down, this patch is plugging the disk by default after the disk creation is completed even if the VM is not down, this behavior can be overriden by specifing a parameter to the add disk command, the new disk popup in webadmin was changed to support this behavior Bug-Url: https://bugzilla.redhat.com/856272 Change-Id: Ia9778bcaf21b346a55992590159cabd8d78f0c66 Signed-off-by: Tal Nisan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java 7 files changed, 55 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/51/21851/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java index 38e9998..c4b65b0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java @@ -21,6 +21,7 @@ import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AddDiskParameters; import org.ovirt.engine.core.common.action.AddImageFromScratchParameters; +import org.ovirt.engine.core.common.action.HotPlugDiskToVmParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.asynctasks.EntityInfo; @@ -74,8 +75,6 @@ public AddDiskCommand(T parameters) { super(parameters); - parameters.getDiskInfo().setId(Guid.newGuid()); - parameters.setEntityInfo(new EntityInfo(VdcObjectType.Disk, parameters.getDiskInfo().getId())); } @Override @@ -344,6 +343,8 @@ @Override protected void executeVmCommand() { + getParameters().getDiskInfo().setId(Guid.newGuid()); + getParameters().setEntityInfo(new EntityInfo(VdcObjectType.Disk, getParameters().getDiskInfo().getId())); ImagesHandler.setDiskAlias(getParameters().getDiskInfo(), getVm()); if (DiskStorageType.IMAGE == getParameters().getDiskInfo().getDiskStorageType()) { createDiskBasedOnImage(); @@ -365,7 +366,7 @@ VmDeviceGeneralType.DISK, VmDeviceType.DISK, null, - getVm().getStatus() == VMStatus.Down, + getVm().getStatus() == VMStatus.Down && getParameters().getPlugDiskToVm(), Boolean.TRUE.equals(getParameters().getDiskInfo().getReadOnly()), null); } @@ -373,6 +374,7 @@ } }); getReturnValue().setActionReturnValue(getParameters().getDiskInfo().getId()); + plugDiskToVmIfNeeded(); setSucceeded(true); } @@ -401,7 +403,7 @@ VmDeviceGeneralType.DISK, VmDeviceType.DISK, null, - getVm().getStatus() == VMStatus.Down, + getVm().getStatus() == VMStatus.Down && getParameters().getPlugDiskToVm(), Boolean.TRUE.equals(getParameters().getDiskInfo().getReadOnly()), null)); getCompensationContext().stateChanged(); @@ -539,6 +541,19 @@ } @Override + protected void endSuccessfully() { + plugDiskToVmIfNeeded(); + super.endSuccessfully(); + } + + private void plugDiskToVmIfNeeded() { + if (getVm() != null && getParameters().getPlugDiskToVm() && getVm().getStatus() != VMStatus.Down) { + HotPlugDiskToVmParameters params = new HotPlugDiskToVmParameters(getVmId(), getParameters().getDiskInfo().getId()); + Backend.getInstance().runInternalAction(VdcActionType.HotPlugDiskToVm, params); + } + } + + @Override public List<QuotaConsumptionParameter> getQuotaStorageConsumptionParameters() { List<QuotaConsumptionParameter> list = new ArrayList<QuotaConsumptionParameter>(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java index 8e4132a..18738a5 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java @@ -7,6 +7,7 @@ private static final long serialVersionUID = -7832310521101821905L; private Guid vmSnapshotId; private Guid storageDomainId; + private boolean plugDiskToVm = true; public AddDiskParameters() { storageDomainId = Guid.Empty; @@ -32,4 +33,12 @@ public void setVmSnapshotId(Guid value) { vmSnapshotId = value; } + + public boolean getPlugDiskToVm() { + return plugDiskToVm; + } + + public void setPlugDiskToVm(boolean plugDiskToVm) { + this.plugDiskToVm = plugDiskToVm; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 18427cd..a78e7d4 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1004,6 +1004,9 @@ @DefaultStringValue("Storage Type") String storageTypeVmDiskPopup(); + @DefaultStringValue("Plug Disk To VM") + String plugDiskVmDiskPopup(); + @DefaultStringValue("Wipe After Delete") String wipeAfterDeleteVmDiskPopup(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java index 1ef7cf7..167b45a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java @@ -136,6 +136,11 @@ ListModelListBoxEditor<Object> storageTypeEditor; @UiField(provided = true) + @Path(value = "plugDiskToVm.entity") + @WithElementId("plugDiskToVm") + EntityModelCheckBoxEditor plugDiskToVmEditor; + + @UiField(provided = true) @Path("isWipeAfterDelete.entity") @WithElementId("wipeAfterDelete") EntityModelCheckBoxEditor wipeAfterDeleteEditor; @@ -257,6 +262,7 @@ interfaceEditor.setLabel(constants.interfaceVmDiskPopup()); volumeTypeEditor.setLabel(constants.allocationDisk()); storageTypeEditor.setLabel(constants.storageTypeVmDiskPopup()); + plugDiskToVmEditor.setLabel(constants.plugDiskVmDiskPopup()); wipeAfterDeleteEditor.setLabel(constants.wipeAfterDeleteVmDiskPopup()); isBootableEditor.setLabel(constants.isBootableVmDiskPopup()); isShareableEditor.setLabel(constants.isShareableVmDiskPopup()); @@ -295,6 +301,7 @@ volumeTypeEditor = new ListModelListBoxEditor<Object>(new EnumRenderer()); storageTypeEditor = new ListModelListBoxEditor<Object>(new EnumRenderer()); + plugDiskToVmEditor = new EntityModelCheckBoxEditor(Align.RIGHT); wipeAfterDeleteEditor = new EntityModelCheckBoxEditor(Align.RIGHT); isBootableEditor = new EntityModelCheckBoxEditor(Align.RIGHT); @@ -753,6 +760,7 @@ quotaEditor.setTabIndex(nextTabIndex++); hostListEditor.setTabIndex(nextTabIndex++); storageTypeEditor.setTabIndex(nextTabIndex++); + plugDiskToVmEditor.setTabIndex(nextTabIndex++); wipeAfterDeleteEditor.setTabIndex(nextTabIndex++); isBootableEditor.setTabIndex(nextTabIndex++); isShareableEditor.setTabIndex(nextTabIndex++); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml index 5d7bf2c..4fe8596 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml @@ -102,6 +102,7 @@ <e:ListModelListBoxEditor ui:field="quotaEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="hostListEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="storageTypeEditor" addStyleNames="{style.boxEditor}"/> + <e:EntityModelCheckBoxEditor ui:field="plugDiskToVmEditor"/> </g:VerticalPanel> <g:VerticalPanel> <e:EntityModelCheckBoxEditor ui:field="wipeAfterDeleteEditor" addStyleNames="{style.checkBoxEditor}"/> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java index b7b78bb..282aee5 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java @@ -66,6 +66,7 @@ private EntityModel isDirectLunDiskAvaialable; private EntityModel isSgIoUnfiltered; private EntityModel sizeExtend; + private EntityModel plugDiskToVm; private ListModel storageType; private ListModel host; @@ -117,6 +118,14 @@ public EntityModel getIsReadOnly() { return isReadOnly; + } + + public EntityModel getPlugDiskToVm() { + return plugDiskToVm; + } + + public void setPlugDiskToVm(EntityModel plugDiskToVm) { + this.plugDiskToVm = plugDiskToVm; } public void setIsReadOnly(EntityModel isReadOnly) { @@ -272,6 +281,10 @@ setIsReadOnly(new EntityModel()); getIsReadOnly().setEntity(false); + setPlugDiskToVm(new EntityModel()); + getPlugDiskToVm().setEntity(false); + getPlugDiskToVm().setIsAvailable(false); + setIsSgIoUnfiltered(new EntityModel()); getIsSgIoUnfiltered().setIsAvailable(false); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java index 3f64c59..4af2923 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java @@ -45,6 +45,7 @@ if (getVm() != null) { updateSuggestedDiskAlias(); + getPlugDiskToVm().setIsAvailable(true); } else { // Read only disk can be created only in the scope of VM. getIsReadOnly().setIsAvailable(false); @@ -185,6 +186,7 @@ startProgress(null); AddDiskParameters parameters = new AddDiskParameters(getVmId(), getDisk()); + parameters.setPlugDiskToVm((Boolean)getPlugDiskToVm().getEntity()); if ((Boolean) getIsInternal().getEntity()) { StorageDomain storageDomain = (StorageDomain) getStorageDomain().getSelectedItem(); parameters.setStorageDomainId(storageDomain.getId()); -- To view, visit http://gerrit.ovirt.org/21851 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia9778bcaf21b346a55992590159cabd8d78f0c66 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
