Revision b5f33afa qa/qa_instance.py
b/qa/qa_instance.py | ||
---|---|---|
71 | 71 |
"--disk-template=%s" % disk_template, |
72 | 72 |
"--node=%s" % node] + |
73 | 73 |
_GetGenericAddParameters(instance)) |
74 |
cmd.append(instance["name"])
|
|
74 |
cmd.append(instance.name)
|
|
75 | 75 |
|
76 | 76 |
AssertCommand(cmd) |
77 | 77 |
|
78 |
_CheckSsconfInstanceList(instance["name"])
|
|
78 |
_CheckSsconfInstanceList(instance.name)
|
|
79 | 79 |
qa_config.SetInstanceTemplate(instance, disk_template) |
80 | 80 |
|
81 | 81 |
return instance |
... | ... | |
147 | 147 |
@param instance: the instance |
148 | 148 |
|
149 | 149 |
""" |
150 |
info = _GetInstanceInfo(instance["name"])
|
|
150 |
info = _GetInstanceInfo(instance.name)
|
|
151 | 151 |
vols = info["volumes"] |
152 | 152 |
for node in info["nodes"]: |
153 | 153 |
AssertCommand(["lvremove", "-f"] + vols, node=node) |
... | ... | |
208 | 208 |
@InstanceCheck(None, INST_DOWN, FIRST_ARG) |
209 | 209 |
def TestInstanceRemove(instance): |
210 | 210 |
"""gnt-instance remove""" |
211 |
AssertCommand(["gnt-instance", "remove", "-f", instance["name"]])
|
|
211 |
AssertCommand(["gnt-instance", "remove", "-f", instance.name])
|
|
212 | 212 |
|
213 | 213 |
|
214 | 214 |
@InstanceCheck(INST_DOWN, INST_UP, FIRST_ARG) |
215 | 215 |
def TestInstanceStartup(instance): |
216 | 216 |
"""gnt-instance startup""" |
217 |
AssertCommand(["gnt-instance", "startup", instance["name"]])
|
|
217 |
AssertCommand(["gnt-instance", "startup", instance.name])
|
|
218 | 218 |
|
219 | 219 |
|
220 | 220 |
@InstanceCheck(INST_UP, INST_DOWN, FIRST_ARG) |
221 | 221 |
def TestInstanceShutdown(instance): |
222 | 222 |
"""gnt-instance shutdown""" |
223 |
AssertCommand(["gnt-instance", "shutdown", instance["name"]])
|
|
223 |
AssertCommand(["gnt-instance", "shutdown", instance.name])
|
|
224 | 224 |
|
225 | 225 |
|
226 | 226 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
... | ... | |
228 | 228 |
"""gnt-instance reboot""" |
229 | 229 |
options = qa_config.get("options", {}) |
230 | 230 |
reboot_types = options.get("reboot-types", constants.REBOOT_TYPES) |
231 |
name = instance["name"]
|
|
231 |
name = instance.name
|
|
232 | 232 |
for rtype in reboot_types: |
233 | 233 |
AssertCommand(["gnt-instance", "reboot", "--type=%s" % rtype, name]) |
234 | 234 |
|
... | ... | |
246 | 246 |
@InstanceCheck(INST_DOWN, INST_DOWN, FIRST_ARG) |
247 | 247 |
def TestInstanceReinstall(instance): |
248 | 248 |
"""gnt-instance reinstall""" |
249 |
AssertCommand(["gnt-instance", "reinstall", "-f", instance["name"]])
|
|
249 |
AssertCommand(["gnt-instance", "reinstall", "-f", instance.name])
|
|
250 | 250 |
|
251 | 251 |
# Test with non-existant OS definition |
252 | 252 |
AssertCommand(["gnt-instance", "reinstall", "-f", |
253 | 253 |
"--os-type=NonExistantOsForQa", |
254 |
instance["name"]],
|
|
254 |
instance.name],
|
|
255 | 255 |
fail=True) |
256 | 256 |
|
257 | 257 |
|
... | ... | |
336 | 336 |
" test") |
337 | 337 |
return |
338 | 338 |
|
339 |
cmd = ["gnt-instance", "failover", "--force", instance["name"]]
|
|
339 |
cmd = ["gnt-instance", "failover", "--force", instance.name]
|
|
340 | 340 |
|
341 | 341 |
# failover ... |
342 | 342 |
AssertCommand(cmd) |
... | ... | |
354 | 354 |
" test") |
355 | 355 |
return |
356 | 356 |
|
357 |
cmd = ["gnt-instance", "migrate", "--force", instance["name"]]
|
|
357 |
cmd = ["gnt-instance", "migrate", "--force", instance.name]
|
|
358 | 358 |
af_par = constants.BE_ALWAYS_FAILOVER |
359 | 359 |
af_field = "be/" + constants.BE_ALWAYS_FAILOVER |
360 |
af_init_val = _GetBoolInstanceField(instance["name"], af_field)
|
|
360 |
af_init_val = _GetBoolInstanceField(instance.name, af_field)
|
|
361 | 361 |
|
362 | 362 |
# migrate ... |
363 | 363 |
AssertCommand(cmd) |
... | ... | |
368 | 368 |
if toggle_always_failover: |
369 | 369 |
AssertCommand(["gnt-instance", "modify", "-B", |
370 | 370 |
("%s=%s" % (af_par, not af_init_val)), |
371 |
instance["name"]])
|
|
371 |
instance.name])
|
|
372 | 372 |
AssertCommand(cmd) |
373 | 373 |
# TODO: Verify the choice between failover and migration |
374 | 374 |
qa_utils.RunInstanceCheck(instance, True) |
375 | 375 |
if toggle_always_failover: |
376 | 376 |
AssertCommand(["gnt-instance", "modify", "-B", |
377 |
("%s=%s" % (af_par, af_init_val)), instance["name"]])
|
|
377 |
("%s=%s" % (af_par, af_init_val)), instance.name])
|
|
378 | 378 |
|
379 | 379 |
# TODO: Split into multiple tests |
380 |
AssertCommand(["gnt-instance", "shutdown", instance["name"]])
|
|
380 |
AssertCommand(["gnt-instance", "shutdown", instance.name])
|
|
381 | 381 |
qa_utils.RunInstanceCheck(instance, False) |
382 | 382 |
AssertCommand(cmd, fail=True) |
383 | 383 |
AssertCommand(["gnt-instance", "migrate", "--force", "--allow-failover", |
384 |
instance["name"]])
|
|
385 |
AssertCommand(["gnt-instance", "start", instance["name"]])
|
|
384 |
instance.name])
|
|
385 |
AssertCommand(["gnt-instance", "start", instance.name])
|
|
386 | 386 |
AssertCommand(cmd) |
387 | 387 |
# @InstanceCheck enforces the check that the instance is running |
388 | 388 |
qa_utils.RunInstanceCheck(instance, True) |
... | ... | |
390 | 390 |
AssertCommand(["gnt-instance", "modify", "-B", |
391 | 391 |
("%s=%s" % |
392 | 392 |
(constants.BE_ALWAYS_FAILOVER, constants.VALUE_TRUE)), |
393 |
instance["name"]])
|
|
393 |
instance.name])
|
|
394 | 394 |
|
395 | 395 |
AssertCommand(cmd) |
396 | 396 |
qa_utils.RunInstanceCheck(instance, True) |
... | ... | |
400 | 400 |
AssertCommand(["gnt-instance", "modify", "-B", |
401 | 401 |
("%s=%s" % |
402 | 402 |
(constants.BE_ALWAYS_FAILOVER, constants.VALUE_FALSE)), |
403 |
instance["name"]])
|
|
403 |
instance.name])
|
|
404 | 404 |
|
405 | 405 |
AssertCommand(cmd) |
406 | 406 |
qa_utils.RunInstanceCheck(instance, True) |
... | ... | |
408 | 408 |
|
409 | 409 |
def TestInstanceInfo(instance): |
410 | 410 |
"""gnt-instance info""" |
411 |
AssertCommand(["gnt-instance", "info", instance["name"]])
|
|
411 |
AssertCommand(["gnt-instance", "info", instance.name])
|
|
412 | 412 |
|
413 | 413 |
|
414 | 414 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
... | ... | |
456 | 456 |
]) |
457 | 457 |
|
458 | 458 |
for alist in args: |
459 |
AssertCommand(["gnt-instance", "modify"] + alist + [instance["name"]])
|
|
459 |
AssertCommand(["gnt-instance", "modify"] + alist + [instance.name])
|
|
460 | 460 |
|
461 | 461 |
# check no-modify |
462 |
AssertCommand(["gnt-instance", "modify", instance["name"]], fail=True)
|
|
462 |
AssertCommand(["gnt-instance", "modify", instance.name], fail=True)
|
|
463 | 463 |
|
464 | 464 |
# Marking offline while instance is running must fail... |
465 |
AssertCommand(["gnt-instance", "modify", "--offline", instance["name"]],
|
|
465 |
AssertCommand(["gnt-instance", "modify", "--offline", instance.name],
|
|
466 | 466 |
fail=True) |
467 | 467 |
|
468 | 468 |
# ...while making it online is ok, and should work |
469 |
AssertCommand(["gnt-instance", "modify", "--online", instance["name"]])
|
|
469 |
AssertCommand(["gnt-instance", "modify", "--online", instance.name])
|
|
470 | 470 |
|
471 | 471 |
|
472 | 472 |
@InstanceCheck(INST_DOWN, INST_DOWN, FIRST_ARG) |
473 | 473 |
def TestInstanceStoppedModify(instance): |
474 | 474 |
"""gnt-instance modify (stopped instance)""" |
475 |
name = instance["name"]
|
|
475 |
name = instance.name
|
|
476 | 476 |
|
477 | 477 |
# Instance was not marked offline; try marking it online once more |
478 | 478 |
AssertCommand(["gnt-instance", "modify", "--online", name]) |
... | ... | |
497 | 497 |
@InstanceCheck(INST_DOWN, INST_DOWN, FIRST_ARG) |
498 | 498 |
def TestInstanceConvertDiskToPlain(instance, inodes): |
499 | 499 |
"""gnt-instance modify -t""" |
500 |
name = instance["name"]
|
|
500 |
name = instance.name
|
|
501 | 501 |
template = qa_config.GetInstanceTemplate(instance) |
502 | 502 |
if template != "drbd": |
503 | 503 |
print qa_utils.FormatInfo("Unsupported template %s, skipping conversion" |
... | ... | |
515 | 515 |
if qa_config.GetExclusiveStorage(): |
516 | 516 |
print qa_utils.FormatInfo("Test not supported with exclusive_storage") |
517 | 517 |
return |
518 |
name = instance["name"]
|
|
518 |
name = instance.name
|
|
519 | 519 |
all_size = qa_config.get("disk") |
520 | 520 |
all_grow = qa_config.get("disk-growth") |
521 | 521 |
if not all_grow: |
... | ... | |
548 | 548 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
549 | 549 |
def TestInstanceConsole(instance): |
550 | 550 |
"""gnt-instance console""" |
551 |
AssertCommand(["gnt-instance", "console", "--show-cmd", instance["name"]])
|
|
551 |
AssertCommand(["gnt-instance", "console", "--show-cmd", instance.name])
|
|
552 | 552 |
|
553 | 553 |
|
554 | 554 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
... | ... | |
557 | 557 |
def buildcmd(args): |
558 | 558 |
cmd = ["gnt-instance", "replace-disks"] |
559 | 559 |
cmd.extend(args) |
560 |
cmd.append(instance["name"])
|
|
560 |
cmd.append(instance.name)
|
|
561 | 561 |
return cmd |
562 | 562 |
|
563 | 563 |
if not IsDiskReplacingSupported(instance): |
... | ... | |
589 | 589 |
AssertCommand(buildcmd(data)) |
590 | 590 |
|
591 | 591 |
AssertCommand(buildcmd(["-a"])) |
592 |
AssertCommand(["gnt-instance", "stop", instance["name"]])
|
|
592 |
AssertCommand(["gnt-instance", "stop", instance.name])
|
|
593 | 593 |
AssertCommand(buildcmd(["-a"]), fail=True) |
594 |
AssertCommand(["gnt-instance", "activate-disks", instance["name"]])
|
|
594 |
AssertCommand(["gnt-instance", "activate-disks", instance.name])
|
|
595 | 595 |
AssertCommand(["gnt-instance", "activate-disks", "--wait-for-sync", |
596 |
instance["name"]])
|
|
596 |
instance.name])
|
|
597 | 597 |
AssertCommand(buildcmd(["-a"])) |
598 |
AssertCommand(["gnt-instance", "start", instance["name"]])
|
|
598 |
AssertCommand(["gnt-instance", "start", instance.name])
|
|
599 | 599 |
|
600 | 600 |
|
601 | 601 |
def _AssertRecreateDisks(cmdargs, instance, fail=False, check=True, |
... | ... | |
612 | 612 |
if destroy: |
613 | 613 |
_DestroyInstanceVolumes(instance) |
614 | 614 |
AssertCommand((["gnt-instance", "recreate-disks"] + cmdargs + |
615 |
[instance["name"]]), fail)
|
|
615 |
[instance.name]), fail)
|
|
616 | 616 |
if not fail and check: |
617 | 617 |
# Quick check that the disks are there |
618 |
AssertCommand(["gnt-instance", "activate-disks", instance["name"]])
|
|
618 |
AssertCommand(["gnt-instance", "activate-disks", instance.name])
|
|
619 | 619 |
AssertCommand(["gnt-instance", "activate-disks", "--wait-for-sync", |
620 |
instance["name"]])
|
|
621 |
AssertCommand(["gnt-instance", "deactivate-disks", instance["name"]])
|
|
620 |
instance.name])
|
|
621 |
AssertCommand(["gnt-instance", "deactivate-disks", instance.name])
|
|
622 | 622 |
|
623 | 623 |
|
624 | 624 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
... | ... | |
640 | 640 |
_AssertRecreateDisks(["-I", "hail"], instance, fail=True, destroy=False) |
641 | 641 |
else: |
642 | 642 |
_AssertRecreateDisks(["-n", other_seq], instance, fail=True, destroy=False) |
643 |
AssertCommand(["gnt-instance", "stop", instance["name"]])
|
|
643 |
AssertCommand(["gnt-instance", "stop", instance.name])
|
|
644 | 644 |
# Disks exist: this should fail |
645 | 645 |
_AssertRecreateDisks([], instance, fail=True, destroy=False) |
646 | 646 |
# Recreate disks in place |
... | ... | |
656 | 656 |
# Move disks back |
657 | 657 |
_AssertRecreateDisks(["-n", orig_seq], instance, check=False) |
658 | 658 |
# This and InstanceCheck decoration check that the disks are working |
659 |
AssertCommand(["gnt-instance", "reinstall", "-f", instance["name"]])
|
|
660 |
AssertCommand(["gnt-instance", "start", instance["name"]])
|
|
659 |
AssertCommand(["gnt-instance", "reinstall", "-f", instance.name])
|
|
660 |
AssertCommand(["gnt-instance", "start", instance.name])
|
|
661 | 661 |
|
662 | 662 |
|
663 | 663 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
664 | 664 |
def TestInstanceExport(instance, node): |
665 | 665 |
"""gnt-backup export -n ...""" |
666 |
name = instance["name"]
|
|
666 |
name = instance.name
|
|
667 | 667 |
AssertCommand(["gnt-backup", "export", "-n", node.primary, name]) |
668 | 668 |
return qa_utils.ResolveInstanceName(name) |
669 | 669 |
|
... | ... | |
672 | 672 |
def TestInstanceExportWithRemove(instance, node): |
673 | 673 |
"""gnt-backup export --remove-instance""" |
674 | 674 |
AssertCommand(["gnt-backup", "export", "-n", node.primary, |
675 |
"--remove-instance", instance["name"]])
|
|
675 |
"--remove-instance", instance.name])
|
|
676 | 676 |
|
677 | 677 |
|
678 | 678 |
@InstanceCheck(INST_UP, INST_UP, FIRST_ARG) |
679 | 679 |
def TestInstanceExportNoTarget(instance): |
680 | 680 |
"""gnt-backup export (without target node, should fail)""" |
681 |
AssertCommand(["gnt-backup", "export", instance["name"]], fail=True)
|
|
681 |
AssertCommand(["gnt-backup", "export", instance.name], fail=True)
|
|
682 | 682 |
|
683 | 683 |
|
684 | 684 |
@InstanceCheck(None, INST_DOWN, FIRST_ARG) |
... | ... | |
692 | 692 |
"--src-dir=%s/%s" % (pathutils.EXPORT_DIR, name), |
693 | 693 |
"--node=%s" % node.primary] + |
694 | 694 |
_GetGenericAddParameters(newinst, force_mac=constants.VALUE_GENERATE)) |
695 |
cmd.append(newinst["name"])
|
|
695 |
cmd.append(newinst.name)
|
|
696 | 696 |
AssertCommand(cmd) |
697 | 697 |
qa_config.SetInstanceTemplate(newinst, templ) |
698 | 698 |
|
... | ... | |
719 | 719 |
@param set_online: function to call to set the node on-line |
720 | 720 |
|
721 | 721 |
""" |
722 |
info = _GetInstanceInfo(instance["name"])
|
|
722 |
info = _GetInstanceInfo(instance.name)
|
|
723 | 723 |
set_offline(snode) |
724 | 724 |
try: |
725 | 725 |
TestInstanceRemove(instance) |
Also available in: Unified diff