Mercurial > hg > Applications > virsh-wrapper
annotate newvm.py @ 6:25c14d1144a8
add xml generation and define
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Nov 2012 10:36:15 +0900 |
parents | 203445eb53a8 |
children | bff4054ed58f |
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 * | |
7 if sys.version_info < (2,5): | |
8 import lxml.etree as ET | |
9 else: | |
10 import xml.etree.ElementTree as ET | |
11 | |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
12 # vm_name should be |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
13 # students/e10/e105730/01 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
14 # teachers/kono/01 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
15 # |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
16 def ie_check_name(name): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
17 m=re.match('^students/e(\d\d)/e(\d\d57)\d\d/0[1-4]$',name) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
18 if m is not None: |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
19 if m.group(1)==m.group(2): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
20 return 1 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
21 else: |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
22 return 0 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
23 elif re.match('^teachers/[-a-z0-9]+/0[1-4]$',name): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
24 return 0 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
25 else: |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
26 return 1 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
27 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
28 # make necessary sub directory |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
29 # /etc/libvirt/qemu/teachers |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
30 # /var/log/libvirt/qemu/teachers |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
31 # /var/run/libvirt/qemu/teachers |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
32 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
33 def ie_mkdir1(name): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
34 if not os.path.exists(name): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
35 os.makedirs(name); |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
36 |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
37 def ie_mkdir(name): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
38 m=re.match('^(students/e\d\d/e\d\d57\d\d)/0[1-4]$',name) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
39 if m is None: |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
40 m=re.match('^(teachers/[-a-z0-9]+/0[1-4]$',name) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
41 if m is not None: |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
42 dir=m.group(1) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
43 ie_mkdir1('/media/fcs/'+dir) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
44 ie_mkdir1('/etc/libvirt/qemu/'+dir) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
45 ie_mkdir1('/var/log/libvirt/qemu/'+dir) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
46 ie_mkdir1('/var/run/libvirt/qemu/'+dir) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
47 ie_mkdir1('/var/lib/libvirt/qemu/'+dir) |
3 | 48 |
49 parser = OptionParser(); | |
50 parser.add_option("-n", "--name", dest="name", | |
51 help="VM name"); | |
52 parser.add_option("-c", "--config", dest="config", | |
53 help="Template VM XML config file"); | |
54 | |
55 (options, args) = parser.parse_args(); | |
56 | |
57 if not options.name or not options.config: | |
58 print "Usage %s -n name -c template_xml" % sys.argv[0] | |
59 sys.exit(1) | |
60 | |
61 config = ET.parse(options.config) | |
62 vm_name = options.name | |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
63 if ie_check_name(vm_name): |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
64 print "Bad vmname %s. Try students/e11/e115711/01 or teacher/kono/02" % vm_name |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
65 sys.exit(1) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
66 ie_mkdir(vm_name) |
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
67 |
3 | 68 name = config.find('name') |
69 name.text = vm_name | |
70 uuid = config.find('uuid') | |
71 uuid.text = uuidToString(randomUUID()) | |
72 mac = config.find('devices/interface/mac') | |
73 mac.attrib['address'] = randomMAC(type='qemu') | |
74 disk = config.find('devices/disk/source') | |
75 disk_old = disk.attrib['file'] | |
76 disk_path = os.path.dirname(disk_old) | |
77 disk_ext = os.path.splitext(disk_old)[1] | |
78 disk_image = disk_path + '/' + vm_name + disk_ext | |
79 disk.attrib['file'] = disk_image | |
80 | |
81 if os.path.exists(vm_name + '.xml'): | |
82 print "File %s.xml exists, abort" % vm_name | |
83 sys.exit(1) | |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
84 config.write('/etc/libvirt/qemu/' + vm_name + '.xml') |
3 | 85 print "Created vm config file %s.xml" % vm_name |
86 print "Use disk image %s, you must create it from the template disk: %s" % (disk_image, disk_old) | |
87 print "Done!" | |
6
25c14d1144a8
add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
88 |