view newvm.py @ 9:ea51e779b381

error message
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 13 Nov 2012 16:35:34 +0900
parents b2e2eec87764
children 0740e88a783b
line wrap: on
line source

#!/usr/bin/python
# Used to create a vm from template
# By Curu Wong contact: prinbra(at)gmail(dot)com
import sys,os
from optparse import OptionParser
from virtinst.util import *
if sys.version_info < (2,5):
        import lxml.etree as ET
else:
        import xml.etree.ElementTree as ET
 
# vm_name should be
#     students/e10/e105730/01
#     teachers/kono/01
#
def ie_check_name(name):
   m=re.match('^students/e(\d\d)/e(\d\d57)\d\d/0[1-4]$',name)
   if m is not None:
      if m.group(1)==m.group(2):
         return 0
      else:
         return 1
   elif re.match('^teachers/[-a-z0-9]+/0[1-4]$',name):
      return 0
   else:
      return 1

# make necessary sub directory
#   /etc/libvirt/qemu/teachers
#   /var/log/libvirt/qemu/teachers
#   /var/run/libvirt/qemu/teachers

def ie_mkdir1(name):
   if not os.path.exists(name):
        os.makedirs(name);

def ie_mkdir(name):
   m=re.match('^(students/e\d\d/e\d\d57\d\d)/0[1-4]$',name)
   if m is None:
	m=re.match('^(teachers/[-a-z0-9]+)/0[1-4]$',name)
   if m is not None:
        dir=m.group(1)
        ie_mkdir1('/media/fcs/'+dir)
        ie_mkdir1('/etc/libvirt/qemu/'+dir)
        ie_mkdir1('/var/log/libvirt/qemu/'+dir)
        ie_mkdir1('/var/run/libvirt/qemu/'+dir)
        ie_mkdir1('/var/lib/libvirt/qemu/'+dir)
        os.system("/bin/chown "+os.getlogin()+" /media/fcs/"+dir)
 
parser = OptionParser();
parser.add_option("-n", "--name", dest="name",
        help="VM name");
parser.add_option("-c", "--config", dest="config",
        help="Template VM XML config file");
 
(options, args) = parser.parse_args();
 
if not options.name or not options.config:
        print "Usage %s -n name -c template_xml" % sys.argv[0]
        sys.exit(1)
 
config = ET.parse(options.config)
vm_name = options.name
if ie_check_name(vm_name):
    print "Bad vmname %s. Try students/e11/e115711/01 or teachers/kono/02" % vm_name
    sys.exit(1)
ie_mkdir(vm_name)

name = config.find('name')
name.text = vm_name
uuid = config.find('uuid')
uuid.text = uuidToString(randomUUID())
mac = config.find('devices/interface/mac')
mac.attrib['address'] = randomMAC(type='qemu')
disk = config.find('devices/disk/source')
disk_old = disk.attrib['file']
disk_path = os.path.dirname(disk_old)
disk_ext = os.path.splitext(disk_old)[1]
disk_image = disk_path + '/' + vm_name + disk_ext
disk.attrib['file'] = disk_image
 
if os.path.exists(vm_name + '.xml'):
        print "File %s.xml exists, abort" % vm_name
        sys.exit(1)
config.write('/etc/libvirt/qemu/' + vm_name + '.xml')
print "Created vm config file %s.xml" % vm_name
print "Use disk image %s, you must create it from the template disk: %s" % (disk_image, disk_old)
print "Done!"