diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py b/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py index 1344c44fe9d..09d2b15f5b8 100755 --- a/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py +++ b/ovm/scripts/vm/hypervisor/ovm/OvmFaultConstants.py @@ -41,6 +41,7 @@ errCode = { "OvmStoragePool.createTemplateFromVolume":OvmStoragePoolErrCodeStub+5, "OvmStoragePool._umount":OvmStoragePoolErrCodeStub+6, "OvmStoragePool.copyVolume":OvmStoragePoolErrCodeStub+7, + "OvmStoragePool.delete":OvmStoragePoolErrCodeStub+8, "OvmNetwork.createBridge":OvmNetworkErrCodeStub+1, "OvmNetwork.deleteBridge":OvmNetworkErrCodeStub+2, diff --git a/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py b/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py index 658f7c5400f..9f630ada5e3 100755 --- a/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py +++ b/ovm/scripts/vm/hypervisor/ovm/OvmStoragePoolModule.py @@ -379,6 +379,19 @@ if this doesn't resolve the problem, please check oracle manual to see how to of logger.error(OvmStoragePool.createTemplateFromVolume, errmsg) raise XmlRpcFault(toErrCode(OvmStoragePool, OvmStoragePool.createTemplateFromVolume), errmsg) + @staticmethod + def delete(uuid): + try: + sr = OvmStoragePool()._getSrByNameLable(uuid) + primaryStoragePath = sr.mountpoint + OvmStoragePool()._umount(primaryStoragePath) + rs = SUCC() + return rs + except Exception, e: + errmsg = fmt_err_msg(e) + logger.error(OvmStoragePool.delete, errmsg) + raise XmlRpcFault(toErrCode(OvmStoragePool, OvmStoragePool.delete), errmsg) + @staticmethod def copyVolume(secStorageMountPath, volumeFolderOnSecStorage, volumePath, storagePoolUuid, toSec): def copyToSecStorage(secMountPoint, volumeFolderOnSecStorage, volumePath): diff --git a/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java index 95120aa09a4..d2a05646efc 100755 --- a/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java +++ b/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java @@ -28,6 +28,7 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; import com.cloud.agent.api.CreateStoragePoolCommand; import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; +import com.cloud.agent.api.DeleteStoragePoolCommand; import com.cloud.agent.api.FenceAnswer; import com.cloud.agent.api.FenceCommand; import com.cloud.agent.api.GetHostStatsAnswer; @@ -1215,6 +1216,16 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { } } + protected Answer execute(DeleteStoragePoolCommand cmd) { + try { + OvmStoragePool.delete(_conn, cmd.getPool().getUuid()); + } catch (Exception e) { + s_logger.debug("Delete storage pool on host " + _ip + " failed, however, we leave to user for cleanup and tell managment server it succeeded", e); + } + + return new Answer(cmd); + } + @Override public Answer executeRequest(Command cmd) { Class clazz = cmd.getClass(); @@ -1270,7 +1281,9 @@ public class OvmResourceBase implements ServerResource, HypervisorResource { return execute((CreatePrivateTemplateFromVolumeCommand)cmd); } else if (clazz == CopyVolumeCommand.class) { return execute((CopyVolumeCommand)cmd); - }else { + } else if (clazz == DeleteStoragePoolCommand.class) { + return execute((DeleteStoragePoolCommand)cmd); + } else { return Answer.createUnsupportedCommandAnswer(cmd); } } diff --git a/ovm/src/com/cloud/ovm/object/OvmStoragePool.java b/ovm/src/com/cloud/ovm/object/OvmStoragePool.java index a9af7520b56..512d2fd8af5 100755 --- a/ovm/src/com/cloud/ovm/object/OvmStoragePool.java +++ b/ovm/src/com/cloud/ovm/object/OvmStoragePool.java @@ -81,4 +81,9 @@ public class OvmStoragePool extends OvmObject { Map info = Coder.mapFromJson(res); return (String) info.get("installPath"); } + + public static void delete(Connection c, String uuid) throws XmlRpcException { + Object[] params = {uuid}; + c.call("OvmStoragePool.delete", params); + } }