diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index 5e536df7cdf..c6307bfac6e 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -79,6 +79,7 @@
+
diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java b/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
new file mode 100755
index 00000000000..89a3f7cdd13
--- /dev/null
+++ b/ovm/src/com/cloud/ovm/hypervisor/OvmFencer.java
@@ -0,0 +1,109 @@
+package com.cloud.ovm.hypervisor;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.FenceAnswer;
+import com.cloud.agent.api.FenceCommand;
+import com.cloud.exception.AgentUnavailableException;
+import com.cloud.exception.OperationTimedoutException;
+import com.cloud.ha.FenceBuilder;
+import com.cloud.host.HostVO;
+import com.cloud.host.Status;
+import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.utils.component.Inject;
+import com.cloud.vm.VMInstanceVO;
+
+@Local(value=FenceBuilder.class)
+public class OvmFencer implements FenceBuilder {
+ private static final Logger s_logger = Logger.getLogger(OvmFencer.class);
+ String _name;
+ @Inject HostDao _hostDao;
+ @Inject AgentManager _agentMgr;
+
+ @Override
+ public boolean configure(String name, Map params) throws ConfigurationException {
+ _name = name;
+ return true;
+ }
+
+ @Override
+ public String getName() {
+ // TODO Auto-generated method stub
+ return _name;
+ }
+
+ @Override
+ public boolean start() {
+ // TODO Auto-generated method stub
+ return true;
+ }
+
+ @Override
+ public boolean stop() {
+ // TODO Auto-generated method stub
+ return true;
+ }
+
+ public OvmFencer() {
+ super();
+ }
+
+ @Override
+ public Boolean fenceOff(VMInstanceVO vm, HostVO host) {
+ if (host.getHypervisorType() != HypervisorType.Ovm) {
+ s_logger.debug("Don't know how to fence non Ovm hosts " + host.getHypervisorType());
+ return null;
+ }
+
+ List hosts = _hostDao.listByCluster(host.getClusterId());
+ FenceCommand fence = new FenceCommand(vm, host);
+
+ for (HostVO h : hosts) {
+ if (h.getHypervisorType() != HypervisorType.Ovm) {
+ continue;
+ }
+
+ if( h.getStatus() != Status.Up ) {
+ continue;
+ }
+
+ if( h.getId() == host.getId() ) {
+ continue;
+ }
+
+ FenceAnswer answer;
+ try {
+ answer = (FenceAnswer)_agentMgr.send(h.getId(), fence);
+ } catch (AgentUnavailableException e) {
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+ }
+ continue;
+ } catch (OperationTimedoutException e) {
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable");
+ }
+ continue;
+ }
+
+ if (answer != null && answer.getResult()) {
+ return true;
+ }
+ }
+
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Unable to fence off " + vm.toString() + " on " + host.toString());
+ }
+
+ return false;
+ }
+
+}
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 81bbbf00f0f..9ecc71a95ea 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -3210,7 +3210,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
}
throw new InvalidParameterValueException("VM is not Running, unable to migrate the vm " + vm);
}
- if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM)) {
+ if (!vm.getHypervisorType().equals(HypervisorType.XenServer) && !vm.getHypervisorType().equals(HypervisorType.VMware) && !vm.getHypervisorType().equals(HypervisorType.KVM) && !vm.getHypervisorType().equals(HypervisorType.Ovm)) {
if (s_logger.isDebugEnabled()) {
s_logger.debug(vm + " is not XenServer/VMware/KVM, cannot migrate this VM.");
}