Allow ignoring successful commands in "gnt-cluster command"
authorMichael Hanselmann <hansmi@google.com>
Tue, 4 Dec 2012 17:10:15 +0000 (18:10 +0100)
committerMichael Hanselmann <hansmi@google.com>
Tue, 4 Dec 2012 17:32:19 +0000 (18:32 +0100)
In some cases it is useful to ignore the output of and avoid mentioning
successful commands. One would be when looking for a certain string in
a file:

  $ gnt-cluster command egrep -q '^testing$' /etc/...

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>

lib/cli.py
lib/client/gnt_cluster.py
man/gnt-cluster.rst

index b7a4d31..603cdc4 100644 (file)
@@ -82,6 +82,7 @@ __all__ = [
   "EARLY_RELEASE_OPT",
   "ENABLED_HV_OPT",
   "ERROR_CODES_OPT",
+  "FAILURE_ONLY_OPT",
   "FIELDS_OPT",
   "FILESTORE_DIR_OPT",
   "FILESTORE_DRIVER_OPT",
@@ -1363,6 +1364,11 @@ SHOW_MACHINE_OPT = cli_option("-M", "--show-machine-names", default=False,
                               action="store_true",
                               help="Show machine name for every line in output")
 
+FAILURE_ONLY_OPT = cli_option("--failure-only", default=False,
+                              action="store_true",
+                              help=("Hide successful results and show failures"
+                                    " only (determined by the exit code)"))
+
 
 def _PriorityOptionCb(option, _, value, parser):
   """Callback for processing C{--priority} option.
index ecfa4ce..ccbc7a9 100644 (file)
@@ -539,6 +539,11 @@ def RunClusterCommand(opts, args):
 
   for name in nodes:
     result = srun.Run(name, constants.SSH_LOGIN_USER, command)
+
+    if opts.failure_only and result.exit_code == constants.EXIT_SUCCESS:
+      # Do not output anything for successful commands
+      continue
+
     ToStdout("------------------------------------------------")
     if opts.show_machine_names:
       for line in result.output.splitlines():
@@ -1524,7 +1529,7 @@ commands = {
     "[-n node...] <filename>", "Copies a file to all (or only some) nodes"),
   "command": (
     RunClusterCommand, [ArgCommand(min=1)],
-    [NODE_LIST_OPT, NODEGROUP_OPT, SHOW_MACHINE_OPT],
+    [NODE_LIST_OPT, NODEGROUP_OPT, SHOW_MACHINE_OPT, FAILURE_ONLY_OPT],
     "[-n node...] <command>", "Runs a command on all (or only some) nodes"),
   "info": (
     ShowClusterConfig, ARGS_NONE, [ROMAN_OPT],
index e4bcc28..b67f904 100644 (file)
@@ -59,7 +59,8 @@ group, e.g.::
     # gnt-cluster command -g default date
 
 The ``-M`` option can be used to prepend the node name to all output
-lines.
+lines. The ``--failure-only`` option hides successful commands, making
+it easier to see failures.
 
 The command is executed serially on the selected nodes. If the
 master node is present in the list, the command will be executed