[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-3.0.4-testing] Persist all the Xen-API data values for VMs.



# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Date 1166273363 0
# Node ID 63e72c3254da9023ad496276ff8547c2dd74db19
# Parent  7cf33c0856d40596e880391701ddc304ced8b351
Persist all the Xen-API data values for VMs.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendAPI.py        |    5 +++-
 tools/python/xen/xend/XendConfig.py     |   35 ++++++++++++++++++++++----------
 tools/python/xen/xend/XendDomain.py     |    3 +-
 tools/python/xen/xend/XendDomainInfo.py |    5 ++--
 4 files changed, 34 insertions(+), 14 deletions(-)

diff -r 7cf33c0856d4 -r 63e72c3254da tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py  Fri Dec 15 17:19:00 2006 +0000
+++ b/tools/python/xen/xend/XendAPI.py  Sat Dec 16 12:49:23 2006 +0000
@@ -663,7 +663,10 @@ class XendAPI:
             XendDomain.instance().get_vm_by_uuid(vm_ref).info[name])
 
     def VM_set(self, name, session, vm_ref, value):
-        XendDomain.instance().get_vm_by_uuid(vm_ref).info[name] = value
+        xd = XendDomain.instance()
+        dominfo = xd.get_vm_by_uuid(vm_ref)
+        dominfo.info[name] = value
+        xd.managed_config_save(dominfo)
         return xen_api_success_void()
 
     # attributes (ro)
diff -r 7cf33c0856d4 -r 63e72c3254da tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py       Fri Dec 15 17:19:00 2006 +0000
+++ b/tools/python/xen/xend/XendConfig.py       Sat Dec 16 12:49:23 2006 +0000
@@ -430,8 +430,12 @@ class XendConfig(dict):
         """
         cfg = {}
 
-        # First step is to convert deprecated options to
-        # current equivalents.
+        for key, typ in XENAPI_CFG_TYPES.items():
+            val = sxp.child_value(sxp_cfg, key)
+            if val is not None:
+                cfg[key] = typ(val)
+
+        # Convert deprecated options to current equivalents.
         
         restart = sxp.child_value(sxp_cfg, 'restart')
         if restart:
@@ -576,6 +580,11 @@ class XendConfig(dict):
         """
         cfg = self._parse_sxp(sxp_cfg)
 
+        for key, typ in XENAPI_CFG_TYPES.items():
+            val = cfg.get(key)
+            if val is not None:
+                self[key] = typ(val)
+
         # Convert parameters that can be directly mapped from
         # the Legacy Config to Xen API Config
         
@@ -590,9 +599,13 @@ class XendConfig(dict):
             except KeyError:
                 pass
 
-        self['PV_bootloader']      = cfg.get('bootloader',      '')
-        self['PV_bootloader_args'] = cfg.get('bootloader_args', '')
-        
+        def update_with(n, o):
+            if not self.get(n):
+                self[n] = cfg.get(o, '')
+
+        update_with('PV_bootloader',      'bootloader')
+        update_with('PV_bootloader_args', 'bootloader_args')
+
         image_sxp = sxp.child_value(sxp_cfg, 'image', [])
         if image_sxp:
             self.update_with_image_sxp(image_sxp)
@@ -760,11 +773,8 @@ class XendConfig(dict):
 
         self.validate()
 
-    def to_xml(self):
-        """Return an XML string representing the configuration."""
-        pass
-
-    def to_sxp(self, domain = None, ignore_devices = False, ignore = []):
+    def to_sxp(self, domain = None, ignore_devices = False, ignore = [],
+               legacy_only = True):
         """ Get SXP representation of this config object.
 
         Incompat: removed store_mfn, console_mfn
@@ -784,6 +794,11 @@ class XendConfig(dict):
 
         if domain.getDomid() is not None:
             sxpr.append(['domid', domain.getDomid()])
+
+        if not legacy_only:
+            for name in XENAPI_CFG_TYPES.keys():
+                if name in self and self[name] not in (None, []):
+                    sxpr.append([name, str(self[name])])
 
         for xenapi, legacy in XENAPI_CFG_TO_LEGACY_CFG.items():
             if self.has_key(xenapi) and self[xenapi] not in (None, []):
diff -r 7cf33c0856d4 -r 63e72c3254da tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Fri Dec 15 17:19:00 2006 +0000
+++ b/tools/python/xen/xend/XendDomain.py       Sat Dec 16 12:49:23 2006 +0000
@@ -284,7 +284,8 @@ class XendDomain:
                 fd, fn = tempfile.mkstemp()
                 f = os.fdopen(fd, 'w+b')
                 try:
-                    prettyprint(dominfo.sxpr(), f, width = 78)
+                    prettyprint(dominfo.sxpr(legacy_only = False), f,
+                                width = 78)
                 finally:
                     f.close()
                 try:
diff -r 7cf33c0856d4 -r 63e72c3254da tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Dec 15 17:19:00 2006 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Sat Dec 16 12:49:23 2006 +0000
@@ -1800,9 +1800,10 @@ class XendDomainInfo:
         log.trace("XendDomainInfo.update done on domain %s: %s",
                   str(self.domid), self.info)
 
-    def sxpr(self, ignore_store = False):
+    def sxpr(self, ignore_store = False, legacy_only = True):
         result = self.info.to_sxp(domain = self,
-                                   ignore_devices = ignore_store)
+                                  ignore_devices = ignore_store,
+                                  legacy_only = legacy_only)
 
         if not ignore_store and self.dompath:
             vnc_port = self.readDom('console/vnc-port')

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.