|  | #!/usr/bin/env python | 
|  |  | 
|  | import argparse | 
|  | import os.path | 
|  |  | 
|  | import libvirt | 
|  |  | 
|  | templatedir = os.path.join(os.path.dirname(os.path.dirname(__file__)), | 
|  | 'templates') | 
|  |  | 
|  |  | 
|  | CONSOLE_LOG = """ | 
|  | <serial type='file'> | 
|  | <source path='%(console_log)s'/> | 
|  | <target port='0'/> | 
|  | <alias name='serial0'/> | 
|  | </serial> | 
|  | <serial type='pty'> | 
|  | <source path='/dev/pts/49'/> | 
|  | <target port='1'/> | 
|  | <alias name='serial1'/> | 
|  | </serial> | 
|  | <console type='file'> | 
|  | <source path='%(console_log)s'/> | 
|  | <target type='serial' port='0'/> | 
|  | <alias name='serial0'/> | 
|  | </console> | 
|  | """ | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser( | 
|  | description="Configure a kvm virtual machine for the seed image.") | 
|  | parser.add_argument('--name', default='seed', | 
|  | help='the name to give the machine in libvirt.') | 
|  | parser.add_argument('--image', | 
|  | help='Use a custom image file (must be qcow2).') | 
|  | parser.add_argument('--engine', default='qemu', | 
|  | help='The virtualization engine to use') | 
|  | parser.add_argument('--arch', default='i686', | 
|  | help='The architecture to use') | 
|  | parser.add_argument('--memory', default='2097152', | 
|  | help="Maximum memory for the VM in KB.") | 
|  | parser.add_argument('--cpus', default='1', | 
|  | help="CPU count for the VM.") | 
|  | parser.add_argument('--bootdev', default='hd', | 
|  | help="What boot device to use (hd/network).") | 
|  | parser.add_argument('--network', default="brbm", | 
|  | help='The libvirt network name to use') | 
|  | parser.add_argument('--libvirt-nic-driver', default='e1000', | 
|  | help='The libvirt network driver to use') | 
|  | parser.add_argument('--console-log', | 
|  | help='File to log console') | 
|  | parser.add_argument('--emulator', default=None, | 
|  | help='Path to emulator bin for vm template') | 
|  | args = parser.parse_args() | 
|  | with file(templatedir + '/vm.xml', 'rb') as f: | 
|  | source_template = f.read() | 
|  | params = { | 
|  | 'name': args.name, | 
|  | 'imagefile': args.image, | 
|  | 'engine': args.engine, | 
|  | 'arch': args.arch, | 
|  | 'memory': args.memory, | 
|  | 'cpus': args.cpus, | 
|  | 'bootdev': args.bootdev, | 
|  | 'network': args.network, | 
|  | 'nicdriver': args.libvirt_nic_driver, | 
|  | 'emulator': args.emulator, | 
|  | } | 
|  |  | 
|  | if args.emulator: | 
|  | params['emulator'] = args.emulator | 
|  | else: | 
|  | if os.path.exists("/usr/bin/kvm"):  # Debian | 
|  | params['emulator'] = "/usr/bin/kvm" | 
|  | elif os.path.exists("/usr/bin/qemu-kvm"):  # Redhat | 
|  | params['emulator'] = "/usr/bin/qemu-kvm" | 
|  |  | 
|  | if args.console_log: | 
|  | params['bios_serial'] = "<bios useserial='yes'/>" | 
|  | params['console_log'] = CONSOLE_LOG % {'console_log': args.console_log} | 
|  | else: | 
|  | params['bios_serial'] = '' | 
|  | params['console_log'] = '' | 
|  | libvirt_template = source_template % params | 
|  | conn = libvirt.open("qemu:///system") | 
|  |  | 
|  | a = conn.defineXML(libvirt_template) | 
|  | print ("Created machine %s with UUID %s" % (args.name, a.UUIDString())) | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | main() |