annotate newvm.py @ 32:4bd7d676e608

add debugvm.py to method for manage port.
author taiki
date Tue, 16 Dec 2014 03:24:00 +0900
parents cfa197bad124
children f01dc83040a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #!/usr/bin/python
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 # Used to create a vm from template
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 # By Curu Wong contact: prinbra(at)gmail(dot)com
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
4 import sys,os,string,re
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 from optparse import OptionParser
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 if sys.version_info < (2,5):
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
9 import lxml.etree as ET
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 else:
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
11 import xml.etree.ElementTree as ET
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
12
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
13 mount_point = '/media/fcs/' # root directory
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
14
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
15 # vm_name should be
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
16 # students/e10/e105730/01
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 # teachers/kono/01
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
18 # managers/name/01
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
19 # guests/name/01
10
0740e88a783b fix pattern match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
20 # bad name returns 1
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
21 def ie_check_name(name):
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
22 m=re.match('^students/[ek](\d\d)/[ek](\d\d)[58]\d\d\d/0[1-4]$',name)
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
23 if m is not None:
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
24 if m.group(1)==m.group(2):
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
25 return 0
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
26 else:
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
27 return 1
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
28 elif re.match('^teachers/[-a-z0-9]+/0[1-4]$',name):
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
29 return 0
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
30 elif re.match('^managers/[-a-z0-9]+/0[1-4]$',name):
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
31 return 0
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
32 elif re.match('^guests/[-a-z0-9]+/0[1-4]$',name):
23
66a88f51993f add libvirtd file for bldsv11
taiki
parents: 22
diff changeset
33 return 0
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
34 else:
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
35 return 1
6
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 # make necessary sub directory
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
38 # /etc/libvirt/qemu/teachers
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
39 # /var/log/libvirt/qemu/teachers
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
40 # /var/run/libvirt/qemu/teachers
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
41
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
42 def ie_mkdir1(name):
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
43 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
44 os.makedirs(name);
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
45
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
46
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
47 # sample : students/e14/k145740/01
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
48 # : master students/k13/k138582/01
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
49 def ie_mkdir(name):
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
50 m=re.match('^(students/[ek]\d\d/[ek]\d\d[58]\d\d\d)/0[1-4]$',name)
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
51 if m is None:
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
52 m=re.match('^(teachers/[-a-z0-9]+)/0[1-4]$',name)
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
53 if m is None:
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
54 m=re.match('^(managers/[-a-z0-9]+)/0[1-4]$',name)
23
66a88f51993f add libvirtd file for bldsv11
taiki
parents: 22
diff changeset
55 if m is None:
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
56 m=re.match('^(guests/[-a-z0-9]+)/0[1-4]$',name)
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
57 if m is not None:
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
58 dir=m.group(1)
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
59 ie_mkdir1(mount_point+dir)
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
60 # ie_mkdir1('/usr/local/etc/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
61 # ie_mkdir1('/usr/local/var/log/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
62 # ie_mkdir1('/usr/local/var/run/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
63 # ie_mkdir1('/usr/local/var/lib/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
64 ie_mkdir1('/etc/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
65 ie_mkdir1('/var/log/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
66 ie_mkdir1('/var/run/libvirt/qemu/'+dir)
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
67 ie_mkdir1('/var/lib/libvirt/qemu/'+dir)
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
68 os.system("/bin/chown "+os.getlogin()+" "+ mount_point+dir)
19
7b4cdb0c9a99 unknown changed
taiki
parents: 10
diff changeset
69
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 parser = OptionParser();
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 parser.add_option("-n", "--name", dest="name",
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 help="VM name");
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 parser.add_option("-c", "--config", dest="config",
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 help="Template VM XML config file");
25
1c4fb56f3cd5 add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
75 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
76 help="When boot VM from ISO");
1c4fb56f3cd5 add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
77
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 (options, args) = parser.parse_args();
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
79
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 if not options.name or not options.config:
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
81 print "Usage %s -n name -c template_xml" % sys.argv[0]
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
82 sys.exit(1)
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
83
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 config = ET.parse(options.config)
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 vm_name = options.name
19
7b4cdb0c9a99 unknown changed
taiki
parents: 10
diff changeset
86 print(options.config)
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
87 if ie_check_name(vm_name):
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
88 print "Can't make new vm. Bad vmname %s. Try 01 - 04" % vm_name
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
89 sys.exit(1)
25
1c4fb56f3cd5 add extension .sh to libvirt
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
90
6
25c14d1144a8 add xml generation and define
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
91 ie_mkdir(vm_name)
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 name = config.find('name')
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
93
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
94 new_name = vm_name.translate(string.maketrans('/','_'))
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
95
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
96 name.text = new_name
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 uuid = config.find('uuid')
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 uuid.text = uuidToString(randomUUID())
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 mac = config.find('devices/interface/mac')
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 mac.attrib['address'] = randomMAC(type='qemu')
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 disk = config.find('devices/disk/source')
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 disk_old = disk.attrib['file']
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 disk_path = os.path.dirname(disk_old)
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 disk_ext = os.path.splitext(disk_old)[1]
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 disk_image = disk_path + '/' + vm_name + disk_ext
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 disk.attrib['file'] = disk_image
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
107
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 if os.path.exists(vm_name + '.xml'):
22
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
109 print "File %s.xml exists, abort" % vm_name
daa7279b0d78 fix indent
taiki
parents: 20
diff changeset
110 sys.exit(1)
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
111 # config.write('/usr/local/etc/libvirt/qemu/' + vm_name + '.xml')
32
4bd7d676e608 add debugvm.py to method for manage port.
taiki
parents: 29
diff changeset
112 print("VM_NAME:" + vm_name)
29
cfa197bad124 fix bug
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
113 config.write('/etc/libvirt/qemu/' + vm_name + '.xml')
3
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 print "Created vm config file %s.xml" % vm_name
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 print "Use disk image %s, you must create it from the template disk: %s" % (disk_image, disk_old)
203445eb53a8 add xml generator.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 print "Done!"