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