"gnt-instance add" and "gnt-instance recreate-disks" are tested giving the
number of spindles, when supported. Also, QA for "gnt-instance
recreate-disks" now covers the case where disks are resized.

Signed-off-by: Bernardo Dal Seno <[email protected]>
---
 qa/qa-sample.json       |  2 ++
 qa/qa_config.py         | 13 +++++++++++++
 qa/qa_instance.py       | 29 +++++++++++++++++++++++++----
 qa/qa_instance_utils.py |  7 +++++++
 4 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/qa/qa-sample.json b/qa/qa-sample.json
index 2dc1975..55bf1b9 100644
--- a/qa/qa-sample.json
+++ b/qa/qa-sample.json
@@ -72,11 +72,13 @@
   "disks": [
     {
       "size": "1G",
+      "spindles": 2,
       "name": "disk0",
       "growth": "2G"
     },
     {
       "size": "512M",
+      "spindles": 1,
       "name": "disk1",
       "growth": "768M"
     }
diff --git a/qa/qa_config.py b/qa/qa_config.py
index 959a347..d9e5b0e 100644
--- a/qa/qa_config.py
+++ b/qa/qa_config.py
@@ -418,6 +418,12 @@ class _QaConfig(object):
     return enabled and (not self.GetExclusiveStorage() or
                         templ in constants.DTS_EXCL_STORAGE)
 
+  def AreSpindlesSupported(self):
+    """Are spindles supported by the current configuration?
+
+    """
+    return self.GetExclusiveStorage()
+
   def GetVclusterSettings(self):
     """Returns settings for virtual cluster.
 
@@ -643,6 +649,13 @@ def IsTemplateSupported(templ):
   return GetConfig().IsTemplateSupported(templ)
 
 
+def AreSpindlesSupported():
+  """Wrapper for L{_QaConfig.AreSpindlesSupported}.
+
+  """
+  return GetConfig().AreSpindlesSupported()
+
+
 def _NodeSortKey(node):
   """Returns sort key for a node.
 
diff --git a/qa/qa_instance.py b/qa/qa_instance.py
index b88b4d6..08e3626 100644
--- a/qa/qa_instance.py
+++ b/qa/qa_instance.py
@@ -840,12 +840,33 @@ def TestRecreateDisks(instance, inodes, othernodes):
     _AssertRecreateDisks(["-n", other_seq], instance)
   # Move disks back
   _AssertRecreateDisks(["-n", orig_seq], instance)
-  # Recreate the disks one by one
-  for idx in range(0, len(qa_config.GetDiskOptions())):
+  # Recreate resized disks
+  alldisks = qa_config.GetDiskOptions()
+  if qa_config.AreSpindlesSupported():
+    build_disks_opt = (lambda idx, disk:
+                       ("--disk=%s:size=%s,spindles=%s" %
+                        (idx, (utils.ParseUnit(disk["size"]) +
+                               utils.ParseUnit(disk["growth"])),
+                         disk["spindles"] + disk["spindles-growth"])))
+  else:
+    build_disks_opt = (lambda idx, disk:
+                       ("--disk=%s:size=%s" %
+                        (idx, (utils.ParseUnit(disk["size"]) +
+                               utils.ParseUnit(disk["growth"])))))
+  disk_opts = map(build_disks_opt, range(0, len(alldisks)), (alldisks))
+  _AssertRecreateDisks(disk_opts, instance)
+  # Recreate the disks one by one (with the original size)
+  if qa_config.AreSpindlesSupported():
+    build_disks_opt = lambda idx, disk: ("--disk=%s:size=%s,spindles=%s" %
+                                         (idx, disk["size"], disk["spindles"]))
+  else:
+    build_disks_opt = lambda idx, disk: ("--disk=%s:size=%s" %
+                                         (idx, disk["size"]))
+  for (idx, disk) in enumerate(alldisks):
     # Only the first call should destroy all the disk
     destroy = (idx == 0)
-    _AssertRecreateDisks(["--disk=%s" % idx], instance, destroy=destroy,
-                         check=False)
+    _AssertRecreateDisks([build_disks_opt(idx, disk)], instance,
+                         destroy=destroy, check=False)
   # This and InstanceCheck decoration check that the disks are working
   AssertCommand(["gnt-instance", "reinstall", "-f", instance.name])
   AssertCommand(["gnt-instance", "start", instance.name])
diff --git a/qa/qa_instance_utils.py b/qa/qa_instance_utils.py
index 40afde8..02165a9 100644
--- a/qa/qa_instance_utils.py
+++ b/qa/qa_instance_utils.py
@@ -30,6 +30,7 @@ from ganeti import constants
 from ganeti import pathutils
 
 import qa_config
+import qa_error
 import qa_utils
 
 from qa_utils import AssertIn, AssertCommand
@@ -53,6 +54,12 @@ def GetGenericAddParameters(inst, disk_template, 
force_mac=None):
       diskparams = "%s:size=%s" % (idx, size)
       if name:
         diskparams += ",name=%s" % name
+      if qa_config.AreSpindlesSupported():
+        spindles = disk.get("spindles")
+        if spindles is None:
+          qa_error.Error("'spindles' is a required parameter for disks when 
you"
+                         " enable exclusive storage tests")
+        diskparams += ",spindles=%s" % spindles
       params.extend(["--disk", diskparams])
 
   # Set static MAC address if configured
-- 
1.8.2.1

Reply via email to