Make GetDiskTemplateSets output disabled disk templates
authorHelga Velroyen <helgav@google.com>
Wed, 9 Oct 2013 10:48:23 +0000 (12:48 +0200)
committerHelga Velroyen <helgav@google.com>
Fri, 11 Oct 2013 11:13:39 +0000 (13:13 +0200)
This patch extends the 'GetDiskTemplateSets' function to
also output the list of disk templates that were enabled
before this operation, but will be disabled afterwards.
This patch also includes code to check for instances using
disk templates that are about to be disabled.

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>

lib/cmdlib/cluster.py
test/py/ganeti.cmdlib.cluster_unittest.py

index 5b4411b..5b269cb 100644 (file)
@@ -793,24 +793,36 @@ class LUClusterSetParams(LogicalUnit):
   @staticmethod
   def _GetDiskTemplateSetsInner(op_enabled_disk_templates,
                                 old_enabled_disk_templates):
-    """Determines the enabled disk templates and the subset of disk templates
-       that are newly enabled by this operation.
+    """Computes three sets of disk templates.
+
+    @see: C{_GetDiskTemplateSets} for more details.
 
     """
     enabled_disk_templates = None
     new_enabled_disk_templates = []
+    disabled_disk_templates = []
     if op_enabled_disk_templates:
       enabled_disk_templates = op_enabled_disk_templates
       new_enabled_disk_templates = \
-        list(set(enabled_disk_templates)
-             - set(old_enabled_disk_templates))
+          list(set(enabled_disk_templates)
+               - set(old_enabled_disk_templates))
+      disabled_disk_templates = \
+          list(set(old_enabled_disk_templates)
+               - set(enabled_disk_templates))
     else:
       enabled_disk_templates = old_enabled_disk_templates
-    return (enabled_disk_templates, new_enabled_disk_templates)
+    return (enabled_disk_templates, new_enabled_disk_templates,
+            disabled_disk_templates)
 
   def _GetDiskTemplateSets(self, cluster):
-    """Determines the enabled disk templates and the subset of disk templates
-       that are newly enabled by this operation.
+    """Computes three sets of disk templates.
+
+    The three sets are:
+      - disk templates that will be enabled after this operation (no matter if
+        they were enabled before or not)
+      - disk templates that get enabled by this operation (thus haven't been
+        enabled before.)
+      - disk templates that get disabled by this operation
 
     """
     return self._GetDiskTemplateSetsInner(self.op.enabled_disk_templates,
@@ -945,8 +957,9 @@ class LUClusterSetParams(LogicalUnit):
                              for node in self.cfg.GetAllNodesInfo().values()
                              if node.uuid in node_uuids and node.vm_capable]
 
-    (enabled_disk_templates, new_enabled_disk_templates) = \
-      self._GetDiskTemplateSets(cluster)
+    (enabled_disk_templates, new_enabled_disk_templates,
+        disabled_disk_templates) = self._GetDiskTemplateSets(cluster)
+    self._CheckInstancesOfDisabledDiskTemplates(disabled_disk_templates)
 
     self._CheckVgName(vm_capable_node_uuids, enabled_disk_templates,
                       new_enabled_disk_templates)
index cb910cb..12460e6 100755 (executable)
@@ -81,11 +81,23 @@ class TestGetEnabledDiskTemplates(unittest.TestCase):
   def testNoNew(self):
     op_dts = [constants.DT_DISKLESS]
     old_dts = [constants.DT_DISKLESS]
-    (enabled_dts, new_dts) =\
+    (enabled_dts, new_dts, disabled_dts) =\
         cluster.LUClusterSetParams._GetDiskTemplateSetsInner(
             op_dts, old_dts)
     self.assertEqual(enabled_dts, old_dts)
     self.assertEqual(new_dts, [])
+    self.assertEqual(disabled_dts, [])
+
+  def testValid(self):
+    op_dts = [constants.DT_PLAIN, constants.DT_DRBD8]
+    old_dts = [constants.DT_DISKLESS, constants.DT_PLAIN]
+    (enabled_dts, new_dts, disabled_dts) =\
+        cluster.LUClusterSetParams._GetDiskTemplateSetsInner(
+            op_dts, old_dts)
+    self.assertEqual(enabled_dts, op_dts)
+    self.assertEqual(new_dts, [constants.DT_DRBD8])
+    self.assertEqual(disabled_dts, [constants.DT_DISKLESS])
+
 
 
 if __name__ == "__main__":