Mercurial > hg > Applications > virsh-wrapper
annotate newvm.py @ 25:1c4fb56f3cd5
add extension .sh to libvirt
author | taiki <taiki@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 21 Jul 2014 12:14:12 -1000 |
parents | e372e7648da0 |
children | cfa197bad124 |
rev | line source |
---|---|
3 | 1 #!/usr/bin/python |
2 # Used to create a vm from template | |
3 # By Curu Wong contact: prinbra(at)gmail(dot)com | |
4 import sys,os | |
5 from optparse import OptionParser | |
6 from virtinst.util import * | |
25
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
7 |
3 | 8 if sys.version_info < (2,5): |
22 | 9 import lxml.etree as ET |
3 | 10 else: |
22 | 11 import xml.etree.ElementTree as ET |
12 | |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
13 # vm_name should be |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
14 # students/e10/e105730/01 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
15 # teachers/kono/01 |
25
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
16 # manager/name/01 |
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
17 # guest/name/01 |
10 | 18 # bad name returns 1 |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
19 def ie_check_name(name): |
22 | 20 m=re.match('^students/e(\d\d)/e(\d\d)5\d\d\d/0[1-4]$',name) |
21 if m is not None: | |
22 if m.group(1)==m.group(2): | |
23 return 0 | |
24 else: | |
25 return 1 | |
26 elif re.match('^teachers/[-a-z0-9]+/0[1-4]$',name): | |
27 return 0 | |
24
e372e7648da0
remove test vms, and add managers vms
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
28 elif re.match('^manager/[-a-z0-9]+/0[1-4]$',name): |
22 | 29 return 0 |
23 | 30 elif re.match('^guest/[-a-z0-9]+/0[1-4]$',name): |
31 return 0 | |
22 | 32 else: |
33 return 1 | |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
34 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
35 # make necessary sub directory |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
36 # /etc/libvirt/qemu/teachers |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
37 # /var/log/libvirt/qemu/teachers |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
38 # /var/run/libvirt/qemu/teachers |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
39 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
40 def ie_mkdir1(name): |
22 | 41 if not os.path.exists(name): |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
42 os.makedirs(name); |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
43 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
44 def ie_mkdir(name): |
22 | 45 m=re.match('^(students/e\d\d/e\d\d5\d\d\d)/0[1-4]$',name) |
46 if m is None: | |
47 m=re.match('^(teachers/[-a-z0-9]+)/0[1-4]$',name) | |
48 if m is None: | |
24
e372e7648da0
remove test vms, and add managers vms
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
23
diff
changeset
|
49 m=re.match('^(manager/[-a-z0-9]+)/0[1-4]$',name) |
23 | 50 if m is None: |
51 m=re.match('^(guest/[-a-z0-9]+)/0[1-4]$',name) | |
22 | 52 if m is not None: |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
53 dir=m.group(1) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
54 ie_mkdir1('/media/fcs/'+dir) |
19 | 55 ie_mkdir1('/usr/local/etc/libvirt/qemu/'+dir) |
56 ie_mkdir1('/usr/local/var/log/libvirt/qemu/'+dir) | |
57 ie_mkdir1('/usr/local/var/run/libvirt/qemu/'+dir) | |
58 ie_mkdir1('/usr/local/var/lib/libvirt/qemu/'+dir) | |
9 | 59 os.system("/bin/chown "+os.getlogin()+" /media/fcs/"+dir) |
19 | 60 |
3 | 61 parser = OptionParser(); |
62 parser.add_option("-n", "--name", dest="name", | |
63 help="VM name"); | |
64 parser.add_option("-c", "--config", dest="config", | |
65 help="Template VM XML config file"); | |
22 | 66 |
25
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
67 parser.add_option("-i", "--iso", dest="iso", |
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
68 help="When boot VM from ISO"); |
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
69 |
3 | 70 (options, args) = parser.parse_args(); |
22 | 71 |
3 | 72 if not options.name or not options.config: |
22 | 73 print "Usage %s -n name -c template_xml" % sys.argv[0] |
74 sys.exit(1) | |
75 | |
3 | 76 config = ET.parse(options.config) |
77 vm_name = options.name | |
19 | 78 print(options.config) |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
79 if ie_check_name(vm_name): |
7 | 80 print "Bad vmname %s. Try students/e11/e115711/01 or teachers/kono/02" % vm_name |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
81 sys.exit(1) |
25
1c4fb56f3cd5
add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
82 |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
83 ie_mkdir(vm_name) |
3 | 84 name = config.find('name') |
85 name.text = vm_name | |
86 uuid = config.find('uuid') | |
87 uuid.text = uuidToString(randomUUID()) | |
88 mac = config.find('devices/interface/mac') | |
89 mac.attrib['address'] = randomMAC(type='qemu') | |
90 disk = config.find('devices/disk/source') | |
91 disk_old = disk.attrib['file'] | |
92 disk_path = os.path.dirname(disk_old) | |
93 disk_ext = os.path.splitext(disk_old)[1] | |
94 disk_image = disk_path + '/' + vm_name + disk_ext | |
95 disk.attrib['file'] = disk_image | |
22 | 96 |
3 | 97 if os.path.exists(vm_name + '.xml'): |
22 | 98 print "File %s.xml exists, abort" % vm_name |
99 sys.exit(1) | |
19 | 100 config.write('/usr/local/etc/libvirt/qemu/' + vm_name + '.xml') |
3 | 101 print "Created vm config file %s.xml" % vm_name |
102 print "Use disk image %s, you must create it from the template disk: %s" % (disk_image, disk_old) | |
103 print "Done!" |