view newvm.py @ 35:f01dc83040a9

Change mount point and template xml
author atton
date Thu, 05 Nov 2015 18:28:03 +0900
parents 4bd7d676e608
children 16840a2375ae
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)

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 = 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')
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, you must create it from the template disk: %s" % (disk_image, disk_old)
print "Done!"