def build_snapshot_xml(self, name=None, description=None, node=None, disk_only=False, external=False, external_dir=None): """Generate snapshot XML :rtype : String :type name: String :type description: String """ xml_builder = XMLBuilder('domainsnapshot') if name is not None: xml_builder.name(name) if description is not None: xml_builder.description(description) if external: domain = self.driver.conn.lookupByUUIDString(node.uuid) # Add memory file for active machines if domain.isActive() and not disk_only: memory_file = '{0}/snapshot-memory-{1}_{2}.{3}'.format( external_dir, node.environment.name, node.name, name) file_count = 0 tmp_memory_file = memory_file while os.path.exists(tmp_memory_file): tmp_memory_file = memory_file + '-' + str(file_count) file_count += 1 xml_builder.memory( file=tmp_memory_file, snapshot='external') else: xml_builder.memory(snapshot='no') for disk in node.disk_devices: if disk.device == 'disk': with xml_builder.disks: xml_builder.disk(name=disk.target_dev, file=disk.volume.get_path(), snapshot='external') return str(xml_builder)
def build_node_xml(self, node, spec): node_xml = XMLBuilder("domain", type=spec.hypervisor) node_xml.name(node.id) node_xml.vcpu(str(node.cpu)) node_xml.memory(str(node.memory * 1024), unit='KiB') with node_xml.os: node_xml.type(spec.os_type, arch=node.arch) for boot_dev in node.boot: if boot_dev == 'disk': node_xml.boot(dev="hd") else: node_xml.boot(dev=boot_dev) ide_disk_names = deque( ['hd' + c for c in list('abcdefghijklmnopqrstuvwxyz')]) serial_disk_names = deque( ['sd' + c for c in list('abcdefghijklmnopqrstuvwxyz')]) def disk_name(bus='ide'): if str(bus) == 'ide': return ide_disk_names.popleft() return serial_disk_names.popleft() with node_xml.devices: node_xml.emulator(spec.emulator) if len(node.disks) > 0: node_xml.controller(type="ide") for disk in node.disks: with node_xml.disk(type="file", device="disk"): node_xml.driver( name="qemu", type=disk.format, cache="unsafe") node_xml.source(file=disk.path) node_xml.target(dev=disk_name(disk.bus), bus=disk.bus) if node.cdrom: with node_xml.disk(type="file", device="cdrom"): node_xml.driver(name="qemu", type="raw") node_xml.source(file=node.cdrom.isopath) node_xml.target( dev=disk_name(node.cdrom.bus), bus=node.cdrom.bus) for interface in node.interfaces: with node_xml.interface(type="network"): node_xml.source(network=interface.network.id) if not (interface.type is None): node_xml.model(type=interface.type) for interface in node.bridged_interfaces: with node_xml.interface(type="bridge"): node_xml.source(bridge=interface.bridge) if not (interface.type is None): node_xml.model(type=interface.type) if node.vnc: node_xml.graphics(type='vnc', listen='0.0.0.0', autoport='yes') return str(node_xml)
def build_node_xml(self, node, spec): node_xml = XMLBuilder("domain", type=spec.hypervisor) node_xml.name(node.id) node_xml.vcpu(str(node.cpu)) node_xml.memory(str(node.memory * 1024), unit='KiB') with node_xml.os: node_xml.type(spec.os_type, arch=node.arch) for boot_dev in node.boot: if boot_dev == 'disk': node_xml.boot(dev="hd") else: node_xml.boot(dev=boot_dev) ide_disk_names = deque( ['hd' + c for c in list('abcdefghijklmnopqrstuvwxyz')]) serial_disk_names = deque( ['sd' + c for c in list('abcdefghijklmnopqrstuvwxyz')]) def disk_name(bus='ide'): if str(bus) == 'ide': return ide_disk_names.popleft() return serial_disk_names.popleft() with node_xml.devices: node_xml.emulator(spec.emulator) if len(node.disks) > 0: node_xml.controller(type="ide") for disk in node.disks: with node_xml.disk(type="file", device="disk"): node_xml.driver(name="qemu", type=disk.format, cache="unsafe") node_xml.source(file=disk.path) node_xml.target(dev=disk_name(disk.bus), bus=disk.bus) if node.cdrom: with node_xml.disk(type="file", device="cdrom"): node_xml.driver(name="qemu", type="raw") node_xml.source(file=node.cdrom.isopath) node_xml.target(dev=disk_name(node.cdrom.bus), bus=node.cdrom.bus) for interface in node.interfaces: with node_xml.interface(type="network"): node_xml.source(network=interface.network.id) if not (interface.type is None): node_xml.model(type=interface.type) for interface in node.bridged_interfaces: with node_xml.interface(type="bridge"): node_xml.source(bridge=interface.bridge) if not (interface.type is None): node_xml.model(type=interface.type) if node.vnc: node_xml.graphics(type='vnc', listen='0.0.0.0', autoport='yes') return str(node_xml)