Greg Padgett has uploaded a new change for review.

Change subject: webadmin, backend: control of hosted engine maintenance mode
......................................................................

webadmin, backend: control of hosted engine maintenance mode

Allow control of hosted engine local/global maintenance.  Global
maintenance is performed via right-clicking on the host, while local
maintenance is tied into the existing host vds maintenance operation.

Change-Id: I0f76f7ad63bcf6d7871c362b46cfa6e928eb9c74
Bug-Url: https://bugzilla.redhat.com/1047649
Signed-off-by: Greg Padgett <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ActivateVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/SetHaMaintenanceParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/HaMaintenanceMode.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SetHaMaintenanceModeVDSCommandParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetHaMaintenanceModeVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
15 files changed, 237 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/23266/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ActivateVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ActivateVdsCommand.java
index bb15e13..0f1c229 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ActivateVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ActivateVdsCommand.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
+import org.ovirt.engine.core.common.businessentities.HaMaintenanceMode;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.network.Network;
@@ -16,6 +17,7 @@
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.common.utils.Pair;
 import 
org.ovirt.engine.core.common.vdscommands.ActivateVdsVDSCommandParameters;
+import 
org.ovirt.engine.core.common.vdscommands.SetHaMaintenanceModeVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.SetVdsStatusVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
@@ -67,6 +69,12 @@
                         return null;
                     }
                 });
+
+                if (getVds().getHighlyAvailableIsConfigured()) {
+                    SetHaMaintenanceModeVDSCommandParameters param
+                            = new 
SetHaMaintenanceModeVDSCommandParameters(getVds(), HaMaintenanceMode.LOCAL, 
false);
+                    
setSucceeded(runVdsCommand(VDSCommandType.SetHaMaintenanceMode, 
param).getSucceeded());
+                }
             }
         }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
index f6a25ab..cd593e5b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MaintenanceVdsCommand.java
@@ -16,6 +16,7 @@
 import org.ovirt.engine.core.common.action.MaintenanceVdsParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.businessentities.HaMaintenanceMode;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
@@ -32,6 +33,7 @@
 import org.ovirt.engine.core.common.job.Step;
 import org.ovirt.engine.core.common.job.StepEnum;
 import 
org.ovirt.engine.core.common.vdscommands.DisconnectStoragePoolVDSCommandParameters;
+import 
org.ovirt.engine.core.common.vdscommands.SetHaMaintenanceModeVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.SetVdsStatusVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
@@ -59,6 +61,14 @@
             // nothing to do
             setSucceeded(true);
         } else {
+            if (getVds().getStatisticsData().getHighlyAvailableIsConfigured()) 
{
+                SetHaMaintenanceModeVDSCommandParameters params
+                        = new 
SetHaMaintenanceModeVDSCommandParameters(getVds(), HaMaintenanceMode.LOCAL, 
true);
+                if (!runVdsCommand(VDSCommandType.SetHaMaintenanceMode, 
params).getSucceeded()) {
+                    setSucceeded(false);
+                    return;
+                }
+            }
             orderListOfRunningVmsOnVds(getVdsId());
             setSucceeded(migrateAllVms(getExecutionContext()));
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/SetHaMaintenanceParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/SetHaMaintenanceParameters.java
new file mode 100644
index 0000000..cf92fc0
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/SetHaMaintenanceParameters.java
@@ -0,0 +1,27 @@
+package org.ovirt.engine.core.common.action;
+
+import org.ovirt.engine.core.common.businessentities.HaMaintenanceMode;
+import org.ovirt.engine.core.compat.Guid;
+
+public class SetHaMaintenanceParameters extends VdsActionParameters {
+    private static final long serialVersionUID = -3296572537630656681L;
+    private HaMaintenanceMode mode;
+    private boolean enabled;
+
+    public SetHaMaintenanceParameters(Guid vdsId, HaMaintenanceMode mode, 
boolean enabled) {
+        super(vdsId);
+        this.mode = mode;
+        this.enabled = enabled;
+    }
+
+    public SetHaMaintenanceParameters() {
+    }
+
+    public HaMaintenanceMode getMode() {
+        return this.mode;
+    }
+
+    public boolean getIsEnabled() {
+        return this.enabled;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index 5ef0cad..25287c3 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -314,7 +314,10 @@
     AddInternalJob(1850, false, QuotaDependency.NONE),
     AddInternalStep(1851, false, QuotaDependency.NONE),
 
-    UpdateMomPolicy(1900, ActionGroup.MANIPUTLATE_HOST, false, 
QuotaDependency.NONE);
+    UpdateMomPolicy(1900, ActionGroup.MANIPUTLATE_HOST, false, 
QuotaDependency.NONE),
+
+    // TODO GP maybe only global maint?
+    SetHaMaintenance(2000, ActionGroup.MANIPUTLATE_HOST, false, 
QuotaDependency.NONE);
 
     private int intValue;
     private ActionGroup actionGroup;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/HaMaintenanceMode.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/HaMaintenanceMode.java
new file mode 100644
index 0000000..26eb917
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/HaMaintenanceMode.java
@@ -0,0 +1,30 @@
+package org.ovirt.engine.core.common.businessentities;
+
+import java.util.HashMap;
+
+public enum HaMaintenanceMode implements Identifiable {
+    GLOBAL(0),
+    LOCAL(1);
+
+    private static final HashMap<Integer, HaMaintenanceMode> mappings = new 
HashMap<Integer, HaMaintenanceMode>();
+    private int intValue;
+
+    static {
+        for (HaMaintenanceMode mode : values()) {
+            mappings.put(mode.getValue(), mode);
+        }
+    }
+
+    private HaMaintenanceMode(int value) {
+        intValue = value;
+    }
+
+    @Override
+    public int getValue() {
+        return intValue;
+    }
+
+    public static HaMaintenanceMode forValue(int value) {
+        return mappings.get(value);
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SetHaMaintenanceModeVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SetHaMaintenanceModeVDSCommandParameters.java
new file mode 100644
index 0000000..d4889be
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/SetHaMaintenanceModeVDSCommandParameters.java
@@ -0,0 +1,37 @@
+package org.ovirt.engine.core.common.vdscommands;
+
+import org.ovirt.engine.core.common.businessentities.HaMaintenanceMode;
+import org.ovirt.engine.core.common.businessentities.VDS;
+
+/**
+ * Parameters used to change Hosted Engine maintenance mode
+ */
+public class SetHaMaintenanceModeVDSCommandParameters extends 
VdsIdVDSCommandParametersBase {
+    private HaMaintenanceMode mode;
+    private boolean enabled;
+
+    public SetHaMaintenanceModeVDSCommandParameters(VDS vds, HaMaintenanceMode 
mode, boolean enabled) {
+        super(vds.getId());
+        this.mode = mode;
+        this.enabled = enabled;
+    }
+
+    public SetHaMaintenanceModeVDSCommandParameters() {
+    }
+
+    public HaMaintenanceMode getMode() {
+        return mode;
+    }
+
+    public void setMode(HaMaintenanceMode mode) {
+        this.mode = mode;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index 27b7ab0..0b05fb3 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -116,6 +116,7 @@
     ExtendImageSize("org.ovirt.engine.core.vdsbroker.irsbroker"),
     ExtendVmDiskSize("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     SetMOMPolicyParameters("org.ovirt.engine.core.vdsbroker.vdsbroker"),
+    SetHaMaintenanceMode("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     // Gluster VDS commands
     CreateGlusterVolume("org.ovirt.engine.core.vdsbroker.gluster"),
     SetGlusterVolumeOption("org.ovirt.engine.core.vdsbroker.gluster"),
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
index 8fa530d..8cf4c10 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
@@ -46,6 +46,8 @@
 
     StatusOnlyReturnForXmlRpc setMOMPolicyParameters(Map<String, Object> 
key_value_store);
 
+    StatusOnlyReturnForXmlRpc setHaMaintenanceMode(int mode, boolean enabled);
+
     StatusOnlyReturnForXmlRpc desktopLogin(String vmId, String domain, String 
user, String password);
 
     StatusOnlyReturnForXmlRpc desktopLogoff(String vmId, String force);
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetHaMaintenanceModeVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetHaMaintenanceModeVDSCommand.java
new file mode 100644
index 0000000..26ace4f
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetHaMaintenanceModeVDSCommand.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.vdsbroker.vdsbroker;
+
+import 
org.ovirt.engine.core.common.vdscommands.SetHaMaintenanceModeVDSCommandParameters;
+import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+/**
+ * Send variables that set Hosted Engine maintenance mode to VDSM
+ */
+public class SetHaMaintenanceModeVDSCommand extends 
VdsBrokerCommand<SetHaMaintenanceModeVDSCommandParameters> {
+
+    public 
SetHaMaintenanceModeVDSCommand(SetHaMaintenanceModeVDSCommandParameters 
parameters) {
+        super(parameters, 
DbFacade.getInstance().getVdsDao().get(parameters.getVdsId()));
+    }
+
+    @Override
+    protected void executeVdsBrokerCommand() {
+        // Hosted Engine maintenance flows were unified in version 3.4
+        if (getVds().getVdsGroupCompatibilityVersion().compareTo(Version.v3_4) 
>= 0) {
+            status = 
getBroker().setHaMaintenanceMode(getParameters().getMode().getValue(), 
getParameters().isEnabled());
+            proceedProxyReturnValue();
+        }
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
index 0cd2d0f..887a154 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
@@ -34,6 +34,8 @@
 
     public Map<String, Object> setMOMPolicyParameters(Map<String, Object> 
key_value);
 
+    public Map<String, Object> setHaMaintenanceMode(int mode, boolean enabled);
+
     public Map<String, Object> getAllVmStats();
 
     public Map<String, Object> migrate(Map<String, String> migrationInfo);
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
index bc4ad53..bb6aa6d 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
@@ -1360,6 +1360,17 @@
     }
 
     @Override
+    public StatusOnlyReturnForXmlRpc setHaMaintenanceMode(int mode, boolean 
enabled) {
+        try {
+            Map<String, Object> xmlRpcReturnValue = 
vdsServer.setHaMaintenanceMode(mode, enabled);
+            StatusOnlyReturnForXmlRpc wrapper = new 
StatusOnlyReturnForXmlRpc(xmlRpcReturnValue);
+            return wrapper;
+        } catch (UndeclaredThrowableException ute) {
+            throw new XmlRpcRunTimeException(ute);
+        }
+    }
+
+    @Override
     public GlusterTasksListReturnForXmlRpc glusterTasksList() {
         try {
             Map<String, Object> xmlRpcReturnValue = 
vdsServer.glusterTasksList();
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 258ac04..3b334ae 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -48,6 +48,7 @@
                <include 
name="common/businessentities/OpenStackImageProviderProperties.java" />
         <include name="common/businessentities/VmBalloonInfo.java" />
                <include name="common/businessentities/ArchitectureType.java" />
+        <include name="common/businessentities/HaMaintenanceMode.java" />
 
                <!-- Network business entities -->
                <include 
name="common/businessentities/network/VdsNetworkInterface.java" />
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
index 71f9604..afb00b3 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
@@ -21,6 +21,7 @@
 import org.ovirt.engine.core.common.action.MoveVmParameters;
 import org.ovirt.engine.core.common.action.RemoveVmParameters;
 import org.ovirt.engine.core.common.action.RunVmParams;
+import org.ovirt.engine.core.common.action.SetHaMaintenanceParameters;
 import org.ovirt.engine.core.common.action.ShutdownVmParameters;
 import org.ovirt.engine.core.common.action.StopVmParameters;
 import org.ovirt.engine.core.common.action.StopVmTypeEnum;
@@ -33,6 +34,7 @@
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
+import org.ovirt.engine.core.common.businessentities.HaMaintenanceMode;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.Tags;
@@ -292,6 +294,30 @@
         privateAssignTagsCommand = value;
     }
 
+    private UICommand privateEnableGlobalHaMaintenanceCommand;
+
+    public UICommand getEnableGlobalHaMaintenanceCommand()
+    {
+        return privateEnableGlobalHaMaintenanceCommand;
+    }
+
+    private void setEnableGlobalHaMaintenanceCommand(UICommand value)
+    {
+        privateEnableGlobalHaMaintenanceCommand = value;
+    }
+
+    private UICommand privateDisableGlobalHaMaintenanceCommand;
+
+    public UICommand getDisableGlobalHaMaintenanceCommand()
+    {
+        return privateDisableGlobalHaMaintenanceCommand;
+    }
+
+    private void setDisableGlobalHaMaintenanceCommand(UICommand value)
+    {
+        privateDisableGlobalHaMaintenanceCommand = value;
+    }
+
     UICommand editConsoleCommand;
 
     public void setEditConsoleCommand(UICommand editConsoleCommand) {
@@ -399,6 +425,8 @@
         setRetrieveIsoImagesCommand(new UICommand("RetrieveIsoImages", this)); 
//$NON-NLS-1$
         setChangeCdCommand(new UICommand("ChangeCD", this)); //$NON-NLS-1$
         setAssignTagsCommand(new UICommand("AssignTags", this)); //$NON-NLS-1$
+        setEnableGlobalHaMaintenanceCommand(new 
UICommand("EnableGlobalHaMaintenance", this)); //$NON-NLS-1$
+        setDisableGlobalHaMaintenanceCommand(new 
UICommand("DisableGlobalHaMaintenance", this)); //$NON-NLS-1$
 
         setIsoImages(new ObservableCollection<ChangeCDModel>());
         ChangeCDModel tempVar = new ChangeCDModel();
@@ -1808,6 +1836,20 @@
                 }, model);
     }
 
+    private void setGlobalHaMaintenance(boolean enabled)
+    {
+        VM vm = (VM) getSelectedItem();
+        if (vm == null) {
+            return;
+        }
+        if (!vm.isHostedEngine()) {
+            return;
+        }
+
+        SetHaMaintenanceParameters params = new 
SetHaMaintenanceParameters(vm.getId(), HaMaintenanceMode.GLOBAL, enabled);
+        Frontend.getInstance().runAction(VdcActionType.SetHaMaintenance, 
params, null, this);
+    }
+
     private void preSave()
     {
         final UnitVmModel model = (UnitVmModel) getWindow();
@@ -2258,6 +2300,11 @@
                 && VdcActionUtils.canExecute(items, VM.class, 
VdcActionType.ChangeDisk));
         getAssignTagsCommand().setIsExecutionAllowed(items.size() > 0);
 
+        
getEnableGlobalHaMaintenanceCommand().setIsExecutionAllowed(items.size() == 1
+                && isHaMaintenanceAllowed());
+        
getDisableGlobalHaMaintenanceCommand().setIsExecutionAllowed(items.size() == 1
+                && isHaMaintenanceAllowed());
+
         getGuideCommand().setIsExecutionAllowed(getGuideContext() != null
                 || (getSelectedItem() != null && getSelectedItems() != null && 
getSelectedItems().size() == 1));
 
@@ -2283,6 +2330,10 @@
         }
 
         return false;
+    }
+
+    private boolean isHaMaintenanceAllowed() {
+        return getSelectedItem() != null && ((VM) 
getSelectedItem()).isHostedEngine();
     }
 
     /**
@@ -2382,6 +2433,14 @@
         {
             changeCD();
         }
+        else if (command == getEnableGlobalHaMaintenanceCommand())
+        {
+            setGlobalHaMaintenance(true);
+        }
+        else if (command == getDisableGlobalHaMaintenanceCommand())
+        {
+            setGlobalHaMaintenance(false);
+        }
         else if (command == getAssignTagsCommand())
         {
             assignTags();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index 196437f..9d80abd 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -1316,6 +1316,9 @@
     @DefaultStringValue("Refresh Capabilities")
     String refreshHostCapabilities();
 
+    @DefaultStringValue("Host HA Maintenance")
+    String hostHaMaintenance();
+
     // host- general
     @DefaultStringValue("OS Version")
     String osVersionHostGeneral();
@@ -1599,6 +1602,12 @@
     @DefaultStringValue("Assign Tags")
     String assignTagsVm();
 
+    @DefaultStringValue("Enable Global HA Maintenance")
+    String enableGlobalHaMaintenanceVm();
+
+    @DefaultStringValue("Disable Global HA Maintenance")
+    String disableGlobalHaMaintenanceVm();
+
     @DefaultStringValue("Show Report")
     String showReportVm();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
index e0da652..0179210 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
@@ -287,6 +287,18 @@
                 return getMainModel().getAssignTagsCommand();
             }
         });
+        getTable().addActionButton(new 
WebAdminButtonDefinition<VM>(constants.enableGlobalHaMaintenanceVm(), 
CommandLocation.OnlyFromContext) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getMainModel().getEnableGlobalHaMaintenanceCommand();
+            }
+        });
+        getTable().addActionButton(new 
WebAdminButtonDefinition<VM>(constants.disableGlobalHaMaintenanceVm(), 
CommandLocation.OnlyFromContext) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getMainModel().getDisableGlobalHaMaintenanceCommand();
+            }
+        });
 
         if (ReportInit.getInstance().isReportsEnabled()) {
             List<ActionButtonDefinition<VM>> resourceSubActions =


-- 
To view, visit http://gerrit.ovirt.org/23266
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0f76f7ad63bcf6d7871c362b46cfa6e928eb9c74
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Greg Padgett <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to