bash_completion: Move common code into function
[ganeti-local] / qa / ganeti-qa.py
index 42b95b8..4c2a2fc 100755 (executable)
 
 """Script for doing QA on Ganeti.
 
 
 """Script for doing QA on Ganeti.
 
-You can create the required known_hosts file using ssh-keyscan. It's mandatory
-to use the full name of a node (FQDN). For security reasons, verify the keys
-before using them.
-Example: ssh-keyscan -t rsa node{1,2,3,4}.example.com > known_hosts
 """
 
 import sys
 """
 
 import sys
@@ -38,7 +34,7 @@ import qa_env
 import qa_instance
 import qa_node
 import qa_os
 import qa_instance
 import qa_node
 import qa_os
-import qa_other
+import qa_rapi
 import qa_tags
 import qa_utils
 
 import qa_tags
 import qa_utils
 
@@ -78,8 +74,9 @@ def SetupCluster():
   """Initializes the cluster.
 
   """
   """Initializes the cluster.
 
   """
-  RunTest(qa_cluster.TestClusterInit)
-  RunTest(qa_node.TestNodeAddAll)
+  if qa_config.TestEnabled('create-cluster'):
+    RunTest(qa_cluster.TestClusterInit)
+    RunTest(qa_node.TestNodeAddAll)
   if qa_config.TestEnabled('node-info'):
     RunTest(qa_node.TestNodeInfo)
 
   if qa_config.TestEnabled('node-info'):
     RunTest(qa_node.TestNodeInfo)
 
@@ -91,6 +88,9 @@ def RunClusterTests():
   if qa_config.TestEnabled('cluster-verify'):
     RunTest(qa_cluster.TestClusterVerify)
 
   if qa_config.TestEnabled('cluster-verify'):
     RunTest(qa_cluster.TestClusterVerify)
 
+  if qa_config.TestEnabled('cluster-rename'):
+    RunTest(qa_cluster.TestClusterRename)
+
   if qa_config.TestEnabled('cluster-info'):
     RunTest(qa_cluster.TestClusterVersion)
     RunTest(qa_cluster.TestClusterInfo)
   if qa_config.TestEnabled('cluster-info'):
     RunTest(qa_cluster.TestClusterVersion)
     RunTest(qa_cluster.TestClusterInfo)
@@ -108,6 +108,9 @@ def RunClusterTests():
   if qa_config.TestEnabled('cluster-master-failover'):
     RunTest(qa_cluster.TestClusterMasterFailover)
 
   if qa_config.TestEnabled('cluster-master-failover'):
     RunTest(qa_cluster.TestClusterMasterFailover)
 
+  if qa_rapi.Enabled():
+    RunTest(qa_rapi.TestVersion)
+    RunTest(qa_rapi.TestEmptyCluster)
 
 def RunOsTests():
   """Runs all tests related to gnt-os.
 
 def RunOsTests():
   """Runs all tests related to gnt-os.
@@ -140,17 +143,25 @@ def RunCommonInstanceTests(instance):
   if qa_config.TestEnabled('instance-modify'):
     RunTest(qa_instance.TestInstanceModify, instance)
 
   if qa_config.TestEnabled('instance-modify'):
     RunTest(qa_instance.TestInstanceModify, instance)
 
+  if qa_config.TestEnabled('instance-console'):
+    RunTest(qa_instance.TestInstanceConsole, instance)
+
   if qa_config.TestEnabled('instance-reinstall'):
     RunTest(qa_instance.TestInstanceShutdown, instance)
     RunTest(qa_instance.TestInstanceReinstall, instance)
     RunTest(qa_instance.TestInstanceStartup, instance)
 
   if qa_config.TestEnabled('instance-reinstall'):
     RunTest(qa_instance.TestInstanceShutdown, instance)
     RunTest(qa_instance.TestInstanceReinstall, instance)
     RunTest(qa_instance.TestInstanceStartup, instance)
 
+  if qa_config.TestEnabled('instance-reboot'):
+    RunTest(qa_instance.TestInstanceReboot, instance)
+
   if qa_config.TestEnabled('tags'):
     RunTest(qa_tags.TestInstanceTags, instance)
 
   if qa_config.TestEnabled('node-volumes'):
     RunTest(qa_node.TestNodeVolumes)
 
   if qa_config.TestEnabled('tags'):
     RunTest(qa_tags.TestInstanceTags, instance)
 
   if qa_config.TestEnabled('node-volumes'):
     RunTest(qa_node.TestNodeVolumes)
 
+  if qa_rapi.Enabled():
+    RunTest(qa_rapi.TestInstance, instance)
 
 def RunExportImportTests(instance, pnode):
   """Tries to export and import the instance.
 
 def RunExportImportTests(instance, pnode):
   """Tries to export and import the instance.
@@ -201,6 +212,14 @@ def RunHardwareFailureTests(instance, pnode, snode):
   if qa_config.TestEnabled('instance-failover'):
     RunTest(qa_instance.TestInstanceFailover, instance)
 
   if qa_config.TestEnabled('instance-failover'):
     RunTest(qa_instance.TestInstanceFailover, instance)
 
+  if qa_config.TestEnabled('instance-replace-disks'):
+    othernode = qa_config.AcquireNode(exclude=[pnode, snode])
+    try:
+      RunTest(qa_instance.TestReplaceDisks,
+              instance, pnode, snode, othernode)
+    finally:
+      qa_config.ReleaseNode(othernode)
+
   if qa_config.TestEnabled('node-evacuate'):
     RunTest(qa_node.TestNodeEvacuate, pnode, snode)
 
   if qa_config.TestEnabled('node-evacuate'):
     RunTest(qa_node.TestNodeEvacuate, pnode, snode)
 
@@ -218,20 +237,16 @@ def main():
   """Main program.
 
   """
   """Main program.
 
   """
-  parser = optparse.OptionParser(usage="%prog [options] <config-file>"
-                                       " <known-hosts-file>")
-  parser.add_option('--dry-run', dest='dry_run',
-      action="store_true",
-      help="Show what would be done")
+  parser = optparse.OptionParser(usage="%prog [options] <config-file>")
   parser.add_option('--yes-do-it', dest='yes_do_it',
       action="store_true",
       help="Really execute the tests")
   (qa_config.options, args) = parser.parse_args()
 
   parser.add_option('--yes-do-it', dest='yes_do_it',
       action="store_true",
       help="Really execute the tests")
   (qa_config.options, args) = parser.parse_args()
 
-  if len(args) == 2:
-    (config_file, known_hosts_file) = args
+  if len(args) == 1:
+    (config_file, ) = args
   else:
   else:
-    parser.error("Not enough arguments.")
+    parser.error("Wrong number of arguments.")
 
   if not qa_config.options.yes_do_it:
     print ("Executing this script irreversibly destroys any Ganeti\n"
 
   if not qa_config.options.yes_do_it:
     print ("Executing this script irreversibly destroys any Ganeti\n"
@@ -240,9 +255,6 @@ def main():
     sys.exit(1)
 
   qa_config.Load(config_file)
     sys.exit(1)
 
   qa_config.Load(config_file)
-  qa_utils.LoadHooks()
-
-  RunTest(qa_other.UploadKnownHostsFile, known_hosts_file)
 
   RunEnvTests()
   SetupCluster()
 
   RunEnvTests()
   SetupCluster()
@@ -252,11 +264,22 @@ def main():
   if qa_config.TestEnabled('tags'):
     RunTest(qa_tags.TestClusterTags)
 
   if qa_config.TestEnabled('tags'):
     RunTest(qa_tags.TestClusterTags)
 
+  if qa_config.TestEnabled('node-readd'):
+    master = qa_config.GetMasterNode()
+    pnode = qa_config.AcquireNode(exclude=master)
+    try:
+      RunTest(qa_node.TestNodeReadd, pnode)
+    finally:
+      qa_config.ReleaseNode(pnode)
+
   pnode = qa_config.AcquireNode()
   try:
     if qa_config.TestEnabled('tags'):
       RunTest(qa_tags.TestNodeTags, pnode)
 
   pnode = qa_config.AcquireNode()
   try:
     if qa_config.TestEnabled('tags'):
       RunTest(qa_tags.TestNodeTags, pnode)
 
+    if qa_rapi.Enabled():
+      RunTest(qa_rapi.TestNode, pnode)
+
     if qa_config.TestEnabled('instance-add-plain-disk'):
       instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
       RunCommonInstanceTests(instance)
     if qa_config.TestEnabled('instance-add-plain-disk'):
       instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
       RunCommonInstanceTests(instance)
@@ -265,16 +288,7 @@ def main():
       RunTest(qa_instance.TestInstanceRemove, instance)
       del instance
 
       RunTest(qa_instance.TestInstanceRemove, instance)
       del instance
 
-    if qa_config.TestEnabled('instance-add-local-mirror-disk'):
-      instance = RunTest(qa_instance.TestInstanceAddWithLocalMirrorDisk, pnode)
-      RunCommonInstanceTests(instance)
-      RunExportImportTests(instance, pnode)
-      RunTest(qa_instance.TestInstanceRemove, instance)
-      del instance
-
     multinode_tests = [
     multinode_tests = [
-      ('instance-add-remote-raid-disk',
-       qa_instance.TestInstanceAddWithRemoteRaidDisk),
       ('instance-add-drbd-disk',
        qa_instance.TestInstanceAddWithDrbdDisk),
     ]
       ('instance-add-drbd-disk',
        qa_instance.TestInstanceAddWithDrbdDisk),
     ]
@@ -295,7 +309,8 @@ def main():
   finally:
     qa_config.ReleaseNode(pnode)
 
   finally:
     qa_config.ReleaseNode(pnode)
 
-  RunTest(qa_node.TestNodeRemoveAll)
+  if qa_config.TestEnabled('create-cluster'):
+    RunTest(qa_node.TestNodeRemoveAll)
 
   if qa_config.TestEnabled('cluster-destroy'):
     RunTest(qa_cluster.TestClusterDestroy)
 
   if qa_config.TestEnabled('cluster-destroy'):
     RunTest(qa_cluster.TestClusterDestroy)