Blob Blame History Raw
From 4fc4140d0c3daa3a8de32adaebf33462c9b3d581 Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Thu, 26 Nov 2020 13:34:21 +0100
Subject: [PATCH 1/7] Refactor: move crm_admin_list() to pcmk__list_nodes() and
 only print node name for -N -q

---
 lib/pacemaker/pcmk_cluster_queries.c | 32 ++++++++++++++++++++++++----
 lib/pacemaker/pcmk_output.c          | 41 +++---------------------------------
 2 files changed, 31 insertions(+), 42 deletions(-)

diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
index c705b7f..1d1e775 100644
--- a/lib/pacemaker/pcmk_cluster_queries.c
+++ b/lib/pacemaker/pcmk_cluster_queries.c
@@ -395,7 +395,7 @@ int
 pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
 {
     cib_t *the_cib = cib_new();
-    xmlNode *output = NULL;
+    xmlNode *xml_node = NULL;
     int rc;
 
     if (the_cib == NULL) {
@@ -406,11 +406,35 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
         return pcmk_legacy2rc(rc);
     }
 
-    rc = the_cib->cmds->query(the_cib, NULL, &output,
+    rc = the_cib->cmds->query(the_cib, NULL, &xml_node,
                               cib_scope_local | cib_sync_call);
     if (rc == pcmk_ok) {
-        out->message(out, "crmadmin-node-list", output, BASH_EXPORT);
-        free_xml(output);
+        int found = 0;
+        xmlNode *node = NULL;
+        xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
+
+        out->begin_list(out, NULL, NULL, "nodes");
+
+        for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
+             node = crm_next_same_xml(node)) {
+            const char *node_type = BASH_EXPORT ? NULL :
+                         crm_element_value(node, XML_ATTR_TYPE);
+            out->message(out, "crmadmin-node", node_type,
+                         crm_str(crm_element_value(node, XML_ATTR_UNAME)),
+                         crm_str(crm_element_value(node, XML_ATTR_ID)),
+                         BASH_EXPORT);
+
+            found++;
+        }
+        // @TODO List Pacemaker Remote nodes that don't have a <node> entry
+
+        out->end_list(out);
+
+        if (found == 0) {
+            out->info(out, "No nodes configured");
+        }
+
+        free_xml(xml_node);
     }
     the_cib->cmds->signoff(the_cib);
     return pcmk_legacy2rc(rc);
diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c
index bc4b91a..8f5e301 100644
--- a/lib/pacemaker/pcmk_output.c
+++ b/lib/pacemaker/pcmk_output.c
@@ -469,42 +469,6 @@ dc_xml(pcmk__output_t *out, va_list args)
     return pcmk_rc_ok;
 }
 
-
-PCMK__OUTPUT_ARGS("crmadmin-node-list", "xmlNodePtr", "gboolean")
-static int
-crmadmin_node_list(pcmk__output_t *out, va_list args)
-{
-    xmlNodePtr xml_node = va_arg(args, xmlNodePtr);
-    gboolean BASH_EXPORT = va_arg(args, gboolean);
-
-    int found = 0;
-    xmlNode *node = NULL;
-    xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
-
-    out->begin_list(out, NULL, NULL, "nodes");
-
-    for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
-         node = crm_next_same_xml(node)) {
-        const char *node_type = BASH_EXPORT ? NULL :
-                     crm_element_value(node, XML_ATTR_TYPE);
-        out->message(out, "crmadmin-node", node_type,
-                     crm_str(crm_element_value(node, XML_ATTR_UNAME)),
-                     crm_str(crm_element_value(node, XML_ATTR_ID)),
-                     BASH_EXPORT);
-
-        found++;
-    }
-    // @TODO List Pacemaker Remote nodes that don't have a <node> entry
-
-    out->end_list(out);
-
-    if (found == 0) {
-        out->info(out, "No nodes configured");
-    }
-
-    return pcmk_rc_ok;
-}
-
 PCMK__OUTPUT_ARGS("crmadmin-node", "const char *", "const char *", "const char *", "gboolean")
 static int
 crmadmin_node_text(pcmk__output_t *out, va_list args)
@@ -514,7 +478,9 @@ crmadmin_node_text(pcmk__output_t *out, va_list args)
     const char *id = va_arg(args, const char *);
     gboolean BASH_EXPORT = va_arg(args, gboolean);
 
-    if (BASH_EXPORT) {
+    if (out->is_quiet(out)) {
+        out->info(out, "%s", crm_str(name));
+    } else if (BASH_EXPORT) {
         out->info(out, "export %s=%s", crm_str(name), crm_str(id));
     } else {
         out->info(out, "%s node: %s (%s)", type ? type : "member",
@@ -657,7 +623,6 @@ static pcmk__message_entry_t fmt_functions[] = {
     { "pacemakerd-health", "xml", pacemakerd_health_xml },
     { "dc", "default", dc_text },
     { "dc", "xml", dc_xml },
-    { "crmadmin-node-list", "default", crmadmin_node_list },
     { "crmadmin-node", "default", crmadmin_node_text },
     { "crmadmin-node", "xml", crmadmin_node_xml },
     { "digests", "default", digests_text },
-- 
1.8.3.1


From ecc6d582fd18f774ab6c081c4d72a7913a0f419e Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Fri, 4 Dec 2020 09:30:04 +0100
Subject: [PATCH 2/7] Feature/API: crmadmin/pcmk_list_nodes(): list
 remote/guest nodes and add parameter/variable to choose which node type(s) to
 list

---
 include/crm/common/xml_internal.h     | 18 +++++++
 include/pacemaker.h                   |  6 +--
 include/pcmki/pcmki_cluster_queries.h |  2 +-
 lib/cluster/membership.c              | 17 +------
 lib/pacemaker/pcmk_cluster_queries.c  | 89 ++++++++++++++++++++++++++++-------
 tools/crmadmin.c                      |  9 +++-
 6 files changed, 103 insertions(+), 38 deletions(-)

diff --git a/include/crm/common/xml_internal.h b/include/crm/common/xml_internal.h
index d8694ee..969a57d 100644
--- a/include/crm/common/xml_internal.h
+++ b/include/crm/common/xml_internal.h
@@ -123,6 +123,24 @@ do {
     }                                                                           \
 } while (0)
 
+/* XML search strings for guest, remote and pacemaker_remote nodes */
+
+/* search string to find CIB resources entries for guest nodes */
+#define XPATH_GUEST_NODE_CONFIG \
+    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
+    "//" XML_TAG_META_SETS "//" XML_CIB_TAG_NVPAIR \
+    "[@name='" XML_RSC_ATTR_REMOTE_NODE "']"
+
+/* search string to find CIB resources entries for remote nodes */
+#define XPATH_REMOTE_NODE_CONFIG \
+    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
+    "[@type='remote'][@provider='pacemaker']"
+
+/* search string to find CIB node status entries for pacemaker_remote nodes */
+#define XPATH_REMOTE_NODE_STATUS \
+    "//" XML_TAG_CIB "//" XML_CIB_TAG_STATUS "//" XML_CIB_TAG_STATE \
+    "[@" XML_NODE_IS_REMOTE "='true']"
+
 enum pcmk__xml_artefact_ns {
     pcmk__xml_artefact_ns_legacy_rng = 1,
     pcmk__xml_artefact_ns_legacy_xslt,
diff --git a/include/pacemaker.h b/include/pacemaker.h
index 51bf585..42d096f 100644
--- a/include/pacemaker.h
+++ b/include/pacemaker.h
@@ -73,8 +73,6 @@ int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc,
                           pe_node_t *node, GHashTable *overrides,
                           pe_working_set_t *data_set);
 
-#ifdef BUILD_PUBLIC_LIBPACEMAKER
-
 /*!
  * \brief Get nodes list
  *
@@ -82,7 +80,9 @@ int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc,
  *
  * \return Standard Pacemaker return code
  */
-int pcmk_list_nodes(xmlNodePtr *xml);
+int pcmk_list_nodes(xmlNodePtr *xml, char *node_types);
+
+#ifdef BUILD_PUBLIC_LIBPACEMAKER
 
 /*!
  * \brief Perform a STONITH action.
diff --git a/include/pcmki/pcmki_cluster_queries.h b/include/pcmki/pcmki_cluster_queries.h
index eb3b51c..955eea3 100644
--- a/include/pcmki/pcmki_cluster_queries.h
+++ b/include/pcmki/pcmki_cluster_queries.h
@@ -8,7 +8,7 @@
 int pcmk__controller_status(pcmk__output_t *out, char *dest_node, guint message_timeout_ms);
 int pcmk__designated_controller(pcmk__output_t *out, guint message_timeout_ms);
 int pcmk__pacemakerd_status(pcmk__output_t *out, char *ipc_name, guint message_timeout_ms);
-int pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT);
+int pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT);
 
 // remove when parameters removed from tools/crmadmin.c
 int pcmk__shutdown_controller(pcmk__output_t *out, char *dest_node);
diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c
index 8bf5764..5841f16 100644
--- a/lib/cluster/membership.c
+++ b/lib/cluster/membership.c
@@ -20,6 +20,7 @@
 #include <string.h>
 #include <glib.h>
 #include <crm/common/ipc.h>
+#include <crm/common/xml_internal.h>
 #include <crm/cluster/internal.h>
 #include <crm/msg_xml.h>
 #include <crm/stonith-ng.h>
@@ -235,22 +236,6 @@ is_dirty(gpointer key, gpointer value, gpointer user_data)
     return pcmk_is_set(((crm_node_t*)value)->flags, crm_node_dirty);
 }
 
-/* search string to find CIB resources entries for guest nodes */
-#define XPATH_GUEST_NODE_CONFIG \
-    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
-    "//" XML_TAG_META_SETS "//" XML_CIB_TAG_NVPAIR \
-    "[@name='" XML_RSC_ATTR_REMOTE_NODE "']"
-
-/* search string to find CIB resources entries for remote nodes */
-#define XPATH_REMOTE_NODE_CONFIG \
-    "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
-    "[@type='remote'][@provider='pacemaker']"
-
-/* search string to find CIB node status entries for pacemaker_remote nodes */
-#define XPATH_REMOTE_NODE_STATUS \
-    "//" XML_TAG_CIB "//" XML_CIB_TAG_STATUS "//" XML_CIB_TAG_STATE \
-    "[@" XML_NODE_IS_REMOTE "='true']"
-
 /*!
  * \brief Repopulate the remote peer cache based on CIB XML
  *
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
index 1d1e775..fc5cfc4 100644
--- a/lib/pacemaker/pcmk_cluster_queries.c
+++ b/lib/pacemaker/pcmk_cluster_queries.c
@@ -9,6 +9,7 @@
 #include <crm/msg_xml.h>
 #include <crm/common/output_internal.h>
 #include <crm/common/xml.h>
+#include <crm/common/xml_internal.h>
 #include <crm/common/iso8601.h>
 #include <crm/common/ipc_controld.h>
 #include <crm/common/ipc_pacemakerd.h>
@@ -390,9 +391,33 @@ pcmk_pacemakerd_status(xmlNodePtr *xml, char *ipc_name, unsigned int message_tim
     return rc;
 }
 
+/* user data for looping through remote node xpath searches */
+struct node_data {
+    pcmk__output_t *out;
+    int found;
+    const char *field;  /* XML attribute to check for node name */
+    const char *type;
+    gboolean BASH_EXPORT;
+};
+
+static void
+remote_node_print_helper(xmlNode *result, void *user_data)
+{
+    struct node_data *data = user_data;
+    pcmk__output_t *out = data->out;
+    const char *remote = crm_element_value(result, data->field);
+
+    // node name and node id are the same for remote/guest nodes
+    out->message(out, "crmadmin-node", data->type,
+                 remote,
+                 remote,
+                 data->BASH_EXPORT);
+    data->found++;
+}
+
 // \return Standard Pacemaker return code
 int
-pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
+pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
 {
     cib_t *the_cib = cib_new();
     xmlNode *xml_node = NULL;
@@ -409,28 +434,60 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
     rc = the_cib->cmds->query(the_cib, NULL, &xml_node,
                               cib_scope_local | cib_sync_call);
     if (rc == pcmk_ok) {
-        int found = 0;
         xmlNode *node = NULL;
         xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
+        struct node_data data = {
+            .out = out,
+            .found = 0,
+            .BASH_EXPORT = BASH_EXPORT
+        };
 
         out->begin_list(out, NULL, NULL, "nodes");
 
-        for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
-             node = crm_next_same_xml(node)) {
-            const char *node_type = BASH_EXPORT ? NULL :
-                         crm_element_value(node, XML_ATTR_TYPE);
-            out->message(out, "crmadmin-node", node_type,
-                         crm_str(crm_element_value(node, XML_ATTR_UNAME)),
-                         crm_str(crm_element_value(node, XML_ATTR_ID)),
-                         BASH_EXPORT);
+        if (!pcmk__str_empty(node_types) && strstr(node_types, "all")) {
+            node_types = NULL;
+        }
+
+        if (pcmk__str_empty(node_types) || strstr(node_types, "member")) {
+            for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
+                 node = crm_next_same_xml(node)) {
+                const char *node_type = crm_element_value(node, XML_ATTR_TYPE);
+                //if (node_type == NULL || !strcmp(node_type, "member")) {
+                if (node_type == NULL) {
+                    out->message(out, "crmadmin-node", node_type,
+                                 crm_str(crm_element_value(node, XML_ATTR_UNAME)),
+                                 crm_str(crm_element_value(node, XML_ATTR_ID)),
+                                 BASH_EXPORT);
+                    data.found++;
+                }
+
+            }
+        }
+
+        if (pcmk__str_empty(node_types) || strstr(node_types, "pacemaker_remote")) {
+            data.field = "id";
+            data.type = "pacemaker_remote";
+            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_STATUS,
+                                     remote_node_print_helper, &data);
+        }
+
+        if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
+            data.field = "value";
+            data.type = "guest";
+            crm_foreach_xpath_result(xml_node, XPATH_GUEST_NODE_CONFIG,
+                                     remote_node_print_helper, &data);
+        }
 
-            found++;
+        if (pcmk__str_empty(node_types) || !pcmk__strcmp(node_types, ",|^remote", pcmk__str_regex)) {
+            data.field = "id";
+            data.type = "remote";
+            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_CONFIG,
+                                     remote_node_print_helper, &data);
         }
-        // @TODO List Pacemaker Remote nodes that don't have a <node> entry
 
         out->end_list(out);
 
-        if (found == 0) {
+        if (data.found == 0) {
             out->info(out, "No nodes configured");
         }
 
@@ -440,9 +497,8 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT)
     return pcmk_legacy2rc(rc);
 }
 
-#ifdef BUILD_PUBLIC_LIBPACEMAKER
 int
-pcmk_list_nodes(xmlNodePtr *xml)
+pcmk_list_nodes(xmlNodePtr *xml, char *node_types)
 {
     pcmk__output_t *out = NULL;
     int rc = pcmk_rc_ok;
@@ -454,11 +510,10 @@ pcmk_list_nodes(xmlNodePtr *xml)
 
     pcmk__register_lib_messages(out);
 
-    rc = pcmk__list_nodes(out, FALSE);
+    rc = pcmk__list_nodes(out, node_types, FALSE);
     pcmk__out_epilogue(out, xml, rc);
     return rc;
 }
-#endif
 
 // remove when parameters removed from tools/crmadmin.c
 int
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
index 2d9d663..3f31c69 100644
--- a/tools/crmadmin.c
+++ b/tools/crmadmin.c
@@ -38,10 +38,12 @@ struct {
     gint timeout;
     char *dest_node;
     char *ipc_name;
+    char *node_types;
     gboolean BASH_EXPORT;
 } options = {
     .dest_node = NULL,
     .ipc_name = NULL,
+    .node_types = NULL,
     .BASH_EXPORT = FALSE
 };
 
@@ -93,6 +95,11 @@ static GOptionEntry additional_options[] = {
       "\n                          operation failed",
       NULL
     },
+    { "node-types", 'T', 0, G_OPTION_ARG_STRING, &options.node_types,
+      "Node types to list (available options: all, member, pacemaker_remote,"
+      "\n                          guest, remote) (valid with -N/--nodes)",
+      NULL
+    },
     { "bash-export", 'B', 0, G_OPTION_ARG_NONE, &options.BASH_EXPORT,
       "Display nodes as shell commands of the form 'export uname=uuid'"
       "\n                          (valid with -N/--nodes)",
@@ -264,7 +271,7 @@ main(int argc, char **argv)
             rc = pcmk__pacemakerd_status(out, options.ipc_name, options.timeout);
             break;
         case cmd_list_nodes:
-            rc = pcmk__list_nodes(out, options.BASH_EXPORT);
+            rc = pcmk__list_nodes(out, options.node_types, options.BASH_EXPORT);
             break;
         case cmd_whois_dc:
             rc = pcmk__designated_controller(out, options.timeout);
-- 
1.8.3.1


From f25d4e7aa9de55bb296087e6cbaf1654d01d6b0d Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Thu, 10 Dec 2020 13:58:31 +0100
Subject: [PATCH 3/7] Refactor: use PCMK__XP_ prefix instead of XPATH_ for XML
 constants

---
 include/crm/common/xml_internal.h    |  6 +++---
 lib/cluster/membership.c             | 12 ++++++------
 lib/pacemaker/pcmk_cluster_queries.c |  6 +++---
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/include/crm/common/xml_internal.h b/include/crm/common/xml_internal.h
index 969a57d..4501bee 100644
--- a/include/crm/common/xml_internal.h
+++ b/include/crm/common/xml_internal.h
@@ -126,18 +126,18 @@ do {
 /* XML search strings for guest, remote and pacemaker_remote nodes */
 
 /* search string to find CIB resources entries for guest nodes */
-#define XPATH_GUEST_NODE_CONFIG \
+#define PCMK__XP_GUEST_NODE_CONFIG \
     "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
     "//" XML_TAG_META_SETS "//" XML_CIB_TAG_NVPAIR \
     "[@name='" XML_RSC_ATTR_REMOTE_NODE "']"
 
 /* search string to find CIB resources entries for remote nodes */
-#define XPATH_REMOTE_NODE_CONFIG \
+#define PCMK__XP_REMOTE_NODE_CONFIG \
     "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
     "[@type='remote'][@provider='pacemaker']"
 
 /* search string to find CIB node status entries for pacemaker_remote nodes */
-#define XPATH_REMOTE_NODE_STATUS \
+#define PCMK__XP_REMOTE_NODE_STATUS \
     "//" XML_TAG_CIB "//" XML_CIB_TAG_STATUS "//" XML_CIB_TAG_STATE \
     "[@" XML_NODE_IS_REMOTE "='true']"
 
diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c
index 5841f16..d70091e 100644
--- a/lib/cluster/membership.c
+++ b/lib/cluster/membership.c
@@ -257,7 +257,7 @@ crm_remote_peer_cache_refresh(xmlNode *cib)
     /* Look for guest nodes and remote nodes in the status section */
     data.field = "id";
     data.has_state = TRUE;
-    crm_foreach_xpath_result(cib, XPATH_REMOTE_NODE_STATUS,
+    crm_foreach_xpath_result(cib, PCMK__XP_REMOTE_NODE_STATUS,
                              remote_cache_refresh_helper, &data);
 
     /* Look for guest nodes and remote nodes in the configuration section,
@@ -268,11 +268,11 @@ crm_remote_peer_cache_refresh(xmlNode *cib)
      */
     data.field = "value";
     data.has_state = FALSE;
-    crm_foreach_xpath_result(cib, XPATH_GUEST_NODE_CONFIG,
+    crm_foreach_xpath_result(cib, PCMK__XP_GUEST_NODE_CONFIG,
                              remote_cache_refresh_helper, &data);
     data.field = "id";
     data.has_state = FALSE;
-    crm_foreach_xpath_result(cib, XPATH_REMOTE_NODE_CONFIG,
+    crm_foreach_xpath_result(cib, PCMK__XP_REMOTE_NODE_CONFIG,
                              remote_cache_refresh_helper, &data);
 
     /* Remove all old cache entries that weren't seen in the CIB */
@@ -1232,7 +1232,7 @@ known_node_cache_refresh_helper(xmlNode *xml_node, void *user_data)
 
 }
 
-#define XPATH_MEMBER_NODE_CONFIG \
+#define PCMK__XP_MEMBER_NODE_CONFIG \
     "//" XML_TAG_CIB "/" XML_CIB_TAG_CONFIGURATION "/" XML_CIB_TAG_NODES \
     "/" XML_CIB_TAG_NODE "[not(@type) or @type='member']"
 
@@ -1243,7 +1243,7 @@ crm_known_peer_cache_refresh(xmlNode *cib)
 
     g_hash_table_foreach(crm_known_peer_cache, mark_dirty, NULL);
 
-    crm_foreach_xpath_result(cib, XPATH_MEMBER_NODE_CONFIG,
+    crm_foreach_xpath_result(cib, PCMK__XP_MEMBER_NODE_CONFIG,
                              known_peer_cache_refresh_helper, NULL);
 
     /* Remove all old cache entries that weren't seen in the CIB */
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
index fc5cfc4..e512f32 100644
--- a/lib/pacemaker/pcmk_cluster_queries.c
+++ b/lib/pacemaker/pcmk_cluster_queries.c
@@ -467,21 +467,21 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
         if (pcmk__str_empty(node_types) || strstr(node_types, "pacemaker_remote")) {
             data.field = "id";
             data.type = "pacemaker_remote";
-            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_STATUS,
+            crm_foreach_xpath_result(xml_node, PCMK__XP_REMOTE_NODE_STATUS,
                                      remote_node_print_helper, &data);
         }
 
         if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
             data.field = "value";
             data.type = "guest";
-            crm_foreach_xpath_result(xml_node, XPATH_GUEST_NODE_CONFIG,
+            crm_foreach_xpath_result(xml_node, PCMK__XP_GUEST_NODE_CONFIG,
                                      remote_node_print_helper, &data);
         }
 
         if (pcmk__str_empty(node_types) || !pcmk__strcmp(node_types, ",|^remote", pcmk__str_regex)) {
             data.field = "id";
             data.type = "remote";
-            crm_foreach_xpath_result(xml_node, XPATH_REMOTE_NODE_CONFIG,
+            crm_foreach_xpath_result(xml_node, PCMK__XP_REMOTE_NODE_CONFIG,
                                      remote_node_print_helper, &data);
         }
 
-- 
1.8.3.1


From 225d5fabedb1319245a2a3e661df2252e60aca1a Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Fri, 22 Jan 2021 16:34:39 +0100
Subject: [PATCH 4/7] Fix: crmadmin: use cluster instead of member term and
 remove pacemaker_remote node type

---
 include/pacemaker.h                  |  1 +
 lib/cluster/membership.c             |  2 +-
 lib/pacemaker/pcmk_cluster_queries.c | 10 +---------
 lib/pacemaker/pcmk_output.c          |  4 ++--
 tools/crmadmin.c                     |  4 ++--
 5 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/include/pacemaker.h b/include/pacemaker.h
index 42d096f..a6a9d13 100644
--- a/include/pacemaker.h
+++ b/include/pacemaker.h
@@ -77,6 +77,7 @@ int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc,
  * \brief Get nodes list
  *
  * \param[in,out] xml                The destination for the result, as an XML tree.
+ * \param[in]     node_types         Node type(s) to return (default: all)
  *
  * \return Standard Pacemaker return code
  */
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
index e512f32..9f19915 100644
--- a/lib/pacemaker/pcmk_cluster_queries.c
+++ b/lib/pacemaker/pcmk_cluster_queries.c
@@ -448,11 +448,10 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
             node_types = NULL;
         }
 
-        if (pcmk__str_empty(node_types) || strstr(node_types, "member")) {
+        if (pcmk__str_empty(node_types) || strstr(node_types, "cluster")) {
             for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
                  node = crm_next_same_xml(node)) {
                 const char *node_type = crm_element_value(node, XML_ATTR_TYPE);
-                //if (node_type == NULL || !strcmp(node_type, "member")) {
                 if (node_type == NULL) {
                     out->message(out, "crmadmin-node", node_type,
                                  crm_str(crm_element_value(node, XML_ATTR_UNAME)),
@@ -464,13 +463,6 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
             }
         }
 
-        if (pcmk__str_empty(node_types) || strstr(node_types, "pacemaker_remote")) {
-            data.field = "id";
-            data.type = "pacemaker_remote";
-            crm_foreach_xpath_result(xml_node, PCMK__XP_REMOTE_NODE_STATUS,
-                                     remote_node_print_helper, &data);
-        }
-
         if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
             data.field = "value";
             data.type = "guest";
diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c
index 8f5e301..655b723 100644
--- a/lib/pacemaker/pcmk_output.c
+++ b/lib/pacemaker/pcmk_output.c
@@ -483,7 +483,7 @@ crmadmin_node_text(pcmk__output_t *out, va_list args)
     } else if (BASH_EXPORT) {
         out->info(out, "export %s=%s", crm_str(name), crm_str(id));
     } else {
-        out->info(out, "%s node: %s (%s)", type ? type : "member",
+        out->info(out, "%s node: %s (%s)", type ? type : "cluster",
                   crm_str(name), crm_str(id));
     }
 
@@ -499,7 +499,7 @@ crmadmin_node_xml(pcmk__output_t *out, va_list args)
     const char *id = va_arg(args, const char *);
 
     pcmk__output_create_xml_node(out, "node",
-                                 "type", type ? type : "member",
+                                 "type", type ? type : "cluster",
                                  "name", crm_str(name),
                                  "id", crm_str(id),
                                  NULL);
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
index 3f31c69..d699786 100644
--- a/tools/crmadmin.c
+++ b/tools/crmadmin.c
@@ -96,8 +96,8 @@ static GOptionEntry additional_options[] = {
       NULL
     },
     { "node-types", 'T', 0, G_OPTION_ARG_STRING, &options.node_types,
-      "Node types to list (available options: all, member, pacemaker_remote,"
-      "\n                          guest, remote) (valid with -N/--nodes)",
+      "Node types to list (available options: all, cluster, guest, remote)"
+      "\n                          (valid with -N/--nodes)",
       NULL
     },
     { "bash-export", 'B', 0, G_OPTION_ARG_NONE, &options.BASH_EXPORT,
-- 
1.8.3.1


From ceacef32c70d1760a4dd89c00134373d42457ea2 Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Mon, 25 Jan 2021 16:52:00 +0100
Subject: [PATCH 5/7] Refactor: crmadmin/pcmk__list_nodes(): use
 crm_foreach_xpath_result() for all types of nodes

---
 include/crm/common/xml_internal.h    |  5 +++++
 lib/cluster/membership.c             |  4 ----
 lib/pacemaker/pcmk_cluster_queries.c | 25 ++++++++-----------------
 3 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/include/crm/common/xml_internal.h b/include/crm/common/xml_internal.h
index 4501bee..2193b50 100644
--- a/include/crm/common/xml_internal.h
+++ b/include/crm/common/xml_internal.h
@@ -125,6 +125,11 @@ do {
 
 /* XML search strings for guest, remote and pacemaker_remote nodes */
 
+/* search string to find CIB resources entries for cluster nodes */
+#define PCMK__XP_MEMBER_NODE_CONFIG \
+    "//" XML_TAG_CIB "/" XML_CIB_TAG_CONFIGURATION "/" XML_CIB_TAG_NODES \
+    "/" XML_CIB_TAG_NODE "[not(@type) or @type='member']"
+
 /* search string to find CIB resources entries for guest nodes */
 #define PCMK__XP_GUEST_NODE_CONFIG \
     "//" XML_TAG_CIB "//" XML_CIB_TAG_CONFIGURATION "//" XML_CIB_TAG_RESOURCE \
diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c
index 3417836..5d042e2 100644
--- a/lib/cluster/membership.c
+++ b/lib/cluster/membership.c
@@ -1232,10 +1232,6 @@ known_node_cache_refresh_helper(xmlNode *xml_node, void *user_data)
 
 }
 
-#define PCMK__XP_MEMBER_NODE_CONFIG \
-    "//" XML_TAG_CIB "/" XML_CIB_TAG_CONFIGURATION "/" XML_CIB_TAG_NODES \
-    "/" XML_CIB_TAG_NODE "[not(@type) or @type='member']"
-
 static void
 crm_known_peer_cache_refresh(xmlNode *cib)
 {
diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c
index 9f19915..6e6acda 100644
--- a/lib/pacemaker/pcmk_cluster_queries.c
+++ b/lib/pacemaker/pcmk_cluster_queries.c
@@ -405,12 +405,13 @@ remote_node_print_helper(xmlNode *result, void *user_data)
 {
     struct node_data *data = user_data;
     pcmk__output_t *out = data->out;
-    const char *remote = crm_element_value(result, data->field);
+    const char *name = crm_element_value(result, XML_ATTR_UNAME);
+    const char *id = crm_element_value(result, data->field);
 
     // node name and node id are the same for remote/guest nodes
     out->message(out, "crmadmin-node", data->type,
-                 remote,
-                 remote,
+                 name ? name : id,
+                 id,
                  data->BASH_EXPORT);
     data->found++;
 }
@@ -434,8 +435,6 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
     rc = the_cib->cmds->query(the_cib, NULL, &xml_node,
                               cib_scope_local | cib_sync_call);
     if (rc == pcmk_ok) {
-        xmlNode *node = NULL;
-        xmlNode *nodes = get_object_root(XML_CIB_TAG_NODES, xml_node);
         struct node_data data = {
             .out = out,
             .found = 0,
@@ -449,18 +448,10 @@ pcmk__list_nodes(pcmk__output_t *out, char *node_types, gboolean BASH_EXPORT)
         }
 
         if (pcmk__str_empty(node_types) || strstr(node_types, "cluster")) {
-            for (node = first_named_child(nodes, XML_CIB_TAG_NODE); node != NULL;
-                 node = crm_next_same_xml(node)) {
-                const char *node_type = crm_element_value(node, XML_ATTR_TYPE);
-                if (node_type == NULL) {
-                    out->message(out, "crmadmin-node", node_type,
-                                 crm_str(crm_element_value(node, XML_ATTR_UNAME)),
-                                 crm_str(crm_element_value(node, XML_ATTR_ID)),
-                                 BASH_EXPORT);
-                    data.found++;
-                }
-
-            }
+            data.field = "id";
+            data.type = "cluster";
+            crm_foreach_xpath_result(xml_node, PCMK__XP_MEMBER_NODE_CONFIG,
+                                     remote_node_print_helper, &data);
         }
 
         if (pcmk__str_empty(node_types) || strstr(node_types, "guest")) {
-- 
1.8.3.1


From a56ce0cf463798ac8d7ff945dda3be019cb9297d Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Tue, 26 Jan 2021 11:03:10 +0100
Subject: [PATCH 6/7] Refactor: crmadmin: move new -T functionality to -N
 parameter

---
 include/crm/crm.h |  2 +-
 tools/crmadmin.c  | 30 ++++++++++++------------------
 2 files changed, 13 insertions(+), 19 deletions(-)

diff --git a/include/crm/crm.h b/include/crm/crm.h
index 3f22c4b..09643c2 100644
--- a/include/crm/crm.h
+++ b/include/crm/crm.h
@@ -51,7 +51,7 @@ extern "C" {
  * >=3.0.13: Fail counts include operation name and interval
  * >=3.2.0:  DC supports PCMK_LRM_OP_INVALID and PCMK_LRM_OP_NOT_CONNECTED
  */
-#  define CRM_FEATURE_SET		"3.7.0"
+#  define CRM_FEATURE_SET		"3.7.1"
 
 #  define EOS		'\0'
 #  define DIMOF(a)	((int) (sizeof(a)/sizeof(a[0])) )
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
index d699786..9c280aa 100644
--- a/tools/crmadmin.c
+++ b/tools/crmadmin.c
@@ -36,14 +36,12 @@ static enum {
 struct {
     gboolean health;
     gint timeout;
-    char *dest_node;
+    char *optarg;
     char *ipc_name;
-    char *node_types;
     gboolean BASH_EXPORT;
 } options = {
-    .dest_node = NULL,
+    .optarg = NULL,
     .ipc_name = NULL,
-    .node_types = NULL,
     .BASH_EXPORT = FALSE
 };
 
@@ -69,9 +67,10 @@ static GOptionEntry command_options[] = {
       "\n                          node to examine the logs.",
       NULL
     },
-    { "nodes", 'N', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, command_cb,
-      "Display the uname of all member nodes",
-      NULL
+    { "nodes", 'N', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, command_cb,
+      "Display the uname of all member nodes [optionally filtered by type (comma-separated)]"
+      "\n                          Types: all (default), cluster, guest, remote",
+      "TYPE"
     },
     { "election", 'E', G_OPTION_FLAG_HIDDEN|G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, command_cb,
       "(Advanced) Start an election for the cluster co-ordinator",
@@ -95,11 +94,6 @@ static GOptionEntry additional_options[] = {
       "\n                          operation failed",
       NULL
     },
-    { "node-types", 'T', 0, G_OPTION_ARG_STRING, &options.node_types,
-      "Node types to list (available options: all, cluster, guest, remote)"
-      "\n                          (valid with -N/--nodes)",
-      NULL
-    },
     { "bash-export", 'B', 0, G_OPTION_ARG_NONE, &options.BASH_EXPORT,
       "Display nodes as shell commands of the form 'export uname=uuid'"
       "\n                          (valid with -N/--nodes)",
@@ -142,10 +136,10 @@ command_cb(const gchar *option_name, const gchar *optarg, gpointer data, GError
     }
 
     if (optarg) {
-        if (options.dest_node != NULL) {
-            free(options.dest_node);
+        if (options.optarg != NULL) {
+            free(options.optarg);
         }
-        options.dest_node = strdup(optarg);
+        options.optarg = strdup(optarg);
     }
 
     return TRUE;
@@ -265,19 +259,19 @@ main(int argc, char **argv)
 
     switch (command) {
         case cmd_health:
-            rc = pcmk__controller_status(out, options.dest_node, options.timeout);
+            rc = pcmk__controller_status(out, options.optarg, options.timeout);
             break;
         case cmd_pacemakerd_health:
             rc = pcmk__pacemakerd_status(out, options.ipc_name, options.timeout);
             break;
         case cmd_list_nodes:
-            rc = pcmk__list_nodes(out, options.node_types, options.BASH_EXPORT);
+            rc = pcmk__list_nodes(out, options.optarg, options.BASH_EXPORT);
             break;
         case cmd_whois_dc:
             rc = pcmk__designated_controller(out, options.timeout);
             break;
         case cmd_shutdown:
-            rc = pcmk__shutdown_controller(out, options.dest_node);
+            rc = pcmk__shutdown_controller(out, options.optarg);
             break;
         case cmd_elect_dc:
             rc = pcmk__start_election(out);
-- 
1.8.3.1


From dae5688edaf1b3008b70296421004ebdfbdf4b7b Mon Sep 17 00:00:00 2001
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
Date: Tue, 26 Jan 2021 15:02:39 +0100
Subject: [PATCH 7/7] Test: cts-cli: add crmadmin -N/--nodes tests

---
 cts/Makefile.am                                 |   1 +
 cts/cli/crmadmin-cluster-remote-guest-nodes.xml | 483 ++++++++++++++++++++++++
 cts/cli/regression.tools.exp                    |  24 ++
 cts/cts-cli.in                                  |  42 ++-
 4 files changed, 543 insertions(+), 7 deletions(-)
 create mode 100644 cts/cli/crmadmin-cluster-remote-guest-nodes.xml

diff --git a/cts/Makefile.am b/cts/Makefile.am
index de02aed..2a73774 100644
--- a/cts/Makefile.am
+++ b/cts/Makefile.am
@@ -61,6 +61,7 @@ cts_SCRIPTS		= CTSlab.py		\
 
 clidir		= $(testdir)/cli
 dist_cli_DATA	= cli/constraints.xml \
+		  cli/crmadmin-cluster-remote-guest-nodes.xml \
 		  cli/crm_diff_new.xml		\
 		  cli/crm_diff_old.xml		\
 		  cli/crm_mon.xml		\
diff --git a/cts/cli/crmadmin-cluster-remote-guest-nodes.xml b/cts/cli/crmadmin-cluster-remote-guest-nodes.xml
new file mode 100644
index 0000000..8db656f
--- /dev/null
+++ b/cts/cli/crmadmin-cluster-remote-guest-nodes.xml
@@ -0,0 +1,483 @@
+<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">
+  <configuration>
+    <crm_config>
+      <cluster_property_set id="cib-bootstrap-options">
+        <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+        <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.16-12.el7-94ff4df"/>
+        <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+        <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="tripleo_cluster"/>
+        <nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
+        <nvpair id="cib-bootstrap-options-cluster-recheck-interval" name="cluster-recheck-interval" value="60s"/>
+      </cluster_property_set>
+    </crm_config>
+    <nodes>
+      <node id="1" uname="overcloud-controller-0"/>
+      <node id="2" uname="overcloud-controller-1"/>
+      <node id="3" uname="overcloud-controller-2"/>
+      <node id="4" uname="overcloud-galera-0">
+        <instance_attributes id="nodes-4">
+          <nvpair id="nodes-4-galera-role" name="galera-role" value="true"/>
+        </instance_attributes>
+      </node>
+      <node id="5" uname="overcloud-galera-1">
+        <instance_attributes id="nodes-5">
+          <nvpair id="nodes-5-galera-role" name="galera-role" value="true"/>
+        </instance_attributes>
+      </node>
+      <node id="6" uname="overcloud-galera-2">
+        <instance_attributes id="nodes-6">
+          <nvpair id="nodes-6-galera-role" name="galera-role" value="true"/>
+        </instance_attributes>
+      </node>
+      <node id="overcloud-rabbit-0" type="remote" uname="overcloud-rabbit-0">
+        <instance_attributes id="nodes-overcloud-rabbit-0">
+          <nvpair id="nodes-overcloud-rabbit-0-rabbitmq-role" name="rabbitmq-role" value="true"/>
+        </instance_attributes>
+      </node>
+      <node id="overcloud-rabbit-1" type="remote" uname="overcloud-rabbit-1">
+        <instance_attributes id="nodes-overcloud-rabbit-1">
+          <nvpair id="nodes-overcloud-rabbit-1-rabbitmq-role" name="rabbitmq-role" value="true"/>
+        </instance_attributes>
+      </node>
+      <node id="overcloud-rabbit-2" type="remote" uname="overcloud-rabbit-2">
+        <instance_attributes id="nodes-overcloud-rabbit-2">
+          <nvpair id="nodes-overcloud-rabbit-2-rabbitmq-role" name="rabbitmq-role" value="true"/>
+        </instance_attributes>
+      </node>
+    </nodes>
+    <resources>
+      <primitive class="ocf" id="overcloud-rabbit-0" provider="pacemaker" type="remote">
+        <instance_attributes id="overcloud-rabbit-0-instance_attributes">
+          <nvpair id="overcloud-rabbit-0-instance_attributes-reconnect_interval" name="reconnect_interval" value="60"/>
+        </instance_attributes>
+        <operations>
+          <op id="overcloud-rabbit-0-monitor-interval-20" interval="20" name="monitor"/>
+          <op id="overcloud-rabbit-0-start-interval-0s" interval="0s" name="start" timeout="60"/>
+          <op id="overcloud-rabbit-0-stop-interval-0s" interval="0s" name="stop" timeout="60"/>
+        </operations>
+      </primitive>
+      <primitive class="ocf" id="overcloud-rabbit-1" provider="pacemaker" type="remote">
+        <instance_attributes id="overcloud-rabbit-1-instance_attributes">
+          <nvpair id="overcloud-rabbit-1-instance_attributes-reconnect_interval" name="reconnect_interval" value="60"/>
+        </instance_attributes>
+        <operations>
+          <op id="overcloud-rabbit-1-monitor-interval-20" interval="20" name="monitor"/>
+          <op id="overcloud-rabbit-1-start-interval-0s" interval="0s" name="start" timeout="60"/>
+          <op id="overcloud-rabbit-1-stop-interval-0s" interval="0s" name="stop" timeout="60"/>
+        </operations>
+      </primitive>
+      <primitive class="ocf" id="overcloud-rabbit-2" provider="pacemaker" type="remote">
+        <instance_attributes id="overcloud-rabbit-2-instance_attributes">
+          <nvpair id="overcloud-rabbit-2-instance_attributes-reconnect_interval" name="reconnect_interval" value="60"/>
+        </instance_attributes>
+        <operations>
+          <op id="overcloud-rabbit-2-monitor-interval-20" interval="20" name="monitor"/>
+          <op id="overcloud-rabbit-2-start-interval-0s" interval="0s" name="start" timeout="60"/>
+          <op id="overcloud-rabbit-2-stop-interval-0s" interval="0s" name="stop" timeout="60"/>
+        </operations>
+      </primitive>
+      <primitive class="ocf" id="container1" provider="heartbeat" type="VirtualDomain">
+        <instance_attributes id="container1-instance_attributes">
+          <nvpair id="container1-instance_attributes-force_stop" name="force_stop" value="true"/>
+          <nvpair id="container1-instance_attributes-hypervisor" name="hypervisor" value="lxc:///"/>
+          <nvpair id="container1-instance_attributes-config" name="config" value="/var/lib/pacemaker/cts/lxc/lxc1.xml"/>
+        </instance_attributes>
+        <utilization id="container1-utilization">
+          <nvpair id="container1-utilization-cpu" name="cpu" value="1"/>
+          <nvpair id="container1-utilization-hv_memory" name="hv_memory" value="196"/>
+        </utilization>
+        <meta_attributes id="container1-meta_attributes">
+          <nvpair id="container1-meta_attributes-remote-node" name="remote-node" value="lxc1"/>
+        </meta_attributes>
+      </primitive>
+      <primitive class="ocf" id="container2" provider="heartbeat" type="VirtualDomain">
+        <instance_attributes id="container2-instance_attributes">
+          <nvpair id="container2-instance_attributes-force_stop" name="force_stop" value="true"/>
+          <nvpair id="container2-instance_attributes-hypervisor" name="hypervisor" value="lxc:///"/>
+          <nvpair id="container2-instance_attributes-config" name="config" value="/var/lib/pacemaker/cts/lxc/lxc2.xml"/>
+        </instance_attributes>
+        <utilization id="container2-utilization">
+          <nvpair id="container2-utilization-cpu" name="cpu" value="1"/>
+          <nvpair id="container2-utilization-hv_memory" name="hv_memory" value="196"/>
+        </utilization>
+        <meta_attributes id="container2-meta_attributes">
+          <nvpair id="container2-meta_attributes-remote-node" name="remote-node" value="lxc2"/>
+        </meta_attributes>
+      </primitive>
+      <bundle id="rabbitmq-bundle">
+        <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"/>
+        <network control-port="3121"/>
+        <storage>
+          <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"/>
+          <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"/>
+          <storage-mapping id="rabbitmq-hosts" options="ro" source-dir="/etc/hosts" target-dir="/etc/hosts"/>
+          <storage-mapping id="rabbitmq-localtime" options="ro" source-dir="/etc/localtime" target-dir="/etc/localtime"/>
+          <storage-mapping id="rabbitmq-lib" options="rw" source-dir="/var/lib/rabbitmq" target-dir="/var/lib/rabbitmq"/>
+          <storage-mapping id="rabbitmq-pki-extracted" options="ro" source-dir="/etc/pki/ca-trust/extracted" target-dir="/etc/pki/ca-trust/extracted"/>
+          <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"/>
+          <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"/>
+          <storage-mapping id="rabbitmq-pki-cert" options="ro" source-dir="/etc/pki/tls/cert.pem" target-dir="/etc/pki/tls/cert.pem"/>
+          <storage-mapping id="rabbitmq-dev-log" options="rw" source-dir="/dev/log" target-dir="/dev/log"/>
+        </storage>
+        <primitive class="ocf" id="rabbitmq" provider="heartbeat" type="rabbitmq-cluster">
+          <instance_attributes id="rabbitmq-instance_attributes">
+            <nvpair id="rabbitmq-instance_attributes-set_policy" name="set_policy" value="ha-all ^(?!amq\.).* {&quot;ha-mode&quot;:&quot;all&quot;}"/>
+          </instance_attributes>
+          <meta_attributes id="rabbitmq-meta_attributes">
+            <nvpair id="rabbitmq-meta_attributes-notify" name="notify" value="true"/>
+          </meta_attributes>
+          <operations>
+            <op id="rabbitmq-monitor-interval-10" interval="10" name="monitor" timeout="40"/>
+            <op id="rabbitmq-start-interval-0s" interval="0s" name="start" timeout="200s"/>
+            <op id="rabbitmq-stop-interval-0s" interval="0s" name="stop" timeout="200s"/>
+          </operations>
+        </primitive>
+      </bundle>
+      <bundle id="galera-bundle">
+        <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"/>
+        <network control-port="3123"/>
+        <storage>
+          <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"/>
+          <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"/>
+          <storage-mapping id="mysql-hosts" options="ro" source-dir="/etc/hosts" target-dir="/etc/hosts"/>
+          <storage-mapping id="mysql-localtime" options="ro" source-dir="/etc/localtime" target-dir="/etc/localtime"/>
+          <storage-mapping id="mysql-lib" options="rw" source-dir="/var/lib/mysql" target-dir="/var/lib/mysql"/>
+          <storage-mapping id="mysql-log-mariadb" options="rw" source-dir="/var/log/mariadb" target-dir="/var/log/mariadb"/>
+          <storage-mapping id="mysql-pki-extracted" options="ro" source-dir="/etc/pki/ca-trust/extracted" target-dir="/etc/pki/ca-trust/extracted"/>
+          <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"/>
+          <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"/>
+          <storage-mapping id="mysql-pki-cert" options="ro" source-dir="/etc/pki/tls/cert.pem" target-dir="/etc/pki/tls/cert.pem"/>
+          <storage-mapping id="mysql-dev-log" options="rw" source-dir="/dev/log" target-dir="/dev/log"/>
+        </storage>
+      </bundle>
+    </resources>
+    <constraints>
+      <rsc_location id="location-rabbitmq-bundle" resource-discovery="exclusive" rsc="rabbitmq-bundle">
+        <rule id="location-rabbitmq-bundle-rule" score="1">
+          <expression attribute="rabbitmq-role" id="location-rabbitmq-bundle-rule-expr" operation="eq" value="true"/>
+        </rule>
+      </rsc_location>
+      <rsc_location id="location-galera-bundle" resource-discovery="exclusive" rsc="galera-bundle">
+        <rule id="location-galera-bundle-rule" score="0">
+          <expression attribute="galera-role" id="location-galera-bundle-rule-expr" operation="eq" value="true"/>
+        </rule>
+      </rsc_location>
+    </constraints>
+    <rsc_defaults>
+      <meta_attributes id="rsc_defaults-options">
+        <nvpair id="rsc_defaults-options-resource-stickiness" name="resource-stickiness" value="INFINITY"/>
+      </meta_attributes>
+    </rsc_defaults>
+  </configuration>
+  <status>
+    <node_state id="1" uname="overcloud-controller-0" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+      <lrm id="1">
+        <lrm_resources>
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+      <transient_attributes id="1">
+        <instance_attributes id="status-1">
+          <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+        </instance_attributes>
+      </transient_attributes>
+    </node_state>
+    <node_state id="3" uname="overcloud-controller-2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+      <lrm id="3">
+        <lrm_resources>
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+      <transient_attributes id="3">
+        <instance_attributes id="status-3">
+          <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+        </instance_attributes>
+      </transient_attributes>
+    </node_state>
+    <node_state id="4" uname="overcloud-galera-0" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+      <lrm id="4">
+        <lrm_resources>
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+      <transient_attributes id="4">
+        <instance_attributes id="status-4">
+          <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+        </instance_attributes>
+      </transient_attributes>
+    </node_state>
+    <node_state id="2" uname="overcloud-controller-1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+      <lrm id="2">
+        <lrm_resources>
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+      <transient_attributes id="2">
+        <instance_attributes id="status-2">
+          <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+        </instance_attributes>
+      </transient_attributes>
+    </node_state>
+    <node_state id="5" uname="overcloud-galera-1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+      <lrm id="5">
+        <lrm_resources>
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+      <transient_attributes id="5">
+        <instance_attributes id="status-5">
+          <nvpair id="status-5-shutdown" name="shutdown" value="0"/>
+        </instance_attributes>
+      </transient_attributes>
+    </node_state>
+    <node_state id="6" uname="overcloud-galera-2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+      <lrm id="6">
+        <lrm_resources>
+          <lrm_resource id="overcloud-rabbit-0" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-1" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="overcloud-rabbit-2" type="remote" class="ocf" provider="pacemaker">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+      <transient_attributes id="6">
+        <instance_attributes id="status-6">
+          <nvpair id="status-6-shutdown" name="shutdown" value="0"/>
+        </instance_attributes>
+      </transient_attributes>
+    </node_state>
+    <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">
+      <lrm id="overcloud-rabbit-0">
+        <lrm_resources>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+    </node_state>
+    <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">
+      <lrm id="overcloud-rabbit-1">
+        <lrm_resources>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+    </node_state>
+    <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">
+      <lrm id="overcloud-rabbit-2">
+        <lrm_resources>
+          <lrm_resource id="rabbitmq-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="rabbitmq-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-0" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-1" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+          <lrm_resource id="galera-bundle-docker-2" type="docker" class="ocf" provider="heartbeat">
+            <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"/>
+          </lrm_resource>
+        </lrm_resources>
+      </lrm>
+    </node_state>
+  </status>
+</cib>
diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp
index 510cc0a..7324053 100644
--- a/cts/cli/regression.tools.exp
+++ b/cts/cli/regression.tools.exp
@@ -4053,3 +4053,27 @@ Resources colocated with clone:
 </pacemaker-result>
 =#=#=#= End test: Show resource digests with overrides - OK (0) =#=#=#=
 * Passed: crm_resource   - Show resource digests with overrides
+=#=#=#= Begin test: List all nodes =#=#=#=
+11
+=#=#=#= End test: List all nodes - OK (0) =#=#=#=
+* Passed: crmadmin       - List all nodes
+=#=#=#= Begin test: List cluster nodes =#=#=#=
+6
+=#=#=#= End test: List cluster nodes - OK (0) =#=#=#=
+* Passed: crmadmin       - List cluster nodes
+=#=#=#= Begin test: List guest nodes =#=#=#=
+2
+=#=#=#= End test: List guest nodes - OK (0) =#=#=#=
+* Passed: crmadmin       - List guest nodes
+=#=#=#= Begin test: List remote nodes =#=#=#=
+3
+=#=#=#= End test: List remote nodes - OK (0) =#=#=#=
+* Passed: crmadmin       - List remote nodes
+=#=#=#= Begin test: List cluster,remote nodes =#=#=#=
+9
+=#=#=#= End test: List cluster,remote nodes - OK (0) =#=#=#=
+* Passed: crmadmin       - List cluster,remote nodes
+=#=#=#= Begin test: List guest,remote nodes =#=#=#=
+5
+=#=#=#= End test: List guest,remote nodes - OK (0) =#=#=#=
+* Passed: crmadmin       - List guest,remote nodes
diff --git a/cts/cts-cli.in b/cts/cts-cli.in
index 96f5386..8e2dbe5 100755
--- a/cts/cts-cli.in
+++ b/cts/cts-cli.in
@@ -501,15 +501,15 @@ function test_tools() {
     desc="Default standby value"
     cmd="crm_standby -N node1 -G"
     test_assert $CRM_EX_OK
- 
+
     desc="Set standby status"
     cmd="crm_standby -N node1 -v true"
     test_assert $CRM_EX_OK
- 
+
     desc="Query standby value"
     cmd="crm_standby -N node1 -G"
     test_assert $CRM_EX_OK
- 
+
     desc="Delete standby value"
     cmd="crm_standby -N node1 -D"
     test_assert $CRM_EX_OK
@@ -657,7 +657,7 @@ function test_tools() {
     desc="Drop the status section"
     cmd="cibadmin -R -o status --xml-text '<status/>'"
     test_assert $CRM_EX_OK 0
-    
+
     desc="Create a clone"
     cmd="cibadmin -C -o resources --xml-text '<clone id=\"test-clone\"><primitive id=\"test-primitive\" class=\"ocf\" provider=\"pacemaker\" type=\"Dummy\"/></clone>'"
     test_assert $CRM_EX_OK 0
@@ -697,7 +697,7 @@ function test_tools() {
     desc="Update existing resource meta attribute"
     cmd="crm_resource -r test-clone --meta -p is-managed -v true"
     test_assert $CRM_EX_OK
-    
+
     desc="Create a resource meta attribute in the parent"
     cmd="crm_resource -r test-clone --meta -p is-managed -v true --force"
     test_assert $CRM_EX_OK
@@ -803,6 +803,34 @@ function test_tools() {
     test_assert $CRM_EX_OK 0
 
     unset CIB_file
+
+    export CIB_file="$test_home/cli/crmadmin-cluster-remote-guest-nodes.xml"
+
+    desc="List all nodes"
+    cmd="crmadmin -N | wc -l | grep 11"
+    test_assert $CRM_EX_OK 0
+
+    desc="List cluster nodes"
+    cmd="crmadmin -N cluster | wc -l | grep 6"
+    test_assert $CRM_EX_OK 0
+
+    desc="List guest nodes"
+    cmd="crmadmin -N guest | wc -l | grep 2"
+    test_assert $CRM_EX_OK 0
+
+    desc="List remote nodes"
+    cmd="crmadmin -N remote | wc -l | grep 3"
+    test_assert $CRM_EX_OK 0
+
+    desc="List cluster,remote nodes"
+    cmd="crmadmin -N cluster,remote | wc -l | grep 9"
+    test_assert $CRM_EX_OK 0
+
+    desc="List guest,remote nodes"
+    cmd="crmadmin -N guest,remote | wc -l | grep 5"
+    test_assert $CRM_EX_OK 0
+
+    unset CIB_file
 }
 
 INVALID_PERIODS=(
@@ -822,7 +850,7 @@ INVALID_PERIODS=(
     "P1Z/2019-02-20 00:00:00Z"          # Invalid duration unit
     "P1YM/2019-02-20 00:00:00Z"         # No number for duration unit
 )
-        
+
 function test_dates() {
     # Ensure invalid period specifications are rejected
     for spec in '' "${INVALID_PERIODS[@]}"; do
@@ -1665,7 +1693,7 @@ for t in $tests; do
 done
 
 rm -rf "${shadow_dir}"
-    
+
 failed=0
 
 if [ $verbose -eq 1 ]; then
-- 
1.8.3.1