Add --with-kvm-path configure option
[ganeti-local] / qa / qa_node.py
index 5691511..f337734 100644 (file)
@@ -1,3 +1,6 @@
+#
+#
+
 # Copyright (C) 2007 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -25,15 +28,20 @@ import qa_utils
 from qa_utils import AssertEqual, StartSSH
 
 
-def _NodeAdd(node):
+@qa_utils.DefineHook('node-add')
+def _NodeAdd(node, readd=False):
   master = qa_config.GetMasterNode()
 
-  if node.get('_added', False):
+  if not readd and node.get('_added', False):
     raise qa_error.Error("Node %s already in cluster" % node['primary'])
+  elif readd and not node.get('_added', False):
+    raise qa_error.Error("Node %s not yet in cluster" % node['primary'])
 
   cmd = ['gnt-node', 'add']
   if node.get('secondary', None):
     cmd.append('--secondary-ip=%s' % node['secondary'])
+  if readd:
+    cmd.append('--readd')
   cmd.append(node['primary'])
   AssertEqual(StartSSH(master['primary'],
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
@@ -41,6 +49,7 @@ def _NodeAdd(node):
   node['_added'] = True
 
 
+@qa_utils.DefineHook('node-remove')
 def _NodeRemove(node):
   master = qa_config.GetMasterNode()
 
@@ -55,7 +64,7 @@ def TestNodeAddAll():
   master = qa_config.GetMasterNode()
   for node in qa_config.get('nodes'):
     if node != master:
-      _NodeAdd(node)
+      _NodeAdd(node, readd=False)
 
 
 def TestNodeRemoveAll():
@@ -66,6 +75,13 @@ def TestNodeRemoveAll():
       _NodeRemove(node)
 
 
+@qa_utils.DefineHook('node-readd')
+def TestNodeReadd(node):
+  """gnt-node add --readd"""
+  _NodeAdd(node, readd=True)
+
+
+@qa_utils.DefineHook('node-info')
 def TestNodeInfo():
   """gnt-node info"""
   master = qa_config.GetMasterNode()
@@ -75,6 +91,7 @@ def TestNodeInfo():
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
 
 
+@qa_utils.DefineHook('node-volumes')
 def TestNodeVolumes():
   """gnt-node volumes"""
   master = qa_config.GetMasterNode()
@@ -84,14 +101,15 @@ def TestNodeVolumes():
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
 
 
+@qa_utils.DefineHook('node-failover')
 def TestNodeFailover(node, node2):
   """gnt-node failover"""
   master = qa_config.GetMasterNode()
 
   if qa_utils.GetNodeInstances(node2, secondaries=False):
-    raise qa_error.UnusableNodeError("Secondary node has at least one "
-                                     "primary instance. This test requires "
-                                     "it to have no primary instances.")
+    raise qa_error.UnusableNodeError("Secondary node has at least one"
+                                     " primary instance. This test requires"
+                                     " it to have no primary instances.")
 
   # Fail over to secondary node
   cmd = ['gnt-node', 'failover', '-f', node['primary']]
@@ -104,6 +122,7 @@ def TestNodeFailover(node, node2):
                        utils.ShellQuoteArgs(cmd)).wait(), 0)
 
 
+@qa_utils.DefineHook('node-evacuate')
 def TestNodeEvacuate(node, node2):
   """gnt-node evacuate"""
   master = qa_config.GetMasterNode()
@@ -111,9 +130,9 @@ def TestNodeEvacuate(node, node2):
   node3 = qa_config.AcquireNode(exclude=[node, node2])
   try:
     if qa_utils.GetNodeInstances(node3, secondaries=True):
-      raise qa_error.UnusableNodeError("Evacuation node has at least one "
-                                       "secondary instance. This test requires "
-                                       "it to have no secondary instances.")
+      raise qa_error.UnusableNodeError("Evacuation node has at least one"
+                                       " secondary instance. This test requires"
+                                       " it to have no secondary instances.")
 
     # Evacuate all secondary instances
     cmd = ['gnt-node', 'evacuate', '-f', node2['primary'], node3['primary']]