def _parse_caps_cpu(node):
    '''
    Parse the <cpu> element of the domain capabilities
    '''
    result = {}
    for mode in node.findall('mode'):
        if not mode.get('supported') == 'yes':
            continue

        name = mode.get('name')
        if name == 'host-passthrough':
            result[name] = True

        elif name == 'host-model':
            host_model = {}
            model_node = mode.find('model')
            if model_node is not None:
                model = {
                    'name': model_node.text
                }

                vendor_id = model_node.get('vendor_id')
                if vendor_id:
                    model['vendor_id'] = vendor_id

                fallback = model_node.get('fallback')
                if fallback:
                    model['fallback'] = fallback
                host_model['model'] = model

            vendor = mode.find('vendor').text if mode.find('vendor') is not None else None
            if vendor:
                host_model['vendor'] = vendor

            features = {feature.get('name'): feature.get('policy') for feature in mode.findall('feature')}
            if features:
                host_model['features'] = features

            result[name] = host_model

        elif name == 'custom':
            custom_model = {}
            models = {model.text: model.get('usable') for model in mode.findall('model')}
            if models:
                custom_model['models'] = models
            result[name] = custom_model

    return result
def _parse_caps_cpu ( node ) : result = { } for mode in node . findall ( 'mode' ) : if not mode . get ( 'supported' ) == 'yes' : continue name = mode . get ( 'name' ) if name == 'host-passthrough' : result [ name ] = True elif name == 'host-model' : host_model = { } model_node = mode . find ( 'model' ) if model_node is not None : model = { 'name' : model_node . text } vendor_id = model_node . get ( 'vendor_id' ) if vendor_id : model [ 'vendor_id' ] = vendor_id fallback = model_node . get ( 'fallback' ) if fallback : model [ 'fallback' ] = fallback host_model [ 'model' ] = model vendor = mode . find ( 'vendor' ) . text if mode . find ( 'vendor' ) is not None else None if vendor : host_model [ 'vendor' ] = vendor features = { feature . get ( 'name' ) : feature . get ( 'policy' ) for feature in mode . findall ( 'feature' ) } if features : host_model [ 'features' ] = features result [ name ] = host_model elif name == 'custom' : custom_model = { } models = { model . text : model . get ( 'usable' ) for model in mode . findall ( 'model' ) } if models : custom_model [ 'models' ] = models result [ name ] = custom_model return result
Parse the <cpu> element of the domain capabilities