Mercurial > hg > Applications > virsh-wrapper
view newvm.py @ 40:984f31ae74d5
Fix student identifier
author | atton |
---|---|
date | Sun, 15 Nov 2015 12:20:00 +0900 |
parents | 6e385ccc40bf |
children | 09fe50fc0629 |
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,re 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 mount_point = '/media/iscsi/' # root directory # 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/[ek](\d\d)/[ek](\d\d)[58]\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); # sample : students/e14/k145740/01 # : master students/k13/k138582/01 def ie_mkdir(name): m=re.match('^(students/[ek]\d\d/[ek]\d\d[58]\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(mount_point+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()+" "+ mount_point+dir) # virtinst.utils.randomMac is omitted from RHEL 7. import random def randomMAC(): mac = [ 0x52, 0x54, 0x00, random.randint(0x00, 0xff), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ] return ':'.join(map(lambda x: "%02x" % x, mac)) 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 "Can't make new vm. 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 = randomUUID(0) mac = config.find('devices/interface/mac') mac.attrib['address'] = randomMAC() 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') print("VM_NAME:" + vm_name) config.write('/etc/libvirt/qemu/' + vm_name + '.xml') print "Created vm config file %s.xml" % vm_name print "Use disk image %s" % disk_image print "Done!"