Mercurial > hg > Applications > virsh-wrapper
view newvm.py @ 30:2888c7ec9013
can't define vm name is not number.
author | taiki <taiki@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 02 Sep 2014 08:10:27 -1000 |
parents | cfa197bad124 |
children | 4bd7d676e608 |
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,string 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 # managers/name/01 # guests/name/01 # bad name returns 1 def ie_check_name(name): m=re.match('^students/e(\d\d)/e(\d\d)5\d\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 elif re.match('^managers/[-a-z0-9]+/0[1-4]$',name): return 0 elif re.match('^guests/[-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\d5\d\d\d)/0[1-4]$',name) if m is None: m=re.match('^(teachers/[-a-z0-9]+)/0[1-4]$',name) if m is None: m=re.match('^(managers/[-a-z0-9]+)/0[1-4]$',name) if m is None: m=re.match('^(guests/[-a-z0-9]+)/0[1-4]$',name) if m is not None: dir=m.group(1) ie_mkdir1('/media/fcs/'+dir) # ie_mkdir1('/usr/local/etc/libvirt/qemu/'+dir) # ie_mkdir1('/usr/local/var/log/libvirt/qemu/'+dir) # ie_mkdir1('/usr/local/var/run/libvirt/qemu/'+dir) # ie_mkdir1('/usr/local/var/lib/libvirt/qemu/'+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"); parser.add_option("-i", "--iso", dest="iso", help="When boot VM from ISO"); (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 print(options.config) if ie_check_name(vm_name): print "Bad vmname %s. Try 01 - 04" % vm_name sys.exit(1) ie_mkdir(vm_name) name = config.find('name') new_name = vm_name.translate(string.maketrans('/','_')) name.text = new_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('/usr/local/etc/libvirt/qemu/' + vm_name + '.xml') 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!"