1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#!/usr/bin/python -u
import libvirt
import sys
import os
import time
if not os.access("/proc/xen", os.R_OK):
print 'System is not running a Xen kernel'
sys.exit(1)
#
# Try to provide default OS images paths here, of course non standard
#
osroots = [
"/u/fc4.img",
"/xen/fc4.img",
]
okay = 1
osroot = None
for root in osroots:
if os.access(root, os.R_OK):
osroot = root
break
if osroot == None:
print "Could not find a guest OS root, edit to add the path in osroots"
sys.exit(1)
kernel=open("/proc/version").read().split()
kernelOv = kernel[2]
if kernelOv.find('hypervisor'):
kernelU = "/boot/vmlinuz-" + kernelOv.replace('hypervisor', 'guest')
initrdU = "/boot/initrd-" + kernelOv.replace('hypervisor', 'guest') + ".img"
elif kernelOv.find('xen0'):
kernelU = "/boot/vmlinuz-" + kernelOv.replace('xen0', 'xenU')
initrdU = "/boot/initrd-" + kernelOv.replace('xen0', 'xenU') + ".img"
if not os.access(kernelU, os.R_OK):
print "Did not found the guest kernel %s" % (kernelU)
sys.exit(1)
kernelU = "<kernel>" + kernelU + "</kernel>"
if not os.access(initrdU, os.R_OK):
print "Did not found the guest initrd %s" % (initrdU)
initrdU = ""
else:
initrdU = "<initrd>" + initrdU + "</initrd>"
conn = libvirt.openReadOnly(None)
if conn == None:
print 'Failed to open connection to the hypervisor'
sys.exit(1)
xmldesc="""<domain type='xen'>
<name>test</name>
<os>
<type>linux</type>
""" + kernelU + initrdU + """
<cmdline> root=/dev/sda1 ro selinux=0 3</cmdline>
</os>
<memory>131072</memory>
<vcpu>1</vcpu>
<devices>
<disk type='file'>
<source file='%s'/>
<target dev='sda1'/>
</disk>
<interface type='bridge'>
<source bridge='xenbr0'/>
<mac address='aa:00:00:00:00:12'/>
<script path='/etc/xen/scripts/vif-bridge'/>
</interface>
</devices>
</domain>
""" % (osroot)
dom = conn.createLinux(xmldesc, 0)
if dom == None:
print 'Failed to create a test domain'
sys.exit(1)
print dom
print "Domain: id %d running %s" % (dom.ID(), dom.OSType())
print "Suspending test domain for 5 seconds"
if dom.suspend() != 0:
print 'Failed to suspend domain test'
dom.destroy()
del dom
del conn
sys.exit(1)
infos = dom.info()
time.sleep(5)
infos2 = dom.info()
if infos[4] != infos2[4]:
print 'Suspended domain test got CPU cycles'
okay = 0
print "resuming test domain for 10 seconds"
if dom.resume() != 0:
print 'Failed to resume domain test'
dom.destroy()
del dom
del conn
sys.exit(1)
time.sleep(10)
print "shutdown of test domain"
if dom.shutdown() != 0:
okay = 0
print 'Failed to shutdown domain test'
i = 0
while i < 30:
time.sleep(1)
i = i + 1
try:
t = dom.info()[4]
except:
okay = 0
t = -1
break;
if t == 0:
break
if t != 0:
print 'Shutdown failed destroying domain test'
okay = 0
dom.destroy()
del dom
del conn
if okay == 1:
print "OK"
sys.exit(0)
|