On 04/28/2014 12:44 PM, shaohef(a)linux.vnet.ibm.com wrote:
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
Then kimchi can choose the divice mode depend on these info.
Note, the info is the initial OS when install OS on a blank guest.
OS may change after the install.
So other device should still keep their model info in the vm metadata.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
---
src/kimchi/model/vms.py | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index be720f3..26ef0e8 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -223,6 +223,8 @@ class VMsModel(object):
raise OperationFailed("KCHVM0007E", {'name': name,
'err':
e.get_error_message()})
+ VMModel.vm_update_os_metadata(VMModel.get_vm(name, self.conn), t.info)
+
return name
def get_list(self):
@@ -287,6 +289,21 @@ class VMModel(object):
node = self._build_access_elem(users, groups)
set_metadata_node(dom, ET.tostring(node))
+ @staticmethod
+ def vm_get_os_metadata(dom):
+ os_xml = get_metadata_node(dom, "os") or
"""<os></os>"""
+ os_elem = ET.fromstring(os_xml)
+ return (os_elem.attrib.get("version"),
os_elem.attrib.get("distro"))
+
+ @staticmethod
+ def vm_update_os_metadata(dom, params):
+ distro = params.get("os_distro")
+ version = params.get("os_version")
+ if distro is None:
+ return
+ os_elem = E.os({"distro": distro, "version": version})
+ set_metadata_node(dom, ET.tostring(os_elem))
As we will use the node in set_metadat_node(), pass the node to the
function instead of the XML
So we avoid node -> xml -> node
The same while calling the function to set users and groups
+
def _static_vm_update(self, dom, params):
state = DOM_STATE_MAP[dom.info()[0]]
old_xml = new_xml = dom.XMLDesc(0)