Statistics
| Branch: | Tag: | Revision:

root / qa / ganeti-qa.py @ 2a7c3583

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 2a7c3583 Michael Hanselmann
from ganeti import rapi
43 2a7c3583 Michael Hanselmann
44 2a7c3583 Michael Hanselmann
import ganeti.rapi.client
45 725ec2f1 René Nussbaumer
46 a8083063 Iustin Pop
47 cec9845c Michael Hanselmann
def RunTest(fn, *args):
48 a8083063 Iustin Pop
  """Runs a test after printing a header.
49 a8083063 Iustin Pop

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

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

81 725ec2f1 René Nussbaumer
  @param rapi_user: Login user for RAPI
82 725ec2f1 René Nussbaumer
  @param rapi_secret: Login secret for RAPI
83 725ec2f1 René Nussbaumer

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

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

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

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

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

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

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

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