In order to modify the data collectors displayed, there are the options
--enable-data-collector=[inst-status-xen ..] and
--disable-data-collector=[inst-status-xen ..]

Includes bootstrap.py and cfgupgrade.py setting data_collectors config
values.

Signed-off-by: Aaron Karper <[email protected]>
---
 lib/bootstrap.py               |  5 +++++
 lib/client/gnt_cluster.py      | 28 ++++++++++++++++++++++++++--
 lib/cmdlib/cluster.py          |  7 +++++++
 lib/objects.py                 |  2 +-
 src/Ganeti/Constants.hs        |  3 +++
 src/Ganeti/OpCodes.hs          |  2 ++
 src/Ganeti/OpParams.hs         | 14 ++++++++++++++
 test/hs/Test/Ganeti/OpCodes.hs |  9 +++++++++
 test/py/cfgupgrade_unittest.py |  7 +++++++
 9 files changed, 74 insertions(+), 3 deletions(-)

diff --git a/lib/bootstrap.py b/lib/bootstrap.py
index 5ae88eb..88ae71e 100644
--- a/lib/bootstrap.py
+++ b/lib/bootstrap.py
@@ -812,6 +812,10 @@ def InitCluster(cluster_name, mac_prefix, # pylint: 
disable=R0913, R0914
   if compression_tools is not None:
     cluster.CheckCompressionTools(compression_tools)
 
+  data_collectors = dict(
+      (name, dict(active=True))
+      for name in constants.DATA_COLLECTOR_NAMES)
+
   # init of cluster config file
   cluster_config = objects.Cluster(
     serial_no=1,
@@ -841,6 +845,7 @@ def InitCluster(cluster_name, mac_prefix, # pylint: 
disable=R0913, R0914
     ctime=now,
     mtime=now,
     maintain_node_health=maintain_node_health,
+    data_collectors=data_collectors,
     drbd_usermode_helper=drbd_helper,
     default_iallocator=default_iallocator,
     default_iallocator_params=default_iallocator_params,
diff --git a/lib/client/gnt_cluster.py b/lib/client/gnt_cluster.py
index 655cb43..69a3fdf 100644
--- a/lib/client/gnt_cluster.py
+++ b/lib/client/gnt_cluster.py
@@ -75,6 +75,16 @@ TO_OPT = cli_option("--to", default=None, type="string",
 RESUME_OPT = cli_option("--resume", default=False, action="store_true",
                         help="Resume any pending Ganeti upgrades")
 
+ENABLE_DATA_COLLECTOR = cli_option(
+    "--enable-data-collector",
+    action="append", choices=list(constants.DATA_COLLECTOR_NAMES),
+    help="Reactivate a data collector for reporting.")
+
+DISABLE_DATA_COLLECTOR = cli_option(
+    "--disable-data-collector",
+    action="append", choices=list(constants.DATA_COLLECTOR_NAMES),
+    help="Deactivate a data collector for reporting.")
+
 _EPO_PING_INTERVAL = 30 # 30 seconds between pings
 _EPO_PING_TIMEOUT = 1 # 1 second
 _EPO_REACHABLE_TIMEOUT = 15 * 60 # 15 minutes
@@ -1173,7 +1183,9 @@ def SetClusterParams(opts, args):
           opts.shared_file_storage_dir is not None or
           opts.compression_tools is not None or
           opts.shared_file_storage_dir is not None or
-          opts.enabled_user_shutdown is not None):
+          opts.enabled_user_shutdown is not None or
+          opts.enable_data_collector is not None or
+          opts.disable_data_collector is not None):
     ToStderr("Please give at least one of the parameters.")
     return 1
 
@@ -1256,6 +1268,14 @@ def SetClusterParams(opts, args):
 
   compression_tools = _GetCompressionTools(opts)
 
+  enable_dcs = set(opts.enable_data_collector or [])
+  disable_dcs = set(opts.disable_data_collector or [])
+  enable_and_disable = enable_dcs & disable_dcs
+  if enable_and_disable:
+    ToStderr("Can't enable and disable %s at the same time." %
+             sorted(enable_and_disable))
+    return 1
+
   op = opcodes.OpClusterSetParams(
     vg_name=vg_name,
     drbd_helper=drbd_helper,
@@ -1294,6 +1314,8 @@ def SetClusterParams(opts, args):
     shared_file_storage_dir=opts.shared_file_storage_dir,
     compression_tools=compression_tools,
     enabled_user_shutdown=opts.enabled_user_shutdown,
+    enable_data_collectors=list(enable_dcs),
+    disable_data_collectors=list(disable_dcs),
     )
   return base.GetResult(None, opts, SubmitOrSend(op, opts))
 
@@ -2279,7 +2301,9 @@ commands = {
       ENABLED_USER_SHUTDOWN_OPT] +
      INSTANCE_POLICY_OPTS +
      [GLOBAL_FILEDIR_OPT, GLOBAL_SHARED_FILEDIR_OPT, ZEROING_IMAGE_OPT,
-      COMPRESSION_TOOLS_OPT],
+      COMPRESSION_TOOLS_OPT] +
+     [ENABLE_DATA_COLLECTOR,
+      DISABLE_DATA_COLLECTOR],
     "[opts...]",
     "Alters the parameters of the cluster"),
   "renew-crypto": (
diff --git a/lib/cmdlib/cluster.py b/lib/cmdlib/cluster.py
index 10c9d8c..915c418 100644
--- a/lib/cmdlib/cluster.py
+++ b/lib/cmdlib/cluster.py
@@ -1559,6 +1559,13 @@ class LUClusterSetParams(LogicalUnit):
 
     ensure_kvmd = False
 
+    active = constants.DATA_COLLECTOR_STATE_ACTIVE
+    for name in self.op.enable_data_collectors:
+      self.cluster.data_collectors[name][active] = True
+
+    for name in self.op.disable_data_collectors:
+      self.cluster.data_collectors[name][active] = False
+
     if self.op.hvparams:
       self.cluster.hvparams = self.new_hvparams
     if self.op.os_hvp:
diff --git a/lib/objects.py b/lib/objects.py
index 2fa72a0..02ea411 100644
--- a/lib/objects.py
+++ b/lib/objects.py
@@ -407,7 +407,6 @@ class ConfigData(ConfigObject):
     "networks",
     "disks",
     "serial_no",
-    "datacollectors",
     ] + _TIMESTAMPS
 
   def ToDict(self, _with_private=False):
@@ -1618,6 +1617,7 @@ class Cluster(TaggableObject):
     "zeroing_image",
     "compression_tools",
     "enabled_user_shutdown",
+    "data_collectors",
     ] + _TIMESTAMPS + _UUID
 
   def UpgradeConfig(self):
diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
index 494797c..6bc1b9f 100644
--- a/src/Ganeti/Constants.hs
+++ b/src/Ganeti/Constants.hs
@@ -5134,3 +5134,6 @@ dataCollectorNames =
                       , dataCollectorLv
                       , dataCollectorInstStatus
                       ]
+
+dataCollectorStateActive :: String
+dataCollectorStateActive = "active"
diff --git a/src/Ganeti/OpCodes.hs b/src/Ganeti/OpCodes.hs
index 635cd1b..b5b4991 100644
--- a/src/Ganeti/OpCodes.hs
+++ b/src/Ganeti/OpCodes.hs
@@ -246,6 +246,8 @@ $(genOpCode "OpCode"
      , pZeroingImage
      , pCompressionTools
      , pEnabledUserShutdown
+     , pEnableDataCollectors
+     , pDisableDataCollectors
      ],
      [])
   , ("OpClusterRedistConf",
diff --git a/src/Ganeti/OpParams.hs b/src/Ganeti/OpParams.hs
index 413fae9..2b02280 100644
--- a/src/Ganeti/OpParams.hs
+++ b/src/Ganeti/OpParams.hs
@@ -282,6 +282,8 @@ module Ganeti.OpParams
   , pEnabledDiskTemplates
   , pEnabledUserShutdown
   , pAdminStateSource
+  , pEnableDataCollectors
+  , pDisableDataCollectors
   ) where
 
 import Control.Monad (liftM, mplus)
@@ -1829,3 +1831,15 @@ pNetworkVlan :: Field
 pNetworkVlan =
   withDoc "Network vlan when connecting to a group" .
   defaultField [| "" |] $ stringField "network_vlan"
+
+pEnableDataCollectors :: Field
+pEnableDataCollectors =
+  withDoc "Reactivate the data collectors" .
+  defaultField [| emptyListSet |] $
+  simpleField "enable_data_collectors" [t| ListSet String |]
+
+pDisableDataCollectors :: Field
+pDisableDataCollectors =
+  withDoc "Deactivate the data collectors" .
+  defaultField [| emptyListSet |] $
+  simpleField "disable_data_collectors" [t| ListSet String |]
diff --git a/test/hs/Test/Ganeti/OpCodes.hs b/test/hs/Test/Ganeti/OpCodes.hs
index 57e96cf..f881731 100644
--- a/test/hs/Test/Ganeti/OpCodes.hs
+++ b/test/hs/Test/Ganeti/OpCodes.hs
@@ -39,6 +39,7 @@ import Control.Monad
 import Data.Char
 import Data.List
 import qualified Data.Map as Map
+import qualified Data.Set as Set
 import qualified Text.JSON as J
 import Text.Printf (printf)
 
@@ -50,6 +51,7 @@ import Test.Ganeti.Types ()
 
 import Ganeti.BasicTypes
 import qualified Ganeti.Constants as C
+import qualified Ganeti.ConstantUtils as CU
 import qualified Ganeti.OpCodes as OpCodes
 import Ganeti.Types
 import Ganeti.OpParams
@@ -116,6 +118,11 @@ instance Arbitrary ExportTarget where
                     , ExportTargetRemote <$> pure []
                     ]
 
+arbitraryDataCollector :: Gen (ListSet String)
+arbitraryDataCollector = do
+  els <-  listOf . elements $ CU.toList C.dataCollectorNames
+  return . ListSet $ Set.fromList els
+
 instance Arbitrary OpCodes.OpCode where
   arbitrary = do
     op_id <- elements OpCodes.allOpIDs
@@ -224,6 +231,8 @@ instance Arbitrary OpCodes.OpCode where
           <*> genMaybe (listOf genPrintableAsciiStringNE)
                                            -- compression_tools
           <*> arbitrary                    -- enabled_user_shutdown
+          <*> arbitraryDataCollector   -- activate_data_collectors
+          <*> arbitraryDataCollector   -- deactivate_data_collectors
       "OP_CLUSTER_REDIST_CONF" -> pure OpCodes.OpClusterRedistConf
       "OP_CLUSTER_ACTIVATE_MASTER_IP" ->
         pure OpCodes.OpClusterActivateMasterIp
diff --git a/test/py/cfgupgrade_unittest.py b/test/py/cfgupgrade_unittest.py
index 3f8c3cf..b61967e 100755
--- a/test/py/cfgupgrade_unittest.py
+++ b/test/py/cfgupgrade_unittest.py
@@ -54,6 +54,13 @@ def GetMinimalConfig():
       "zeroing_image": "",
       "compression_tools": constants.IEC_DEFAULT_TOOLS,
       "enabled_user_shutdown": False,
+      "data_collectors": {
+        "diskstats": { "active": True },
+        "drbd": { "active": True },
+        "lv": { "active": True },
+        "inst-status-xen": { "active": True },
+        "cpu-avg-load": { "active": True },
+      },
     },
     "instances": {},
     "disks": {},
-- 
2.1.0.rc2.206.gedb03e5

Reply via email to