c563b9
From 4fc4140d0c3daa3a8de32adaebf33462c9b3d581 Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Thu, 26 Nov 2020 13:34:21 +0100
c563b9
Subject: [PATCH 1/7] Refactor: move crm_admin_list() to pcmk__list_nodes() and
c563b9
 only print node name for -N -q
c563b9
c563b9
---
c563b9
 lib/pacemaker/pcmk_cluster_queries.c | 32 ++++++++++++++++++++++++----
c563b9
 lib/pacemaker/pcmk_output.c          | 41 +++---------------------------------
c563b9
 2 files changed, 31 insertions(+), 42 deletions(-)
c563b9
c563b9
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
index c705b7f..1d1e775 100644
c563b9
--- a/lib/pacemaker/pcmk_cluster_queries.c
c563b9
+++ b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
@@ -395,7 +395,7 @@ int
c563b9
 pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
c563b9
 {
c563b9
     cib_t *the_cib = cib_new();
c563b9
-    xmlNode *output = NULL;
c563b9
+    xmlNode *xml_node = NULL;
c563b9
     int rc;
c563b9
 
c563b9
     if (the_cib == NULL) {
c563b9
@@ -406,11 +406,35 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
c563b9
         return pcmk_legacy2rc(rc);
c563b9
     }
c563b9
 
c563b9
-    rc = the_cib->cmds->query(the_cib, NULL, &output,
c563b9
+    rc = the_cib->cmds->query(the_cib, NULL, &xml_node,
c563b9
                               cib_scope_local | cib_sync_call);
c563b9
     if (rc == pcmk_ok) {
c563b9
-        out->message(out, "crmadmin-node-list", output, BASH_EXPORT);
c563b9
-        free_xml(output);
c563b9
+        int found = 0;
c563b9
+        xmlNode *node = NULL;
c563b9
+        xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
c563b9
+
c563b9
+        out->begin_list(out, NULL, NULL, "nodes");
c563b9
+
c563b9
+        for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
c563b9
+             node = crm_next_same_xml(node)) {
c563b9
+            const char *node_type = BASH_EXPORT ? NULL :
c563b9
+                         crm_element_value(node, XML_ATTR_TYPE);
c563b9
+            out->message(out, "crmadmin-node", node_type,
c563b9
+                         crm_str(crm_element_value(node, XML_ATTR_UNAME)),
c563b9
+                         crm_str(crm_element_value(node, XML_ATTR_ID)),
c563b9
+                         BASH_EXPORT);
c563b9
+
c563b9
+            found++;
c563b9
+        }
c563b9
+        // @TODO List Pacemaker Remote nodes that don't have a <node> entry
c563b9
+
c563b9
+        out->end_list(out);
c563b9
+
c563b9
+        if (found == 0) {
c563b9
+            out->info(out, "No nodes configured");
c563b9
+        }
c563b9
+
c563b9
+        free_xml(xml_node);
c563b9
     }
c563b9
     the_cib->cmds->signoff(the_cib);
c563b9
     return pcmk_legacy2rc(rc);
c563b9
diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c
c563b9
index bc4b91a..8f5e301 100644
c563b9
--- a/lib/pacemaker/pcmk_output.c
c563b9
+++ b/lib/pacemaker/pcmk_output.c
c563b9
@@ -469,42 +469,6 @@ dc_xml(pcmk__output_t *out, va_list args)
c563b9
     return pcmk_rc_ok;
c563b9
 }
c563b9
 
c563b9
-
c563b9
-PCMK__OUTPUT_ARGS("crmadmin-node-list", "xmlNodePtr", "gboolean")
c563b9
-static int
c563b9
-crmadmin_node_list(pcmk__output_t *out, va_list args)
c563b9
-{
c563b9
-    xmlNodePtr xml_node = va_arg(args, xmlNodePtr);
c563b9
-    gboolean BASH_EXPORT = va_arg(args, gboolean);
c563b9
-
c563b9
-    int found = 0;
c563b9
-    xmlNode *node = NULL;
c563b9
-    xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
c563b9
-
c563b9
-    out->begin_list(out, NULL, NULL, "nodes");
c563b9
-
c563b9
-    for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
c563b9
-         node = crm_next_same_xml(node)) {
c563b9
-        const char *node_type = BASH_EXPORT ? NULL :
c563b9
-                     crm_element_value(node, XML_ATTR_TYPE);
c563b9
-        out->message(out, "crmadmin-node", node_type,
c563b9
-                     crm_str(crm_element_value(node, XML_ATTR_UNAME)),
c563b9
-                     crm_str(crm_element_value(node, XML_ATTR_ID)),
c563b9
-                     BASH_EXPORT);
c563b9
-
c563b9
-        found++;
c563b9
-    }
c563b9
-    // @TODO List Pacemaker Remote nodes that don't have a <node> entry
c563b9
-
c563b9
-    out->end_list(out);
c563b9
-
c563b9
-    if (found == 0) {
c563b9
-        out->info(out, "No nodes configured");
c563b9
-    }
c563b9
-
c563b9
-    return pcmk_rc_ok;
c563b9
-}
c563b9
-
c563b9
 PCMK__OUTPUT_ARGS("crmadmin-node", "const char *", "const char *", "const char *", "gboolean")
c563b9
 static int
c563b9
 crmadmin_node_text(pcmk__output_t *out, va_list args)
c563b9
@@ -514,7 +478,9 @@ crmadmin_node_text(pcmk__output_t *out, va_list args)
c563b9
     const char *id = va_arg(args, const char *);
c563b9
     gboolean BASH_EXPORT = va_arg(args, gboolean);
c563b9
 
c563b9
-    if (BASH_EXPORT) {
c563b9
+    if (out->is_quiet(out)) {
c563b9
+        out->info(out, "%s", crm_str(name));
c563b9
+    } else if (BASH_EXPORT) {
c563b9
         out->info(out, "export %s=%s", crm_str(name), crm_str(id));
c563b9
     } else {
c563b9
         out->info(out, "%s node: %s (%s)", type ? type : "member",
c563b9
@@ -657,7 +623,6 @@ static pcmk__message_entry_t fmt_functions[] = {
c563b9
     { "pacemakerd-health", "xml", pacemakerd_health_xml },
c563b9
     { "dc", "default", dc_text },
c563b9
     { "dc", "xml", dc_xml },
c563b9
-    { "crmadmin-node-list", "default", crmadmin_node_list },
c563b9
     { "crmadmin-node", "default", crmadmin_node_text },
c563b9
     { "crmadmin-node", "xml", crmadmin_node_xml },
c563b9
     { "digests", "default", digests_text },
c563b9
-- 
c563b9
1.8.3.1
c563b9
c563b9
c563b9
From ecc6d582fd18f774ab6c081c4d72a7913a0f419e Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Fri, 4 Dec 2020 09:30:04 +0100
c563b9
Subject: [PATCH 2/7] Feature/API: crmadmin/pcmk_list_nodes(): list
c563b9
 remote/guest nodes and add parameter/variable to choose which node type(s) to
c563b9
 list
c563b9
c563b9
---
c563b9
 include/crm/common/xml_internal.h     | 18 +++++++
c563b9
 include/pacemaker.h                   |  6 +--
c563b9
 include/pcmki/pcmki_cluster_queries.h |  2 +-
c563b9
 lib/cluster/membership.c              | 17 +------
c563b9
 lib/pacemaker/pcmk_cluster_queries.c  | 89 ++++++++++++++++++++++++++++-------
c563b9
 tools/crmadmin.c                      |  9 +++-
c563b9
 6 files changed, 103 insertions(+), 38 deletions(-)
c563b9
c563b9
diff --git a/include/crm/common/xml_internal.h b/include/crm/common/xml_internal.h
c563b9
index d8694ee..969a57d 100644
c563b9
--- a/include/crm/common/xml_internal.h
c563b9
+++ b/include/crm/common/xml_internal.h
c563b9
@@ -123,6 +123,24 @@ do {
c563b9
     }                                                                           \
c563b9
 } while (0)
c563b9
 
c563b9
+/* XML search strings for guest, remote and pacemaker_remote nodes */
c563b9
+
c563b9
+/* search string to find CIB resources entries for guest nodes */
c563b9
+#define XPATH_GUEST_NODE_CONFIG \
c563b9
+    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
+    "//" XML_TAG_META_SETS "//" XML_CIB_TAG_NVPAIR \
c563b9
+    "[@name='" XML_RSC_ATTR_REMOTE_NODE "']"
c563b9
+
c563b9
+/* search string to find CIB resources entries for remote nodes */
c563b9
+#define XPATH_REMOTE_NODE_CONFIG \
c563b9
+    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
+    "[@type='remote'][@provider='pacemaker']"
c563b9
+
c563b9
+/* search string to find CIB node status entries for pacemaker_remote nodes */
c563b9
+#define XPATH_REMOTE_NODE_STATUS \
c563b9
+    "//" XML_TAG_CIB "//" XML_CIB_TAG_STATUS "//" XML_CIB_TAG_STATE \
c563b9
+    "[@" XML_NODE_IS_REMOTE "='true']"
c563b9
+
c563b9
 enum pcmk__xml_artefact_ns {
c563b9
     pcmk__xml_artefact_ns_legacy_rng = 1,
c563b9
     pcmk__xml_artefact_ns_legacy_xslt,
c563b9
diff --git a/include/pacemaker.h b/include/pacemaker.h
c563b9
index 51bf585..42d096f 100644
c563b9
--- a/include/pacemaker.h
c563b9
+++ b/include/pacemaker.h
c563b9
@@ -73,8 +73,6 @@ int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc,
c563b9
                           pe_node_t *node, GHashTable *overrides,
c563b9
                           pe_working_set_t *data_set);
c563b9
 
c563b9
-#ifdef BUILD_PUBLIC_LIBPACEMAKER
c563b9
-
c563b9
 /*!
c563b9
  * \brief Get nodes list
c563b9
  *
c563b9
@@ -82,7 +80,9 @@ int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc,
c563b9
  *
c563b9
  * \return Standard Pacemaker return code
c563b9
  */
c563b9
-int pcmk_list_nodes(xmlNodePtr *xml);
c563b9
+int pcmk_list_nodes(xmlNodePtr *xml, char *node_types);
c563b9
+
c563b9
+#ifdef BUILD_PUBLIC_LIBPACEMAKER
c563b9
 
c563b9
 /*!
c563b9
  * \brief Perform a STONITH action.
c563b9
diff --git a/include/pcmki/pcmki_cluster_queries.h b/include/pcmki/pcmki_cluster_queries.h
c563b9
index eb3b51c..955eea3 100644
c563b9
--- a/include/pcmki/pcmki_cluster_queries.h
c563b9
+++ b/include/pcmki/pcmki_cluster_queries.h
c563b9
@@ -8,7 +8,7 @@
c563b9
 int pcmk__controller_status(pcmk__output_t *out, char *dest_node, guint message_timeout_ms);
c563b9
 int pcmk__designated_controller(pcmk__output_t *out, guint message_timeout_ms);
c563b9
 int pcmk__pacemakerd_status(pcmk__output_t *out, char *ipc_name, guint message_timeout_ms);
c563b9
-int pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT);
c563b9
+int pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT);
c563b9
 
c563b9
 // remove when parameters removed from tools/crmadmin.c
c563b9
 int pcmk__shutdown_controller(pcmk__output_t *out, char *dest_node);
c563b9
diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c
c563b9
index 8bf5764..5841f16 100644
c563b9
--- a/lib/cluster/membership.c
c563b9
+++ b/lib/cluster/membership.c
c563b9
@@ -20,6 +20,7 @@
c563b9
 #include <string.h>
c563b9
 #include <glib.h>
c563b9
 #include <crm/common/ipc.h>
c563b9
+#include <crm/common/xml_internal.h>
c563b9
 #include <crm/cluster/internal.h>
c563b9
 #include <crm/msg_xml.h>
c563b9
 #include <crm/stonith-ng.h>
c563b9
@@ -235,22 +236,6 @@ is_dirty(gpointer key, gpointer value, gpointer user_data)
c563b9
     return pcmk_is_set(((crm_node_t*)value)->flags, crm_node_dirty);
c563b9
 }
c563b9
 
c563b9
-/* search string to find CIB resources entries for guest nodes */
c563b9
-#define XPATH_GUEST_NODE_CONFIG \
c563b9
-    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
-    "//" XML_TAG_META_SETS "//" XML_CIB_TAG_NVPAIR \
c563b9
-    "[@name='" XML_RSC_ATTR_REMOTE_NODE "']"
c563b9
-
c563b9
-/* search string to find CIB resources entries for remote nodes */
c563b9
-#define XPATH_REMOTE_NODE_CONFIG \
c563b9
-    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
-    "[@type='remote'][@provider='pacemaker']"
c563b9
-
c563b9
-/* search string to find CIB node status entries for pacemaker_remote nodes */
c563b9
-#define XPATH_REMOTE_NODE_STATUS \
c563b9
-    "//" XML_TAG_CIB "//" XML_CIB_TAG_STATUS "//" XML_CIB_TAG_STATE \
c563b9
-    "[@" XML_NODE_IS_REMOTE "='true']"
c563b9
-
c563b9
 /*!
c563b9
  * \brief Repopulate the remote peer cache based on CIB XML
c563b9
  *
c563b9
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
index 1d1e775..fc5cfc4 100644
c563b9
--- a/lib/pacemaker/pcmk_cluster_queries.c
c563b9
+++ b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
@@ -9,6 +9,7 @@
c563b9
 #include <crm/msg_xml.h>
c563b9
 #include <crm/common/output_internal.h>
c563b9
 #include <crm/common/xml.h>
c563b9
+#include <crm/common/xml_internal.h>
c563b9
 #include <crm/common/iso8601.h>
c563b9
 #include <crm/common/ipc_controld.h>
c563b9
 #include <crm/common/ipc_pacemakerd.h>
c563b9
@@ -390,9 +391,33 @@ pcmk_pacemakerd_status(xmlNodePtr *xml, char *ipc_name, unsigned int message_tim
c563b9
     return rc;
c563b9
 }
c563b9
 
c563b9
+/* user data for looping through remote node xpath searches */
c563b9
+struct node_data {
c563b9
+    pcmk__output_t *out;
c563b9
+    int found;
c563b9
+    const char *field;  /* XML attribute to check for node name */
c563b9
+    const char *type;
c563b9
+    gboolean BASH_EXPORT;
c563b9
+};
c563b9
+
c563b9
+static void
c563b9
+remote_node_print_helper(xmlNode *result, void *user_data)
c563b9
+{
c563b9
+    struct node_data *data = user_data;
c563b9
+    pcmk__output_t *out = data->out;
c563b9
+    const char *remote = crm_element_value(result, data->field);
c563b9
+
c563b9
+    // node name and node id are the same for remote/guest nodes
c563b9
+    out->message(out, "crmadmin-node", data->type,
c563b9
+                 remote,
c563b9
+                 remote,
c563b9
+                 data->BASH_EXPORT);
c563b9
+    data->found++;
c563b9
+}
c563b9
+
c563b9
 // \return Standard Pacemaker return code
c563b9
 int
c563b9
-pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
c563b9
+pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
c563b9
 {
c563b9
     cib_t *the_cib = cib_new();
c563b9
     xmlNode *xml_node = NULL;
c563b9
@@ -409,28 +434,60 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
c563b9
     rc = the_cib->cmds->query(the_cib, NULL, &xml_node,
c563b9
                               cib_scope_local | cib_sync_call);
c563b9
     if (rc == pcmk_ok) {
c563b9
-        int found = 0;
c563b9
         xmlNode *node = NULL;
c563b9
         xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
c563b9
+        struct node_data data = {
c563b9
+            .out = out,
c563b9
+            .found = 0,
c563b9
+            .BASH_EXPORT = BASH_EXPORT
c563b9
+        };
c563b9
 
c563b9
         out->begin_list(out, NULL, NULL, "nodes");
c563b9
 
c563b9
-        for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
c563b9
-             node = crm_next_same_xml(node)) {
c563b9
-            const char *node_type = BASH_EXPORT ? NULL :
c563b9
-                         crm_element_value(node, XML_ATTR_TYPE);
c563b9
-            out->message(out, "crmadmin-node", node_type,
c563b9
-                         crm_str(crm_element_value(node, XML_ATTR_UNAME)),
c563b9
-                         crm_str(crm_element_value(node, XML_ATTR_ID)),
c563b9
-                         BASH_EXPORT);
c563b9
+        if (!pcmk__str_empty(node_types) && strstr(node_types, "all")) {
c563b9
+            node_types = NULL;
c563b9
+        }
c563b9
+
c563b9
+        if (pcmk__str_empty(node_types) || strstr(node_types, "member")) {
c563b9
+            for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
c563b9
+                 node = crm_next_same_xml(node)) {
c563b9
+                const char *node_type = crm_element_value(node, XML_ATTR_TYPE);
c563b9
+                //if (node_type == NULL || !strcmp(node_type, "member")) {
c563b9
+                if (node_type == NULL) {
c563b9
+                    out->message(out, "crmadmin-node", node_type,
c563b9
+                                 crm_str(crm_element_value(node, XML_ATTR_UNAME)),
c563b9
+                                 crm_str(crm_element_value(node, XML_ATTR_ID)),
c563b9
+                                 BASH_EXPORT);
c563b9
+                    data.found++;
c563b9
+                }
c563b9
+
c563b9
+            }
c563b9
+        }
c563b9
+
c563b9
+        if (pcmk__str_empty(node_types) || strstr(node_types, "pacemaker_remote")) {
c563b9
+            data.field = "id";
c563b9
+            data.type = "pacemaker_remote";
c563b9
+            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_STATUS,
c563b9
+                                     remote_node_print_helper, &data);
c563b9
+        }
c563b9
+
c563b9
+        if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
c563b9
+            data.field = "value";
c563b9
+            data.type = "guest";
c563b9
+            crm_foreach_xpath_result(xml_node, XPATH_GUEST_NODE_CONFIG,
c563b9
+                                     remote_node_print_helper, &data);
c563b9
+        }
c563b9
 
c563b9
-            found++;
c563b9
+        if (pcmk__str_empty(node_types) || !pcmk__strcmp(node_types, ",|^remote", pcmk__str_regex)) {
c563b9
+            data.field = "id";
c563b9
+            data.type = "remote";
c563b9
+            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_CONFIG,
c563b9
+                                     remote_node_print_helper, &data);
c563b9
         }
c563b9
-        // @TODO List Pacemaker Remote nodes that don't have a <node> entry
c563b9
 
c563b9
         out->end_list(out);
c563b9
 
c563b9
-        if (found == 0) {
c563b9
+        if (data.found == 0) {
c563b9
             out->info(out, "No nodes configured");
c563b9
         }
c563b9
 
c563b9
@@ -440,9 +497,8 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
c563b9
     return pcmk_legacy2rc(rc);
c563b9
 }
c563b9
 
c563b9
-#ifdef BUILD_PUBLIC_LIBPACEMAKER
c563b9
 int
c563b9
-pcmk_list_nodes(xmlNodePtr *xml)
c563b9
+pcmk_list_nodes(xmlNodePtr *xml, char *node_types)
c563b9
 {
c563b9
     pcmk__output_t *out = NULL;
c563b9
     int rc = pcmk_rc_ok;
c563b9
@@ -454,11 +510,10 @@ pcmk_list_nodes(xmlNodePtr *xml)
c563b9
 
c563b9
     pcmk__register_lib_messages(out);
c563b9
 
c563b9
-    rc = pcmk__list_nodes(out, FALSE);
c563b9
+    rc = pcmk__list_nodes(out, node_types, FALSE);
c563b9
     pcmk__out_epilogue(out, xml, rc);
c563b9
     return rc;
c563b9
 }
c563b9
-#endif
c563b9
 
c563b9
 // remove when parameters removed from tools/crmadmin.c
c563b9
 int
c563b9
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
c563b9
index 2d9d663..3f31c69 100644
c563b9
--- a/tools/crmadmin.c
c563b9
+++ b/tools/crmadmin.c
c563b9
@@ -38,10 +38,12 @@ struct {
c563b9
     gint timeout;
c563b9
     char *dest_node;
c563b9
     char *ipc_name;
c563b9
+    char *node_types;
c563b9
     gboolean BASH_EXPORT;
c563b9
 } options = {
c563b9
     .dest_node = NULL,
c563b9
     .ipc_name = NULL,
c563b9
+    .node_types = NULL,
c563b9
     .BASH_EXPORT = FALSE
c563b9
 };
c563b9
 
c563b9
@@ -93,6 +95,11 @@ static GOptionEntry additional_options[] = {
c563b9
       "\n                          operation failed",
c563b9
       NULL
c563b9
     },
c563b9
+    { "node-types", 'T', 0, G_OPTION_ARG_STRING, &options.node_types,
c563b9
+      "Node types to list (available options: all, member, pacemaker_remote,"
c563b9
+      "\n                          guest, remote) (valid with -N/--nodes)",
c563b9
+      NULL
c563b9
+    },
c563b9
     { "bash-export", 'B', 0, G_OPTION_ARG_NONE, &options.BASH_EXPORT,
c563b9
       "Display nodes as shell commands of the form 'export uname=uuid'"
c563b9
       "\n                          (valid with -N/--nodes)",
c563b9
@@ -264,7 +271,7 @@ main(int argc, char **argv)
c563b9
             rc = pcmk__pacemakerd_status(out, options.ipc_name, options.timeout);
c563b9
             break;
c563b9
         case cmd_list_nodes:
c563b9
-            rc = pcmk__list_nodes(out, options.BASH_EXPORT);
c563b9
+            rc = pcmk__list_nodes(out, options.node_types, options.BASH_EXPORT);
c563b9
             break;
c563b9
         case cmd_whois_dc:
c563b9
             rc = pcmk__designated_controller(out, options.timeout);
c563b9
-- 
c563b9
1.8.3.1
c563b9
c563b9
c563b9
From f25d4e7aa9de55bb296087e6cbaf1654d01d6b0d Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Thu, 10 Dec 2020 13:58:31 +0100
c563b9
Subject: [PATCH 3/7] Refactor: use PCMK__XP_ prefix instead of XPATH_ for XML
c563b9
 constants
c563b9
c563b9
---
c563b9
 include/crm/common/xml_internal.h    |  6 +++---
c563b9
 lib/cluster/membership.c             | 12 ++++++------
c563b9
 lib/pacemaker/pcmk_cluster_queries.c |  6 +++---
c563b9
 3 files changed, 12 insertions(+), 12 deletions(-)
c563b9
c563b9
diff --git a/include/crm/common/xml_internal.h b/include/crm/common/xml_internal.h
c563b9
index 969a57d..4501bee 100644
c563b9
--- a/include/crm/common/xml_internal.h
c563b9
+++ b/include/crm/common/xml_internal.h
c563b9
@@ -126,18 +126,18 @@ do {
c563b9
 /* XML search strings for guest, remote and pacemaker_remote nodes */
c563b9
 
c563b9
 /* search string to find CIB resources entries for guest nodes */
c563b9
-#define XPATH_GUEST_NODE_CONFIG \
c563b9
+#define PCMK__XP_GUEST_NODE_CONFIG \
c563b9
     "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
     "//" XML_TAG_META_SETS "//" XML_CIB_TAG_NVPAIR \
c563b9
     "[@name='" XML_RSC_ATTR_REMOTE_NODE "']"
c563b9
 
c563b9
 /* search string to find CIB resources entries for remote nodes */
c563b9
-#define XPATH_REMOTE_NODE_CONFIG \
c563b9
+#define PCMK__XP_REMOTE_NODE_CONFIG \
c563b9
     "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
     "[@type='remote'][@provider='pacemaker']"
c563b9
 
c563b9
 /* search string to find CIB node status entries for pacemaker_remote nodes */
c563b9
-#define XPATH_REMOTE_NODE_STATUS \
c563b9
+#define PCMK__XP_REMOTE_NODE_STATUS \
c563b9
     "//" XML_TAG_CIB "//" XML_CIB_TAG_STATUS "//" XML_CIB_TAG_STATE \
c563b9
     "[@" XML_NODE_IS_REMOTE "='true']"
c563b9
 
c563b9
diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c
c563b9
index 5841f16..d70091e 100644
c563b9
--- a/lib/cluster/membership.c
c563b9
+++ b/lib/cluster/membership.c
c563b9
@@ -257,7 +257,7 @@ crm_remote_peer_cache_refresh(xmlNode *cib)
c563b9
     /* Look for guest nodes and remote nodes in the status section */
c563b9
     data.field = "id";
c563b9
     data.has_state = TRUE;
c563b9
-    crm_foreach_xpath_result(cib, XPATH_REMOTE_NODE_STATUS,
c563b9
+    crm_foreach_xpath_result(cib, PCMK__XP_REMOTE_NODE_STATUS,
c563b9
                              remote_cache_refresh_helper, &data);
c563b9
 
c563b9
     /* Look for guest nodes and remote nodes in the configuration section,
c563b9
@@ -268,11 +268,11 @@ crm_remote_peer_cache_refresh(xmlNode *cib)
c563b9
      */
c563b9
     data.field = "value";
c563b9
     data.has_state = FALSE;
c563b9
-    crm_foreach_xpath_result(cib, XPATH_GUEST_NODE_CONFIG,
c563b9
+    crm_foreach_xpath_result(cib, PCMK__XP_GUEST_NODE_CONFIG,
c563b9
                              remote_cache_refresh_helper, &data);
c563b9
     data.field = "id";
c563b9
     data.has_state = FALSE;
c563b9
-    crm_foreach_xpath_result(cib, XPATH_REMOTE_NODE_CONFIG,
c563b9
+    crm_foreach_xpath_result(cib, PCMK__XP_REMOTE_NODE_CONFIG,
c563b9
                              remote_cache_refresh_helper, &data);
c563b9
 
c563b9
     /* Remove all old cache entries that weren't seen in the CIB */
c563b9
@@ -1232,7 +1232,7 @@ known_node_cache_refresh_helper(xmlNode *xml_node, void *user_data)
c563b9
 
c563b9
 }
c563b9
 
c563b9
-#define XPATH_MEMBER_NODE_CONFIG \
c563b9
+#define PCMK__XP_MEMBER_NODE_CONFIG \
c563b9
     "//" XML_TAG_CIB "/" XML_CIB_TAG_CONFIGURATION "/" XML_CIB_TAG_NODES \
c563b9
     "/" XML_CIB_TAG_NODE "[not(@type) or @type='member']"
c563b9
 
c563b9
@@ -1243,7 +1243,7 @@ crm_known_peer_cache_refresh(xmlNode *cib)
c563b9
 
c563b9
     g_hash_table_foreach(crm_known_peer_cache, mark_dirty, NULL);
c563b9
 
c563b9
-    crm_foreach_xpath_result(cib, XPATH_MEMBER_NODE_CONFIG,
c563b9
+    crm_foreach_xpath_result(cib, PCMK__XP_MEMBER_NODE_CONFIG,
c563b9
                              known_peer_cache_refresh_helper, NULL);
c563b9
 
c563b9
     /* Remove all old cache entries that weren't seen in the CIB */
c563b9
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
index fc5cfc4..e512f32 100644
c563b9
--- a/lib/pacemaker/pcmk_cluster_queries.c
c563b9
+++ b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
@@ -467,21 +467,21 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
c563b9
         if (pcmk__str_empty(node_types) || strstr(node_types, "pacemaker_remote")) {
c563b9
             data.field = "id";
c563b9
             data.type = "pacemaker_remote";
c563b9
-            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_STATUS,
c563b9
+            crm_foreach_xpath_result(xml_node, PCMK__XP_REMOTE_NODE_STATUS,
c563b9
                                      remote_node_print_helper, &data);
c563b9
         }
c563b9
 
c563b9
         if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
c563b9
             data.field = "value";
c563b9
             data.type = "guest";
c563b9
-            crm_foreach_xpath_result(xml_node, XPATH_GUEST_NODE_CONFIG,
c563b9
+            crm_foreach_xpath_result(xml_node, PCMK__XP_GUEST_NODE_CONFIG,
c563b9
                                      remote_node_print_helper, &data);
c563b9
         }
c563b9
 
c563b9
         if (pcmk__str_empty(node_types) || !pcmk__strcmp(node_types, ",|^remote", pcmk__str_regex)) {
c563b9
             data.field = "id";
c563b9
             data.type = "remote";
c563b9
-            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_CONFIG,
c563b9
+            crm_foreach_xpath_result(xml_node, PCMK__XP_REMOTE_NODE_CONFIG,
c563b9
                                      remote_node_print_helper, &data);
c563b9
         }
c563b9
 
c563b9
-- 
c563b9
1.8.3.1
c563b9
c563b9
c563b9
From 225d5fabedb1319245a2a3e661df2252e60aca1a Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Fri, 22 Jan 2021 16:34:39 +0100
c563b9
Subject: [PATCH 4/7] Fix: crmadmin: use cluster instead of member term and
c563b9
 remove pacemaker_remote node type
c563b9
c563b9
---
c563b9
 include/pacemaker.h                  |  1 +
c563b9
 lib/cluster/membership.c             |  2 +-
c563b9
 lib/pacemaker/pcmk_cluster_queries.c | 10 +---------
c563b9
 lib/pacemaker/pcmk_output.c          |  4 ++--
c563b9
 tools/crmadmin.c                     |  4 ++--
c563b9
 5 files changed, 7 insertions(+), 14 deletions(-)
c563b9
c563b9
diff --git a/include/pacemaker.h b/include/pacemaker.h
c563b9
index 42d096f..a6a9d13 100644
c563b9
--- a/include/pacemaker.h
c563b9
+++ b/include/pacemaker.h
c563b9
@@ -77,6 +77,7 @@ int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc,
c563b9
  * \brief Get nodes list
c563b9
  *
c563b9
  * \param[in,out] xml                The destination for the result, as an XML tree.
c563b9
+ * \param[in]     node_types         Node type(s) to return (default: all)
c563b9
  *
c563b9
  * \return Standard Pacemaker return code
c563b9
  */
c563b9
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
index e512f32..9f19915 100644
c563b9
--- a/lib/pacemaker/pcmk_cluster_queries.c
c563b9
+++ b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
@@ -448,11 +448,10 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
c563b9
             node_types = NULL;
c563b9
         }
c563b9
 
c563b9
-        if (pcmk__str_empty(node_types) || strstr(node_types, "member")) {
c563b9
+        if (pcmk__str_empty(node_types) || strstr(node_types, "cluster")) {
c563b9
             for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
c563b9
                  node = crm_next_same_xml(node)) {
c563b9
                 const char *node_type = crm_element_value(node, XML_ATTR_TYPE);
c563b9
-                //if (node_type == NULL || !strcmp(node_type, "member")) {
c563b9
                 if (node_type == NULL) {
c563b9
                     out->message(out, "crmadmin-node", node_type,
c563b9
                                  crm_str(crm_element_value(node, XML_ATTR_UNAME)),
c563b9
@@ -464,13 +463,6 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
c563b9
             }
c563b9
         }
c563b9
 
c563b9
-        if (pcmk__str_empty(node_types) || strstr(node_types, "pacemaker_remote")) {
c563b9
-            data.field = "id";
c563b9
-            data.type = "pacemaker_remote";
c563b9
-            crm_foreach_xpath_result(xml_node, PCMK__XP_REMOTE_NODE_STATUS,
c563b9
-                                     remote_node_print_helper, &data);
c563b9
-        }
c563b9
-
c563b9
         if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
c563b9
             data.field = "value";
c563b9
             data.type = "guest";
c563b9
diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c
c563b9
index 8f5e301..655b723 100644
c563b9
--- a/lib/pacemaker/pcmk_output.c
c563b9
+++ b/lib/pacemaker/pcmk_output.c
c563b9
@@ -483,7 +483,7 @@ crmadmin_node_text(pcmk__output_t *out, va_list args)
c563b9
     } else if (BASH_EXPORT) {
c563b9
         out->info(out, "export %s=%s", crm_str(name), crm_str(id));
c563b9
     } else {
c563b9
-        out->info(out, "%s node: %s (%s)", type ? type : "member",
c563b9
+        out->info(out, "%s node: %s (%s)", type ? type : "cluster",
c563b9
                   crm_str(name), crm_str(id));
c563b9
     }
c563b9
 
c563b9
@@ -499,7 +499,7 @@ crmadmin_node_xml(pcmk__output_t *out, va_list args)
c563b9
     const char *id = va_arg(args, const char *);
c563b9
 
c563b9
     pcmk__output_create_xml_node(out, "node",
c563b9
-                                 "type", type ? type : "member",
c563b9
+                                 "type", type ? type : "cluster",
c563b9
                                  "name", crm_str(name),
c563b9
                                  "id", crm_str(id),
c563b9
                                  NULL);
c563b9
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
c563b9
index 3f31c69..d699786 100644
c563b9
--- a/tools/crmadmin.c
c563b9
+++ b/tools/crmadmin.c
c563b9
@@ -96,8 +96,8 @@ static GOptionEntry additional_options[] = {
c563b9
       NULL
c563b9
     },
c563b9
     { "node-types", 'T', 0, G_OPTION_ARG_STRING, &options.node_types,
c563b9
-      "Node types to list (available options: all, member, pacemaker_remote,"
c563b9
-      "\n                          guest, remote) (valid with -N/--nodes)",
c563b9
+      "Node types to list (available options: all, cluster, guest, remote)"
c563b9
+      "\n                          (valid with -N/--nodes)",
c563b9
       NULL
c563b9
     },
c563b9
     { "bash-export", 'B', 0, G_OPTION_ARG_NONE, &options.BASH_EXPORT,
c563b9
-- 
c563b9
1.8.3.1
c563b9
c563b9
c563b9
From ceacef32c70d1760a4dd89c00134373d42457ea2 Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Mon, 25 Jan 2021 16:52:00 +0100
c563b9
Subject: [PATCH 5/7] Refactor: crmadmin/pcmk__list_nodes(): use
c563b9
 crm_foreach_xpath_result() for all types of nodes
c563b9
c563b9
---
c563b9
 include/crm/common/xml_internal.h    |  5 +++++
c563b9
 lib/cluster/membership.c             |  4 ----
c563b9
 lib/pacemaker/pcmk_cluster_queries.c | 25 ++++++++-----------------
c563b9
 3 files changed, 13 insertions(+), 21 deletions(-)
c563b9
c563b9
diff --git a/include/crm/common/xml_internal.h b/include/crm/common/xml_internal.h
c563b9
index 4501bee..2193b50 100644
c563b9
--- a/include/crm/common/xml_internal.h
c563b9
+++ b/include/crm/common/xml_internal.h
c563b9
@@ -125,6 +125,11 @@ do {
c563b9
 
c563b9
 /* XML search strings for guest, remote and pacemaker_remote nodes */
c563b9
 
c563b9
+/* search string to find CIB resources entries for cluster nodes */
c563b9
+#define PCMK__XP_MEMBER_NODE_CONFIG \
c563b9
+    "//" XML_TAG_CIB "/" XML_CIB_TAG_CONFIGURATION "/" XML_CIB_TAG_NODES \
c563b9
+    "/" XML_CIB_TAG_NODE "[not(@type) or @type='member']"
c563b9
+
c563b9
 /* search string to find CIB resources entries for guest nodes */
c563b9
 #define PCMK__XP_GUEST_NODE_CONFIG \
c563b9
     "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
c563b9
diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c
c563b9
index 3417836..5d042e2 100644
c563b9
--- a/lib/cluster/membership.c
c563b9
+++ b/lib/cluster/membership.c
c563b9
@@ -1232,10 +1232,6 @@ known_node_cache_refresh_helper(xmlNode *xml_node, void *user_data)
c563b9
 
c563b9
 }
c563b9
 
c563b9
-#define PCMK__XP_MEMBER_NODE_CONFIG \
c563b9
-    "//" XML_TAG_CIB "/" XML_CIB_TAG_CONFIGURATION "/" XML_CIB_TAG_NODES \
c563b9
-    "/" XML_CIB_TAG_NODE "[not(@type) or @type='member']"
c563b9
-
c563b9
 static void
c563b9
 crm_known_peer_cache_refresh(xmlNode *cib)
c563b9
 {
c563b9
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
index 9f19915..6e6acda 100644
c563b9
--- a/lib/pacemaker/pcmk_cluster_queries.c
c563b9
+++ b/lib/pacemaker/pcmk_cluster_queries.c
c563b9
@@ -405,12 +405,13 @@ remote_node_print_helper(xmlNode *result, void *user_data)
c563b9
 {
c563b9
     struct node_data *data = user_data;
c563b9
     pcmk__output_t *out = data->out;
c563b9
-    const char *remote = crm_element_value(result, data->field);
c563b9
+    const char *name = crm_element_value(result, XML_ATTR_UNAME);
c563b9
+    const char *id = crm_element_value(result, data->field);
c563b9
 
c563b9
     // node name and node id are the same for remote/guest nodes
c563b9
     out->message(out, "crmadmin-node", data->type,
c563b9
-                 remote,
c563b9
-                 remote,
c563b9
+                 name ? name : id,
c563b9
+                 id,
c563b9
                  data->BASH_EXPORT);
c563b9
     data->found++;
c563b9
 }
c563b9
@@ -434,8 +435,6 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
c563b9
     rc = the_cib->cmds->query(the_cib, NULL, &xml_node,
c563b9
                               cib_scope_local | cib_sync_call);
c563b9
     if (rc == pcmk_ok) {
c563b9
-        xmlNode *node = NULL;
c563b9
-        xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
c563b9
         struct node_data data = {
c563b9
             .out = out,
c563b9
             .found = 0,
c563b9
@@ -449,18 +448,10 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
c563b9
         }
c563b9
 
c563b9
         if (pcmk__str_empty(node_types) || strstr(node_types, "cluster")) {
c563b9
-            for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
c563b9
-                 node = crm_next_same_xml(node)) {
c563b9
-                const char *node_type = crm_element_value(node, XML_ATTR_TYPE);
c563b9
-                if (node_type == NULL) {
c563b9
-                    out->message(out, "crmadmin-node", node_type,
c563b9
-                                 crm_str(crm_element_value(node, XML_ATTR_UNAME)),
c563b9
-                                 crm_str(crm_element_value(node, XML_ATTR_ID)),
c563b9
-                                 BASH_EXPORT);
c563b9
-                    data.found++;
c563b9
-                }
c563b9
-
c563b9
-            }
c563b9
+            data.field = "id";
c563b9
+            data.type = "cluster";
c563b9
+            crm_foreach_xpath_result(xml_node, PCMK__XP_MEMBER_NODE_CONFIG,
c563b9
+                                     remote_node_print_helper, &data);
c563b9
         }
c563b9
 
c563b9
         if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
c563b9
-- 
c563b9
1.8.3.1
c563b9
c563b9
c563b9
From a56ce0cf463798ac8d7ff945dda3be019cb9297d Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Tue, 26 Jan 2021 11:03:10 +0100
c563b9
Subject: [PATCH 6/7] Refactor: crmadmin: move new -T functionality to -N
c563b9
 parameter
c563b9
c563b9
---
c563b9
 include/crm/crm.h |  2 +-
c563b9
 tools/crmadmin.c  | 30 ++++++++++++------------------
c563b9
 2 files changed, 13 insertions(+), 19 deletions(-)
c563b9
c563b9
diff --git a/include/crm/crm.h b/include/crm/crm.h
c563b9
index 3f22c4b..09643c2 100644
c563b9
--- a/include/crm/crm.h
c563b9
+++ b/include/crm/crm.h
c563b9
@@ -51,7 +51,7 @@ extern "C" {
c563b9
  * >=3.0.13: Fail counts include operation name and interval
c563b9
  * >=3.2.0:  DC supports PCMK_LRM_OP_INVALID and PCMK_LRM_OP_NOT_CONNECTED
c563b9
  */
c563b9
-#  define CRM_FEATURE_SET		"3.7.0"
c563b9
+#  define CRM_FEATURE_SET		"3.7.1"
c563b9
 
c563b9
 #  define EOS		'\0'
c563b9
 #  define DIMOF(a)	((int) (sizeof(a)/sizeof(a[0])) )
c563b9
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
c563b9
index d699786..9c280aa 100644
c563b9
--- a/tools/crmadmin.c
c563b9
+++ b/tools/crmadmin.c
c563b9
@@ -36,14 +36,12 @@ static enum {
c563b9
 struct {
c563b9
     gboolean health;
c563b9
     gint timeout;
c563b9
-    char *dest_node;
c563b9
+    char *optarg;
c563b9
     char *ipc_name;
c563b9
-    char *node_types;
c563b9
     gboolean BASH_EXPORT;
c563b9
 } options = {
c563b9
-    .dest_node = NULL,
c563b9
+    .optarg = NULL,
c563b9
     .ipc_name = NULL,
c563b9
-    .node_types = NULL,
c563b9
     .BASH_EXPORT = FALSE
c563b9
 };
c563b9
 
c563b9
@@ -69,9 +67,10 @@ static GOptionEntry command_options[] = {
c563b9
       "\n                          node to examine the logs.",
c563b9
       NULL
c563b9
     },
c563b9
-    { "nodes", 'N', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, command_cb,
c563b9
-      "Display the uname of all member nodes",
c563b9
-      NULL
c563b9
+    { "nodes", 'N', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, command_cb,
c563b9
+      "Display the uname of all member nodes [optionally filtered by type (comma-separated)]"
c563b9
+      "\n                          Types: all (default), cluster, guest, remote",
c563b9
+      "TYPE"
c563b9
     },
c563b9
     { "election", 'E', G_OPTION_FLAG_HIDDEN|G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, command_cb,
c563b9
       "(Advanced) Start an election for the cluster co-ordinator",
c563b9
@@ -95,11 +94,6 @@ static GOptionEntry additional_options[] = {
c563b9
       "\n                          operation failed",
c563b9
       NULL
c563b9
     },
c563b9
-    { "node-types", 'T', 0, G_OPTION_ARG_STRING, &options.node_types,
c563b9
-      "Node types to list (available options: all, cluster, guest, remote)"
c563b9
-      "\n                          (valid with -N/--nodes)",
c563b9
-      NULL
c563b9
-    },
c563b9
     { "bash-export", 'B', 0, G_OPTION_ARG_NONE, &options.BASH_EXPORT,
c563b9
       "Display nodes as shell commands of the form 'export uname=uuid'"
c563b9
       "\n                          (valid with -N/--nodes)",
c563b9
@@ -142,10 +136,10 @@ command_cb(const gchar *option_name, const gchar *optarg, gpointer data, GError
c563b9
     }
c563b9
 
c563b9
     if (optarg) {
c563b9
-        if (options.dest_node != NULL) {
c563b9
-            free(options.dest_node);
c563b9
+        if (options.optarg != NULL) {
c563b9
+            free(options.optarg);
c563b9
         }
c563b9
-        options.dest_node = strdup(optarg);
c563b9
+        options.optarg = strdup(optarg);
c563b9
     }
c563b9
 
c563b9
     return TRUE;
c563b9
@@ -265,19 +259,19 @@ main(int argc, char **argv)
c563b9
 
c563b9
     switch (command) {
c563b9
         case cmd_health:
c563b9
-            rc = pcmk__controller_status(out, options.dest_node, options.timeout);
c563b9
+            rc = pcmk__controller_status(out, options.optarg, options.timeout);
c563b9
             break;
c563b9
         case cmd_pacemakerd_health:
c563b9
             rc = pcmk__pacemakerd_status(out, options.ipc_name, options.timeout);
c563b9
             break;
c563b9
         case cmd_list_nodes:
c563b9
-            rc = pcmk__list_nodes(out, options.node_types, options.BASH_EXPORT);
c563b9
+            rc = pcmk__list_nodes(out, options.optarg, options.BASH_EXPORT);
c563b9
             break;
c563b9
         case cmd_whois_dc:
c563b9
             rc = pcmk__designated_controller(out, options.timeout);
c563b9
             break;
c563b9
         case cmd_shutdown:
c563b9
-            rc = pcmk__shutdown_controller(out, options.dest_node);
c563b9
+            rc = pcmk__shutdown_controller(out, options.optarg);
c563b9
             break;
c563b9
         case cmd_elect_dc:
c563b9
             rc = pcmk__start_election(out);
c563b9
-- 
c563b9
1.8.3.1
c563b9
c563b9
c563b9
From dae5688edaf1b3008b70296421004ebdfbdf4b7b Mon Sep 17 00:00:00 2001
c563b9
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
c563b9
Date: Tue, 26 Jan 2021 15:02:39 +0100
c563b9
Subject: [PATCH 7/7] Test: cts-cli: add crmadmin -N/--nodes tests
c563b9
c563b9
---
c563b9
 cts/Makefile.am                                 |   1 +
c563b9
 cts/cli/crmadmin-cluster-remote-guest-nodes.xml | 483 ++++++++++++++++++++++++
c563b9
 cts/cli/regression.tools.exp                    |  24 ++
c563b9
 cts/cts-cli.in                                  |  42 ++-
c563b9
 4 files changed, 543 insertions(+), 7 deletions(-)
c563b9
 create mode 100644 cts/cli/crmadmin-cluster-remote-guest-nodes.xml
c563b9
c563b9
diff --git a/cts/Makefile.am b/cts/Makefile.am
c563b9
index de02aed..2a73774 100644
c563b9
--- a/cts/Makefile.am
c563b9
+++ b/cts/Makefile.am
c563b9
@@ -61,6 +61,7 @@ cts_SCRIPTS		= CTSlab.py		\
c563b9
 
c563b9
 clidir		= $(testdir)/cli
c563b9
 dist_cli_DATA	= cli/constraints.xml \
c563b9
+		  cli/crmadmin-cluster-remote-guest-nodes.xml \
c563b9
 		  cli/crm_diff_new.xml		\
c563b9
 		  cli/crm_diff_old.xml		\
c563b9
 		  cli/crm_mon.xml		\
c563b9
diff --git a/cts/cli/crmadmin-cluster-remote-guest-nodes.xml b/cts/cli/crmadmin-cluster-remote-guest-nodes.xml
c563b9
new file mode 100644
c563b9
index 0000000..8db656f
c563b9
--- /dev/null
c563b9
+++ b/cts/cli/crmadmin-cluster-remote-guest-nodes.xml
c563b9
@@ -0,0 +1,483 @@
c563b9
+<cib crm_feature_set="3.0.12" validate-with="pacemaker-3.0" epoch="24" num_updates="0" admin_epoch="0" cib-last-written="Fri Jul 14 08:50:25 2017" update-origin="overcloud-controller-0" update-client="cibadmin" update-user="overcloud-rabbit-0" have-quorum="1" dc-uuid="2" execution-date="1500022225">
c563b9
+  <configuration>
c563b9
+    <crm_config>
c563b9
+      <cluster_property_set id="cib-bootstrap-options">
c563b9
+        <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
c563b9
+        <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.16-12.el7-94ff4df"/>
c563b9
+        <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
c563b9
+        <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="tripleo_cluster"/>
c563b9
+        <nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
c563b9
+        <nvpair id="cib-bootstrap-options-cluster-recheck-interval" name="cluster-recheck-interval" value="60s"/>
c563b9
+      </cluster_property_set>
c563b9
+    </crm_config>
c563b9
+    <nodes>
c563b9
+      <node id="1" uname="overcloud-controller-0"/>
c563b9
+      <node id="2" uname="overcloud-controller-1"/>
c563b9
+      <node id="3" uname="overcloud-controller-2"/>
c563b9
+      <node id="4" uname="overcloud-galera-0">
c563b9
+        <instance_attributes id="nodes-4">
c563b9
+          <nvpair id="nodes-4-galera-role" name="galera-role" value="true"/>
c563b9
+        </instance_attributes>
c563b9
+      </node>
c563b9
+      <node id="5" uname="overcloud-galera-1">
c563b9
+        <instance_attributes id="nodes-5">
c563b9
+          <nvpair id="nodes-5-galera-role" name="galera-role" value="true"/>
c563b9
+        </instance_attributes>
c563b9
+      </node>
c563b9
+      <node id="6" uname="overcloud-galera-2">
c563b9
+        <instance_attributes id="nodes-6">
c563b9
+          <nvpair id="nodes-6-galera-role" name="galera-role" value="true"/>
c563b9
+        </instance_attributes>
c563b9
+      </node>
c563b9
+      <node id="overcloud-rabbit-0" type="remote" uname="overcloud-rabbit-0">
c563b9
+        <instance_attributes id="nodes-overcloud-rabbit-0">
c563b9
+          <nvpair id="nodes-overcloud-rabbit-0-rabbitmq-role" name="rabbitmq-role" value="true"/>
c563b9
+        </instance_attributes>
c563b9
+      </node>
c563b9
+      <node id="overcloud-rabbit-1" type="remote" uname="overcloud-rabbit-1">
c563b9
+        <instance_attributes id="nodes-overcloud-rabbit-1">
c563b9
+          <nvpair id="nodes-overcloud-rabbit-1-rabbitmq-role" name="rabbitmq-role" value="true"/>
c563b9
+        </instance_attributes>
c563b9
+      </node>
c563b9
+      <node id="overcloud-rabbit-2" type="remote" uname="overcloud-rabbit-2">
c563b9
+        <instance_attributes id="nodes-overcloud-rabbit-2">
c563b9
+          <nvpair id="nodes-overcloud-rabbit-2-rabbitmq-role" name="rabbitmq-role" value="true"/>
c563b9
+        </instance_attributes>
c563b9
+      </node>
c563b9
+    </nodes>
c563b9
+    <resources>
c563b9
+      <primitive class="ocf" id="overcloud-rabbit-0" provider="pacemaker" type="remote">
c563b9
+        <instance_attributes id="overcloud-rabbit-0-instance_attributes">
c563b9
+          <nvpair id="overcloud-rabbit-0-instance_attributes-reconnect_interval" name="reconnect_interval" value="60"/>
c563b9
+        </instance_attributes>
c563b9
+        <operations>
c563b9
+          <op id="overcloud-rabbit-0-monitor-interval-20" interval="20" name="monitor"/>
c563b9
+          <op id="overcloud-rabbit-0-start-interval-0s" interval="0s" name="start" timeout="60"/>
c563b9
+          <op id="overcloud-rabbit-0-stop-interval-0s" interval="0s" name="stop" timeout="60"/>
c563b9
+        </operations>
c563b9
+      </primitive>
c563b9
+      <primitive class="ocf" id="overcloud-rabbit-1" provider="pacemaker" type="remote">
c563b9
+        <instance_attributes id="overcloud-rabbit-1-instance_attributes">
c563b9
+          <nvpair id="overcloud-rabbit-1-instance_attributes-reconnect_interval" name="reconnect_interval" value="60"/>
c563b9
+        </instance_attributes>
c563b9
+        <operations>
c563b9
+          <op id="overcloud-rabbit-1-monitor-interval-20" interval="20" name="monitor"/>
c563b9
+          <op id="overcloud-rabbit-1-start-interval-0s" interval="0s" name="start" timeout="60"/>
c563b9
+          <op id="overcloud-rabbit-1-stop-interval-0s" interval="0s" name="stop" timeout="60"/>
c563b9
+        </operations>
c563b9
+      </primitive>
c563b9
+      <primitive class="ocf" id="overcloud-rabbit-2" provider="pacemaker" type="remote">
c563b9
+        <instance_attributes id="overcloud-rabbit-2-instance_attributes">
c563b9
+          <nvpair id="overcloud-rabbit-2-instance_attributes-reconnect_interval" name="reconnect_interval" value="60"/>
c563b9
+        </instance_attributes>
c563b9
+        <operations>
c563b9
+          <op id="overcloud-rabbit-2-monitor-interval-20" interval="20" name="monitor"/>
c563b9
+          <op id="overcloud-rabbit-2-start-interval-0s" interval="0s" name="start" timeout="60"/>
c563b9
+          <op id="overcloud-rabbit-2-stop-interval-0s" interval="0s" name="stop" timeout="60"/>
c563b9
+        </operations>
c563b9
+      </primitive>
c563b9
+      <primitive class="ocf" id="container1" provider="heartbeat" type="VirtualDomain">
c563b9
+        <instance_attributes id="container1-instance_attributes">
c563b9
+          <nvpair id="container1-instance_attributes-force_stop" name="force_stop" value="true"/>
c563b9
+          <nvpair id="container1-instance_attributes-hypervisor" name="hypervisor" value="lxc:///"/>
c563b9
+          <nvpair id="container1-instance_attributes-config" name="config" value="/var/lib/pacemaker/cts/lxc/lxc1.xml"/>
c563b9
+        </instance_attributes>
c563b9
+        <utilization id="container1-utilization">
c563b9
+          <nvpair id="container1-utilization-cpu" name="cpu" value="1"/>
c563b9
+          <nvpair id="container1-utilization-hv_memory" name="hv_memory" value="196"/>
c563b9
+        </utilization>
c563b9
+        <meta_attributes id="container1-meta_attributes">
c563b9
+          <nvpair id="container1-meta_attributes-remote-node" name="remote-node" value="lxc1"/>
c563b9
+        </meta_attributes>
c563b9
+      </primitive>
c563b9
+      <primitive class="ocf" id="container2" provider="heartbeat" type="VirtualDomain">
c563b9
+        <instance_attributes id="container2-instance_attributes">
c563b9
+          <nvpair id="container2-instance_attributes-force_stop" name="force_stop" value="true"/>
c563b9
+          <nvpair id="container2-instance_attributes-hypervisor" name="hypervisor" value="lxc:///"/>
c563b9
+          <nvpair id="container2-instance_attributes-config" name="config" value="/var/lib/pacemaker/cts/lxc/lxc2.xml"/>
c563b9
+        </instance_attributes>
c563b9
+        <utilization id="container2-utilization">
c563b9
+          <nvpair id="container2-utilization-cpu" name="cpu" value="1"/>
c563b9
+          <nvpair id="container2-utilization-hv_memory" name="hv_memory" value="196"/>
c563b9
+        </utilization>
c563b9
+        <meta_attributes id="container2-meta_attributes">
c563b9
+          <nvpair id="container2-meta_attributes-remote-node" name="remote-node" value="lxc2"/>
c563b9
+        </meta_attributes>
c563b9
+      </primitive>
c563b9
+      <bundle id="rabbitmq-bundle">
c563b9
+        <docker image="192.168.24.1:8787/tripleoupstream/centos-binary-rabbitmq:latest" network="host" options="--user=root --log-driver=journald -e KOLLA_CONFIG_STRATEGY=COPY_ALWAYS" replicas="3" run-command="/bin/bash /usr/local/bin/kolla_start"/>
c563b9
+        <network control-port="3121"/>
c563b9
+        <storage>
c563b9
+          <storage-mapping id="rabbitmq-cfg-files" options="ro" source-dir="/var/lib/kolla/config_files/rabbitmq.json" target-dir="/var/lib/kolla/config_files/config.json"/>
c563b9
+          <storage-mapping id="rabbitmq-cfg-data" options="ro" source-dir="/var/lib/config-data/puppet-generated/rabbitmq/" target-dir="/var/lib/kolla/config_files/src"/>
c563b9
+          <storage-mapping id="rabbitmq-hosts" options="ro" source-dir="/etc/hosts" target-dir="/etc/hosts"/>
c563b9
+          <storage-mapping id="rabbitmq-localtime" options="ro" source-dir="/etc/localtime" target-dir="/etc/localtime"/>
c563b9
+          <storage-mapping id="rabbitmq-lib" options="rw" source-dir="/var/lib/rabbitmq" target-dir="/var/lib/rabbitmq"/>
c563b9
+          <storage-mapping id="rabbitmq-pki-extracted" options="ro" source-dir="/etc/pki/ca-trust/extracted" target-dir="/etc/pki/ca-trust/extracted"/>
c563b9
+          <storage-mapping id="rabbitmq-pki-ca-bundle-crt" options="ro" source-dir="/etc/pki/tls/certs/ca-bundle.crt" target-dir="/etc/pki/tls/certs/ca-bundle.crt"/>
c563b9
+          <storage-mapping id="rabbitmq-pki-ca-bundle-trust-crt" options="ro" source-dir="/etc/pki/tls/certs/ca-bundle.trust.crt" target-dir="/etc/pki/tls/certs/ca-bundle.trust.crt"/>
c563b9
+          <storage-mapping id="rabbitmq-pki-cert" options="ro" source-dir="/etc/pki/tls/cert.pem" target-dir="/etc/pki/tls/cert.pem"/>
c563b9
+          <storage-mapping id="rabbitmq-dev-log" options="rw" source-dir="/dev/log" target-dir="/dev/log"/>
c563b9
+        </storage>
c563b9
+        <primitive class="ocf" id="rabbitmq" provider="heartbeat" type="rabbitmq-cluster">
c563b9
+          <instance_attributes id="rabbitmq-instance_attributes">
c563b9
+            <nvpair id="rabbitmq-instance_attributes-set_policy" name="set_policy" value="ha-all ^(?!amq\.).* {"ha-mode":"all"}"/>
c563b9
+          </instance_attributes>
c563b9
+          <meta_attributes id="rabbitmq-meta_attributes">
c563b9
+            <nvpair id="rabbitmq-meta_attributes-notify" name="notify" value="true"/>
c563b9
+          </meta_attributes>
c563b9
+          <operations>
c563b9
+            <op id="rabbitmq-monitor-interval-10" interval="10" name="monitor" timeout="40"/>
c563b9
+            <op id="rabbitmq-start-interval-0s" interval="0s" name="start" timeout="200s"/>
c563b9
+            <op id="rabbitmq-stop-interval-0s" interval="0s" name="stop" timeout="200s"/>
c563b9
+          </operations>
c563b9
+        </primitive>
c563b9
+      </bundle>
c563b9
+      <bundle id="galera-bundle">
c563b9
+        <docker image="192.168.24.1:8787/tripleoupstream/centos-binary-mariadb:latest" promoted-max="3" network="host" options="--user=root --log-driver=journald -e KOLLA_CONFIG_STRATEGY=COPY_ALWAYS" replicas="3" run-command="/bin/bash /usr/local/bin/kolla_start"/>
c563b9
+        <network control-port="3123"/>
c563b9
+        <storage>
c563b9
+          <storage-mapping id="mysql-cfg-files" options="ro" source-dir="/var/lib/kolla/config_files/mysql.json" target-dir="/var/lib/kolla/config_files/config.json"/>
c563b9
+          <storage-mapping id="mysql-cfg-data" options="ro" source-dir="/var/lib/config-data/puppet-generated/mysql/" target-dir="/var/lib/kolla/config_files/src"/>
c563b9
+          <storage-mapping id="mysql-hosts" options="ro" source-dir="/etc/hosts" target-dir="/etc/hosts"/>
c563b9
+          <storage-mapping id="mysql-localtime" options="ro" source-dir="/etc/localtime" target-dir="/etc/localtime"/>
c563b9
+          <storage-mapping id="mysql-lib" options="rw" source-dir="/var/lib/mysql" target-dir="/var/lib/mysql"/>
c563b9
+          <storage-mapping id="mysql-log-mariadb" options="rw" source-dir="/var/log/mariadb" target-dir="/var/log/mariadb"/>
c563b9
+          <storage-mapping id="mysql-pki-extracted" options="ro" source-dir="/etc/pki/ca-trust/extracted" target-dir="/etc/pki/ca-trust/extracted"/>
c563b9
+          <storage-mapping id="mysql-pki-ca-bundle-crt" options="ro" source-dir="/etc/pki/tls/certs/ca-bundle.crt" target-dir="/etc/pki/tls/certs/ca-bundle.crt"/>
c563b9
+          <storage-mapping id="mysql-pki-ca-bundle-trust-crt" options="ro" source-dir="/etc/pki/tls/certs/ca-bundle.trust.crt" target-dir="/etc/pki/tls/certs/ca-bundle.trust.crt"/>
c563b9
+          <storage-mapping id="mysql-pki-cert" options="ro" source-dir="/etc/pki/tls/cert.pem" target-dir="/etc/pki/tls/cert.pem"/>
c563b9
+          <storage-mapping id="mysql-dev-log" options="rw" source-dir="/dev/log" target-dir="/dev/log"/>
c563b9
+        </storage>
c563b9
+      </bundle>
c563b9
+    </resources>
c563b9
+    <constraints>
c563b9
+      <rsc_location id="location-rabbitmq-bundle" resource-discovery="exclusive" rsc="rabbitmq-bundle">
c563b9
+        <rule id="location-rabbitmq-bundle-rule" score="1">
c563b9
+          <expression attribute="rabbitmq-role" id="location-rabbitmq-bundle-rule-expr" operation="eq" value="true"/>
c563b9
+        </rule>
c563b9
+      </rsc_location>
c563b9
+      <rsc_location id="location-galera-bundle" resource-discovery="exclusive" rsc="galera-bundle">
c563b9
+        <rule id="location-galera-bundle-rule" score="0">
c563b9
+          <expression attribute="galera-role" id="location-galera-bundle-rule-expr" operation="eq" value="true"/>
c563b9
+        </rule>
c563b9
+      </rsc_location>
c563b9
+    </constraints>
c563b9
+    <rsc_defaults>
c563b9
+      <meta_attributes id="rsc_defaults-options">
c563b9
+        <nvpair id="rsc_defaults-options-resource-stickiness" name="resource-stickiness" value="INFINITY"/>
c563b9
+      </meta_attributes>
c563b9
+    </rsc_defaults>
c563b9
+  </configuration>
c563b9
+  <status>
c563b9
+    <node_state id="1" uname="overcloud-controller-0" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
c563b9
+      <lrm id="1">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_last_0" operation_key="overcloud-rabbit-0_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="8:2:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;8:2:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="2" rc-code="0" op-status="0" interval="0" last-run="1500021991" last-rc-change="1500021991" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_monitor_20000" operation_key="overcloud-rabbit-0_monitor_20000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="4:3:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;4:3:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="3" rc-code="0" op-status="0" interval="20000" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="6e5bb737f46c381d8a46fb4162afd9e0"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_last_0" operation_key="overcloud-rabbit-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="3:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;3:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="4" rc-code="7" op-status="0" interval="0" last-run="1500021998" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_last_0" operation_key="overcloud-rabbit-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="4:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;4:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1500022004" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="5:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;5:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="8" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="42" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="6:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;6:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="12" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="54" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="7:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;7:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022210" last-rc-change="1500022210" exec-time="58" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="8:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;8:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="20" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="79" queue-time="0" op-digest="4672b28c350bc4f5445fd6678c0c2a56"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="9:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;9:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="24" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="55" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="10:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;10:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="28" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="122" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+      <transient_attributes id="1">
c563b9
+        <instance_attributes id="status-1">
c563b9
+          <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
c563b9
+        </instance_attributes>
c563b9
+      </transient_attributes>
c563b9
+    </node_state>
c563b9
+    <node_state id="3" uname="overcloud-controller-2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
c563b9
+      <lrm id="3">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_last_0" operation_key="overcloud-rabbit-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="4:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;4:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="1" rc-code="7" op-status="0" interval="0" last-run="1500021990" last-rc-change="1500021990" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_last_0" operation_key="overcloud-rabbit-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="5:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;5:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="2" rc-code="7" op-status="0" interval="0" last-run="1500021998" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_last_0" operation_key="overcloud-rabbit-2_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="14:6:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;14:6:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="4" rc-code="0" op-status="0" interval="0" last-run="1500022004" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_monitor_20000" operation_key="overcloud-rabbit-2_monitor_20000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="10:7:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;10:7:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="5" rc-code="0" op-status="0" interval="20000" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="6e5bb737f46c381d8a46fb4162afd9e0"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="11:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;11:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="8" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="46" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="12:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;12:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="12" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="54" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="13:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;13:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="53" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="14:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;14:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="20" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="63" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="15:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;15:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="24" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="43" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="16:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;16:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="28" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="66" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+      <transient_attributes id="3">
c563b9
+        <instance_attributes id="status-3">
c563b9
+          <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
c563b9
+        </instance_attributes>
c563b9
+      </transient_attributes>
c563b9
+    </node_state>
c563b9
+    <node_state id="4" uname="overcloud-galera-0" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
c563b9
+      <lrm id="4">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_last_0" operation_key="overcloud-rabbit-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="5:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;5:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="1" rc-code="7" op-status="0" interval="0" last-run="1500021991" last-rc-change="1500021991" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_last_0" operation_key="overcloud-rabbit-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="6:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;6:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="2" rc-code="7" op-status="0" interval="0" last-run="1500021998" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_last_0" operation_key="overcloud-rabbit-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="7:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;7:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="3" rc-code="7" op-status="0" interval="0" last-run="1500022004" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="14:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;14:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="8" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="73" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="15:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;15:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="12" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="43" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="16:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;16:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="61" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="20:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;20:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1500022223" last-rc-change="1500022223" exec-time="443" queue-time="0" op-digest="4672b28c350bc4f5445fd6678c0c2a56"/>
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_monitor_60000" operation_key="galera-bundle-docker-0_monitor_60000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="21:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;21:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="30" rc-code="0" op-status="0" interval="60000" last-rc-change="1500022224" exec-time="111" queue-time="0" op-digest="4b2ba27785766c4876e892f67e694055"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="18:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;18:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="24" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="43" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="19:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;19:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-0" call-id="28" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="60" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+      <transient_attributes id="4">
c563b9
+        <instance_attributes id="status-4">
c563b9
+          <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
c563b9
+        </instance_attributes>
c563b9
+      </transient_attributes>
c563b9
+    </node_state>
c563b9
+    <node_state id="2" uname="overcloud-controller-1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
c563b9
+      <lrm id="2">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_last_0" operation_key="overcloud-rabbit-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="3:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;3:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="1" rc-code="7" op-status="0" interval="0" last-run="1500021991" last-rc-change="1500021991" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_last_0" operation_key="overcloud-rabbit-1_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="11:4:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;11:4:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="3" rc-code="0" op-status="0" interval="0" last-run="1500021998" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_monitor_20000" operation_key="overcloud-rabbit-1_monitor_20000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="7:5:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;7:5:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="4" rc-code="0" op-status="0" interval="20000" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="6e5bb737f46c381d8a46fb4162afd9e0"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_last_0" operation_key="overcloud-rabbit-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="5:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;5:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1500022004" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="8:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;8:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="8" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="40" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="9:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;9:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="12" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="99" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="10:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;10:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="105" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="11:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;11:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="20" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="38" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="12:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;12:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="24" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="72" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="13:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;13:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="28" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="40" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+      <transient_attributes id="2">
c563b9
+        <instance_attributes id="status-2">
c563b9
+          <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
c563b9
+        </instance_attributes>
c563b9
+      </transient_attributes>
c563b9
+    </node_state>
c563b9
+    <node_state id="5" uname="overcloud-galera-1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
c563b9
+      <lrm id="5">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_last_0" operation_key="overcloud-rabbit-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="6:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;6:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="1" rc-code="7" op-status="0" interval="0" last-run="1500021990" last-rc-change="1500021990" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_last_0" operation_key="overcloud-rabbit-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="7:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;7:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="2" rc-code="7" op-status="0" interval="0" last-run="1500021998" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_last_0" operation_key="overcloud-rabbit-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="8:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;8:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="3" rc-code="7" op-status="0" interval="0" last-run="1500022004" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="17:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;17:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="8" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="30" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="18:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;18:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="12" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="48" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="19:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;19:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="88" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="20:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;20:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="20" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="59" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="22:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;22:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1500022223" last-rc-change="1500022223" exec-time="463" queue-time="0" op-digest="4672b28c350bc4f5445fd6678c0c2a56"/>
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_monitor_60000" operation_key="galera-bundle-docker-1_monitor_60000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="23:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;23:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="30" rc-code="0" op-status="0" interval="60000" last-rc-change="1500022224" exec-time="104" queue-time="1" op-digest="4b2ba27785766c4876e892f67e694055"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="22:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;22:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-1" call-id="28" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="86" queue-time="1" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+      <transient_attributes id="5">
c563b9
+        <instance_attributes id="status-5">
c563b9
+          <nvpair id="status-5-shutdown" name="shutdown" value="0"/>
c563b9
+        </instance_attributes>
c563b9
+      </transient_attributes>
c563b9
+    </node_state>
c563b9
+    <node_state id="6" uname="overcloud-galera-2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
c563b9
+      <lrm id="6">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-0_last_0" operation_key="overcloud-rabbit-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="7:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;7:2:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="1" rc-code="7" op-status="0" interval="0" last-run="1500021991" last-rc-change="1500021991" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-1_last_0" operation_key="overcloud-rabbit-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="8:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;8:4:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="2" rc-code="7" op-status="0" interval="0" last-run="1500021998" last-rc-change="1500021998" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
c563b9
+            <lrm_rsc_op id="overcloud-rabbit-2_last_0" operation_key="overcloud-rabbit-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="9:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;9:6:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="3" rc-code="7" op-status="0" interval="0" last-run="1500022004" last-rc-change="1500022004" exec-time="0" queue-time="0" op-digest="a48beba1b11f09d6b1c15da8db5bb0a2" op-force-restart=" server " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="20:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;20:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="8" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="62" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="21:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;21:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="12" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="71" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="22:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;22:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="47" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="23:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;23:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="20" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="58" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="24:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;24:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="24" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="67" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="24:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;24:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1500022223" last-rc-change="1500022223" exec-time="532" queue-time="0" op-digest="4672b28c350bc4f5445fd6678c0c2a56"/>
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_monitor_60000" operation_key="galera-bundle-docker-2_monitor_60000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="25:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;25:20:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-galera-2" call-id="30" rc-code="0" op-status="0" interval="60000" last-rc-change="1500022224" exec-time="84" queue-time="0" op-digest="4b2ba27785766c4876e892f67e694055"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+      <transient_attributes id="6">
c563b9
+        <instance_attributes id="status-6">
c563b9
+          <nvpair id="status-6-shutdown" name="shutdown" value="0"/>
c563b9
+        </instance_attributes>
c563b9
+      </transient_attributes>
c563b9
+    </node_state>
c563b9
+    <node_state remote_node="true" id="overcloud-rabbit-0" uname="overcloud-rabbit-0" in_ccm="true" crm-debug-origin="do_update_resource" node_fenced="0">
c563b9
+      <lrm id="overcloud-rabbit-0">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="11:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;11:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="101" rc-code="0" op-status="0" interval="0" last-run="1500022215" last-rc-change="1500022215" exec-time="743" queue-time="0" op-digest="8c0a285f208d4d9a67aff645d6afa451"/>
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_monitor_60000" operation_key="rabbitmq-bundle-docker-0_monitor_60000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="12:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;12:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="106" rc-code="0" op-status="0" interval="60000" last-rc-change="1500022216" exec-time="116" queue-time="0" op-digest="22abb108ae9d2c7687fd55cec05e3eb1"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="24:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;24:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="80" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="34" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="25:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;25:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="86" rc-code="7" op-status="0" interval="0" last-run="1500022210" last-rc-change="1500022210" exec-time="51" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="26:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;26:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="114" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="39" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="27:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;27:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="119" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="32" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="28:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;28:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-0" call-id="123" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="27" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+    </node_state>
c563b9
+    <node_state remote_node="true" id="overcloud-rabbit-1" uname="overcloud-rabbit-1" in_ccm="true" crm-debug-origin="do_update_resource" node_fenced="0">
c563b9
+      <lrm id="overcloud-rabbit-1">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="26:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;26:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="41" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="13:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;13:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1500022215" last-rc-change="1500022215" exec-time="839" queue-time="0" op-digest="f16474ea54754bd1c314820340573331"/>
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_monitor_60000" operation_key="rabbitmq-bundle-docker-1_monitor_60000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="14:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;14:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="26" rc-code="0" op-status="0" interval="60000" last-rc-change="1500022216" exec-time="171" queue-time="0" op-digest="77a7f86a24beebea976cd186a4b67311"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="28:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;28:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="24" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="54" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="29:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;29:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="30" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="31" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="30:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;30:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="34" rc-code="7" op-status="0" interval="0" last-run="1500022218" last-rc-change="1500022218" exec-time="34" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="31:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;31:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-1" call-id="38" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="94" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+    </node_state>
c563b9
+    <node_state remote_node="true" id="overcloud-rabbit-2" uname="overcloud-rabbit-2" in_ccm="true" crm-debug-origin="do_update_resource" node_fenced="0">
c563b9
+      <lrm id="overcloud-rabbit-2">
c563b9
+        <lrm_resources>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-0_last_0" operation_key="rabbitmq-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="29:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;29:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="16" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="51" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-1_last_0" operation_key="rabbitmq-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="30:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;30:14:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="20" rc-code="7" op-status="0" interval="0" last-run="1500022209" last-rc-change="1500022209" exec-time="83" queue-time="0" op-digest="898a907c413e600aa5c030c26fbdccfd"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_last_0" operation_key="rabbitmq-bundle-docker-2_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="15:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;15:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1500022216" last-rc-change="1500022216" exec-time="825" queue-time="0" op-digest="0e859e53e780b236b7edb6b7a399e031"/>
c563b9
+            <lrm_rsc_op id="rabbitmq-bundle-docker-2_monitor_60000" operation_key="rabbitmq-bundle-docker-2_monitor_60000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="16:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:0;16:17:0:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="26" rc-code="0" op-status="0" interval="60000" last-rc-change="1500022217" exec-time="125" queue-time="0" op-digest="57d17ff3d69c0f58c3556fd7f904ec61"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-0_last_0" operation_key="galera-bundle-docker-0_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="32:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;32:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="30" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="42" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-1_last_0" operation_key="galera-bundle-docker-1_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="33:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;33:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="34" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="87" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
c563b9
+            <lrm_rsc_op id="galera-bundle-docker-2_last_0" operation_key="galera-bundle-docker-2_monitor_0" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.0.12" transition-key="34:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" transition-magic="0:7;34:18:7:db0fd259-f51a-4ee6-a59b-6043dedaded8" on_node="overcloud-controller-2" call-id="38" rc-code="7" op-status="0" interval="0" last-run="1500022219" last-rc-change="1500022219" exec-time="73" queue-time="0" op-digest="92b621d0e4ece2bf96924b0f75ab6f90"/>
c563b9
+          </lrm_resource>
c563b9
+        </lrm_resources>
c563b9
+      </lrm>
c563b9
+    </node_state>
c563b9
+  </status>
c563b9
+</cib>
c563b9
diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp
c563b9
index 510cc0a..7324053 100644
c563b9
--- a/cts/cli/regression.tools.exp
c563b9
+++ b/cts/cli/regression.tools.exp
c563b9
@@ -4053,3 +4053,27 @@ Resources colocated with clone:
c563b9
 </pacemaker-result>
c563b9
 =#=#=#= End test: Show resource digests with overrides - OK (0) =#=#=#=
c563b9
 * Passed: crm_resource   - Show resource digests with overrides
c563b9
+=#=#=#= Begin test: List all nodes =#=#=#=
c563b9
+11
c563b9
+=#=#=#= End test: List all nodes - OK (0) =#=#=#=
c563b9
+* Passed: crmadmin       - List all nodes
c563b9
+=#=#=#= Begin test: List cluster nodes =#=#=#=
c563b9
+6
c563b9
+=#=#=#= End test: List cluster nodes - OK (0) =#=#=#=
c563b9
+* Passed: crmadmin       - List cluster nodes
c563b9
+=#=#=#= Begin test: List guest nodes =#=#=#=
c563b9
+2
c563b9
+=#=#=#= End test: List guest nodes - OK (0) =#=#=#=
c563b9
+* Passed: crmadmin       - List guest nodes
c563b9
+=#=#=#= Begin test: List remote nodes =#=#=#=
c563b9
+3
c563b9
+=#=#=#= End test: List remote nodes - OK (0) =#=#=#=
c563b9
+* Passed: crmadmin       - List remote nodes
c563b9
+=#=#=#= Begin test: List cluster,remote nodes =#=#=#=
c563b9
+9
c563b9
+=#=#=#= End test: List cluster,remote nodes - OK (0) =#=#=#=
c563b9
+* Passed: crmadmin       - List cluster,remote nodes
c563b9
+=#=#=#= Begin test: List guest,remote nodes =#=#=#=
c563b9
+5
c563b9
+=#=#=#= End test: List guest,remote nodes - OK (0) =#=#=#=
c563b9
+* Passed: crmadmin       - List guest,remote nodes
c563b9
diff --git a/cts/cts-cli.in b/cts/cts-cli.in
c563b9
index 96f5386..8e2dbe5 100755
c563b9
--- a/cts/cts-cli.in
c563b9
+++ b/cts/cts-cli.in
c563b9
@@ -501,15 +501,15 @@ function test_tools() {
c563b9
     desc="Default standby value"
c563b9
     cmd="crm_standby -N node1 -G"
c563b9
     test_assert $CRM_EX_OK
c563b9
- 
c563b9
+
c563b9
     desc="Set standby status"
c563b9
     cmd="crm_standby -N node1 -v true"
c563b9
     test_assert $CRM_EX_OK
c563b9
- 
c563b9
+
c563b9
     desc="Query standby value"
c563b9
     cmd="crm_standby -N node1 -G"
c563b9
     test_assert $CRM_EX_OK
c563b9
- 
c563b9
+
c563b9
     desc="Delete standby value"
c563b9
     cmd="crm_standby -N node1 -D"
c563b9
     test_assert $CRM_EX_OK
c563b9
@@ -657,7 +657,7 @@ function test_tools() {
c563b9
     desc="Drop the status section"
c563b9
     cmd="cibadmin -R -o status --xml-text '<status/>'"
c563b9
     test_assert $CRM_EX_OK 0
c563b9
-    
c563b9
+
c563b9
     desc="Create a clone"
c563b9
     cmd="cibadmin -C -o resources --xml-text '<clone id=\"test-clone\"><primitive id=\"test-primitive\" class=\"ocf\" provider=\"pacemaker\" type=\"Dummy\"/></clone>'"
c563b9
     test_assert $CRM_EX_OK 0
c563b9
@@ -697,7 +697,7 @@ function test_tools() {
c563b9
     desc="Update existing resource meta attribute"
c563b9
     cmd="crm_resource -r test-clone --meta -p is-managed -v true"
c563b9
     test_assert $CRM_EX_OK
c563b9
-    
c563b9
+
c563b9
     desc="Create a resource meta attribute in the parent"
c563b9
     cmd="crm_resource -r test-clone --meta -p is-managed -v true --force"
c563b9
     test_assert $CRM_EX_OK
c563b9
@@ -803,6 +803,34 @@ function test_tools() {
c563b9
     test_assert $CRM_EX_OK 0
c563b9
 
c563b9
     unset CIB_file
c563b9
+
c563b9
+    export CIB_file="$test_home/cli/crmadmin-cluster-remote-guest-nodes.xml"
c563b9
+
c563b9
+    desc="List all nodes"
c563b9
+    cmd="crmadmin -N | wc -l | grep 11"
c563b9
+    test_assert $CRM_EX_OK 0
c563b9
+
c563b9
+    desc="List cluster nodes"
c563b9
+    cmd="crmadmin -N cluster | wc -l | grep 6"
c563b9
+    test_assert $CRM_EX_OK 0
c563b9
+
c563b9
+    desc="List guest nodes"
c563b9
+    cmd="crmadmin -N guest | wc -l | grep 2"
c563b9
+    test_assert $CRM_EX_OK 0
c563b9
+
c563b9
+    desc="List remote nodes"
c563b9
+    cmd="crmadmin -N remote | wc -l | grep 3"
c563b9
+    test_assert $CRM_EX_OK 0
c563b9
+
c563b9
+    desc="List cluster,remote nodes"
c563b9
+    cmd="crmadmin -N cluster,remote | wc -l | grep 9"
c563b9
+    test_assert $CRM_EX_OK 0
c563b9
+
c563b9
+    desc="List guest,remote nodes"
c563b9
+    cmd="crmadmin -N guest,remote | wc -l | grep 5"
c563b9
+    test_assert $CRM_EX_OK 0
c563b9
+
c563b9
+    unset CIB_file
c563b9
 }
c563b9
 
c563b9
 INVALID_PERIODS=(
c563b9
@@ -822,7 +850,7 @@ INVALID_PERIODS=(
c563b9
     "P1Z/2019-02-20 00:00:00Z"          # Invalid duration unit
c563b9
     "P1YM/2019-02-20 00:00:00Z"         # No number for duration unit
c563b9
 )
c563b9
-        
c563b9
+
c563b9
 function test_dates() {
c563b9
     # Ensure invalid period specifications are rejected
c563b9
     for spec in '' "${INVALID_PERIODS[@]}"; do
c563b9
@@ -1665,7 +1693,7 @@ for t in $tests; do
c563b9
 done
c563b9
 
c563b9
 rm -rf "${shadow_dir}"
c563b9
-    
c563b9
+
c563b9
 failed=0
c563b9
 
c563b9
 if [ $verbose -eq 1 ]; then
c563b9
-- 
c563b9
1.8.3.1
c563b9