Blob Blame History Raw
From d152f45d874546db7615b5caa54633130ee733bf Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 15 Sep 2016 09:40:48 -0500
Subject: [PATCH 1/3] Fix: tools: make crm_report sanitize CIB before
 generating readable version

---
 tools/report.collector | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/tools/report.collector b/tools/report.collector
index e75a790..83218ee 100644
--- a/tools/report.collector
+++ b/tools/report.collector
@@ -249,13 +249,17 @@ getconfig() {
     else
 	echo "$host" > $target/STOPPED
     fi
+}
+
+get_readable_cib() {
+    target="$1"; shift;
 
     if [ -f "$target/$CIB_F" ]; then
-	crm_verify -V -x $target/$CIB_F >$target/$CRM_VERIFY_F 2>&1
+        crm_verify -V -x "$target/$CIB_F" >"$target/$CRM_VERIFY_F" 2>&1
         if which crm >/dev/null 2>&1 ; then
-            CIB_file=$target/$CIB_F crm configure show >$target/$CIB_TXT_F 2>&1
+            CIB_file="$target/$CIB_F" crm configure show >"$target/$CIB_TXT_F" 2>&1
         elif which pcs >/dev/null 2>&1 ; then
-            pcs config -f $target/$CIB_F >$target/$CIB_TXT_F 2>&1
+            pcs config -f "$target/$CIB_F" >"$target/$CIB_TXT_F" 2>&1
         fi
     fi
 }
@@ -735,12 +739,16 @@ cf=""
 if [ ! -z "$cluster_cf" ]; then
    cf=`basename $cluster_cf`
 fi
-for f in $cf $CIB_F $CIB_TXT_F $CIB_F.live pengine/*; do
+for f in "$cf" "$CIB_F" "$CIB_F.live" pengine/*; do
     if [ -f "$f" ]; then
-	sanitize $f
+	sanitize "$f"
     fi
 done
 
+# For convenience, generate human-readable version of CIB and any XML errors
+# in it (AFTER sanitizing, so we don't need to sanitize this output)
+get_readable_cib "$REPORT_HOME/$REPORT_TARGET"
+
 # Grab logs
 start=`date -d @${LOG_START} +"%F %T"`
 end=`date -d @${LOG_END} +"%F %T"`
-- 
1.8.3.1


From 700c8004fc62ca5de39b1558825ea6aba4edab53 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 15 Sep 2016 10:50:48 -0500
Subject: [PATCH 2/3] Low: tools: make crm_report skip global disk searches
 when pacemaker_remoted present

This saves a lot of time in the common cases, and the only case where it's
worse is where pacemaker_remoted is installed in a standard location but the
other pacemaker components are not (and if someone manages to do that, it's no
wonder they have problems).
---
 tools/report.common.in | 62 +++++++++++++++++++++++++++++++-------------------
 1 file changed, 39 insertions(+), 23 deletions(-)

diff --git a/tools/report.common.in b/tools/report.common.in
index f9ed6f5..9b43486 100644
--- a/tools/report.common.in
+++ b/tools/report.common.in
@@ -82,6 +82,9 @@ SYSLOGS="
     /var/log/cluster/*
 "
 
+# Whether pacemaker_remoted was found (0 = yes, 1 = no, -1 = haven't looked yet)
+REMOTED_STATUS=-1
+
 #
 # keep the user posted
 #
@@ -129,13 +132,23 @@ is_running() {
 }
 
 has_remoted() {
-    # TODO: the binary might be elsewhere
-    if which pacemaker_remoted >/dev/null 2>&1; then
-        return 0
-    elif [ -x "@sbindir@/pacemaker_remoted" ]; then
-        return 0
+    if [ $REMOTED_STATUS -eq -1 ]; then
+        REMOTED_STATUS=1
+        if which pacemaker_remoted >/dev/null 2>&1; then
+            REMOTED_STATUS=0
+        elif [ -x "@sbindir@/pacemaker_remoted" ]; then
+            REMOTED_STATUS=0
+        else
+            # @TODO: the binary might be elsewhere,
+            # but a global search is too expensive
+            for d in /{usr,opt}/{local/,}{s,}bin; do
+                if [ -x "${d}/pacemaker_remoted" ]; then
+                    REMOTED_STATUS=0
+                fi
+            done
+        fi
     fi
-    return 1
+    return $REMOTED_STATUS
 }
 
 # found_dir <description> <dirname>
@@ -158,18 +171,19 @@ detect_daemon_dir() {
         fi
     done
 
+    # Pacemaker Remote nodes don't need to install daemons
+    if has_remoted; then
+        info "Pacemaker daemons not found (this appears to be a Pacemaker Remote node)"
+        return
+    fi
+
     for f in $(find / -maxdepth $maxdepth -type f -name pengine -o -name lrmd_test); do
         d=$(dirname "$f")
         found_dir "daemons" "$d"
         return
     done
 
-    # Pacemaker Remote nodes don't need to install daemons
-    if has_remoted; then
-        info "Not found (this appears to be a Pacemaker Remote node)"
-    else
-        fatal "Pacemaker daemons not found (nonstandard installation?)"
-    fi
+    fatal "Pacemaker daemons not found (nonstandard installation?)"
 }
 
 detect_cib_dir() {
@@ -180,6 +194,12 @@ detect_cib_dir() {
         fi
     done
 
+    # Pacemaker Remote nodes don't need a CIB
+    if has_remoted; then
+        info "Pacemaker config not found (this appears to be a Pacemaker Remote node)"
+        return
+    fi
+
     info "Searching for where Pacemaker keeps config information... this may take a while"
     # TODO: What about false positives where someone copied the CIB?
     for f in $(find / -maxdepth $maxdepth -type f -name cib.xml); do
@@ -188,12 +208,7 @@ detect_cib_dir() {
         return
     done
 
-    # Pacemaker Remote nodes don't need a CIB
-    if has_remoted; then
-        info "Not found (this appears to be a Pacemaker Remote node)"
-    else
-        warning "Pacemaker config not found (nonstandard installation?)"
-    fi
+    warning "Pacemaker config not found (nonstandard installation?)"
 }
 
 detect_state_dir() {
@@ -217,17 +232,18 @@ detect_pe_dir() {
         return
     fi
 
+    if has_remoted; then
+        info "Pacemaker policy engine inputs not found (this appears to be a Pacemaker Remote node)"
+        return
+    fi
+
     info "Searching for where Pacemaker keeps Policy Engine inputs... this may take a while"
     for d in $(find / -maxdepth $maxdepth -type d -name pengine); do
         found_dir "policy engine inputs" "$d"
         return
     done
 
-    if has_remoted; then
-        info "Not found (this appears to be a Pacemaker Remote node)"
-    else
-        fatal "Pacemaker policy engine inputs not found (nonstandard installation?)"
-    fi
+    fatal "Pacemaker policy engine inputs not found (nonstandard installation?)"
 }
 
 detect_host() {
-- 
1.8.3.1


From 03f013076c191c61470a73dd8fa1d6ceae6e5fb1 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 15 Sep 2016 11:46:18 -0500
Subject: [PATCH 3/3] Doc: tools: document crm_report --sos-mode option in help
 text/man page

---
 tools/crm_report.in | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/crm_report.in b/tools/crm_report.in
index 848b6b9..0a456af 100755
--- a/tools/crm_report.in
+++ b/tools/crm_report.in
@@ -73,6 +73,8 @@ Options:
   -u, --user user	ssh username for cluster nodes (default: root)
   -D, --depth           search depth to use when attempting to locate files
   -e, --rsh		specify the remote shell to use (default: ssh -T)
+  --sos-mode            use defaults suitable for being called by sosreport tool
+                        (behavior subject to change and not useful to end users)
   --dest       		a custom destination directory/file
   dest			a custom destination directory/file
 
-- 
1.8.3.1