Sahina Bose has uploaded a new change for review. Change subject: gluster:Remove gluster hook from servers ......................................................................
gluster:Remove gluster hook from servers This patch adds the BLL command to remove a gluster hook from all servers in the cluster. The hook will also be removed from the engine database. Change-Id: Ic38f9edbc45a8e92b65a4a61c99b647cadb8feb3 Signed-off-by: Sahina Bose <sab...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandTest.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties M backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java M frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties 11 files changed, 313 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/15153/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommand.java new file mode 100644 index 0000000..b10a819 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommand.java @@ -0,0 +1,142 @@ +package org.ovirt.engine.core.bll.gluster; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.SystemUtils; +import org.ovirt.engine.core.bll.LockIdNameAttribute; +import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; +import org.ovirt.engine.core.bll.interfaces.BackendInternal; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.gluster.GlusterHookManageParameters; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.constants.gluster.GlusterConstants; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.common.vdscommands.gluster.GlusterHookVDSParameters; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; + +/** + * BLL command to remove gluster hook from all servers in the cluster. + */ +@NonTransactiveCommandAttribute +@LockIdNameAttribute(isWait = true) +public class RemoveGlusterHookCommand extends GlusterHookCommandBase<GlusterHookManageParameters> { + + protected List<String> errors = new ArrayList<String>(); + + public RemoveGlusterHookCommand(GlusterHookManageParameters params) { + super(params); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REMOVE); + addCanDoActionMessage(VdcBllMessages.VAR__TYPE__GLUSTER_HOOK); + } + + @Override + protected BackendInternal getBackend() { + return super.getBackend(); + } + + private List<VDS> getServersInCluster() { + return getVdsDAO().getAllForVdsGroup(getGlusterHook().getClusterId()); + } + + @Override + protected boolean canDoAction() { + if (!super.canDoAction()) { + return false; + } + + for (VDS vds: getServersInCluster()) { + if (vds.getStatus() != VDSStatus.Up) { + setVdsName(vds.getName()); + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_SERVER_STATUS_NOT_UP); + return false; + } + } + + return true; + } + + @Override + protected void executeCommand() { + + entity = getGlusterHook(); + addCustomValue(GlusterConstants.HOOK_NAME, entity.getName()); + + List<Callable<Pair<VDS, VDSReturnValue>>> taskList = new ArrayList<Callable<Pair<VDS, VDSReturnValue>>>(); + for (final VDS server : getServersInCluster()) { + taskList.add(new Callable<Pair<VDS, VDSReturnValue>>() { + @Override + public Pair<VDS, VDSReturnValue> call() throws Exception { + VDSReturnValue returnValue; + returnValue = + runVdsCommand( + VDSCommandType.RemoveGlusterHook, + new GlusterHookVDSParameters(server.getId(), + entity.getGlusterCommand(), + entity.getStage(), + entity.getName() + )); + return new Pair<VDS, VDSReturnValue>(server, returnValue); + + } + }); + } + + setSucceeded(true); + if (!taskList.isEmpty()) { + List<Pair<VDS, VDSReturnValue>> pairResults = ThreadPoolUtil.invokeAll(taskList); + for (Pair<VDS, VDSReturnValue> pairResult : pairResults) { + + VDSReturnValue retValue = pairResult.getSecond(); + if (!retValue.getSucceeded() ) { + errors.add(retValue.getVdsError().getMessage()); + } + } + } else { + setSucceeded(false); + } + + if (errors.size() > 0) { + setSucceeded(false); + errorType = AuditLogType.GLUSTER_HOOK_REMOVE_FAILED; + handleVdsErrors(getAuditLogTypeValue(), errors); + addCustomValue(GlusterConstants.FAILURE_MESSAGE , StringUtils.join(errors, SystemUtils.LINE_SEPARATOR)); + } + + if (getSucceeded()) { + entity.removeMissingConflict(); + getGlusterHooksDao().remove(entity.getId()); + } + + } + + + @Override + public Map<String, String> getJobMessageProperties() { + if (jobProperties == null) { + jobProperties = super.getJobMessageProperties(); + if (getGlusterHook() != null) { + jobProperties.put(GlusterConstants.HOOK_NAME, getGlusterHook().getName()); + } + } + + return jobProperties; + } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.GLUSTER_HOOK_REMOVED : errorType; + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandTest.java index 1930d77..fcb5ef1 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterHookCommandTest.java @@ -33,7 +33,7 @@ public class GlusterHookCommandTest<T extends GlusterHookCommandBase> { - private static final Guid[] GUIDS = {Guid.createGuidFromString("afce7a39-8e8c-4819-ba9c-796d316592e6"), + protected static final Guid[] GUIDS = {Guid.createGuidFromString("afce7a39-8e8c-4819-ba9c-796d316592e6"), Guid.createGuidFromString("afce7a39-8e8c-4819-ba9c-796d316592e7"), Guid.createGuidFromString("23f6d691-5dfb-472b-86dc-9e1d2d3c18f3"), Guid.createGuidFromString("2001751e-549b-4e7a-aff6-32d36856c125")}; diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommandTest.java new file mode 100644 index 0000000..9e552f8 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RemoveGlusterHookCommandTest.java @@ -0,0 +1,150 @@ +package org.ovirt.engine.core.bll.gluster; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.argThat; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatcher; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.gluster.GlusterHookManageParameters; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookEntity; +import org.ovirt.engine.core.common.errors.VDSError; +import org.ovirt.engine.core.common.errors.VdcBllErrors; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSParametersBase; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.common.vdscommands.gluster.GlusterHookVDSParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.dao.VdsDAO; + + +@RunWith(MockitoJUnitRunner.class) +public class RemoveGlusterHookCommandTest extends GlusterHookCommandTest<RemoveGlusterHookCommand> { + /** + * The command under test. + */ + RemoveGlusterHookCommand cmd; + + @Mock + private VdsDAO vdsDao; + + private void setUpMocksForRemove() { + setUpMocksForRemove(true); + } + + private void setUpMocksForRemove(boolean hookFound) { + setUpMocksForRemove(hookFound, getHookEntity(), VDSStatus.Up); + } + + private void setUpMocksForRemove(boolean hookFound, GlusterHookEntity hook, VDSStatus status) { + setupMocks(cmd, hookFound, hook); + doReturn(vdsDao).when(cmd).getVdsDAO(); + when(vdsDao.getAllForVdsGroup(any(Guid.class))).thenReturn(getServers(status)); + } + + private List<VDS> getServers(VDSStatus status) { + List<VDS> servers = new ArrayList<VDS>(); + servers.add(getServer(GUIDS[0], "gfs1", CLUSTER_ID, status)); + servers.add(getServer(GUIDS[1], "gfs2", CLUSTER_ID, status)); + servers.add(getServer(GUIDS[2], "gfs3", CLUSTER_ID, status)); + servers.add(getServer(GUIDS[3], "gfs4", CLUSTER_ID, status)); + return servers; + } + + private void mockBackend(boolean succeeded, VdcBllErrors errorCode) { + when(cmd.getBackend()).thenReturn(backend); + when(backend.getResourceManager()).thenReturn(vdsBrokerFrontend); + + VDSReturnValue vdsReturnValue = new VDSReturnValue(); + vdsReturnValue.setSucceeded(succeeded); + if (!succeeded) { + vdsReturnValue.setVdsError(new VDSError(errorCode, "")); + } + when(vdsBrokerFrontend.RunVdsCommand(eq(VDSCommandType.RemoveGlusterHook), argThat(anyHookVDS()))).thenReturn(vdsReturnValue); + } + + private ArgumentMatcher<VDSParametersBase> anyHookVDS() { + return new ArgumentMatcher<VDSParametersBase>() { + + @Override + public boolean matches(Object argument) { + if (!(argument instanceof GlusterHookVDSParameters)) { + return false; + } + return true; + } + }; + } + + @Test + public void executeCommand() { + cmd = spy(new RemoveGlusterHookCommand(new GlusterHookManageParameters(HOOK_ID))); + setUpMocksForRemove(); + mockBackend(true, null); + cmd.executeCommand(); + verify(hooksDao, times(1)).remove(any(Guid.class)); + assertEquals(cmd.getAuditLogTypeValue(), AuditLogType.GLUSTER_HOOK_REMOVED); + } + + + @Test + public void executeCommandWhenFailed() { + cmd = spy(new RemoveGlusterHookCommand(new GlusterHookManageParameters(HOOK_ID))); + setUpMocksForRemove(); + mockBackend(false,VdcBllErrors.GlusterHookRemoveFailed); + cmd.executeCommand(); + verify(hooksDao, never()).remove(any(Guid.class)); + assertEquals(cmd.getAuditLogTypeValue(), AuditLogType.GLUSTER_HOOK_REMOVE_FAILED); + } + + @Test + public void canDoActionSucceeds() { + cmd = spy(new RemoveGlusterHookCommand(new GlusterHookManageParameters(HOOK_ID))); + setUpMocksForRemove(); + assertTrue(cmd.canDoAction()); + } + + @Test + public void canDoActionFailsOnNullHookId() { + cmd = spy(new RemoveGlusterHookCommand(new GlusterHookManageParameters(null))); + setUpMocksForRemove(); + assertFalse(cmd.canDoAction()); + assertTrue(cmd.getReturnValue().getCanDoActionMessages().contains(VdcBllMessages.ACTION_TYPE_FAILED_GLUSTER_HOOK_ID_IS_REQUIRED.toString())); + } + + @Test + public void canDoActionFailsOnNoHook() { + cmd = spy(new RemoveGlusterHookCommand(new GlusterHookManageParameters(HOOK_ID))); + setUpMocksForRemove(false); + assertFalse(cmd.canDoAction()); + assertTrue(cmd.getReturnValue().getCanDoActionMessages().contains(VdcBllMessages.ACTION_TYPE_FAILED_GLUSTER_HOOK_DOES_NOT_EXIST.toString())); + } + + @Test + public void canDoActionFailsOnServerNotUp() { + cmd = spy(new RemoveGlusterHookCommand(new GlusterHookManageParameters(HOOK_ID))); + setUpMocksForRemove(true, getHookEntity(), VDSStatus.Down); + assertFalse(cmd.canDoAction()); + assertTrue(cmd.getReturnValue().getCanDoActionMessages().contains(VdcBllMessages.ACTION_TYPE_FAILED_SERVER_STATUS_NOT_UP.toString())); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index dca8cf8..f703017 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -260,6 +260,8 @@ GLUSTER_HOOK_UPDATE_FAILED(4060), GLUSTER_HOOK_ADDED(4061), GLUSTER_HOOK_ADD_FAILED(4062), + GLUSTER_HOOK_REMOVED(4063), + GLUSTER_HOOK_REMOVE_FAILED(4064), USER_VDS_RESTART(41), USER_FAILED_VDS_RESTART(107), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java index 52e5f17..a51b868 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java @@ -87,6 +87,8 @@ AddEventNotificationEntry(EventNotificationEntity.GlusterHook, AuditLogType.GLUSTER_HOOK_DETECTED_DELETE); AddEventNotificationEntry(EventNotificationEntity.GlusterHook, AuditLogType.GLUSTER_HOOK_ADDED); AddEventNotificationEntry(EventNotificationEntity.GlusterHook, AuditLogType.GLUSTER_HOOK_ADD_FAILED); + AddEventNotificationEntry(EventNotificationEntity.GlusterHook, AuditLogType.GLUSTER_HOOK_REMOVED); + AddEventNotificationEntry(EventNotificationEntity.GlusterHook, AuditLogType.GLUSTER_HOOK_REMOVE_FAILED); // DWH AddEventNotificationEntry(EventNotificationEntity.DWH, AuditLogType.DWH_STOPPED); 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 44a3b0f..f7c2990 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 @@ -237,6 +237,7 @@ DisableGlusterHook(1415, ActionGroup.MANIPULATE_GLUSTER_HOOK, QuotaDependency.NONE), UpdateGlusterHook(1416,ActionGroup.MANIPULATE_GLUSTER_HOOK, QuotaDependency.NONE), AddGlusterHook(1417,ActionGroup.MANIPULATE_GLUSTER_HOOK,QuotaDependency.NONE), + RemoveGlusterHook(1418,ActionGroup.MANIPULATE_GLUSTER_HOOK,QuotaDependency.NONE), // External events AddExternalEvent(1500, ActionGroup.INJECT_EXTERNAL_EVENTS, QuotaDependency.NONE), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java index 02ebeb8..285b023 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java @@ -131,6 +131,8 @@ severities.put(AuditLogType.GLUSTER_HOOK_UPDATE_FAILED, AuditLogSeverity.ERROR); severities.put(AuditLogType.GLUSTER_HOOK_ADDED, AuditLogSeverity.NORMAL); severities.put(AuditLogType.GLUSTER_HOOK_ADD_FAILED, AuditLogSeverity.ERROR); + severities.put(AuditLogType.GLUSTER_HOOK_REMOVED, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.GLUSTER_HOOK_REMOVE_FAILED, AuditLogSeverity.ERROR); } private static void initDefaultSeverities() { diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index 5425708..9c70a7f 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -619,4 +619,6 @@ GLUSTER_HOOK_UPDATED=Gluster Hook ${GlusterHookName} updated on conflicting servers. GLUSTER_HOOK_UPDATE_FAILED=Failed to update Gluster Hook ${GlusterHookName} on conflicting servers. ${FailureMessage} GLUSTER_HOOK_ADDED=Gluster Hook ${GlusterHookName} added on conflicting servers. -GLUSTER_HOOK_ADD_FAILED=Failed to add Gluster Hook ${GlusterHookName} on conflicting servers. ${FailureMessage} \ No newline at end of file +GLUSTER_HOOK_ADD_FAILED=Failed to add Gluster Hook ${GlusterHookName} on conflicting servers. ${FailureMessage} +GLUSTER_HOOK_REMOVED=Gluster Hook ${GlusterHookName} removed from all servers in cluster ${VdsGroupName}. +GLUSTER_HOOK_REMOVE_FAILED=Failed to remove Gluster Hook ${GlusterHookName} from cluster ${VdsGroupName}. ${FailureMessage} \ No newline at end of file diff --git a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties index bb87072..a760995 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties @@ -96,6 +96,7 @@ job.DisableGlusterHook=Disabling Gluster Hook ${GlusterHookName} job.UpdateGlusterHook=Updating Gluster Hook ${GlusterHookName} on conflicting servers in Cluster ${Cluster} job.AddGlusterHook=Adding Gluster Hook ${GlusterHookName} on conflicting servers in Cluster ${Cluster} +job.RemoveGlusterHook=Removing Gluster Hook ${GlusterHookName} from all servers in Cluster ${Cluster} # Step types step.VALIDATING=Validating diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java index 1e463e9..1249115 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java @@ -282,6 +282,10 @@ String AuditLogType___GLUSTER_HOOK_ADD_FAILED(); + String AuditLogType___GLUSTER_HOOK_REMOVED(); + + String AuditLogType___GLUSTER_HOOK_REMOVE_FAILED(); + String VdcActionType___ActivateVds(); String VdcActionType___RecoveryStoragePool(); @@ -593,6 +597,8 @@ String VdcActionType___AddGlusterHook(); + String VdcActionType___RemoveGlusterHook(); + String VdcActionType___ConnectStorageToVds(); String VdcObjectType___AdElements(); diff --git a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties index 405b0f2..858eaf1 100644 --- a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties +++ b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties @@ -137,6 +137,8 @@ AuditLogType___GLUSTER_HOOK_UPDATE_FAILED=Failed to update Gluster Hook on conflicting servers AuditLogType___GLUSTER_HOOK_ADDED=Added GLuster Hook AuditLogType___GLUSTER_HOOK_ADD_FAILED=Failed to add Gluster Hook on conflicting servers +AuditLogType___GLUSTER_HOOK_REMOVED=Removed GLuster Hook +AuditLogType___GLUSTER_HOOK_REMOVE_FAILED=Failed to remove Gluster Hook from cluster VdcActionType___ActivateVds=Activate Host @@ -268,6 +270,7 @@ VdcActionType___DisableGlusterHook=Disable Gluster Hook VdcActionType___UpdateGlusterHook=Update Gluster Hook VdcActionType___AddGlusterHook=Add Gluster Hook +VdcActionType___RemoveGlusterHook=Remove Gluster Hook VdcActionType___ActivateStorageDomain=Activate Storage Domain VdcActionType___FenceVdsManualy=Fence Host Manually VdcActionType___AddEmptyStoragePool=New Data Center -- To view, visit http://gerrit.ovirt.org/15153 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic38f9edbc45a8e92b65a4a61c99b647cadb8feb3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sahina Bose <sab...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches