On Tue Aug 26 2014 at 10:49:54 AM 'Aaron Karper' via ganeti-devel <
[email protected]> wrote:

> 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
>
>
LGTM again, with the lint changes.

Cheers,
Michele

Reply via email to