Esempio n. 1
0
def collect_image_objects(parsed, ignore_name, kernel_heap_size,
                          namespace, image):
    """
    Extract the information in the XML elements and shove them into
    various data structures for later memory layout and image
    processing.
    """

    # FIXME: collect and handle extension namespaces
    machine_el = parsed.find_child("machine")
    machine = XmlCollector.COLLECTORS[machine_el.tag]()
    machine.collect_xml(machine_el, ignore_name)

    pools = weaver.pools.Pools()
    pools.new_virtual_pool("direct", machine)

    for el in parsed.find_children("virtual_pool"):
        pool = XmlCollector.COLLECTORS[el.tag](pools, machine)
        pool.collect_xml(el, machine, pools)

    for el in parsed.find_children("physical_pool"):
        pool = XmlCollector.COLLECTORS[el.tag](pools, machine)
        pool.collect_xml(el, machine, pools)

    kernel_el = parsed.find_child("kernel")
    kernel = XmlCollector.COLLECTORS[kernel_el.tag](machine)
    if kernel_el is not None:
        kernel.collect_xml(kernel_el, kernel_heap_size, namespace, image,
                           machine, pools)

    # Get the kernel release version.
    kern_ver = get_kernel_version(kernel_el, machine)

    # The tage names of the non-cell elements of an image.
    SYSTEM_TAGS = (Machine.element.name, VirtualPool.element.name,
                   PhysicalPool.element.name, Kernel.element.name)

    cell_els = [cell_el for cell_el in parsed.children if cell_el.tag not in SYSTEM_TAGS]

    # All top level elements should be known.
    assert len([cell_el for cell_el in cell_els if cell_el.tag not in XmlCollector.COLLECTORS]) == 0

    # Create Cell objects to handle the remains elements.
    found_cells = []

    for cell_el in cell_els:
        cell = XmlCollector.COLLECTORS[cell_el.tag]()
        cell.collect_xml(cell_el, ignore_name, namespace, machine, pools,
                         kernel, image)
        found_cells.append(cell)

        # Get the cell release version for each cell.
        cell_ver = cell.get_cell_api_version()

        if cell_ver != kern_ver:
            raise MergeError, \
                  "Cell \"%s\" is built against SDK version 0x%x " \
                  "but the kernel expects version 0x%x." % \
                  (cell.name, cell_ver, kern_ver)

    return machine, kernel, pools, found_cells
Esempio n. 2
0
def collect_image_objects(parsed, ignore_name, kernel_heap_size, namespace,
                          image):
    """
    Extract the information in the XML elements and shove them into
    various data structures for later memory layout and image
    processing.
    """

    # FIXME: collect and handle extension namespaces
    machine_el = parsed.find_child("machine")
    machine = XmlCollector.COLLECTORS[machine_el.tag]()
    machine.collect_xml(machine_el, ignore_name)

    pools = weaver.pools.Pools()
    pools.new_virtual_pool("direct", machine)

    for el in parsed.find_children("virtual_pool"):
        pool = XmlCollector.COLLECTORS[el.tag](pools, machine)
        pool.collect_xml(el, machine, pools)

    for el in parsed.find_children("physical_pool"):
        pool = XmlCollector.COLLECTORS[el.tag](pools, machine)
        pool.collect_xml(el, machine, pools)

    kernel_el = parsed.find_child("kernel")
    kernel = XmlCollector.COLLECTORS[kernel_el.tag](machine)
    if kernel_el is not None:
        kernel.collect_xml(kernel_el, kernel_heap_size, namespace, image,
                           machine, pools)

    # Get the kernel release version.
    kern_ver = get_kernel_version(kernel_el, machine)

    # The tage names of the non-cell elements of an image.
    SYSTEM_TAGS = (Machine.element.name, VirtualPool.element.name,
                   PhysicalPool.element.name, Kernel.element.name)

    cell_els = [
        cell_el for cell_el in parsed.children
        if cell_el.tag not in SYSTEM_TAGS
    ]

    # All top level elements should be known.
    assert len([
        cell_el for cell_el in cell_els
        if cell_el.tag not in XmlCollector.COLLECTORS
    ]) == 0

    # Create Cell objects to handle the remains elements.
    found_cells = []

    for cell_el in cell_els:
        cell = XmlCollector.COLLECTORS[cell_el.tag]()
        cell.collect_xml(cell_el, ignore_name, namespace, machine, pools,
                         kernel, image)
        found_cells.append(cell)

        # Get the cell release version for each cell.
        cell_ver = cell.get_cell_api_version()

        if cell_ver != kern_ver:
            raise MergeError, \
                  "Cell \"%s\" is built against SDK version 0x%x " \
                  "but the kernel expects version 0x%x." % \
                  (cell.name, cell_ver, kern_ver)

    return machine, kernel, pools, found_cells