Statistics
| Branch: | Tag: | Revision:

root / qa / ganeti-qa.py @ 5d831182

History | View | Annotate | Download (10.8 kB)

1 a8083063 Iustin Pop
#!/usr/bin/python
2 a8083063 Iustin Pop
#
3 a8083063 Iustin Pop
4 cec9845c Michael Hanselmann
# Copyright (C) 2007 Google Inc.
5 a8083063 Iustin Pop
#
6 a8083063 Iustin Pop
# This program is free software; you can redistribute it and/or modify
7 a8083063 Iustin Pop
# it under the terms of the GNU General Public License as published by
8 a8083063 Iustin Pop
# the Free Software Foundation; either version 2 of the License, or
9 a8083063 Iustin Pop
# (at your option) any later version.
10 a8083063 Iustin Pop
#
11 a8083063 Iustin Pop
# This program is distributed in the hope that it will be useful, but
12 a8083063 Iustin Pop
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 a8083063 Iustin Pop
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 a8083063 Iustin Pop
# General Public License for more details.
15 a8083063 Iustin Pop
#
16 a8083063 Iustin Pop
# You should have received a copy of the GNU General Public License
17 a8083063 Iustin Pop
# along with this program; if not, write to the Free Software
18 a8083063 Iustin Pop
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 a8083063 Iustin Pop
# 02110-1301, USA.
20 a8083063 Iustin Pop
21 a8083063 Iustin Pop
22 cec9845c Michael Hanselmann
"""Script for doing QA on Ganeti.
23 94508060 Michael Hanselmann

24 94508060 Michael Hanselmann
"""
25 a8083063 Iustin Pop
26 a8083063 Iustin Pop
import sys
27 c68d1f43 Michael Hanselmann
import datetime
28 c68d1f43 Michael Hanselmann
import optparse
29 a8083063 Iustin Pop
30 cec9845c Michael Hanselmann
import qa_cluster
31 cec9845c Michael Hanselmann
import qa_config
32 cec9845c Michael Hanselmann
import qa_daemon
33 cec9845c Michael Hanselmann
import qa_env
34 cec9845c Michael Hanselmann
import qa_instance
35 cec9845c Michael Hanselmann
import qa_node
36 8947cf2b Michael Hanselmann
import qa_os
37 a47f574c Oleksiy Mishchenko
import qa_rapi
38 d74c2ca1 Michael Hanselmann
import qa_tags
39 1672a0d1 Michael Hanselmann
import qa_utils
40 a8083063 Iustin Pop
41 725ec2f1 René Nussbaumer
from ganeti import utils
42 725ec2f1 René Nussbaumer
43 a8083063 Iustin Pop
44 cec9845c Michael Hanselmann
def RunTest(fn, *args):
45 a8083063 Iustin Pop
  """Runs a test after printing a header.
46 a8083063 Iustin Pop

47 a8083063 Iustin Pop
  """
48 cec9845c Michael Hanselmann
  if fn.__doc__:
49 cec9845c Michael Hanselmann
    desc = fn.__doc__.splitlines()[0].strip()
50 a8083063 Iustin Pop
  else:
51 cec9845c Michael Hanselmann
    desc = '%r' % fn
52 a8083063 Iustin Pop
53 c68d1f43 Michael Hanselmann
  now = str(datetime.datetime.now())
54 a8083063 Iustin Pop
55 a8083063 Iustin Pop
  print
56 a8083063 Iustin Pop
  print '---', now, ('-' * (55 - len(now)))
57 a8083063 Iustin Pop
  print desc
58 a8083063 Iustin Pop
  print '-' * 60
59 a8083063 Iustin Pop
60 cec9845c Michael Hanselmann
  return fn(*args)
61 a8083063 Iustin Pop
62 a8083063 Iustin Pop
63 b1ffe1eb Michael Hanselmann
def RunEnvTests():
64 b1ffe1eb Michael Hanselmann
  """Run several environment tests.
65 a8083063 Iustin Pop

66 a8083063 Iustin Pop
  """
67 b1ffe1eb Michael Hanselmann
  if not qa_config.TestEnabled('env'):
68 b1ffe1eb Michael Hanselmann
    return
69 a8083063 Iustin Pop
70 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestSshConnection)
71 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestIcmpPing)
72 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestGanetiCommands)
73 a8083063 Iustin Pop
74 94508060 Michael Hanselmann
75 725ec2f1 René Nussbaumer
def SetupCluster(rapi_user, rapi_secret):
76 b1ffe1eb Michael Hanselmann
  """Initializes the cluster.
77 a8083063 Iustin Pop

78 725ec2f1 René Nussbaumer
  @param rapi_user: Login user for RAPI
79 725ec2f1 René Nussbaumer
  @param rapi_secret: Login secret for RAPI
80 725ec2f1 René Nussbaumer

81 b1ffe1eb Michael Hanselmann
  """
82 a5b9d725 Iustin Pop
  if qa_config.TestEnabled('create-cluster'):
83 725ec2f1 René Nussbaumer
    RunTest(qa_cluster.TestClusterInit, rapi_user, rapi_secret)
84 a5b9d725 Iustin Pop
    RunTest(qa_node.TestNodeAddAll)
85 8e671b7c Iustin Pop
  else:
86 8e671b7c Iustin Pop
    # consider the nodes are already there
87 8e671b7c Iustin Pop
    qa_node.MarkNodeAddedAll()
88 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-info'):
89 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeInfo)
90 b1ffe1eb Michael Hanselmann
91 b1ffe1eb Michael Hanselmann
92 b1ffe1eb Michael Hanselmann
def RunClusterTests():
93 b1ffe1eb Michael Hanselmann
  """Runs tests related to gnt-cluster.
94 180bdd1f Michael Hanselmann

95 b1ffe1eb Michael Hanselmann
  """
96 6d4a1656 Michael Hanselmann
  if qa_config.TestEnabled("cluster-renew-crypto"):
97 6d4a1656 Michael Hanselmann
    RunTest(qa_cluster.TestClusterRenewCrypto)
98 6d4a1656 Michael Hanselmann
99 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-verify'):
100 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterVerify)
101 e9e35aaa Michael Hanselmann
102 caea3b32 Iustin Pop
  if qa_config.TestEnabled('cluster-rename'):
103 caea3b32 Iustin Pop
    RunTest(qa_cluster.TestClusterRename)
104 caea3b32 Iustin Pop
105 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-info'):
106 62843684 Michael Hanselmann
    RunTest(qa_cluster.TestClusterVersion)
107 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterInfo)
108 283f9d4c Michael Hanselmann
    RunTest(qa_cluster.TestClusterGetmaster)
109 283f9d4c Michael Hanselmann
110 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-copyfile'):
111 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterCopyfile)
112 a8083063 Iustin Pop
113 830da270 Michael Hanselmann
  if qa_config.TestEnabled('cluster-command'):
114 830da270 Michael Hanselmann
    RunTest(qa_cluster.TestClusterCommand)
115 830da270 Michael Hanselmann
116 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-burnin'):
117 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterBurnin)
118 a8083063 Iustin Pop
119 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-master-failover'):
120 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterMasterFailover)
121 a8083063 Iustin Pop
122 a47f574c Oleksiy Mishchenko
  if qa_rapi.Enabled():
123 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestVersion)
124 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestEmptyCluster)
125 8947cf2b Michael Hanselmann
126 6d4a1656 Michael Hanselmann
127 b1ffe1eb Michael Hanselmann
def RunOsTests():
128 b1ffe1eb Michael Hanselmann
  """Runs all tests related to gnt-os.
129 5d640672 Michael Hanselmann

130 b1ffe1eb Michael Hanselmann
  """
131 b1ffe1eb Michael Hanselmann
  if not qa_config.TestEnabled('os'):
132 b1ffe1eb Michael Hanselmann
    return
133 b1ffe1eb Michael Hanselmann
134 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsList)
135 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsDiagnose)
136 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsValid)
137 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsInvalid)
138 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsPartiallyValid)
139 fca11dec René Nussbaumer
  RunTest(qa_os.TestOsModifyValid)
140 fca11dec René Nussbaumer
  RunTest(qa_os.TestOsModifyInvalid)
141 b1ffe1eb Michael Hanselmann
142 b1ffe1eb Michael Hanselmann
143 b1ffe1eb Michael Hanselmann
def RunCommonInstanceTests(instance):
144 b1ffe1eb Michael Hanselmann
  """Runs a few tests that are common to all disk types.
145 b1ffe1eb Michael Hanselmann

146 b1ffe1eb Michael Hanselmann
  """
147 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-shutdown'):
148 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceShutdown, instance)
149 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceStartup, instance)
150 a8083063 Iustin Pop
151 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-list'):
152 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceList)
153 283f9d4c Michael Hanselmann
154 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-info'):
155 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceInfo, instance)
156 e9e35aaa Michael Hanselmann
157 c0f74c55 Iustin Pop
  if qa_config.TestEnabled('instance-modify'):
158 c0f74c55 Iustin Pop
    RunTest(qa_instance.TestInstanceModify, instance)
159 c0f74c55 Iustin Pop
160 4379b1fa Michael Hanselmann
  if qa_config.TestEnabled('instance-console'):
161 4379b1fa Michael Hanselmann
    RunTest(qa_instance.TestInstanceConsole, instance)
162 4379b1fa Michael Hanselmann
163 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-reinstall'):
164 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceShutdown, instance)
165 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceReinstall, instance)
166 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceStartup, instance)
167 a8083063 Iustin Pop
168 8a4e8898 Michael Hanselmann
  if qa_config.TestEnabled('instance-reboot'):
169 8a4e8898 Michael Hanselmann
    RunTest(qa_instance.TestInstanceReboot, instance)
170 8a4e8898 Michael Hanselmann
171 18337ca9 Iustin Pop
  if qa_config.TestEnabled('instance-rename'):
172 18337ca9 Iustin Pop
    RunTest(qa_instance.TestInstanceShutdown, instance)
173 18337ca9 Iustin Pop
    RunTest(qa_instance.TestInstanceRename, instance)
174 18337ca9 Iustin Pop
    RunTest(qa_instance.TestInstanceStartup, instance)
175 18337ca9 Iustin Pop
176 d74c2ca1 Michael Hanselmann
  if qa_config.TestEnabled('tags'):
177 d74c2ca1 Michael Hanselmann
    RunTest(qa_tags.TestInstanceTags, instance)
178 d74c2ca1 Michael Hanselmann
179 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-volumes'):
180 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeVolumes)
181 23269c5b Michael Hanselmann
182 8e1db003 Michael Hanselmann
  if qa_config.TestEnabled("node-storage"):
183 8e1db003 Michael Hanselmann
    RunTest(qa_node.TestNodeStorage)
184 8e1db003 Michael Hanselmann
185 a47f574c Oleksiy Mishchenko
  if qa_rapi.Enabled():
186 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestInstance, instance)
187 23269c5b Michael Hanselmann
188 8d8d650c Michael Hanselmann
189 b1ffe1eb Michael Hanselmann
def RunExportImportTests(instance, pnode):
190 b1ffe1eb Michael Hanselmann
  """Tries to export and import the instance.
191 a8083063 Iustin Pop

192 b1ffe1eb Michael Hanselmann
  """
193 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-export'):
194 b1ffe1eb Michael Hanselmann
    expnode = qa_config.AcquireNode(exclude=pnode)
195 b1ffe1eb Michael Hanselmann
    try:
196 b1ffe1eb Michael Hanselmann
      name = RunTest(qa_instance.TestInstanceExport, instance, expnode)
197 b1ffe1eb Michael Hanselmann
198 b1ffe1eb Michael Hanselmann
      RunTest(qa_instance.TestBackupList, expnode)
199 b1ffe1eb Michael Hanselmann
200 b1ffe1eb Michael Hanselmann
      if qa_config.TestEnabled('instance-import'):
201 b1ffe1eb Michael Hanselmann
        newinst = qa_config.AcquireInstance()
202 5d640672 Michael Hanselmann
        try:
203 b1ffe1eb Michael Hanselmann
          RunTest(qa_instance.TestInstanceImport, pnode, newinst,
204 b1ffe1eb Michael Hanselmann
                  expnode, name)
205 b1ffe1eb Michael Hanselmann
          RunTest(qa_instance.TestInstanceRemove, newinst)
206 5d640672 Michael Hanselmann
        finally:
207 b1ffe1eb Michael Hanselmann
          qa_config.ReleaseInstance(newinst)
208 b1ffe1eb Michael Hanselmann
    finally:
209 b1ffe1eb Michael Hanselmann
      qa_config.ReleaseNode(expnode)
210 5d640672 Michael Hanselmann
211 5d831182 Michael Hanselmann
  if (qa_rapi.Enabled() and
212 5d831182 Michael Hanselmann
      qa_config.TestEnabled("inter-cluster-instance-move")):
213 5d831182 Michael Hanselmann
    newinst = qa_config.AcquireInstance()
214 5d831182 Michael Hanselmann
    try:
215 5d831182 Michael Hanselmann
      pnode2 = qa_config.AcquireNode(exclude=pnode)
216 5d831182 Michael Hanselmann
      try:
217 5d831182 Michael Hanselmann
        RunTest(qa_rapi.TestInterClusterInstanceMove, instance, newinst,
218 5d831182 Michael Hanselmann
                pnode2, pnode)
219 5d831182 Michael Hanselmann
      finally:
220 5d831182 Michael Hanselmann
        qa_config.ReleaseNode(pnode2)
221 5d831182 Michael Hanselmann
    finally:
222 5d831182 Michael Hanselmann
      qa_config.ReleaseInstance(newinst)
223 5d831182 Michael Hanselmann
224 283f9d4c Michael Hanselmann
225 b1ffe1eb Michael Hanselmann
def RunDaemonTests(instance, pnode):
226 b1ffe1eb Michael Hanselmann
  """Test the ganeti-watcher script.
227 9df6d173 Michael Hanselmann

228 b1ffe1eb Michael Hanselmann
  """
229 b1ffe1eb Michael Hanselmann
  automatic_restart = \
230 b1ffe1eb Michael Hanselmann
    qa_config.TestEnabled('instance-automatic-restart')
231 b1ffe1eb Michael Hanselmann
  consecutive_failures = \
232 b1ffe1eb Michael Hanselmann
    qa_config.TestEnabled('instance-consecutive-failures')
233 a8083063 Iustin Pop
234 b1ffe1eb Michael Hanselmann
  if automatic_restart or consecutive_failures:
235 b1ffe1eb Michael Hanselmann
    qa_daemon.PrintCronWarning()
236 5d640672 Michael Hanselmann
237 b1ffe1eb Michael Hanselmann
    if automatic_restart:
238 b1ffe1eb Michael Hanselmann
      RunTest(qa_daemon.TestInstanceAutomaticRestart, pnode, instance)
239 e9e35aaa Michael Hanselmann
240 b1ffe1eb Michael Hanselmann
    if consecutive_failures:
241 6623a5c1 Michael Hanselmann
      RunTest(qa_daemon.TestInstanceConsecutiveFailures, pnode, instance)
242 e9e35aaa Michael Hanselmann
243 9df6d173 Michael Hanselmann
244 b1ffe1eb Michael Hanselmann
def RunHardwareFailureTests(instance, pnode, snode):
245 b1ffe1eb Michael Hanselmann
  """Test cluster internal hardware failure recovery.
246 a8083063 Iustin Pop

247 b1ffe1eb Michael Hanselmann
  """
248 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-failover'):
249 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceFailover, instance)
250 b1ffe1eb Michael Hanselmann
251 7910e7a5 Michael Hanselmann
  if qa_config.TestEnabled('instance-replace-disks'):
252 76f59a32 Michael Hanselmann
    othernode = qa_config.AcquireNode(exclude=[pnode, snode])
253 7910e7a5 Michael Hanselmann
    try:
254 7910e7a5 Michael Hanselmann
      RunTest(qa_instance.TestReplaceDisks,
255 7910e7a5 Michael Hanselmann
              instance, pnode, snode, othernode)
256 7910e7a5 Michael Hanselmann
    finally:
257 7910e7a5 Michael Hanselmann
      qa_config.ReleaseNode(othernode)
258 7910e7a5 Michael Hanselmann
259 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-evacuate'):
260 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeEvacuate, pnode, snode)
261 b1ffe1eb Michael Hanselmann
262 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-failover'):
263 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeFailover, pnode, snode)
264 b1ffe1eb Michael Hanselmann
265 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-disk-failure'):
266 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceMasterDiskFailure,
267 b1ffe1eb Michael Hanselmann
            instance, pnode, snode)
268 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceSecondaryDiskFailure,
269 b1ffe1eb Michael Hanselmann
            instance, pnode, snode)
270 b1ffe1eb Michael Hanselmann
271 b1ffe1eb Michael Hanselmann
272 b1ffe1eb Michael Hanselmann
def main():
273 b1ffe1eb Michael Hanselmann
  """Main program.
274 b1ffe1eb Michael Hanselmann

275 b1ffe1eb Michael Hanselmann
  """
276 a39ec11a Michael Hanselmann
  parser = optparse.OptionParser(usage="%prog [options] <config-file>")
277 b1ffe1eb Michael Hanselmann
  parser.add_option('--yes-do-it', dest='yes_do_it',
278 b1ffe1eb Michael Hanselmann
      action="store_true",
279 b1ffe1eb Michael Hanselmann
      help="Really execute the tests")
280 b1ffe1eb Michael Hanselmann
  (qa_config.options, args) = parser.parse_args()
281 5d640672 Michael Hanselmann
282 a39ec11a Michael Hanselmann
  if len(args) == 1:
283 a39ec11a Michael Hanselmann
    (config_file, ) = args
284 b1ffe1eb Michael Hanselmann
  else:
285 a39ec11a Michael Hanselmann
    parser.error("Wrong number of arguments.")
286 a8083063 Iustin Pop
287 b1ffe1eb Michael Hanselmann
  if not qa_config.options.yes_do_it:
288 b1ffe1eb Michael Hanselmann
    print ("Executing this script irreversibly destroys any Ganeti\n"
289 b1ffe1eb Michael Hanselmann
           "configuration on all nodes involved. If you really want\n"
290 b1ffe1eb Michael Hanselmann
           "to start testing, supply the --yes-do-it option.")
291 b1ffe1eb Michael Hanselmann
    sys.exit(1)
292 e9e35aaa Michael Hanselmann
293 b1ffe1eb Michael Hanselmann
  qa_config.Load(config_file)
294 a8083063 Iustin Pop
295 725ec2f1 René Nussbaumer
  rapi_user = "ganeti-qa"
296 725ec2f1 René Nussbaumer
  rapi_secret = utils.GenerateSecret()
297 725ec2f1 René Nussbaumer
298 b1ffe1eb Michael Hanselmann
  RunEnvTests()
299 725ec2f1 René Nussbaumer
  SetupCluster(rapi_user, rapi_secret)
300 2771835c Michael Hanselmann
301 2771835c Michael Hanselmann
  # Load RAPI certificate
302 2771835c Michael Hanselmann
  qa_rapi.Setup(rapi_user, rapi_secret)
303 2771835c Michael Hanselmann
304 b1ffe1eb Michael Hanselmann
  RunClusterTests()
305 b1ffe1eb Michael Hanselmann
  RunOsTests()
306 4b62db14 Michael Hanselmann
307 d74c2ca1 Michael Hanselmann
  if qa_config.TestEnabled('tags'):
308 d74c2ca1 Michael Hanselmann
    RunTest(qa_tags.TestClusterTags)
309 d74c2ca1 Michael Hanselmann
310 102b115b Michael Hanselmann
  if qa_config.TestEnabled('node-readd'):
311 102b115b Michael Hanselmann
    master = qa_config.GetMasterNode()
312 102b115b Michael Hanselmann
    pnode = qa_config.AcquireNode(exclude=master)
313 102b115b Michael Hanselmann
    try:
314 102b115b Michael Hanselmann
      RunTest(qa_node.TestNodeReadd, pnode)
315 102b115b Michael Hanselmann
    finally:
316 102b115b Michael Hanselmann
      qa_config.ReleaseNode(pnode)
317 102b115b Michael Hanselmann
318 b1ffe1eb Michael Hanselmann
  pnode = qa_config.AcquireNode()
319 b1ffe1eb Michael Hanselmann
  try:
320 d74c2ca1 Michael Hanselmann
    if qa_config.TestEnabled('tags'):
321 d74c2ca1 Michael Hanselmann
      RunTest(qa_tags.TestNodeTags, pnode)
322 d74c2ca1 Michael Hanselmann
323 a47f574c Oleksiy Mishchenko
    if qa_rapi.Enabled():
324 a47f574c Oleksiy Mishchenko
      RunTest(qa_rapi.TestNode, pnode)
325 a47f574c Oleksiy Mishchenko
326 8cb70e56 Michael Hanselmann
      if qa_config.TestEnabled("instance-add-plain-disk"):
327 924e95f9 Michael Hanselmann
        for use_client in [True, False]:
328 924e95f9 Michael Hanselmann
          rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode,
329 924e95f9 Michael Hanselmann
                                  use_client)
330 924e95f9 Michael Hanselmann
          RunCommonInstanceTests(rapi_instance)
331 924e95f9 Michael Hanselmann
          RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client)
332 924e95f9 Michael Hanselmann
          del rapi_instance
333 8cb70e56 Michael Hanselmann
334 b1ffe1eb Michael Hanselmann
    if qa_config.TestEnabled('instance-add-plain-disk'):
335 b1ffe1eb Michael Hanselmann
      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
336 b1ffe1eb Michael Hanselmann
      RunCommonInstanceTests(instance)
337 b1ffe1eb Michael Hanselmann
      RunExportImportTests(instance, pnode)
338 b1ffe1eb Michael Hanselmann
      RunDaemonTests(instance, pnode)
339 b1ffe1eb Michael Hanselmann
      RunTest(qa_instance.TestInstanceRemove, instance)
340 b1ffe1eb Michael Hanselmann
      del instance
341 9df6d173 Michael Hanselmann
342 7d7609a3 Michael Hanselmann
    multinode_tests = [
343 7d7609a3 Michael Hanselmann
      ('instance-add-drbd-disk',
344 7d7609a3 Michael Hanselmann
       qa_instance.TestInstanceAddWithDrbdDisk),
345 7d7609a3 Michael Hanselmann
    ]
346 7d7609a3 Michael Hanselmann
347 7d7609a3 Michael Hanselmann
    for name, func in multinode_tests:
348 7d7609a3 Michael Hanselmann
      if qa_config.TestEnabled(name):
349 7d7609a3 Michael Hanselmann
        snode = qa_config.AcquireNode(exclude=pnode)
350 7d7609a3 Michael Hanselmann
        try:
351 7d7609a3 Michael Hanselmann
          instance = RunTest(func, pnode, snode)
352 7d7609a3 Michael Hanselmann
          RunCommonInstanceTests(instance)
353 7f69aabb Iustin Pop
          if qa_config.TestEnabled('instance-convert-disk'):
354 7f69aabb Iustin Pop
            RunTest(qa_instance.TestInstanceConvertDisk, instance, snode)
355 7d7609a3 Michael Hanselmann
          RunExportImportTests(instance, pnode)
356 7d7609a3 Michael Hanselmann
          RunHardwareFailureTests(instance, pnode, snode)
357 7d7609a3 Michael Hanselmann
          RunTest(qa_instance.TestInstanceRemove, instance)
358 7d7609a3 Michael Hanselmann
          del instance
359 7d7609a3 Michael Hanselmann
        finally:
360 7d7609a3 Michael Hanselmann
          qa_config.ReleaseNode(snode)
361 a8083063 Iustin Pop
362 8d8d650c Michael Hanselmann
    if (qa_config.TestEnabled('instance-add-plain-disk') and
363 8d8d650c Michael Hanselmann
        qa_config.TestEnabled("instance-export")):
364 8d8d650c Michael Hanselmann
      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
365 8d8d650c Michael Hanselmann
      expnode = qa_config.AcquireNode(exclude=pnode)
366 8d8d650c Michael Hanselmann
      try:
367 8d8d650c Michael Hanselmann
        RunTest(qa_instance.TestInstanceExportWithRemove, instance, expnode)
368 8d8d650c Michael Hanselmann
        RunTest(qa_instance.TestBackupList, expnode)
369 8d8d650c Michael Hanselmann
      finally:
370 8d8d650c Michael Hanselmann
        qa_config.ReleaseNode(expnode)
371 8d8d650c Michael Hanselmann
      del expnode
372 8d8d650c Michael Hanselmann
      del instance
373 8d8d650c Michael Hanselmann
374 a8083063 Iustin Pop
  finally:
375 b1ffe1eb Michael Hanselmann
    qa_config.ReleaseNode(pnode)
376 a8083063 Iustin Pop
377 a5b9d725 Iustin Pop
  if qa_config.TestEnabled('create-cluster'):
378 a5b9d725 Iustin Pop
    RunTest(qa_node.TestNodeRemoveAll)
379 a8083063 Iustin Pop
380 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-destroy'):
381 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterDestroy)
382 a8083063 Iustin Pop
383 cec9845c Michael Hanselmann
384 cec9845c Michael Hanselmann
if __name__ == '__main__':
385 cec9845c Michael Hanselmann
  main()