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

Reply via email to