ctdb-tools: Always print script output in event status
authorMartin Schwenke <mschwenke@ddn.com>
Wed, 12 Jul 2023 00:39:06 +0000 (10:39 +1000)
committerStefan Metzmacher <metze@samba.org>
Fri, 28 Jul 2023 10:48:33 +0000 (10:48 +0000)
When event scripts succeed they generally produce no output.  However,
when a script succeeds and produces output, such output almost
certainly contains warnings.  So, always print script output.

Signed-off-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/event/event_tool.c
ctdb/tests/UNIT/eventd/etc-ctdb/events/random/02.enabled.script
ctdb/tests/UNIT/eventd/eventd_008.sh

index 46dc25e6c306362dff54b585fb49578e3216c998..5e94af1d9bcdac9acc4c3aac9f408088a6672fa3 100644 (file)
@@ -197,7 +197,8 @@ static void print_status_one(struct ctdb_event_script *script)
                       ctime(&script->begin.tv_sec));
        }
 
-       if (script->result != 0 && script->result != -ENOEXEC) {
+       if ((script->result != 0 && script->result != -ENOEXEC) ||
+           script->output != NULL) {
                printf("  OUTPUT: %s\n",
                       script->output == NULL ? "" : script->output);
        }
index f25e72425434563dc3686f1759bc95f71ff81ad1..a59c58bf692dec9295085579e32dac1a95626c4a 100755 (executable)
@@ -5,7 +5,27 @@ case "$1" in
 "failure") exit 1 ;;
 "timeout") sleep 99 ;;
 "verbose") echo "Running event $1" ; exit 0 ;;
+"verbosemultiline")
+       cat <<EOF
+Running event $1
+There are multiple output lines
+
+^^^ including blank lines...
+
+EOF
+       exit 0
+       ;;
 "verbosefailure") echo "args: $*"; exit 1 ;;
+"verbosemultilinefailure")
+       cat <<EOF
+Failing event $1
+There are multiple output lines
+
+args: $*
+
+EOF
+       exit 2
+       ;;
 "verbosetimeout") echo "Sleeping for 99 seconds"; sleep 99 ;;
 "verbosetimeout2") echo "Sleeping for 99 seconds"; sleep 99 ;;
 *) exit 0 ;;
index c394f61790b37aa2336824da475c1d377ed9bbf0..f2e3cb1dbee1517829369c6ebd72c0dec08682d5 100755 (executable)
@@ -17,3 +17,41 @@ required_result 1 <<EOF
   OUTPUT: args: verbosefailure with some args
 EOF
 simple_test status random verbosefailure
+
+ok_null
+simple_test run 10 random verbose
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+  OUTPUT: Running event verbose
+EOF
+simple_test status random verbose
+
+ok_null
+simple_test run 10 random verbosemultiline
+
+ok <<EOF
+01.disabled          DISABLED  
+02.enabled           OK         DURATION DATETIME
+  OUTPUT: Running event verbosemultiline
+There are multiple output lines
+
+^^^ including blank lines...
+EOF
+simple_test status random verbosemultiline
+
+required_result 8 <<EOF
+Event verbosemultilinefailure in random failed
+EOF
+simple_test run 10 random verbosemultilinefailure with some args
+
+required_result 2 <<EOF
+01.disabled          DISABLED  
+02.enabled           ERROR      DURATION DATETIME
+  OUTPUT: Failing event verbosemultilinefailure
+There are multiple output lines
+
+args: verbosemultilinefailure with some args
+EOF
+simple_test status random verbosemultilinefailure