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
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