| #!/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() |