예제 #1
0
 def from_xml_tree(cls, log, dev, meta):
     params = parse_device_params(dev)
     target = vmxml.find_first(dev, 'target')
     params['size'] = (int(vmxml.text(vmxml.find_first(target, 'size'))) /
                       1024)
     params['node'] = vmxml.text(vmxml.find_first(target, 'node'))
     return cls(log, **params)
예제 #2
0
파일: core.py 프로젝트: rollandf/vdsm
 def update_device_info(cls, vm, device_conf):
     conf_aliases = frozenset([getattr(conf, 'alias')
                               for conf in device_conf
                               if hasattr(conf, 'alias')])
     dev_aliases = frozenset([dev['alias']
                              for dev in vm.conf['devices']
                              if 'alias' in dev])
     for element in vm.domain.get_device_elements('memory'):
         address = find_device_guest_address(element)
         alias = find_device_alias(element)
         node = int(vmxml.text(vmxml.find_first(element, 'node')))
         size = int(vmxml.text(vmxml.find_first(element, 'size')))
         if alias not in conf_aliases:
             for conf in device_conf:
                 if not hasattr(conf, 'alias') and \
                    conf.node == node and \
                    conf.size == size:
                     conf.address = address
                     conf.alias = alias
                     break
         if alias not in dev_aliases:
             for dev in vm.conf['devices']:
                 if dev['type'] == hwclass.MEMORY and \
                    dev.get('alias') is None and \
                    dev.get('node') == node and \
                    dev.get('size', 0) * 1024 == size:
                     dev['address'] = address
                     dev['alias'] = alias
                     break
예제 #3
0
파일: core.py 프로젝트: EdDev/vdsm
 def update_device_info(cls, vm, device_conf):
     conf_aliases = frozenset([getattr(conf, 'alias')
                               for conf in device_conf
                               if hasattr(conf, 'alias')])
     dev_aliases = frozenset([dev['alias']
                              for dev in vm.conf['devices']
                              if 'alias' in dev])
     for element in vm.domain.get_device_elements('memory'):
         address, alias = parse_device_ident(element)
         node = int(vmxml.text(vmxml.find_first(element, 'node')))
         size = int(vmxml.text(vmxml.find_first(element, 'size')))
         if alias not in conf_aliases:
             for conf in device_conf:
                 if not hasattr(conf, 'alias') and \
                    conf.node == node and \
                    conf.size == size:
                     conf.address = address
                     conf.alias = alias
                     break
         if alias not in dev_aliases:
             for dev in vm.conf['devices']:
                 if dev['type'] == hwclass.MEMORY and \
                    dev.get('alias') is None and \
                    dev.get('node') == node and \
                    dev.get('size', 0) * 1024 == size:
                     dev['address'] = address
                     dev['alias'] = alias
                     break
예제 #4
0
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'lease_id': vmxml.text(vmxml.find_first(dev, 'key')),
         'sd_id': vmxml.text(vmxml.find_first(dev, 'lockspace')),
         'path': vmxml.find_attr(dev, 'target', 'path'),
         'offset': vmxml.find_attr(dev, 'target', 'offset'),
     }
     return cls(log, **params)
예제 #5
0
파일: lease.py 프로젝트: EdDev/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'lease_id': vmxml.text(vmxml.find_first(dev, 'key')),
         'sd_id': vmxml.text(vmxml.find_first(dev, 'lockspace')),
         'path': vmxml.find_attr(dev, 'target', 'path'),
         'offset': vmxml.find_attr(dev, 'target', 'offset'),
     }
     return cls(log, **params)
예제 #6
0
파일: core.py 프로젝트: EdDev/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = parse_device_params(dev)
     target = vmxml.find_first(dev, 'target')
     params['size'] = (
         int(vmxml.text(vmxml.find_first(target, 'size'))) / 1024
     )
     params['node'] = vmxml.text(vmxml.find_first(target, 'node'))
     return cls(log, **params)
예제 #7
0
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'type': dev.tag,
         'device': core.find_device_type(dev),
         'lease_id': vmxml.text(vmxml.find_first(dev, 'key')),
         'sd_id': vmxml.text(vmxml.find_first(dev, 'lockspace')),
         'path': vmxml.find_attr(dev, 'target', 'path'),
         'offset': vmxml.find_attr(dev, 'target', 'offset'),
     }
     core.update_device_params(params, dev)
     return cls(log, **params)
예제 #8
0
def parse_xml(dev, meta):
    params = {
        'type': dev.tag,
        'device': core.find_device_type(dev),
        'lease_id': vmxml.text(vmxml.find_first(dev, 'key')),
        'sd_id': vmxml.text(vmxml.find_first(dev, 'lockspace')),
        'path': vmxml.find_attr(dev, 'target', 'path'),
        'offset': vmxml.find_attr(dev, 'target', 'offset'),
    }
    core.update_device_params(params, dev)
    core.update_device_params_from_meta(params, meta)
    return params
예제 #9
0
파일: core.py 프로젝트: rollandf/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'device': dev.tag,
         'type': find_device_type(dev),
     }
     update_device_params(params, dev)
     target = vmxml.find_first(dev, 'target')
     params['size'] = (
         int(vmxml.text(vmxml.find_first(target, 'size'))) / 1024
     )
     params['node'] = vmxml.text(vmxml.find_first(target, 'node'))
     return cls(log, **params)
예제 #10
0
파일: lease.py 프로젝트: oVirt/vdsm
def parse_xml(dev, meta):
    params = {
        'type': dev.tag,
        'device': core.find_device_type(dev),
        'lease_id': vmxml.text(vmxml.find_first(dev, 'key')),
        'sd_id': vmxml.text(vmxml.find_first(dev, 'lockspace')),
        'path': vmxml.find_attr(dev, 'target', 'path'),
        'offset': vmxml.find_attr(dev, 'target', 'offset'),
    }
    core.update_device_params(params, dev)
    core.update_device_params_from_meta(params, meta)
    return params
예제 #11
0
파일: core.py 프로젝트: nirs/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'device': dev.tag,
         'type': find_device_type(dev),
     }
     update_device_params(params, dev)
     target = vmxml.find_first(dev, 'target')
     params['size'] = (
         int(vmxml.text(vmxml.find_first(target, 'size'))) // 1024
     )
     params['node'] = vmxml.text(vmxml.find_first(target, 'node'))
     update_device_params_from_meta(params, meta)
     return cls(log, **params)
예제 #12
0
파일: network.py 프로젝트: wuyeliang/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'device': core.find_device_type(dev),
         'type': dev.tag,
         'custom': meta.get('custom', {}),
         'vmid': meta['vmid'],
         'vm_custom': {},
         'specParams': {},
     }
     core.update_device_params(params, dev)
     params.update(core.get_xml_elem(dev, 'macAddr', 'mac', 'address'))
     params.update(core.get_xml_elem(dev, 'nicModel', 'model', 'type'))
     params.update(core.get_xml_elem(dev, 'bootOrder', 'boot', 'order'))
     if params['device'] == 'hostdev':
         params.update(_get_hostdev_params(dev))
     link = vmxml.find_first(dev, 'link', None)
     if link is not None:
         if link.attrib.get('state', 'down') == 'down':
             params['linkActive'] = False
         else:
             params['linkActive'] = True
     vlan = vmxml.find_first(dev, 'vlan', None)
     if vlan is not None:
         params['specParams']['vlanid'] = vmxml.find_attr(vlan, 'tag', 'id')
     mtu = vmxml.find_first(dev, "mtu", None)
     if mtu is not None:
         params['mtu'] = int(vmxml.attr(mtu, 'size'))
     filterref = vmxml.find_first(dev, 'filterref', None)
     if filterref is not None:
         params['filter'] = vmxml.attr(filterref, 'filter')
         params['filterParameters'] = [{
             'name': param.attrib['name'],
             'value': param.attrib['value'],
         } for param in vmxml.find_all(filterref, 'parameter')]
     driver = vmxml.find_first(dev, 'driver', None)
     if driver is not None:
         params['custom'].update(
             core.parse_device_attrs(driver, ('queues', )))
     sndbuf = dev.find('./tune/sndbuf')
     if sndbuf is not None:
         params['vm_custom']['sndbuf'] = vmxml.text(sndbuf)
     bandwidth = vmxml.find_first(dev, 'bandwidth', None)
     if bandwidth is not None:
         for mode in ('inbound', 'outbound'):
             elem = vmxml.find_first(bandwidth, mode, None)
             if elem is not None:
                 params['specParams'][mode] = elem.attrib.copy()
     net = (meta.get('network', None)
            or vmxml.find_attr(dev, 'source', 'bridge'))
     if net is None:
         raise MissingNetwork("no network to join")
     params['network'] = net
     _update_port_mirroring(params, meta)
     core.update_device_params_from_meta(params, meta)
     return cls(log, **params)
예제 #13
0
    def get_memory_size(self, current=False):
        """
        Return the vm memory from xml in MiB.

        :param current: If true, return current memory size (which may be
          reduced by balloon); if false, return boot time memory size.
        :type current: bool
        """
        tag = 'currentMemory' if current else 'memory'
        memory = vmxml.find_first(self._dom, tag, None)
        return int(vmxml.text(memory)) // 1024 if memory is not None else None
예제 #14
0
파일: core.py 프로젝트: EdDev/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = parse_device_params(dev, attrs=('model', ))
     params['specParams'] = parse_device_attrs(
         vmxml.find_first(dev, 'rate'),
         ('period', 'bytes')
     )
     params['specParams']['source'] = rngsources.get_source_name(
         vmxml.text(vmxml.find_first(dev, 'backend'))
     )
     params['vmid'] = meta['vmid']
     return cls(log, **params)
예제 #15
0
 def from_xml_tree(cls, log, dev, meta):
     params = parse_device_params(dev, attrs=('model', ))
     params['specParams'] = {}
     rate = vmxml.find_first(dev, 'rate', None)
     if rate is not None:
         params['specParams'].update(
             parse_device_attrs(rate, ('period', 'bytes')))
     params['specParams']['source'] = rngsources.get_source_name(
         vmxml.text(vmxml.find_first(dev, 'backend')))
     params['vmid'] = meta['vmid']
     return cls(log, **params)
예제 #16
0
def collect_inner_elements(el, d):
    """
    This helper method collects all nodes in el and adds them
    to dictionary d.

    :param el: XML DOM element object with text only children
    :param d: Dictionary to add the values to
    """
    for chel in vmxml.children(el):
        try:
            d[vmxml.tag(chel)] = int(vmxml.text(chel))
        except (IndexError, ValueError):
            log.exception("Invalid value for %s", vmxml.tag(chel))
예제 #17
0
파일: lookup.py 프로젝트: vjuranek/vdsm
def drive_from_element(disk_devices, disk_element):
    # we try serial first for backward compatibility
    # REQUIRED_FOR: vdsm <= 4.2
    serial_elem = vmxml.find_first(disk_element, 'serial', None)
    if serial_elem is not None:
        serial = vmxml.text(serial_elem)
        try:
            return drive_by_serial(disk_devices, serial)
        except LookupError:
            pass  # try again by alias before to give up

    alias = core.find_device_alias(disk_element)
    return device_by_alias(disk_devices, alias)
예제 #18
0
파일: lookup.py 프로젝트: nirs/vdsm
def drive_from_element(disk_devices, disk_element):
    # we try serial first for backward compatibility
    # REQUIRED_FOR: vdsm <= 4.2
    serial_elem = vmxml.find_first(disk_element, 'serial', None)
    if serial_elem is not None:
        serial = vmxml.text(serial_elem)
        try:
            return drive_by_serial(disk_devices, serial)
        except LookupError:
            pass  # try again by alias before to give up

    alias = core.find_device_alias(disk_element)
    return device_by_alias(disk_devices, alias)
예제 #19
0
파일: vmtune.py 프로젝트: EdDev/vdsm
def collect_inner_elements(el, d):
    """
    This helper method collects all nodes in el and adds them
    to dictionary d.

    :param el: XML DOM element object with text only children
    :param d: Dictionary to add the values to
    """
    for chel in vmxml.children(el):
        try:
            d[vmxml.tag(chel)] = int(vmxml.text(chel))
        except (IndexError, ValueError):
            log.exception("Invalid value for %s", vmxml.tag(chel))
예제 #20
0
파일: core.py 프로젝트: nirs/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = {'type': find_device_type(dev)}
     update_device_params(params, dev, attrs=('model', ))
     params['device'] = params['model']
     rate = vmxml.find_first(dev, 'rate', None)
     if rate is not None:
         params['specParams'] = parse_device_attrs(
             rate, ('period', 'bytes')
         )
     else:
         params['specParams'] = {}
     params['specParams']['source'] = rngsources.get_source_name(
         vmxml.text(vmxml.find_first(dev, 'backend'))
     )
     update_device_params_from_meta(params, meta)
     params['vmid'] = meta['vmid']
     return cls(log, **params)
예제 #21
0
파일: core.py 프로젝트: EdDev/vdsm
    def update_device_info(cls, vm, device_conf):
        for rng in vm.domain.get_device_elements('rng'):
            address, alias = parse_device_ident(rng)
            source = vmxml.text(vmxml.find_first(rng, 'backend'))

            for dev in device_conf:
                if dev.uses_source(source) and not hasattr(dev, 'alias'):
                    dev.address = address
                    dev.alias = alias
                    break

            for dev in vm.conf['devices']:
                if dev['type'] == hwclass.RNG and \
                   Rng.matching_source(dev, source) and \
                   'alias' not in dev:
                    dev['address'] = address
                    dev['alias'] = alias
                    break
예제 #22
0
파일: core.py 프로젝트: rollandf/vdsm
    def update_device_info(cls, vm, device_conf):
        for rng in vm.domain.get_device_elements('rng'):
            address = find_device_guest_address(rng)
            alias = find_device_alias(rng)
            source = vmxml.text(vmxml.find_first(rng, 'backend'))

            for dev in device_conf:
                if dev.uses_source(source) and not hasattr(dev, 'alias'):
                    dev.address = address
                    dev.alias = alias
                    break

            for dev in vm.conf['devices']:
                if dev['type'] == hwclass.RNG and \
                   Rng.matching_source(dev, source) and \
                   'alias' not in dev:
                    dev['address'] = address
                    dev['alias'] = alias
                    break
예제 #23
0
파일: network.py 프로젝트: akashihi/vdsm
 def from_xml_tree(cls, log, dev, meta):
     params = {
         'custom': {},
         'vm_custom': {},
         'specParams': {},
     }
     params.update(core.parse_device_params(dev))
     params['device'] = params['type']
     params.update(_get_xml_elem(dev, 'macAddr', 'mac', 'address'))
     params.update(_get_xml_elem(dev, 'nicModel', 'model', 'type'))
     params.update(_get_xml_elem(dev, 'bootOrder', 'boot', 'order'))
     filterref = vmxml.find_first(dev, 'filterref', None)
     if filterref is not None:
         params['filter'] = vmxml.attr(filterref, 'filter')
         params['filterParameters'] = {
             param.attrib['name']: param.attrib['value']
             for param in vmxml.find_all(filterref, 'parameter')
         }
     driver = vmxml.find_first(dev, 'driver', None)
     if driver is not None:
         params['custom'].update(
             core.parse_device_attrs(driver, ('queues', )))
     sndbuf = dev.find('./tune/sndbuf')
     if sndbuf is not None:
         params['vm_custom']['sndbuf'] = vmxml.text(sndbuf)
     bandwidth = vmxml.find_first(dev, 'bandwidth', None)
     if bandwidth is not None:
         for mode in ('inbound', 'outbound'):
             elem = vmxml.find_first(bandwidth, mode, None)
             if elem is not None:
                 params['specParams'][mode] = elem.attrib.copy()
     net = (meta.get('network', None)
            or vmxml.find_attr(dev, 'source', 'bridge'))
     if net is None:
         raise RuntimeError('could not detect the network to join')
     params['network'] = net
     return cls(log, **params)
예제 #24
0
 def get_memory_size(self):
     """
     Return the vm memory from xml in MiB
     """
     memory = vmxml.find_first(self._dom, "memory", None)
     return int(vmxml.text(memory)) // 1024 if memory is not None else None
예제 #25
0
파일: lease.py 프로젝트: oVirt/vdsm
 def get_identifying_attrs(cls, dev_elem):
     return {
         'devtype': core.dev_class_from_dev_elem(dev_elem),
         'name': vmxml.text(vmxml.find_first(dev_elem, 'key')),
     }
예제 #26
0
파일: storagexml.py 프로젝트: minqf/vdsm
def _update_serial_params(params, dev):
    serial = vmxml.find_first(dev, 'serial', None)
    if serial is not None:
        params['serial'] = vmxml.text(serial)
예제 #27
0
 def get_identifying_attrs(cls, dev_elem):
     return {
         'devtype': core.dev_class_from_dev_elem(dev_elem),
         'name': vmxml.text(vmxml.find_first(dev_elem, 'key')),
     }
예제 #28
0
파일: vmxml_test.py 프로젝트: EdDev/vdsm
 def test_text(self, tag, result):
     element = vmxml.find_first(self._dom, tag)
     text = vmxml.text(element)
     self.assertEqual(text, result)
예제 #29
0
파일: storagexml.py 프로젝트: nirs/vdsm
def _update_serial_params(params, dev):
    serial = vmxml.find_first(dev, 'serial', None)
    if serial is not None:
        params['serial'] = vmxml.text(serial)
예제 #30
0
 def test_text(self, tag, result):
     element = vmxml.find_first(self._dom, tag)
     text = vmxml.text(element)
     assert text == result
예제 #31
0
 def test_text(self, tag, result):
     element = vmxml.find_first(self._dom, tag)
     text = vmxml.text(element)
     self.assertEqual(text, result)