[Kimchi-devel] [PATCHv8 8/8] storage target: Add model support

Royce Lv lvroyce at linux.vnet.ibm.com
Mon Jan 20 02:50:58 UTC 2014


On 2014年01月20日 10:48, zhoumeina wrote:
> On 01/19/2014 11:28 PM, lvroyce0210 at gmail.com wrote:
>> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>>
>> Construct xml to query storage targets information from
>> storage server.
>> Use lxml to parse result instead of etree.
>> Use lxml to parse target query result.
>>
>> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
>> ---
>> src/kimchi/model.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 45 insertions(+)
>>
>> diff --git a/src/kimchi/model.py b/src/kimchi/model.py
>> index 04051cf..06950f4 100644
>> --- a/src/kimchi/model.py
>> +++ b/src/kimchi/model.py
>> @@ -30,6 +30,7 @@ import ipaddr
>> import json
>> import libvirt
>> import logging
>> +import lxml.etree as ET
>> import os
>> import platform
>> import psutil
>> @@ -45,6 +46,8 @@ import uuid
>> from cherrypy.process.plugins import BackgroundTask
>> from cherrypy.process.plugins import SimplePlugin
>> from collections import defaultdict
>> +from lxml import objectify
>> +from lxml.builder import E
>> from xml.etree import ElementTree
>>
>>
>> @@ -1330,6 +1333,24 @@ class Model(object):
>>
>> raise NotFoundError
>>
>> + def storagetargets_get_list(self, storage_server, target_type=None):
>> + target_types = STORAGE_SOURCES.keys() if not target_type else 
>> [target_type]
>> + target_list = list()
>> +
>> + for target_type in target_types:
>> + xml = _get_storage_server_spec(server=storage_server, 
>> target_type=target_type)
>> + conn = self.conn.get()
>> +
>> + try:
>> + ret = conn.findStoragePoolSources(target_type, xml, 0)
>> + except libvirt.libvirtError as e:
>> + kimchi_log.warning("Query storage pool source fails because of %s",
>> + e.get_error_message())
>> + continue
>> +
>> + target_list.extend(_parse_target_source_result(target_type, ret))
>> + return target_list
>> +
>> def _get_screenshot(self, vm_uuid):
>> with self.objstore as session:
>> try:
>> @@ -1540,6 +1561,30 @@ class LibvirtVMScreenshot(VMScreenshot):
>> os.close(fd)
>>
>>
>> +def _parse_target_source_result(target_type, xml_str):
>> + root = objectify.fromstring(xml_str)
>> + ret = []
>> + for source in root.getchildren():
>> + if target_type == 'netfs':
>> + host_name = source.host.get('name')
>> + target_path = source.dir.get('path')
>> + type = source.format.get('type')
>> + ret.append(dict(host=host_name, target_type=type, target=target_path))
>> + return ret
>> +
>> +
>> +def _get_storage_server_spec(**kwargs):
>> + # Required parameters:
>> + # server:
>> + # target_type:
>> + extra_args = []
>> + if kwargs['target_type'] == 'nefs':
> netfs?
Wrong rebase, thanks, meina
>> + extra_args.append(E.format(type='nfs'))
>> + obj = E.source(E.host(name=kwargs['server']), *extra_args)
>> + xml = ET.tostring(obj)
>> + return xml
>> +
>> +
>> class StoragePoolDef(object):
>> @classmethod
>> def create(cls, poolArgs):
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>




More information about the Kimchi-devel mailing list