tools/ironic/scripts/configure-vm
06fb29c6
 #!/usr/bin/env python
 
 import argparse
 import os.path
 
 import libvirt
 
 templatedir = os.path.join(os.path.dirname(os.path.dirname(__file__)),
                            'templates')
 
 
 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('--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,
         '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"
 
     nicparams = {
         'nicdriver': args.libvirt_nic_driver,
         'network': args.network,
     }
 
     params['bm_network'] = """
 <!-- neutron friendly 'bare metal' network -->
 <interface type='network'>
   <source network='%(network)s'/>
   <virtualport type='openvswitch'/>
   <model type='%(nicdriver)s'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
 </interface>""" % nicparams
 
     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()