Liron Aravot has uploaded a new change for review. Change subject: adding StorageDomain.removeVmData() ......................................................................
adding StorageDomain.removeVmData() Change-Id: Ic53b19a43850341ee488b50fbb339fdf68c1a048 Signed-off-by: lara...@redhat.com <lara...@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 <lara...@redhat.com> Gerrit-Reviewer: Jenkins CI RO Gerrit-Reviewer: Liron Aravot <lara...@redhat.com> Gerrit-Reviewer: gerrit-hooks <automat...@ovirt.org> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches