Add enabled disk templates to cluster cfg
authorHelga Velroyen <helgav@google.com>
Mon, 25 Mar 2013 15:56:48 +0000 (16:56 +0100)
committerHelga Velroyen <helgav@google.com>
Thu, 11 Apr 2013 20:52:17 +0000 (22:52 +0200)
This patch adds constants for enabling disk templates to the constants,
and the cluster configuration in haskell and python. It removes the
obsolete preference list for enabled storage types.

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

lib/constants.py
lib/objects.py
src/Ganeti/Objects.hs

index 3926f02..544f61f 100644 (file)
@@ -398,18 +398,6 @@ DEFAULT_ENABLED_STORAGE_TYPES = compat.UniqueFrozenset([
   ST_LVM_VG,
   ])
 
-# This is used to order determine the default storage type when the list
-# of enabled storage types is inferred from the current state of the cluster.
-# This only happens on an upgrade from a version of Ganeti that did not
-# support the 'enabled_storage_methods' so far.
-STORAGE_TYPES_PREFERENCE = [
-  ST_LVM_VG,
-  ST_FILE,
-  ST_SHARED_FILE,
-  ST_RADOS,
-  ST_BLOCK,
-  ]
-
 # Storage fields
 # first two are valid in LU context only, not passed to backend
 SF_NODE = "node"
@@ -458,6 +446,38 @@ DT_PLAIN = "plain"
 DT_RBD = "rbd"
 DT_SHARED_FILE = "sharedfile"
 
+# This is used to order determine the default disk template when the list
+# of enabled disk templates is inferred from the current state of the cluster.
+# This only happens on an upgrade from a version of Ganeti that did not
+# support the 'enabled_disk_templates' so far.
+DISK_TEMPLATE_PREFERENCE = [
+  DT_DRBD8,
+  DT_PLAIN,
+  DT_FILE,
+  DT_SHARED_FILE,
+  DT_RBD,
+  DT_BLOCK,
+  DT_DISKLESS,
+  DT_EXT
+  ]
+
+DISK_TEMPLATES = compat.UniqueFrozenset([
+  DT_DISKLESS,
+  DT_PLAIN,
+  DT_DRBD8,
+  DT_FILE,
+  DT_SHARED_FILE,
+  DT_BLOCK,
+  DT_RBD,
+  DT_EXT
+  ])
+
+# disk templates that are enabled by default
+DEFAULT_ENABLED_DISK_TEMPLATES = compat.UniqueFrozenset([
+  DT_DRBD8,
+  DT_PLAIN,
+  ])
+
 # mapping of disk templates to storage types
 DISK_TEMPLATES_STORAGE_TYPE = {
   DT_BLOCK: ST_BLOCK,
@@ -645,17 +665,6 @@ RIE_CONNECT_RETRIES = 10
 #: Give child process up to 5 seconds to exit after sending a signal
 CHILD_LINGER_TIMEOUT = 5.0
 
-DISK_TEMPLATES = compat.UniqueFrozenset([
-  DT_DISKLESS,
-  DT_PLAIN,
-  DT_DRBD8,
-  DT_FILE,
-  DT_SHARED_FILE,
-  DT_BLOCK,
-  DT_RBD,
-  DT_EXT
-  ])
-
 FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
 
 # import/export config options
index d8dbca0..4cc4c0c 100644 (file)
@@ -477,37 +477,38 @@ class ConfigData(ConfigObject):
       self.networks = {}
     for network in self.networks.values():
       network.UpgradeConfig()
-    self._UpgradeStorageTypes()
+    self._UpgradeEnabledDiskTemplates()
 
-  def _UpgradeStorageTypes(self):
-    """Upgrade the cluster's enabled storage types by inspecting the currently
-       enabled and/or used storage types.
+  def _UpgradeEnabledDiskTemplates(self):
+    """Upgrade the cluster's enabled disk templates by inspecting the currently
+       enabled and/or used disk templates.
 
     """
-    # enabled_storage_types in the cluster config were introduced in 2.8. Remove
-    # this code once upgrading from earlier versions is deprecated.
-    if not self.cluster.enabled_storage_types:
-      storage_type_set = \
-        set([constants.DISK_TEMPLATES_STORAGE_TYPE[inst.disk_template]
-               for inst in self.instances.values()])
-      # Add lvm, file and shared file storage, if they are enabled, even though
-      # they might currently not be used.
+    # enabled_disk_templates in the cluster config were introduced in 2.8.
+    # Remove this code once upgrading from earlier versions is deprecated.
+    if not self.cluster.enabled_disk_templates:
+      template_set = \
+        set([inst.disk_template for inst in self.instances.values()])
+      # Add drbd and plain, if lvm is enabled (by specifying a volume group)
       if self.cluster.volume_group_name:
-        storage_type_set.add(constants.ST_LVM_VG)
+        template_set.add(constants.DT_DRBD8)
+        template_set.add(constants.DT_PLAIN)
       # FIXME: Adapt this when dis/enabling at configure time is removed.
+      # Enable 'file' and 'sharedfile', if they are enabled, even though they
+      # might currently not be used.
       if constants.ENABLE_FILE_STORAGE:
-        storage_type_set.add(constants.ST_FILE)
+        template_set.add(constants.DT_FILE)
       if constants.ENABLE_SHARED_FILE_STORAGE:
-        storage_type_set.add(constants.ST_SHARED_FILE)
-      # Set enabled_storage_types to the inferred storage types. Order them
+        template_set.add(constants.DT_SHARED_FILE)
+      # Set enabled_disk_templates to the inferred disk templates. Order them
       # according to a preference list that is based on Ganeti's history of
-      # supported storage types.
-      self.cluster.enabled_storage_types = []
-      for preferred_type in constants.STORAGE_TYPES_PREFERENCE:
-        if preferred_type in storage_type_set:
-          self.cluster.enabled_storage_types.append(preferred_type)
-          storage_type_set.remove(preferred_type)
-      self.cluster.enabled_storage_types.extend(list(storage_type_set))
+      # supported disk templates.
+      self.cluster.enabled_disk_templates = []
+      for preferred_template in constants.DISK_TEMPLATE_PREFERENCE:
+        if preferred_template in template_set:
+          self.cluster.enabled_disk_templates.append(preferred_template)
+          template_set.remove(preferred_template)
+      self.cluster.enabled_disk_templates.extend(list(template_set))
 
 
 class NIC(ConfigObject):
@@ -1540,7 +1541,10 @@ class Cluster(TaggableObject):
     "prealloc_wipe_disks",
     "hv_state_static",
     "disk_state_static",
+    # Keeping this in temporarily to not break the build between patches of
+    # this series. Remove after 'enabled_disk_templates' is fully implemented.
     "enabled_storage_types",
+    "enabled_disk_templates",
     ] + _TIMESTAMPS + _UUID
 
   def UpgradeConfig(self):
index bfbab6b..2cb9984 100644 (file)
@@ -706,7 +706,10 @@ $(buildObject "Cluster" "cluster" $
   , simpleField "primary_ip_family"       [t| IpFamily         |]
   , simpleField "prealloc_wipe_disks"     [t| Bool             |]
   , simpleField "ipolicy"                 [t| FilledIPolicy    |]
+  -- FIXME: Remove enabled storage types once enabled disk templates
+  -- is fully implemented.
   , simpleField "enabled_storage_types"   [t| [StorageType]    |]
+  , simpleField "enabled_disk_templates"  [t| [DiskTemplate]   |]
  ]
  ++ timeStampFields
  ++ uuidFields