Add hroller htools personality
authorGuido Trotter <ultrotter@google.com>
Thu, 15 Nov 2012 10:21:36 +0000 (11:21 +0100)
committerGuido Trotter <ultrotter@google.com>
Wed, 19 Dec 2012 17:28:59 +0000 (18:28 +0100)
This is a new personality that for the moment doesn't do anything.

Signed-off-by: Guido Trotter <ultrotter@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

Makefile.am
autotools/run-in-tempdir
htest/cli-tests-defs.sh
htest/shelltests/htools-basic.test
htools/Ganeti/HTools/Program.hs
htools/Ganeti/HTools/Program/Hroller.hs [copied from htools/hconfd.hs with 56% similarity]
man/hroller.rst [new file with mode: 0644]
man/htools.rst

index 7c31f56..ec2e647 100644 (file)
@@ -407,7 +407,7 @@ docrst = \
        doc/walkthrough.rst
 
 HS_PROGS = htools/htools htools/mon-collector
-HS_BIN_ROLES = hbal hscan hspace hinfo hcheck
+HS_BIN_ROLES = hbal hscan hspace hinfo hcheck hroller
 HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
 
 HS_ALL_PROGS = \
@@ -481,6 +481,7 @@ HS_LIB_SRCS = \
        htools/Ganeti/HTools/Program/Hinfo.hs \
        htools/Ganeti/HTools/Program/Hscan.hs \
        htools/Ganeti/HTools/Program/Hspace.hs \
+       htools/Ganeti/HTools/Program/Hroller.hs \
        htools/Ganeti/HTools/Types.hs \
        htools/Ganeti/Hash.hs \
        htools/Ganeti/JQueue.hs \
@@ -851,6 +852,7 @@ man_MANS = \
        man/hinfo.1 \
        man/hscan.1 \
        man/hspace.1 \
+       man/hroller.1 \
        man/htools.1 \
        man/mon-collector.7
 
index fa698fe..d5bdb7a 100755 (executable)
@@ -24,7 +24,7 @@ for hfile in htools ganeti-confd mon-collector; do
 done
 
 for hfile in hpc-htools test offline-test.sh cli-tests-defs.sh \
-  hbal hscan hspace hinfo hcheck hail hpc-mon-collector; do
+  hbal hscan hspace hinfo hcheck hail hroller hpc-mon-collector; do
   if [ -e htest/$hfile ]; then
     cp -p htest/$hfile $tmpdir/htest/
   fi
index 1facff4..86dd64f 100644 (file)
@@ -48,4 +48,8 @@ hcheck() {
   HTOOLS=hinfo $HBINARY "$@"
 }
 
-ALL_ROLES="hbal hscan hail hspace hinfo hcheck"
+hroller() {
+  HTOOLS=hroller $HBINARY "$@"
+}
+
+ALL_ROLES="hbal hscan hail hspace hinfo hcheck hroller"
index 325bd9a..e462f7f 100644 (file)
@@ -23,3 +23,7 @@
 >>>= 0
 ./htest/hcheck --help
 >>>= 0
+./htest/hroller --version
+>>>= 0
+./htest/hroller --help
+>>>= 0
index 7e95546..46e012b 100644 (file)
@@ -36,30 +36,35 @@ import qualified Ganeti.HTools.Program.Hcheck as Hcheck
 import qualified Ganeti.HTools.Program.Hscan as Hscan
 import qualified Ganeti.HTools.Program.Hspace as Hspace
 import qualified Ganeti.HTools.Program.Hinfo as Hinfo
+import qualified Ganeti.HTools.Program.Hroller as Hroller
 
 -- | Supported binaries.
 personalities :: PersonalityList Options
 personalities =
-  [ ("hail",   (Hail.main,   Hail.options,   Hail.arguments,
-                "Ganeti IAllocator plugin that implements the instance\
-                \ placement and movement using the same algorithm as\
-                \ hbal(1)"))
-  , ("hbal",   (Hbal.main,   Hbal.options,   Hbal.arguments,
-                "cluster balancer that looks at the current state of\
-                \ the cluster and computes a series of steps designed\
-                \ to bring the cluster into a better state"))
-  , ("hcheck", (Hcheck.main, Hcheck.options, Hcheck.arguments,
-               "cluster checker; prints information about cluster's\
-               \ health and checks whether a rebalance done using\
-               \ hbal would help"))
-  , ("hscan",  (Hscan.main,  Hscan.options,  Hscan.arguments,
-               "tool for scanning clusters via RAPI and saving their\
-               \ data in the input format used by hbal(1) and hspace(1)"))
-  , ("hspace", (Hspace.main, Hspace.options, Hspace.arguments,
-               "computes how many additional instances can be fit on a\
-               \ cluster, while maintaining N+1 status."))
-  , ("hinfo",  (Hinfo.main,  Hinfo.options,  Hinfo.arguments,
-               "cluster information printer; it prints information\
-               \ about the current cluster state and its residing\
-               \ nodes/instances"))
+  [ ("hail",    (Hail.main,    Hail.options,    Hail.arguments,
+                 "Ganeti IAllocator plugin that implements the instance\
+                 \ placement and movement using the same algorithm as\
+                 \ hbal(1)"))
+  , ("hbal",    (Hbal.main,    Hbal.options,    Hbal.arguments,
+                 "cluster balancer that looks at the current state of\
+                 \ the cluster and computes a series of steps designed\
+                 \ to bring the cluster into a better state"))
+  , ("hcheck",  (Hcheck.main,  Hcheck.options,  Hcheck.arguments,
+                "cluster checker; prints information about cluster's\
+                \ health and checks whether a rebalance done using\
+                \ hbal would help"))
+  , ("hscan",   (Hscan.main,   Hscan.options,   Hscan.arguments,
+                "tool for scanning clusters via RAPI and saving their\
+                \ data in the input format used by hbal(1) and hspace(1)"))
+  , ("hspace",  (Hspace.main,  Hspace.options,  Hspace.arguments,
+                "computes how many additional instances can be fit on a\
+                \ cluster, while maintaining N+1 status."))
+  , ("hinfo",   (Hinfo.main,   Hinfo.options,   Hinfo.arguments,
+                "cluster information printer; it prints information\
+                \ about the current cluster state and its residing\
+                \ nodes/instances"))
+  , ("hroller", (Hroller.main, Hroller.options, Hroller.arguments,
+                "cluster rolling maintenance helper; it helps scheduling\
+                \ node reboots in a manner that doesn't conflict with the\
+                \ instances' topology"))
   ]
similarity index 56%
copy from htools/hconfd.hs
copy to htools/Ganeti/HTools/Program/Hroller.hs
index 54cb74e..166973d 100644 (file)
@@ -1,10 +1,10 @@
-{-| Ganeti configuration query daemon
+{-| Cluster rolling maintenance helper.
 
 -}
 
 {-
 
-Copyright (C) 2009, 2011, 2012 Google Inc.
+Copyright (C) 2012 Google Inc.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -23,27 +23,35 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 -}
 
-module Main (main) where
+module Ganeti.HTools.Program.Hroller
+  ( main
+  , options
+  , arguments
+  ) where
 
-import qualified Ganeti.Confd.Server
-import Ganeti.Daemon
-import Ganeti.Runtime
-import qualified Ganeti.Constants as C
+import Ganeti.Common
+import Ganeti.HTools.CLI
 
 -- | Options list and functions.
-options :: [OptType]
-options =
-  [ oNoDaemonize
-  , oNoUserChecks
-  , oDebug
-  , oPort C.defaultConfdPort
-  , oBindAddress
-  , oSyslogUsage
-  ]
+options :: IO [OptType]
+options = do
+  luxi <- oLuxiSocket
+  return
+    [ luxi
+    , oRapiMaster
+    , oDataFile
+    , oIAllocSrc
+    , oOfflineNode
+    , oVerbose
+    , oQuiet
+    , oNoHeaders
+    , oSaveCluster
+    ]
+
+-- | The list of arguments supported by the program.
+arguments :: [ArgCompletion]
+arguments = []
 
 -- | Main function.
-main :: IO ()
-main = genericMain GanetiConfd options
-         Ganeti.Confd.Server.checkMain
-         Ganeti.Confd.Server.prepMain
-         Ganeti.Confd.Server.main
+main :: Options -> [String] -> IO ()
+main _ _ = return ()
diff --git a/man/hroller.rst b/man/hroller.rst
new file mode 100644 (file)
index 0000000..ee7aebc
--- /dev/null
@@ -0,0 +1,53 @@
+HROLLER(1) Ganeti | Version @GANETI_VERSION@
+============================================
+
+NAME
+----
+
+hroller \- Cluster rolling maintenance scheduler for Ganeti
+
+SYNOPSIS
+--------
+
+**hroller** {backend options...} [algorithm options...] [reporting options...]
+
+**hroller** \--version
+
+
+Backend options:
+
+{ **-m** *cluster* | **-L[** *path* **]** | **-t** *data-file* |
+**-I** *path* }
+
+Algorithm options:
+
+**[ -O *name...* ]**
+
+Reporting options:
+
+**[ -v... | -q ]**
+**[ -S *file* ]**
+
+DESCRIPTION
+-----------
+
+hroller is a cluster maintenance reboot scheduler. It can calculate
+which set of nodes can be rebooted at the same time while avoiding
+having both primary and secondary nodes being rebooted at the same time.
+
+OPTIONS
+-------
+
+Currently only standard htools options are supported. For a description of them
+check **htools(7)** and **hbal(1)**.
+
+BUGS
+----
+
+The program does nothing.
+
+.. vim: set textwidth=72 :
+.. Local Variables:
+.. mode: rst
+.. fill-column: 72
+.. End:
index ea9019f..e19ce82 100644 (file)
@@ -27,11 +27,12 @@ SYNOPSIS
 **hinfo**
   cluster information printer
 
+**hroller**
+  cluster rolling maintenance scheduler
 
 DESCRIPTION
 -----------
 
-
 ``htools`` is a suite of tools designed to help with allocation/movement
 of instances and balancing of Ganeti clusters. ``htools`` is also the
 generic binary that must be symlinked or hardlinked under each tool's
@@ -57,6 +58,9 @@ saves it to files which can later be reused by the other roles.
 Installed as ``hinfo``, it prints information about the current cluster
 state.
 
+Installed as ``hroller``, it helps scheduling maintenances that require
+node reboots on a cluster.
+
 COMMON OPTIONS
 --------------