Change in vdsm[master]: adding StorageDomain.updateVmData()
laravot at redhat.com
laravot at redhat.com
Thu Feb 25 16:35:16 UTC 2016
Liron Aravot has uploaded a new change for review.
Change subject: adding StorageDomain.updateVmData()
......................................................................
adding StorageDomain.updateVmData()
Change-Id: Id79e7d6375e60216d1eb9a58e5a5c087db98625f
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, 79 insertions(+), 7 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/30/42930/5
diff --git a/client/vdsClient.py b/client/vdsClient.py
index c3628c5..d59ae7c 100755
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -709,6 +709,16 @@
return dom['status']['code'], dom['status']['message']
return 0, ''
+ def updateStorageDomainVmData(self, args):
+ sdUUID = args[0]
+ spUUID = args[1]
+ vmUUID = args[2]
+ vmData = args[3]
+ dom = self.s.updateStorageDomainVmData(sdUUID, spUUID, vmUUID, vmData)
+ if dom['status']['code']:
+ return dom['status']['code'], dom['status']['message']
+ return 0, ''
+
def forcedDetachStorageDomain(self, args):
sdUUID = args[0]
spUUID = args[1]
diff --git a/vdsm/API.py b/vdsm/API.py
index 3007d93..bc47e3f 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -1056,6 +1056,10 @@
return self._irs.getStorageDomainStoredVmsInfo(storagepoolID,
self._UUID, vmList)
+ def updateVMData(self, storagepoolID, vmID, vmData):
+ return self._irs.updateStorageDomainVmData(self._UUID, storagepoolID,
+ vmID, vmData)
+
def validate(self):
return self._irs.validateStorageDomain(self._UUID)
diff --git a/vdsm/rpc/BindingXMLRPC.py b/vdsm/rpc/BindingXMLRPC.py
index 5294e6a..039d564 100644
--- a/vdsm/rpc/BindingXMLRPC.py
+++ b/vdsm/rpc/BindingXMLRPC.py
@@ -636,6 +636,10 @@
domain = API.StorageDomain(sdUUID)
return domain.detachHsm(spUUID, force)
+ def domainUpdateVMData(self, sdUUID, spUUID, vmUUID, vmData):
+ domain = API.StorageDomain(sdUUID)
+ return domain.updateVMData(spUUID, vmUUID, vmData)
+
def domainDetachAnyStoragePoolHsm(self, sdUUID, hostID):
domain = API.StorageDomain(sdUUID)
return domain.detachAnyStoragePoolHsm(sdUUID, hostID)
@@ -1094,7 +1098,8 @@
(self.domainDetachAnyStoragePoolHsm,
'detachAnyStoragePoolHsm'),
(self.domainGetStoredVmsInfo, 'getStorageDomainStoredVmsInfo'),
- (self.domainUpgradeVersion, 'upgradeStorageDomainVersion'))
+ (self.domainUpgradeVersion, 'upgradeStorageDomainVersion'),
+ (self.domainUpdateVMData, 'updateStorageDomainVmData'))
def getIrsMethods(self):
return ((self.domainActivate, 'activateStorageDomain'),
diff --git a/vdsm/rpc/vdsmapi-schema.json b/vdsm/rpc/vdsmapi-schema.json
index 7d514e3..df11b53 100644
--- a/vdsm/rpc/vdsmapi-schema.json
+++ b/vdsm/rpc/vdsmapi-schema.json
@@ -5017,6 +5017,26 @@
'returns': 'OVFMap'}
##
+# @StorageDomain.updateVMData:
+#
+# Store virtual machine OVF file on a backup Storage Domain
+#
+# @storagepoolID: The UUID of the Storage Pool
+#
+# @storagedomainID: The backup Storage Domain id
+#
+# @vmID: The id of the VM
+#
+# @vmData: The VM definition in OVF format
+#
+# Since: 4.18.0
+##
+{'command': {'class': 'StorageDomain', 'name': 'updateVMData'},
+ 'data': {'storagedomainID': 'UUID', 'storagepoolID': 'UUID',
+ 'vmID': 'UUID', 'vmData' : 'str'}}
+
+
+##
# @StorageDomainCreateArgumentsBlock:
#
# Creation argument for Block-based Storage Domains.
diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index b1687da..1c76208 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -1418,6 +1418,15 @@
pool = self.getPool(spUUID)
pool.setVolumeLegality(sdUUID, imgUUID, volUUID, legality)
+ def _prepareUpdateVM(self, spUUID, sdUUID):
+ vars.task.getSharedLock(STORAGE, spUUID)
+ pool = self.getPool(spUUID)
+ if not sdUUID or sdUUID == sd.BLANK_UUID:
+ sdUUID = pool.masterDomain.sdUUID
+
+ vars.task.getExclusiveLock(STORAGE, "vms_" + sdUUID)
+ return pool
+
@public
def updateVM(self, spUUID, vmList, sdUUID=None, options=None):
"""
@@ -1438,15 +1447,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.getExclusiveLock(STORAGE, "vms_" + sdUUID)
+ pool = self._prepareUpdateVM(spUUID, sdUUID)
pool.updateVM(vmList=vmList, sdUUID=sdUUID)
@public
+ def updateStorageDomainVmData(self, sdUUID, spUUID, vmUUID, vmData):
+ """
+ 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._prepareUpdateVM(spUUID, sdUUID)
+ pool.updateVMHSM(sdUUID, vmUUID, vmData)
+
+ @public
def removeVM(self, spUUID, vmUUID, sdUUID=None, options=None):
"""
Removes a VM list from a storage pool or from a Backup domain.
diff --git a/vdsm/storage/sp.py b/vdsm/storage/sp.py
index aaba2c0..d2ebec8 100644
--- a/vdsm/storage/sp.py
+++ b/vdsm/storage/sp.py
@@ -1346,6 +1346,14 @@
self.__rebuild(msdUUID=msdUUID, masterVersion=masterVersion)
def updateVM(self, vmList, sdUUID):
+ self.updateVM(vmList, sdUUID)
+
+ @unsecured
+ def updateVMHSM(self, sdUUID, vmUUID, vmData):
+ self._updateVM([{'vm': vmUUID, 'ovf': vmData}], sdUUID)
+
+ @unsecured
+ def _updateVM(self, vmList, sdUUID):
"""
Update VMs.
'vmList' - [{'vm':vmUUID,'ovf','imglist':'imgUUID1,imgUUID2,...'},...]
--
To view, visit https://gerrit.ovirt.org/42930
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id79e7d6375e60216d1eb9a58e5a5c087db98625f
Gerrit-PatchSet: 5
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