Change in vdsm[master]: adding StorageDomain.removeVmData()
laravot at redhat.com
laravot at redhat.com
Thu Feb 25 16:35:18 UTC 2016
Liron Aravot has uploaded a new change for review.
Change subject: adding StorageDomain.removeVmData()
......................................................................
adding StorageDomain.removeVmData()
Change-Id: Ic53b19a43850341ee488b50fbb339fdf68c1a048
Signed-off-by: laravot at redhat.com <laravot at redhat.com>
---
M client/vdsClient.py
M vdsm/API.py
M vdsm/rpc/BindingXMLRPC.py
M vdsm/rpc/vdsmapi-schema.json
M vdsm/storage/hsm.py
M vdsm/storage/sp.py
6 files changed, 106 insertions(+), 9 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/54/43154/4
diff --git a/client/vdsClient.py b/client/vdsClient.py
index 6169be7..e2123e1 100755
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -978,6 +978,15 @@
return res['status']['code'], res['status']['message']
return 0, ''
+ def removeStorageDomainVmData(self, args):
+ spUUID = args[0]
+ vmUUID = args[1]
+ sdUUID = args[2]
+ res = self.s.removeStorageDomainVmData(sdUUID, spUUID, vmUUID)
+ if res['status']['code']:
+ return res['status']['code'], res['status']['message']
+ return 0, ''
+
def _parseDomainsMap(self, domMapString):
"""
Parse domains map string: "sdUUID1=status1,sdUUID2=status2,..."
diff --git a/vdsm/API.py b/vdsm/API.py
index 3703d69..ca37aff 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -1063,6 +1063,10 @@
return self._irs.updateStorageDomainVmData(self._UUID, storagepoolID,
vmID, vmData)
+ def removeVMData(self, storagepoolID, vmID):
+ return self._irs.removeStorageDomainVmData(self._UUID, storagepoolID,
+ vmID)
+
def validate(self):
return self._irs.validateStorageDomain(self._UUID)
diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py
index c6fb25d..9ee5cdd 100644
--- a/vdsm/rpc/BindingXMLRPC.py
+++ b/vdsm/rpc/BindingXMLRPC.py
@@ -644,6 +644,10 @@
domain = API.StorageDomain(sdUUID)
return domain.updateVMData(spUUID, vmUUID, vmData)
+ def domainRemoveVMData(self, sdUUID, spUUID, vmUUID):
+ domain = API.StorageDomain(sdUUID)
+ return domain.removeVMData(spUUID, vmUUID)
+
def domainDetachAnyStoragePoolHsm(self, sdUUID, hostID):
domain = API.StorageDomain(sdUUID)
return domain.detachAnyStoragePoolHsm(sdUUID, hostID)
@@ -1104,7 +1108,8 @@
(self.domainGetStoredVmsInfo, 'getStorageDomainStoredVmsInfo'),
(self.domainUpgradeVersion, 'upgradeStorageDomainVersion'),
(self.domainUpdateVMData, 'updateStorageDomainVmData'),
- (self.domainActivateHsm, 'activateStorageDomainHsm'))
+ (self.domainActivateHsm, 'activateStorageDomainHsm'),
+ (self.domainRemoveVMData, 'removeStorageDomainVmData'))
def getIrsMethods(self):
return ((self.domainActivate, 'activateStorageDomain'),
diff --git a/vdsm/rpc/vdsmapi-schema.json b/vdsm/rpc/vdsmapi-schema.json
index d65ae22..afbd960 100644
--- a/vdsm/rpc/vdsmapi-schema.json
+++ b/vdsm/rpc/vdsmapi-schema.json
@@ -5051,6 +5051,23 @@
'data': {'storagedomainID': 'UUID', 'storagepoolID': 'UUID',
'vmID': 'UUID', 'vmData' : 'str'}}
+##
+# @StorageDomain.removeVMData:
+#
+# Remove a previously saved virtual machine definitio from a backup domain.
+#
+# @storagedomainID: The backup Storage Domain id
+#
+# @storagepoolID: The UUID of the Storage Pool
+#
+# @vmUUID: The id of the VM
+#
+# Since: 4.18.0
+##
+{'command': {'class': 'StorageDomain', 'name': 'removeVMData'},
+ 'data': {'storagedomainID': 'UUID', 'storagepoolID': 'UUID',
+ 'vmUUID': 'UUID'}}
+
##
# @StorageDomainCreateArgumentsBlock:
@@ -6192,6 +6209,24 @@
'data': {'storagepoolID': 'UUID', 'vmUUID': 'UUID',
'*storagedomainID': 'UUID'}}
+
+##
+# @StoragePool.removeVM:
+#
+# Remove a previously saved virtual machine definition.
+#
+# @storagepoolID: The UUID of the Storage Pool
+#
+# @vmUUID: Remove the saved definition of the VM with this UUID
+#
+# @storagedomainID: #optional The Storage Domain where the VM is stored
+#
+# Since: 4.10.0
+##
+{'command': {'class': 'StoragePool', 'name': 'removeVM'},
+ 'data': {'storagepoolID': 'UUID', 'vmUUID': 'UUID',
+ '*storagedomainID': 'UUID'}}
+
## Category: @Task ############################################################
##
# @Task:
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index db82566..dda8895 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -1490,8 +1490,18 @@
pool = self._prepareUpdateVM(spUUID, sdUUID)
pool.updateVMHSM(sdUUID, vmUUID, vmData)
+ def _prepareRemoveVm(self, spUUID, sdUUID, vmUUID):
+ vars.task.getSharedLock(STORAGE, spUUID)
+ pool = self.getPool(spUUID)
+ if not sdUUID or sdUUID == sd.BLANK_UUID:
+ sdUUID = pool.masterDomain.sdUUID
+
+ vars.task.getSharedLock(STORAGE, "vms_" + sdUUID)
+ vars.task.getExclusiveLock(STORAGE, "vms_%s_%s" % (vmUUID, sdUUID))
+ return pool
+
@public
- def removeVM(self, spUUID, vmUUID, sdUUID=None, options=None):
+ def removeVM(self, spUUID, sdUUID, vmUUID):
"""
Removes a VM list from a storage pool or from a Backup domain.
@@ -1505,16 +1515,31 @@
:type sdUUID: UUID
:param options: ?
"""
- vars.task.getSharedLock(STORAGE, spUUID)
- pool = self.getPool(spUUID)
- if not sdUUID or sdUUID == sd.BLANK_UUID:
- sdUUID = pool.masterDomain.sdUUID
-
- vars.task.getSharedLock(STORAGE, "vms_" + sdUUID)
- vars.task.getExclusiveLock(STORAGE, "vms_%s_%s" % (vmUUID, sdUUID))
+ pool = self._prepareRemoveVm(spUUID, sdUUID, vmUUID)
pool.removeVM(vmUUID=vmUUID, sdUUID=sdUUID)
@public
+ def removeStorageDomainVmData(self, sdUUID, spUUID, vmUUID):
+ """
+ Updates a VM in a Backup domain.
+ Creates the VM data file if it does not exist.
+
+ :param spUUID: The UUID of the storage pool that the target domain
+ is attached to.
+ :type spUUID: UUID
+ :param sdUUID: The UUID of the backup domain you want to update the vm
+ data in.
+ :type sdUUID: UUID
+ :param vmUUID: The UUID of the vm whose data is being updated.
+ :type vm: UUID
+ :param vmData: The updated vm data.
+ :type vmData: str
+ """
+ self.validateBackupDom(sdUUID)
+ pool = self._prepareRemoveVm(spUUID, sdUUID, vmUUID)
+ pool.removeVMHsm(sdUUID, vmUUID)
+
+ @public
def getVmsList(self, spUUID, sdUUID=None, options=None):
"""
Gets a list of VMs from the pool.
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index f6e03f8..76640b1 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1447,6 +1447,25 @@
'vmUUID' - Virtual machine UUID
"""
self.validatePoolSD(sdUUID)
+ self._removeVM(vmUUID, sdUUID)
+
+ @unsecured
+ def removeVMHsm(self, sdUUID, vmUUID):
+ """
+ Remove VM.
+ 'vmUUID' - Virtual machine UUID
+ 'sdUUID' - The storage domain id
+ """
+ self.validateNoSpm()
+ self.validatePoolSD(sdUUID)
+ self._removeVM(vmUUID, sdUUID)
+
+ @unsecured
+ def _removeVM(self, vmUUID, sdUUID):
+ """
+ Remove VM.
+ 'vmUUID' - Virtual machine UUID
+ """
self.log.info("spUUID=%s vmUUID=%s sdUUID=%s", self.spUUID, vmUUID,
sdUUID)
vms = self._getVMsPath(sdUUID)
--
To view, visit https://gerrit.ovirt.org/43154
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic53b19a43850341ee488b50fbb339fdf68c1a048
Gerrit-PatchSet: 4
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Liron Aravot <laravot at redhat.com>
Gerrit-Reviewer: Jenkins CI RO
Gerrit-Reviewer: Liron Aravot <laravot at redhat.com>
Gerrit-Reviewer: gerrit-hooks <automation at ovirt.org>
More information about the vdsm-patches
mailing list