From cf34f4c950704f5ac05ed9553b3b900ea33e1190 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Thu, 17 Aug 2017 11:48:17 +1000 Subject: [PATCH 01/21] PE/attrd: Allow bundle resources to read/write attributes based on the physical host rather than the container name --- include/crm/msg_xml.h | 1 + include/crm/pengine/internal.h | 2 + include/crm_internal.h | 3 ++ lib/pengine/common.c | 48 ++++++++++++++++++++++ lib/pengine/container.c | 5 ++- lib/pengine/unpack.c | 22 +++++----- lib/pengine/utils.c | 4 +- lib/pengine/variant.h | 1 + pengine/allocate.c | 3 +- pengine/constraints.c | 8 ++-- pengine/graph.c | 39 ++++++++++++++++++ pengine/master.c | 16 +++----- pengine/native.c | 16 ++++---- pengine/test10/bug-cl-5247.exp | 26 ++++++------ pengine/test10/bug-rh-1097457.exp | 22 +++++----- pengine/test10/bundle-nested-colocation.exp | 18 ++++----- pengine/test10/bundle-order-partial-start-2.exp | 20 ++++----- pengine/test10/bundle-order-partial-start.exp | 20 ++++----- pengine/test10/bundle-order-partial-stop.exp | 18 ++++----- pengine/test10/bundle-order-startup-clone-2.exp | 54 ++++++++++++------------- pengine/test10/bundle-order-startup-clone.exp | 8 ++-- pengine/test10/bundle-order-startup.exp | 20 ++++----- pengine/test10/bundle-order-stop-clone.exp | 2 +- pengine/test10/bundle-order-stop.exp | 18 ++++----- pengine/test10/guest-node-host-dies.exp | 14 +++---- pengine/test10/whitebox-asymmetric.exp | 4 +- pengine/test10/whitebox-fail1.exp | 12 +++--- pengine/test10/whitebox-fail2.exp | 12 +++--- pengine/test10/whitebox-fail3.exp | 10 ++--- pengine/test10/whitebox-imply-stop-on-fence.exp | 6 +-- pengine/test10/whitebox-move.exp | 12 +++--- pengine/test10/whitebox-ms-ordering-move.exp | 8 ++-- pengine/test10/whitebox-ms-ordering.exp | 8 ++-- pengine/test10/whitebox-nested-group.exp | 12 +++--- pengine/test10/whitebox-orphan-ms.exp | 8 ++-- pengine/test10/whitebox-orphaned.exp | 8 ++-- pengine/test10/whitebox-start.exp | 10 ++--- pengine/test10/whitebox-stop.exp | 8 ++-- tools/attrd_updater.c | 30 ++++++++++++++ tools/crm_mon.c | 2 +- 40 files changed, 339 insertions(+), 219 deletions(-) diff --git a/include/crm/msg_xml.h b/include/crm/msg_xml.h index 8cf22f3..5209cb1 100644 --- a/include/crm/msg_xml.h +++ b/include/crm/msg_xml.h @@ -194,6 +194,7 @@ # define XML_CIB_TAG_RSC_TEMPLATE "template" +# define XML_RSC_ATTR_TARGET "container-attribute-target" # define XML_RSC_ATTR_ISOLATION_INSTANCE "isolation-instance" # define XML_RSC_ATTR_ISOLATION_WRAPPER "isolation-wrapper" # define XML_RSC_ATTR_ISOLATION_HOST "isolation-host" diff --git a/include/crm/pengine/internal.h b/include/crm/pengine/internal.h index 5db90aa..d91f54a 100644 --- a/include/crm/pengine/internal.h +++ b/include/crm/pengine/internal.h @@ -298,5 +298,7 @@ bool remote_id_conflict(const char *remote_name, pe_working_set_t *data); void common_print(resource_t * rsc, const char *pre_text, const char *name, node_t *node, long options, void *print_data); resource_t *find_container_child(const char *stem, resource_t * rsc, node_t *node); bool fix_remote_addr(resource_t * rsc); +const char *node_attribute_calculated(pe_node_t *node, const char *name, resource_t *rsc); +const char *node_attribute_raw(pe_node_t *node, const char *name); #endif diff --git a/include/crm_internal.h b/include/crm_internal.h index acfca07..e1b25ff 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -289,6 +289,9 @@ long crm_read_pidfile(const char *filename); # define ATTRD_OP_SYNC "sync" # define ATTRD_OP_SYNC_RESPONSE "sync-response" +# define PCMK_ENV_PHYSICAL_HOST "physical_host" + + # if SUPPORT_COROSYNC # if CS_USES_LIBQB # include diff --git a/lib/pengine/common.c b/lib/pengine/common.c index 446b7f0..0e21aaa 100644 --- a/lib/pengine/common.c +++ b/lib/pengine/common.c @@ -431,3 +431,51 @@ add_hash_param(GHashTable * hash, const char *name, const char *value) g_hash_table_insert(hash, strdup(name), strdup(value)); } } + +const char * +node_attribute_calculated(pe_node_t *node, const char *name, resource_t *rsc) +{ + const char *source; + + if(node == NULL) { + return NULL; + + } else if(rsc == NULL) { + return g_hash_table_lookup(node->details->attrs, name); + } + + source = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET); + if(source == NULL || safe_str_eq("host", source) == FALSE) { + return g_hash_table_lookup(node->details->attrs, name); + } + + /* Use attributes set for the containers location + * instead of for the container itself + * + * Useful when the container is using the host's local + * storage + */ + + CRM_ASSERT(node->details->remote_rsc); + CRM_ASSERT(node->details->remote_rsc->container); + + if(node->details->remote_rsc->container->running_on) { + pe_node_t *host = node->details->remote_rsc->container->running_on->data; + pe_rsc_trace(rsc, "%s: Looking for %s on the container host %s", rsc->id, name, host->details->uname); + return g_hash_table_lookup(host->details->attrs, name); + } + + pe_rsc_trace(rsc, "%s: Not looking for %s on the container host: %s is inactive", + rsc->id, name, node->details->remote_rsc->container->id); + return NULL; +} + +const char * +node_attribute_raw(pe_node_t *node, const char *name) +{ + if(node == NULL) { + return NULL; + } + return g_hash_table_lookup(node->details->attrs, name); +} + diff --git a/lib/pengine/container.c b/lib/pengine/container.c index 118e716..53965cf 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -764,8 +764,12 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set) offset += allocate_ip(container_data, tuple, buffer+offset, max-offset); container_data->tuples = g_list_append(container_data->tuples, tuple); + container_data->attribute_target = g_hash_table_lookup(tuple->child->meta, XML_RSC_ATTR_TARGET); } container_data->docker_host_options = buffer; + if(container_data->attribute_target) { + g_hash_table_replace(rsc->meta, strdup(XML_RSC_ATTR_TARGET), strdup(container_data->attribute_target)); + } } else { // Just a naked container, no pacemaker-remote @@ -782,7 +786,6 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set) container_data->docker_host_options = buffer; } - for (GListPtr gIter = container_data->tuples; gIter != NULL; gIter = gIter->next) { container_grouping_t *tuple = (container_grouping_t *)gIter->data; // TODO: Remove from list if create_container() returns TRUE diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c index 0790148..6e0651e 100644 --- a/lib/pengine/unpack.c +++ b/lib/pengine/unpack.c @@ -1070,7 +1070,7 @@ unpack_handle_remote_attrs(node_t *this_node, xmlNode *state, pe_working_set_t * attrs = find_xml_node(state, XML_TAG_TRANSIENT_NODEATTRS, FALSE); add_node_attrs(attrs, this_node, TRUE, data_set); - shutdown = g_hash_table_lookup(this_node->details->attrs, XML_CIB_ATTR_SHUTDOWN); + shutdown = node_attribute_raw(this_node, XML_CIB_ATTR_SHUTDOWN); if (shutdown != NULL && safe_str_neq("0", shutdown)) { crm_info("Node %s is shutting down", this_node->details->uname); this_node->details->shutdown = TRUE; @@ -1079,18 +1079,18 @@ unpack_handle_remote_attrs(node_t *this_node, xmlNode *state, pe_working_set_t * } } - if (crm_is_true(g_hash_table_lookup(this_node->details->attrs, "standby"))) { + if (crm_is_true(node_attribute_raw(this_node, "standby"))) { crm_info("Node %s is in standby-mode", this_node->details->uname); this_node->details->standby = TRUE; } - if (crm_is_true(g_hash_table_lookup(this_node->details->attrs, "maintenance")) || + if (crm_is_true(node_attribute_raw(this_node, "maintenance")) || (rsc && !is_set(rsc->flags, pe_rsc_managed))) { crm_info("Node %s is in maintenance-mode", this_node->details->uname); this_node->details->maintenance = TRUE; } - resource_discovery_enabled = g_hash_table_lookup(this_node->details->attrs, XML_NODE_ATTR_RSC_DISCOVERY); + resource_discovery_enabled = node_attribute_raw(this_node, XML_NODE_ATTR_RSC_DISCOVERY); if (resource_discovery_enabled && !crm_is_true(resource_discovery_enabled)) { if (is_baremetal_remote_node(this_node) && is_not_set(data_set->flags, pe_flag_stonith_enabled)) { crm_warn("ignoring %s attribute on baremetal remote node %s, disabling resource discovery requires stonith to be enabled.", @@ -1246,17 +1246,17 @@ unpack_status(xmlNode * status, pe_working_set_t * data_set) attrs = find_xml_node(state, XML_TAG_TRANSIENT_NODEATTRS, FALSE); add_node_attrs(attrs, this_node, TRUE, data_set); - if (crm_is_true(g_hash_table_lookup(this_node->details->attrs, "standby"))) { + if (crm_is_true(node_attribute_raw(this_node, "standby"))) { crm_info("Node %s is in standby-mode", this_node->details->uname); this_node->details->standby = TRUE; } - if (crm_is_true(g_hash_table_lookup(this_node->details->attrs, "maintenance"))) { + if (crm_is_true(node_attribute_raw(this_node, "maintenance"))) { crm_info("Node %s is in maintenance-mode", this_node->details->uname); this_node->details->maintenance = TRUE; } - resource_discovery_enabled = g_hash_table_lookup(this_node->details->attrs, XML_NODE_ATTR_RSC_DISCOVERY); + resource_discovery_enabled = node_attribute_raw(this_node, XML_NODE_ATTR_RSC_DISCOVERY); if (resource_discovery_enabled && !crm_is_true(resource_discovery_enabled)) { crm_warn("ignoring %s attribute on node %s, disabling resource discovery is not allowed on cluster nodes", XML_NODE_ATTR_RSC_DISCOVERY, this_node->details->uname); @@ -1342,7 +1342,7 @@ determine_online_status_fencing(pe_working_set_t * data_set, xmlNode * node_stat const char *is_peer = crm_element_value(node_state, XML_NODE_IS_PEER); const char *in_cluster = crm_element_value(node_state, XML_NODE_IN_CLUSTER); const char *exp_state = crm_element_value(node_state, XML_NODE_EXPECTED); - const char *terminate = g_hash_table_lookup(this_node->details->attrs, "terminate"); + const char *terminate = node_attribute_raw(this_node, "terminate"); /* - XML_NODE_IN_CLUSTER ::= true|false @@ -1516,7 +1516,7 @@ determine_online_status(xmlNode * node_state, node_t * this_node, pe_working_set this_node->details->shutdown = FALSE; this_node->details->expected_up = FALSE; - shutdown = g_hash_table_lookup(this_node->details->attrs, XML_CIB_ATTR_SHUTDOWN); + shutdown = node_attribute_raw(this_node, XML_CIB_ATTR_SHUTDOWN); if (shutdown != NULL && safe_str_neq("0", shutdown)) { this_node->details->shutdown = TRUE; @@ -3368,8 +3368,8 @@ add_node_attrs(xmlNode * xml_obj, node_t * node, gboolean overwrite, pe_working_ unpack_instance_attributes(data_set->input, xml_obj, XML_TAG_ATTR_SETS, NULL, node->details->attrs, NULL, overwrite, data_set->now); - if (g_hash_table_lookup(node->details->attrs, "#site-name") == NULL) { - const char *site_name = g_hash_table_lookup(node->details->attrs, "site-name"); + if (node_attribute_raw(node, "#site-name") == NULL) { + const char *site_name = node_attribute_raw(node, "site-name"); if (site_name) { /* Prefix '#' to the key */ diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c index cb1ed08..c44a1c8 100644 --- a/lib/pengine/utils.c +++ b/lib/pengine/utils.c @@ -1989,10 +1987,8 @@ fencing_action_digest_cmp(resource_t * rsc, node_t * node, pe_working_set_t * da char *key = generate_op_key(rsc->id, STONITH_DIGEST_TASK, 0); op_digest_cache_t *data = rsc_action_digest(rsc, STONITH_DIGEST_TASK, key, node, NULL, data_set); - const char *digest_all = g_hash_table_lookup(node->details->attrs, - CRM_ATTR_DIGESTS_ALL); - const char *digest_secure = g_hash_table_lookup(node->details->attrs, - CRM_ATTR_DIGESTS_SECURE); + const char *digest_all = node_attribute_raw(node, CRM_ATTR_DIGESTS_ALL); + const char *digest_secure = node_attribute_raw(node, CRM_ATTR_DIGESTS_SECURE); /* No 'reloads' for fencing device changes * diff --git a/lib/pengine/variant.h b/lib/pengine/variant.h index c8fe159..4ceaa6b 100644 --- a/lib/pengine/variant.h +++ b/lib/pengine/variant.h @@ -100,6 +100,7 @@ typedef struct container_variant_data_s { char *docker_host_options; char *docker_run_options; char *docker_run_command; + const char *attribute_target; resource_t *child; diff --git a/pengine/allocate.c b/pengine/allocate.c index 01b5b98..958fb23 100644 --- a/pengine/allocate.c +++ b/pengine/allocate.c @@ -861,7 +861,6 @@ apply_system_health(pe_working_set_t * data_set) rsc2node_new(health_strategy, rsc, system_health, NULL, node, data_set); } } - } return TRUE; @@ -898,7 +897,7 @@ probe_resources(pe_working_set_t * data_set) for (GListPtr gIter = data_set->nodes; gIter != NULL; gIter = gIter->next) { node_t *node = (node_t *) gIter->data; - const char *probed = g_hash_table_lookup(node->details->attrs, CRM_OP_PROBED); + const char *probed = node_attribute_raw(node, CRM_OP_PROBED); if (is_container_remote_node(node)) { /* TODO enable guest node probes once ordered probing is implemented */ diff --git a/pengine/constraints.c b/pengine/constraints.c index 77a0152..fdc4186 100644 --- a/pengine/constraints.c +++ b/pengine/constraints.c @@ -957,7 +957,7 @@ unpack_location(xmlNode * xml_obj, pe_working_set_t * data_set) } static int -get_node_score(const char *rule, const char *score, gboolean raw, node_t * node) +get_node_score(const char *rule, const char *score, gboolean raw, node_t * node, resource_t *rsc) { int score_f = 0; @@ -968,7 +968,7 @@ get_node_score(const char *rule, const char *score, gboolean raw, node_t * node) score_f = char2score(score); } else { - const char *attr_score = g_hash_table_lookup(node->details->attrs, score); + const char *attr_score = node_attribute_calculated(node, score, rsc); if (attr_score == NULL) { crm_debug("Rule %s: node %s did not have a value for %s", @@ -1060,7 +1060,7 @@ generate_location_rule(resource_t * rsc, xmlNode * rule_xml, const char *discove for (gIter = match_L; gIter != NULL; gIter = gIter->next) { node_t *node = (node_t *) gIter->data; - node->weight = get_node_score(rule_id, score, raw_score, node); + node->weight = get_node_score(rule_id, score, raw_score, node, rsc); } } @@ -1073,7 +1073,7 @@ generate_location_rule(resource_t * rsc, xmlNode * rule_xml, const char *discove crm_trace("Rule %s %s on %s", ID(rule_xml), accept ? "passed" : "failed", node->details->uname); - score_f = get_node_score(rule_id, score, raw_score, node); + score_f = get_node_score(rule_id, score, raw_score, node, rsc); /* if(accept && score_f == -INFINITY) { */ /* accept = FALSE; */ /* } */ diff --git a/pengine/graph.c b/pengine/graph.c index a446fe5..3c5dc6b 100644 --- a/pengine/graph.c +++ b/pengine/graph.c @@ -1162,6 +1162,45 @@ action2xml(action_t * action, gboolean as_input, pe_working_set_t *data_set) hash2smartfield((gpointer)"pcmk_external_ip", (gpointer)value, (gpointer)args_xml); } + if(is_container_remote_node(action->node)) { + pe_node_t *host = NULL; + enum action_tasks task = text2task(action->task); + + if(task == action_notify || task == action_notified) { + const char *n_task = g_hash_table_lookup(action->meta, "notify_operation"); + task = text2task(n_task); + } + + // Differentiate between up and down actions + switch (task) { + case stop_rsc: + case stopped_rsc: + case action_demote: + case action_demoted: + if(action->node->details->remote_rsc->container->running_on) { + host = action->node->details->remote_rsc->container->running_on->data; + } + break; + case start_rsc: + case started_rsc: + case monitor_rsc: + case action_promote: + case action_promoted: + if(action->node->details->remote_rsc->container->allocated_to) { + host = action->node->details->remote_rsc->container->allocated_to; + } + break; + default: + break; + } + + if(host) { + hash2metafield((gpointer)XML_RSC_ATTR_TARGET, + (gpointer)g_hash_table_lookup(action->rsc->meta, XML_RSC_ATTR_TARGET), (gpointer)args_xml); + hash2metafield((gpointer)PCMK_ENV_PHYSICAL_HOST, (gpointer)host->details->uname, (gpointer)args_xml); + } + } + } else if (safe_str_eq(action->task, CRM_OP_FENCE) && action->node) { g_hash_table_foreach(action->node->details->attrs, hash2metafield, args_xml); } diff --git a/pengine/master.c b/pengine/master.c index 8c39f49..2631da8 100644 --- a/pengine/master.c +++ b/pengine/master.c @@ -511,12 +511,7 @@ master_score(resource_t * rsc, node_t * node, int not_set_value) attr_name = calloc(1, len); sprintf(attr_name, "master-%s", name); - if (node) { - attr_value = g_hash_table_lookup(node->details->attrs, attr_name); - pe_rsc_trace(rsc, "%s: %s[%s] = %s", rsc->id, attr_name, node->details->uname, - crm_str(attr_value)); - } - + attr_value = node_attribute_calculated(node, attr_name, rsc); if (attr_value != NULL) { score = char2score(attr_value); } @@ -949,11 +944,11 @@ node_hash_update_one(GHashTable * hash, node_t * other, const char *attr, int sc } else if (attr == NULL) { attr = "#" XML_ATTR_UNAME; } - - value = g_hash_table_lookup(other->details->attrs, attr); + + value = node_attribute_raw(other, attr); g_hash_table_iter_init(&iter, hash); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { - const char *tmp = g_hash_table_lookup(node->details->attrs, attr); + const char *tmp = node_attribute_raw(node, attr); if (safe_str_eq(value, tmp)) { crm_trace("%s: %d + %d", node->details->uname, node->weight, other->weight); @@ -993,8 +988,7 @@ master_rsc_colocation_rh(resource_t * rsc_lh, resource_t * rsc_rh, rsc_colocatio } else if (is_set(rsc_lh->flags, pe_rsc_provisional)) { GListPtr rhs = NULL; - gIter = rsc_rh->children; - for (; gIter != NULL; gIter = gIter->next) { + for (gIter = rsc_rh->children; gIter != NULL; gIter = gIter->next) { resource_t *child_rsc = (resource_t *) gIter->data; node_t *chosen = child_rsc->fns->location(child_rsc, NULL, FALSE); enum rsc_role_e next_role = child_rsc->fns->state(child_rsc, FALSE); diff --git a/pengine/native.c b/pengine/native.c index fe7b966..37cf541 100644 --- a/pengine/native.c +++ b/pengine/native.c @@ -203,7 +203,7 @@ node_list_attr_score(GHashTable * list, const char *attr, const char *value) weight = -INFINITY; } if (weight > best_score || best_node == NULL) { - const char *tmp = g_hash_table_lookup(node->details->attrs, attr); + const char *tmp = node_attribute_raw(node, attr); if (safe_str_eq(value, tmp)) { best_score = weight; @@ -238,7 +238,7 @@ node_hash_update(GHashTable * list1, GHashTable * list2, const char *attr, float CRM_LOG_ASSERT(node != NULL); if(node == NULL) { continue; }; - score = node_list_attr_score(list2, attr, g_hash_table_lookup(node->details->attrs, attr)); + score = node_list_attr_score(list2, attr, node_attribute_raw(node, attr)); new_score = merge_weights(factor * score, node->weight); if (factor < 0 && score < 0) { @@ -1630,8 +1630,8 @@ influence_priority(resource_t * rsc_lh, resource_t * rsc_rh, rsc_colocation_t * return; } - lh_value = g_hash_table_lookup(rsc_lh->allocated_to->details->attrs, attribute); - rh_value = g_hash_table_lookup(rsc_rh->allocated_to->details->attrs, attribute); + lh_value = node_attribute_raw(rsc_lh->allocated_to, attribute); + rh_value = node_attribute_raw(rsc_rh->allocated_to, attribute); if (!safe_str_eq(lh_value, rh_value)) { if(constraint->score == INFINITY && constraint->role_lh == RSC_ROLE_MASTER) { @@ -1669,7 +1669,7 @@ colocation_match(resource_t * rsc_lh, resource_t * rsc_rh, rsc_colocation_t * co } if (rsc_rh->allocated_to) { - value = g_hash_table_lookup(rsc_rh->allocated_to->details->attrs, attribute); + value = node_attribute_raw(rsc_rh->allocated_to, attribute); do_check = TRUE; } else if (constraint->score < 0) { @@ -1683,7 +1683,7 @@ colocation_match(resource_t * rsc_lh, resource_t * rsc_rh, rsc_colocation_t * co g_hash_table_iter_init(&iter, work); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { - tmp = g_hash_table_lookup(node->details->attrs, attribute); + tmp = node_attribute_raw(node, attribute); if (do_check && safe_str_eq(tmp, value)) { if (constraint->score < INFINITY) { pe_rsc_trace(rsc_lh, "%s: %s.%s += %d", constraint->id, rsc_lh->id, @@ -2492,7 +2492,7 @@ StopRsc(resource_t * rsc, node_t * next, gboolean optional, pe_working_set_t * d if(is_set(rsc->flags, pe_rsc_needs_unfencing)) { action_t *unfence = pe_fence_op(current, "on", TRUE, NULL, data_set); - const char *unfenced = g_hash_table_lookup(current->details->attrs, CRM_ATTR_UNFENCED); + const char *unfenced = node_attribute_raw(current, CRM_ATTR_UNFENCED); order_actions(stop, unfence, pe_order_implies_first); if (unfenced == NULL || safe_str_eq("0", unfenced)) { @@ -2515,7 +2515,7 @@ StartRsc(resource_t * rsc, node_t * next, gboolean optional, pe_working_set_t * if(is_set(rsc->flags, pe_rsc_needs_unfencing)) { action_t *unfence = pe_fence_op(next, "on", TRUE, NULL, data_set); - const char *unfenced = g_hash_table_lookup(next->details->attrs, CRM_ATTR_UNFENCED); + const char *unfenced = node_attribute_raw(next, CRM_ATTR_UNFENCED); order_actions(unfence, start, pe_order_implies_then); diff --git a/pengine/test10/bug-cl-5247.exp b/pengine/test10/bug-cl-5247.exp index e7bac9c..2ec83c0 100644 --- a/pengine/test10/bug-cl-5247.exp +++ b/pengine/test10/bug-cl-5247.exp @@ -269,7 +269,7 @@ - + @@ -282,7 +282,7 @@ - + @@ -300,7 +300,7 @@ - + @@ -319,7 +319,7 @@ - + @@ -332,7 +332,7 @@ - + @@ -353,7 +353,7 @@ - + @@ -395,7 +395,7 @@ - + @@ -413,7 +413,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -455,7 +455,7 @@ - + @@ -468,7 +468,7 @@ - + @@ -484,7 +484,7 @@ - + diff --git a/pengine/test10/bug-rh-1097457.exp b/pengine/test10/bug-rh-1097457.exp index bf62647..eb9b225 100644 --- a/pengine/test10/bug-rh-1097457.exp +++ b/pengine/test10/bug-rh-1097457.exp @@ -76,7 +76,7 @@ - + @@ -92,7 +92,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -211,7 +211,7 @@ - + @@ -227,7 +227,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -270,7 +270,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -326,7 +326,7 @@ - + diff --git a/pengine/test10/bundle-nested-colocation.exp b/pengine/test10/bundle-nested-colocation.exp index c82ee16..916c44b 100644 --- a/pengine/test10/bundle-nested-colocation.exp +++ b/pengine/test10/bundle-nested-colocation.exp @@ -3,7 +3,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -140,7 +140,7 @@ - + diff --git a/pengine/test10/bundle-order-partial-start-2.exp b/pengine/test10/bundle-order-partial-start-2.exp index b533469..f600983 100644 --- a/pengine/test10/bundle-order-partial-start-2.exp +++ b/pengine/test10/bundle-order-partial-start-2.exp @@ -3,7 +3,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -125,7 +125,7 @@ - + @@ -141,7 +141,7 @@ - + @@ -157,7 +157,7 @@ - + @@ -286,7 +286,7 @@ - + @@ -299,7 +299,7 @@ - + @@ -312,7 +312,7 @@ - + @@ -328,7 +328,7 @@ - + diff --git a/pengine/test10/bundle-order-partial-start.exp b/pengine/test10/bundle-order-partial-start.exp index 1f8a3e1..d48fccf 100644 --- a/pengine/test10/bundle-order-partial-start.exp +++ b/pengine/test10/bundle-order-partial-start.exp @@ -3,7 +3,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -125,7 +125,7 @@ - + @@ -141,7 +141,7 @@ - + @@ -157,7 +157,7 @@ - + @@ -267,7 +267,7 @@ - + @@ -280,7 +280,7 @@ - + @@ -293,7 +293,7 @@ - + @@ -309,7 +309,7 @@ - + diff --git a/pengine/test10/bundle-order-partial-stop.exp b/pengine/test10/bundle-order-partial-stop.exp index 937bc59..1dff657 100644 --- a/pengine/test10/bundle-order-partial-stop.exp +++ b/pengine/test10/bundle-order-partial-stop.exp @@ -3,7 +3,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -280,7 +280,7 @@ - + @@ -293,7 +293,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -319,7 +319,7 @@ - + @@ -338,7 +338,7 @@ - + diff --git a/pengine/test10/bundle-order-startup-clone-2.exp b/pengine/test10/bundle-order-startup-clone-2.exp index c0910a7..7d18d29 100644 --- a/pengine/test10/bundle-order-startup-clone-2.exp +++ b/pengine/test10/bundle-order-startup-clone-2.exp @@ -260,7 +260,7 @@ - + @@ -276,7 +276,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -311,7 +311,7 @@ - + @@ -327,7 +327,7 @@ - + @@ -343,7 +343,7 @@ - + @@ -365,7 +365,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -397,7 +397,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1023,7 +1023,7 @@ - + @@ -1036,7 +1036,7 @@ - + @@ -1049,7 +1049,7 @@ - + @@ -1074,7 +1074,7 @@ - + @@ -1096,7 +1096,7 @@ - + @@ -1115,7 +1115,7 @@ - + @@ -1128,7 +1128,7 @@ - + @@ -1141,7 +1141,7 @@ - + @@ -1154,7 +1154,7 @@ - + @@ -1179,7 +1179,7 @@ - + @@ -1204,7 +1204,7 @@ - + @@ -1226,7 +1226,7 @@ - + @@ -1239,7 +1239,7 @@ - + @@ -1252,7 +1252,7 @@ - + @@ -1265,7 +1265,7 @@ - + @@ -1290,7 +1290,7 @@ - + @@ -1315,7 +1315,7 @@ - + diff --git a/pengine/test10/bundle-order-startup-clone.exp b/pengine/test10/bundle-order-startup-clone.exp index 197529f..8c8ba6aa 100644 --- a/pengine/test10/bundle-order-startup-clone.exp +++ b/pengine/test10/bundle-order-startup-clone.exp @@ -119,7 +119,7 @@ - + @@ -132,7 +132,7 @@ - + @@ -151,7 +151,7 @@ - + @@ -170,7 +170,7 @@ - + diff --git a/pengine/test10/bundle-order-startup.exp b/pengine/test10/bundle-order-startup.exp index 161c1ae..03b064a 100644 --- a/pengine/test10/bundle-order-startup.exp +++ b/pengine/test10/bundle-order-startup.exp @@ -3,7 +3,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -198,7 +198,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -340,7 +340,7 @@ - + @@ -353,7 +353,7 @@ - + @@ -372,7 +372,7 @@ - + @@ -391,7 +391,7 @@ - + diff --git a/pengine/test10/bundle-order-stop-clone.exp b/pengine/test10/bundle-order-stop-clone.exp index c359e00..e78e235 100644 --- a/pengine/test10/bundle-order-stop-clone.exp +++ b/pengine/test10/bundle-order-stop-clone.exp @@ -173,7 +173,7 @@ - + diff --git a/pengine/test10/bundle-order-stop.exp b/pengine/test10/bundle-order-stop.exp index 937bc59..1dff657 100644 --- a/pengine/test10/bundle-order-stop.exp +++ b/pengine/test10/bundle-order-stop.exp @@ -3,7 +3,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -280,7 +280,7 @@ - + @@ -293,7 +293,7 @@ - + @@ -306,7 +306,7 @@ - + @@ -319,7 +319,7 @@ - + @@ -338,7 +338,7 @@ - + diff --git a/pengine/test10/guest-node-host-dies.exp b/pengine/test10/guest-node-host-dies.exp index 235813d..cd8d81a 100644 --- a/pengine/test10/guest-node-host-dies.exp +++ b/pengine/test10/guest-node-host-dies.exp @@ -144,7 +144,7 @@ - + @@ -172,7 +172,7 @@ - + @@ -196,7 +196,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -270,7 +270,7 @@ - + diff --git a/pengine/test10/whitebox-asymmetric.exp b/pengine/test10/whitebox-asymmetric.exp index 67d6c76..1178fb6 100644 --- a/pengine/test10/whitebox-asymmetric.exp +++ b/pengine/test10/whitebox-asymmetric.exp @@ -3,7 +3,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/pengine/test10/whitebox-fail1.exp b/pengine/test10/whitebox-fail1.exp index 5c4b26c..4cb6136 100644 --- a/pengine/test10/whitebox-fail1.exp +++ b/pengine/test10/whitebox-fail1.exp @@ -32,7 +32,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -179,7 +179,7 @@ - + diff --git a/pengine/test10/whitebox-fail2.exp b/pengine/test10/whitebox-fail2.exp index 5c4b26c..4cb6136 100644 --- a/pengine/test10/whitebox-fail2.exp +++ b/pengine/test10/whitebox-fail2.exp @@ -32,7 +32,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -179,7 +179,7 @@ - + diff --git a/pengine/test10/whitebox-fail3.exp b/pengine/test10/whitebox-fail3.exp index 95fc289..ec28f12 100644 --- a/pengine/test10/whitebox-fail3.exp +++ b/pengine/test10/whitebox-fail3.exp @@ -12,7 +12,7 @@ - + @@ -40,7 +40,7 @@ - + @@ -56,7 +56,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -114,7 +114,7 @@ - + diff --git a/pengine/test10/whitebox-imply-stop-on-fence.exp b/pengine/test10/whitebox-imply-stop-on-fence.exp index 9beb51d..6639eb9 100644 --- a/pengine/test10/whitebox-imply-stop-on-fence.exp +++ b/pengine/test10/whitebox-imply-stop-on-fence.exp @@ -272,7 +272,7 @@ - + @@ -288,7 +288,7 @@ - + @@ -309,7 +309,7 @@ - + diff --git a/pengine/test10/whitebox-move.exp b/pengine/test10/whitebox-move.exp index ecea360..4461890 100644 --- a/pengine/test10/whitebox-move.exp +++ b/pengine/test10/whitebox-move.exp @@ -29,7 +29,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -64,7 +64,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -158,7 +158,7 @@ - + diff --git a/pengine/test10/whitebox-ms-ordering-move.exp b/pengine/test10/whitebox-ms-ordering-move.exp index 3b5598f..dc5e473 100644 --- a/pengine/test10/whitebox-ms-ordering-move.exp +++ b/pengine/test10/whitebox-ms-ordering-move.exp @@ -29,7 +29,7 @@ - + @@ -54,7 +54,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -83,7 +83,7 @@ - + diff --git a/pengine/test10/whitebox-ms-ordering.exp b/pengine/test10/whitebox-ms-ordering.exp index 43cb49a..e5eb99c 100644 --- a/pengine/test10/whitebox-ms-ordering.exp +++ b/pengine/test10/whitebox-ms-ordering.exp @@ -101,7 +101,7 @@ - + @@ -129,7 +129,7 @@ - + @@ -223,7 +223,7 @@ - + @@ -239,7 +239,7 @@ - + diff --git a/pengine/test10/whitebox-nested-group.exp b/pengine/test10/whitebox-nested-group.exp index 979a0f5..388c4d4 100644 --- a/pengine/test10/whitebox-nested-group.exp +++ b/pengine/test10/whitebox-nested-group.exp @@ -62,7 +62,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -248,7 +248,7 @@ - + @@ -264,7 +264,7 @@ - + @@ -386,7 +386,7 @@ - + @@ -402,7 +402,7 @@ - + diff --git a/pengine/test10/whitebox-orphan-ms.exp b/pengine/test10/whitebox-orphan-ms.exp index 6df1b8d..ef81317 100644 --- a/pengine/test10/whitebox-orphan-ms.exp +++ b/pengine/test10/whitebox-orphan-ms.exp @@ -135,7 +135,7 @@ - + @@ -151,7 +151,7 @@ - + @@ -167,7 +167,7 @@ - + @@ -176,7 +176,7 @@ - + diff --git a/pengine/test10/whitebox-orphaned.exp b/pengine/test10/whitebox-orphaned.exp index 32f8141..334e594 100644 --- a/pengine/test10/whitebox-orphaned.exp +++ b/pengine/test10/whitebox-orphaned.exp @@ -3,7 +3,7 @@ - + @@ -39,7 +39,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -65,7 +65,7 @@ - + diff --git a/pengine/test10/whitebox-start.exp b/pengine/test10/whitebox-start.exp index 11438e9..ccccf60 100644 --- a/pengine/test10/whitebox-start.exp +++ b/pengine/test10/whitebox-start.exp @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -140,7 +140,7 @@ - + diff --git a/pengine/test10/whitebox-stop.exp b/pengine/test10/whitebox-stop.exp index a1aa3ba..354b6d4 100644 --- a/pengine/test10/whitebox-stop.exp +++ b/pengine/test10/whitebox-stop.exp @@ -16,7 +16,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -78,7 +78,7 @@ - + diff --git a/tools/attrd_updater.c b/tools/attrd_updater.c index 91bc4b4..33d751b 100644 --- a/tools/attrd_updater.c +++ b/tools/attrd_updater.c @@ -79,6 +79,7 @@ static int do_query(const char *attr_name, const char *attr_node, gboolean query static int do_update(char command, const char *attr_node, const char *attr_name, const char *attr_value, const char *attr_section, const char *attr_set, const char *attr_dampen, int attr_options); +static const char *get_hostname(const char *name); int main(int argc, char **argv) @@ -198,6 +199,8 @@ main(int argc, char **argv) crm_help('?', EX_USAGE); #endif } else { + + attr_node = get_hostname(attr_node); crm_exit(do_update(command, attr_node, attr_name, attr_value, attr_section, attr_set, attr_dampen, attr_options)); } @@ -351,6 +354,8 @@ do_query(const char *attr_name, const char *attr_node, gboolean query_all) attr_node = "localhost"; } + attr_node = get_hostname(attr_node); + /* Build and send attrd request, and get XML reply */ rc = send_attrd_query(attr_name, attr_node, &reply); if (rc != pcmk_ok) { @@ -394,3 +399,28 @@ do_update(char command, const char *attr_node, const char *attr_name, } return rc; } + +static const char * +get_hostname(const char *name) +{ + if(name != NULL + && safe_str_neq(name, "auto") + && safe_str_neq(name, "localhost")) { + return name; + + } else { + const char *target = getenv(crm_meta_name(XML_RSC_ATTR_TARGET)); + const char *host_pyhsical = getenv(crm_meta_name(PCMK_ENV_PHYSICAL_HOST)); + const char *host_pcmk = getenv("OCF_RESKEY_" CRM_META "_" XML_LRM_ATTR_TARGET); + + /* It is important we use the names by which the PE knows us */ + if(safe_str_eq(target, "host") && host_pyhsical != NULL) { + return host_pyhsical; + + } else if(host_pcmk) { + return host_pcmk; + } + } + + return name; +} diff --git a/tools/crm_mon.c b/tools/crm_mon.c index 29fc0e3..cad468e 100644 --- a/tools/crm_mon.c +++ b/tools/crm_mon.c @@ -1726,7 +1726,7 @@ print_node_attribute(gpointer name, gpointer user_data) const char *value = NULL; struct mon_attr_data *data = (struct mon_attr_data *) user_data; - value = g_hash_table_lookup(data->node->details->attrs, name); + value = node_attribute_raw(data->node, name); /* Print attribute name and value */ switch (output_format) { -- 1.8.3.1 From 50e264254fcdf90f5ad0ce429938c15495f99acb Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Thu, 24 Aug 2017 14:34:46 +1000 Subject: [PATCH 02/21] Fix: attrd: Allow values for all nodes to be queried --- tools/attrd_updater.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/attrd_updater.c b/tools/attrd_updater.c index 33d751b..de75496 100644 --- a/tools/attrd_updater.c +++ b/tools/attrd_updater.c @@ -351,11 +351,11 @@ do_query(const char *attr_name, const char *attr_node, gboolean query_all) attr_node = NULL; } else if (attr_node == NULL) { crm_debug("User did not specify node for query, using localhost"); - attr_node = "localhost"; + attr_node = get_hostname(attr_node); + } else { + attr_node = get_hostname(attr_node); } - attr_node = get_hostname(attr_node); - /* Build and send attrd request, and get XML reply */ rc = send_attrd_query(attr_name, attr_node, &reply); if (rc != pcmk_ok) { -- 1.8.3.1 From 67ebfc43eabf77e72d784084e23d3031bfc19710 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Thu, 24 Aug 2017 14:35:29 +1000 Subject: [PATCH 03/21] Fix: PE: Correctly interpret colocation with bundles --- pengine/graph.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pengine/graph.c b/pengine/graph.c index 3c5dc6b..990d8b8 100644 --- a/pengine/graph.c +++ b/pengine/graph.c @@ -413,9 +413,10 @@ graph_update_action(action_t * first, action_t * then, node_t * node, } static void -mark_start_blocked(resource_t *rsc) +mark_start_blocked(resource_t *rsc, resource_t *reason) { GListPtr gIter = rsc->actions; + char *reason_text = crm_strdup_printf("colocation with %s", reason->id); for (; gIter != NULL; gIter = gIter->next) { action_t *action = (action_t *) gIter->data; @@ -424,11 +425,12 @@ mark_start_blocked(resource_t *rsc) continue; } if (is_set(action->flags, pe_action_runnable)) { - clear_bit(action->flags, pe_action_runnable); + pe_action_set_flag_reason(__FUNCTION__, __LINE__, action, NULL, reason_text, pe_action_runnable, FALSE); update_colo_start_chain(action); update_action(action); } } + free(reason_text); } void @@ -445,6 +447,11 @@ update_colo_start_chain(action_t *action) return; } + if(rsc->parent) { + /* uber_parent() stops _before_ the bundle */ + rsc = rsc->parent; + } + /* if rsc has children, all the children need to have start set to * unrunnable before we follow the colo chain for the parent. */ for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) { @@ -458,7 +465,7 @@ update_colo_start_chain(action_t *action) for (gIter = rsc->rsc_cons_lhs; gIter != NULL; gIter = gIter->next) { rsc_colocation_t *colocate_with = (rsc_colocation_t *)gIter->data; if (colocate_with->score == INFINITY) { - mark_start_blocked(colocate_with->rsc_lh); + mark_start_blocked(colocate_with->rsc_lh, action->rsc); } } } @@ -490,7 +497,7 @@ update_action(action_t * then) if (then->required_runnable_before == 0) { then->required_runnable_before = 1; } - clear_bit(then->flags, pe_action_runnable); + pe_clear_action_bit(then, pe_action_runnable); /* We are relying on the pe_order_one_or_more clause of * graph_update_action(), called as part of the: * @@ -1585,7 +1592,7 @@ graph_has_loop(action_t * init_action, action_t * action, action_wrapper_t * wra } done: - clear_bit(wrapper->action->flags, pe_action_tracking); + pe_clear_action_bit(wrapper->action, pe_action_tracking); return has_loop; } -- 1.8.3.1 From 3392d49b99c8d594af54549a41c962c46e26d7fd Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Fri, 25 Aug 2017 12:46:37 +1000 Subject: [PATCH 04/21] PE: bundle: Send an additional host list when container-attribute-target=host The list is modified to use the name of the host where the bundles are running so that agents can map between the two sets when necessary. --- lib/pengine/container.c | 1 + pengine/clone.c | 8 +++--- pengine/notif.c | 68 ++++++++++++++++++++++++++++++++++++++----------- pengine/notif.h | 2 +- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/lib/pengine/container.c b/lib/pengine/container.c index 53965cf..5831b58 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -769,6 +769,7 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set) container_data->docker_host_options = buffer; if(container_data->attribute_target) { g_hash_table_replace(rsc->meta, strdup(XML_RSC_ATTR_TARGET), strdup(container_data->attribute_target)); + g_hash_table_replace(container_data->child->meta, strdup(XML_RSC_ATTR_TARGET), strdup(container_data->attribute_target)); } } else { diff --git a/pengine/clone.c b/pengine/clone.c index 1722166..41cb5cb 100644 --- a/pengine/clone.c +++ b/pengine/clone.c @@ -1227,25 +1227,25 @@ clone_expand(resource_t * rsc, pe_working_set_t * data_set) if (clone_data->start_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->start_notify); - expand_notification_data(clone_data->start_notify, data_set); + expand_notification_data(rsc, clone_data->start_notify, data_set); create_notifications(rsc, clone_data->start_notify, data_set); } if (clone_data->stop_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->stop_notify); - expand_notification_data(clone_data->stop_notify, data_set); + expand_notification_data(rsc, clone_data->stop_notify, data_set); create_notifications(rsc, clone_data->stop_notify, data_set); } if (clone_data->promote_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->promote_notify); - expand_notification_data(clone_data->promote_notify, data_set); + expand_notification_data(rsc, clone_data->promote_notify, data_set); create_notifications(rsc, clone_data->promote_notify, data_set); } if (clone_data->demote_notify) { collect_notification_data(rsc, TRUE, TRUE, clone_data->demote_notify); - expand_notification_data(clone_data->demote_notify, data_set); + expand_notification_data(rsc, clone_data->demote_notify, data_set); create_notifications(rsc, clone_data->demote_notify, data_set); } diff --git a/pengine/notif.c b/pengine/notif.c index b8135b5..19a9751 100644 --- a/pengine/notif.c +++ b/pengine/notif.c @@ -17,6 +17,7 @@ */ #include +#include #include #include #include @@ -81,33 +82,60 @@ static notify_entry_t *dup_notify_entry(notify_entry_t *entry) return dup; } -static char * -expand_node_list(GListPtr list) +static void +expand_node_list(GListPtr list, char **uname, char **metal) { GListPtr gIter = NULL; char *node_list = NULL; + char *metal_list = NULL; + CRM_ASSERT(uname != NULL); if (list == NULL) { - return strdup(" "); + *uname = strdup(" "); + if(metal) { + *metal = strdup(" "); + } + return; } for (gIter = list; gIter != NULL; gIter = gIter->next) { + int len = 0; + int existing_len = 0; node_t *node = (node_t *) gIter->data; - if (node->details->uname) { - int existing_len = 0; - int len = 2 + strlen(node->details->uname); + CRM_ASSERT(node->details->uname); + len = 2 + strlen(node->details->uname); + + if(node_list) { + existing_len = strlen(node_list); + } +// crm_trace("Adding %s (%dc) at offset %d", node->details->uname, len - 2, existing_len); + node_list = realloc_safe(node_list, len + existing_len); + sprintf(node_list + existing_len, "%s%s", existing_len == 0 ? "":" ", node->details->uname); + + if(metal) { + existing_len = 0; + if(metal_list) { + existing_len = strlen(metal_list); + } - if(node_list) { - existing_len = strlen(node_list); + if(node->details->remote_rsc + && node->details->remote_rsc->container + && node->details->remote_rsc->container->running_on) { + node = node->details->remote_rsc->container->running_on->data; } - crm_trace("Adding %s (%dc) at offset %d", node->details->uname, len - 2, existing_len); - node_list = realloc_safe(node_list, len + existing_len); - sprintf(node_list + existing_len, "%s%s", existing_len == 0 ? "":" ", node->details->uname); + + CRM_ASSERT(node->details->uname); + len = 2 + strlen(node->details->uname); + metal_list = realloc_safe(metal_list, len + existing_len); + sprintf(metal_list + existing_len, "%s%s", existing_len == 0 ? "":" ", node->details->uname); } } - return node_list; + *uname = node_list; + if(metal) { + *metal = metal_list; + } } static void @@ -495,7 +523,7 @@ collect_notification_data(resource_t * rsc, gboolean state, gboolean activity, } gboolean -expand_notification_data(notify_data_t * n_data, pe_working_set_t * data_set) +expand_notification_data(resource_t *rsc, notify_data_t * n_data, pe_working_set_t * data_set) { /* Expand the notification entries into a key=value hashtable * This hashtable is later used in action2xml() @@ -503,6 +531,7 @@ expand_notification_data(notify_data_t * n_data, pe_working_set_t * data_set) gboolean required = FALSE; char *rsc_list = NULL; char *node_list = NULL; + char *metal_list = NULL; GListPtr nodes = NULL; if (n_data->stop) { @@ -576,13 +605,22 @@ expand_notification_data(notify_data_t * n_data, pe_working_set_t * data_set) g_hash_table_insert(n_data->keys, strdup("notify_inactive_resource"), rsc_list); nodes = g_hash_table_get_values(n_data->allowed_nodes); - node_list = expand_node_list(nodes); + expand_node_list(nodes, &node_list, NULL); g_hash_table_insert(n_data->keys, strdup("notify_available_uname"), node_list); g_list_free(nodes); - node_list = expand_node_list(data_set->nodes); + expand_node_list(data_set->nodes, &node_list, &metal_list); g_hash_table_insert(n_data->keys, strdup("notify_all_uname"), node_list); + { + const char *source = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET); + if(safe_str_eq("host", source)) { + g_hash_table_insert(n_data->keys, strdup("notify_all_hosts"), metal_list); + } else { + free(metal_list); + } + } + if (required && n_data->pre) { update_action_flags(n_data->pre, pe_action_optional | pe_action_clear, __FUNCTION__, __LINE__); update_action_flags(n_data->pre_done, pe_action_optional | pe_action_clear, __FUNCTION__, __LINE__); diff --git a/pengine/notif.h b/pengine/notif.h index f299342..da68874 100644 --- a/pengine/notif.h +++ b/pengine/notif.h @@ -28,7 +28,7 @@ notify_data_t * create_notification_boundaries(resource_t *rsc, void collect_notification_data(resource_t *rsc, gboolean state, gboolean activity, notify_data_t *n_data); -gboolean expand_notification_data(notify_data_t *n_data, +gboolean expand_notification_data(resource_t *rsc, notify_data_t *n_data, pe_working_set_t *data_set); void create_notifications(resource_t *rsc, notify_data_t *n_data, -- 1.8.3.1 From ccbdb2a215bad69c9e6ac2d74c0bbb1d1719db5a Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Mon, 28 Aug 2017 12:17:16 +1000 Subject: [PATCH 05/21] Tools: Allow bundle resources to read/write master scores based on the same logic as attrd (cf34f4c) --- include/crm/attrd.h | 2 ++ lib/common/utils.c | 28 ++++++++++++++++++++++++++++ pacemaker.spec.in | 4 +++- tools/Makefile.am | 2 +- tools/attrd_updater.c | 40 +++++++++------------------------------- tools/crm_attribute.c | 14 ++++++-------- tools/crm_master | 6 ++---- 7 files changed, 51 insertions(+), 45 deletions(-) diff --git a/include/crm/attrd.h b/include/crm/attrd.h index e294838..240f192 100644 --- a/include/crm/attrd.h +++ b/include/crm/attrd.h @@ -24,6 +24,8 @@ #define attrd_opt_remote 0x001 #define attrd_opt_private 0x002 +const char *attrd_get_target(const char *name); + int attrd_update_delegate(crm_ipc_t * ipc, char command, const char *host, const char *name, const char *value, const char *section, const char *set, const char *dampen, const char *user_name, int options); diff --git a/lib/common/utils.c b/lib/common/utils.c index f594c12..290a661 100644 --- a/lib/common/utils.c +++ b/lib/common/utils.c @@ -2156,3 +2156,31 @@ crm_gnutls_global_init(void) gnutls_global_init(); } #endif + +const char * +attrd_get_target(const char *name) +{ + if(safe_str_eq(name, "auto") || safe_str_eq(name, "localhost")) { + name = NULL; + } + + if(name != NULL) { + return name; + + } else { + const char *target = getenv(crm_meta_name(XML_RSC_ATTR_TARGET)); + const char *host_pyhsical = getenv(crm_meta_name(PCMK_ENV_PHYSICAL_HOST)); + const char *host_pcmk = getenv("OCF_RESKEY_" CRM_META "_" XML_LRM_ATTR_TARGET); + + /* It is important we use the names by which the PE knows us */ + if(safe_str_eq(target, "host") && host_pyhsical != NULL) { + return host_pyhsical; + + } else if(host_pcmk) { + return host_pcmk; + } + } + + // TODO? Call get_local_node_name() if name == NULL + return name; +} diff --git a/pacemaker.spec.in b/pacemaker.spec.in index 642af74..d0bc2c3 100644 --- a/pacemaker.spec.in +++ b/pacemaker.spec.in @@ -601,6 +601,7 @@ exit 0 %exclude %{_sbindir}/pacemaker_remoted %{_libexecdir}/pacemaker/* +%{_sbindir}/attrd_updater %{_sbindir}/crm_attribute %{_sbindir}/crm_master %{_sbindir}/crm_node @@ -619,6 +620,7 @@ exit 0 %doc %{_mandir}/man7/ocf_pacemaker_o2cb.* %doc %{_mandir}/man7/ocf_pacemaker_remote.* %doc %{_mandir}/man8/crm_attribute.* +%doc %{_mandir}/man8/attrd_updater.* %doc %{_mandir}/man8/crm_node.* %doc %{_mandir}/man8/crm_master.* %if %{with cman} @@ -668,7 +670,6 @@ exit 0 %config(noreplace) %{_sysconfdir}/init/crm_mon.conf %endif -%{_sbindir}/attrd_updater %{_sbindir}/cibadmin %{_sbindir}/crm_diff %{_sbindir}/crm_error @@ -704,6 +705,7 @@ exit 0 %exclude %{_mandir}/man7/ocf_pacemaker_o2cb.* %exclude %{_mandir}/man7/ocf_pacemaker_remote.* %doc %{_mandir}/man8/* +%exclude %{_mandir}/man8/attrd_updater.* %exclude %{_mandir}/man8/crm_attribute.* %exclude %{_mandir}/man8/crm_node.* %exclude %{_mandir}/man8/crm_master.* diff --git a/tools/Makefile.am b/tools/Makefile.am index 3548035..a601b8d 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -121,7 +121,7 @@ iso8601_SOURCES = test.iso8601.c iso8601_LDADD = $(COMMONLIBS) attrd_updater_SOURCES = attrd_updater.c -attrd_updater_LDADD = $(COMMONLIBS) +attrd_updater_LDADD = $(top_builddir)/lib/cluster/libcrmcluster.la $(COMMONLIBS) crm_ticket_SOURCES = crm_ticket.c crm_ticket_LDADD = $(top_builddir)/lib/pengine/libpe_rules.la \ diff --git a/tools/attrd_updater.c b/tools/attrd_updater.c index de75496..5e8b837 100644 --- a/tools/attrd_updater.c +++ b/tools/attrd_updater.c @@ -32,6 +32,7 @@ #include #include +#include /* *INDENT-OFF* */ static struct crm_option long_options[] = { @@ -79,7 +80,6 @@ static int do_query(const char *attr_name, const char *attr_node, gboolean query static int do_update(char command, const char *attr_node, const char *attr_name, const char *attr_value, const char *attr_section, const char *attr_set, const char *attr_dampen, int attr_options); -static const char *get_hostname(const char *name); int main(int argc, char **argv) @@ -200,7 +200,10 @@ main(int argc, char **argv) #endif } else { - attr_node = get_hostname(attr_node); + attr_node = attrd_get_target(attr_node); + if (attr_node == NULL) { + attr_node = get_local_node_name(); + } crm_exit(do_update(command, attr_node, attr_name, attr_value, attr_section, attr_set, attr_dampen, attr_options)); } @@ -349,11 +352,11 @@ do_query(const char *attr_name, const char *attr_node, gboolean query_all) /* Decide which node(s) to query */ if (query_all == TRUE) { attr_node = NULL; - } else if (attr_node == NULL) { - crm_debug("User did not specify node for query, using localhost"); - attr_node = get_hostname(attr_node); } else { - attr_node = get_hostname(attr_node); + attr_node = attrd_get_target(attr_node); + if (attr_node == NULL) { + attr_node = get_local_node_name(); + } } /* Build and send attrd request, and get XML reply */ @@ -399,28 +402,3 @@ do_update(char command, const char *attr_node, const char *attr_name, } return rc; } - -static const char * -get_hostname(const char *name) -{ - if(name != NULL - && safe_str_neq(name, "auto") - && safe_str_neq(name, "localhost")) { - return name; - - } else { - const char *target = getenv(crm_meta_name(XML_RSC_ATTR_TARGET)); - const char *host_pyhsical = getenv(crm_meta_name(PCMK_ENV_PHYSICAL_HOST)); - const char *host_pcmk = getenv("OCF_RESKEY_" CRM_META "_" XML_LRM_ATTR_TARGET); - - /* It is important we use the names by which the PE knows us */ - if(safe_str_eq(target, "host") && host_pyhsical != NULL) { - return host_pyhsical; - - } else if(host_pcmk) { - return host_pcmk; - } - } - - return name; -} diff --git a/tools/crm_attribute.c b/tools/crm_attribute.c index 60ded8d..b511282 100644 --- a/tools/crm_attribute.c +++ b/tools/crm_attribute.c @@ -246,15 +246,13 @@ main(int argc, char **argv) } else if (safe_str_eq(type, XML_CIB_TAG_CRMCONFIG)) { } else if (safe_str_neq(type, XML_CIB_TAG_TICKETS)) { + /* If we are being called from a resource agent via the cluster, + * the correct local node name will be passed as an environment + * variable. Otherwise, we have to ask the cluster. + */ + dest_uname = attrd_get_target(dest_uname); if (dest_uname == NULL) { - /* If we are being called from a resource agent via the cluster, - * the correct local node name will be passed as an environment - * variable. Otherwise, we have to ask the cluster. - */ - dest_uname = getenv("OCF_RESKEY_" CRM_META "_" XML_LRM_ATTR_TARGET); - if (dest_uname == NULL) { - dest_uname = get_local_node_name(); - } + dest_uname = get_local_node_name(); } rc = query_node_uuid(the_cib, dest_uname, &dest_node, &is_remote_node); diff --git a/tools/crm_master b/tools/crm_master index 7cce64d..7e31cea 100755 --- a/tools/crm_master +++ b/tools/crm_master @@ -1,7 +1,5 @@ #!/bin/bash -target=`crm_node -n` - TEMP=`getopt -o qDGQVN:U:v:i:l:r: --long version,help,resource:,node:,uname:,attr-value:,id:,update:,delete-attr,get-value,attr-id:,lifetime:,quiet \ -n 'crm_master' -- "$@"` @@ -12,7 +10,7 @@ eval set -- "$TEMP" while true ; do case "$1" in - -N|--node|-U|--uname) target="$2"; shift; shift;; + -N|--node|-U|--uname) options="$options $1 $2"; shift; shift;; -v|--attr-value|--update|-i|--id|--attr-id|-l|--lifetime) options="$options $1 $2"; shift; shift;; -Q|-q|--quiet|-D|--delete-attr|-G|--get-value|-V) options="$options $1"; shift;; -r|--resource) OCF_RESOURCE_INSTANCE=$2; shift; shift;; @@ -53,4 +51,4 @@ if [ -z "$OCF_RESOURCE_INSTANCE" ]; then exit 1 fi -crm_attribute -N $target -n master-$OCF_RESOURCE_INSTANCE $options +crm_attribute -n master-$OCF_RESOURCE_INSTANCE $options -- 1.8.3.1 From e3485d6fd5e9e6ec05d9cd6682d46da3e463d6c7 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Wed, 13 Sep 2017 13:31:09 +1000 Subject: [PATCH 06/21] Fix: PE: Prevent graph loops when fencing the host out from underneath a bundle --- pengine/allocate.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pengine/allocate.c b/pengine/allocate.c index 958fb23..d610035 100644 --- a/pengine/allocate.c +++ b/pengine/allocate.c @@ -1416,7 +1416,14 @@ fence_guest(pe_node_t *node, pe_action_t *done, pe_working_set_t *data_set) * it is restarted, so we always order pseudo-fencing after stop, not start * (even though start might be closer to what is done for a real reboot). */ - if (stop) { + if(stop && is_set(stop->flags, pe_action_pseudo)) { + pe_action_t *parent_stonith_op = pe_fence_op(stop->node, NULL, FALSE, NULL, data_set); + crm_info("Implying guest node %s is down (action %d) after %s fencing", + node->details->uname, stonith_op->id, stop->node->details->uname); + order_actions(parent_stonith_op, stonith_op, + pe_order_runnable_left|pe_order_implies_then); + + } else if (stop) { order_actions(stop, stonith_op, pe_order_runnable_left|pe_order_implies_then); crm_info("Implying guest node %s is down (action %d) " -- 1.8.3.1 From 2709e5c2e231e80da557acf3b736f970516ffbb9 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Wed, 13 Sep 2017 14:14:31 +1000 Subject: [PATCH 07/21] Fix: PE: Do not send notifications to unclean bundles --- pengine/notif.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pengine/notif.c b/pengine/notif.c index 19a9751..76c5a4a 100644 --- a/pengine/notif.c +++ b/pengine/notif.c @@ -691,7 +691,7 @@ create_notifications(resource_t * rsc, notify_data_t * n_data, pe_working_set_t * action. There's no reason to send the fenced node a stop notification */ if (stop && is_set(stop->flags, pe_action_pseudo) && - current_node->details->unclean) { + (current_node->details->unclean || current_node->details->remote_requires_reset) ) { continue; } -- 1.8.3.1 From d29ba5dce8d2bccf4a0c906c3bd02a87f7e42974 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Wed, 13 Sep 2017 20:06:15 +1000 Subject: [PATCH 08/21] Test: PE: Update bundle fence ordering --- pengine/test10/complex_enforce_colo.summary | 4 ++-- pengine/test10/enforce-colo1.summary | 2 +- pengine/test10/whitebox-imply-stop-on-fence.dot | 4 ++-- pengine/test10/whitebox-imply-stop-on-fence.exp | 4 ++-- pengine/test10/whitebox-imply-stop-on-fence.summary | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pengine/test10/complex_enforce_colo.summary b/pengine/test10/complex_enforce_colo.summary index 2332269..0426e98 100644 --- a/pengine/test10/complex_enforce_colo.summary +++ b/pengine/test10/complex_enforce_colo.summary @@ -113,7 +113,7 @@ Transition Summary: * Stop glance-api:2 (rhos6-node3) * Stop cinder-api ( rhos6-node1 ) due to unrunnable keystone-clone running * Stop cinder-scheduler ( rhos6-node1 ) due to required cinder-api start - * Stop cinder-volume ( rhos6-node1 ) + * Stop cinder-volume ( rhos6-node1 ) due to colocation with cinder-scheduler * Stop swift-account:0 (rhos6-node1) * Stop swift-account:1 (rhos6-node2) * Stop swift-account:2 (rhos6-node3) @@ -194,7 +194,7 @@ Transition Summary: * Stop heat-api-cloudwatch:0 ( rhos6-node1 ) due to required heat-api-cfn:0 start * Stop heat-api-cloudwatch:1 ( rhos6-node2 ) due to required heat-api-cfn:1 start * Stop heat-api-cloudwatch:2 ( rhos6-node3 ) due to required heat-api-cfn:2 start - * Stop heat-engine ( rhos6-node2 ) due to required heat-api-cloudwatch-clone running + * Stop heat-engine ( rhos6-node2 ) due to colocation with heat-api-cloudwatch-clone Executing cluster transition: * Pseudo action: glance-api-clone_stop_0 diff --git a/pengine/test10/enforce-colo1.summary b/pengine/test10/enforce-colo1.summary index 64815ae..4968326 100644 --- a/pengine/test10/enforce-colo1.summary +++ b/pengine/test10/enforce-colo1.summary @@ -10,7 +10,7 @@ Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ] central (ocf::heartbeat:Dummy): Started rhel7-auto3 Transition Summary: - * Stop engine ( rhel7-auto3 ) + * Stop engine ( rhel7-auto3 ) due to colocation with central * Stop keystone:0 (rhel7-auto2) due to node availability * Stop keystone:1 (rhel7-auto3) due to node availability * Stop keystone:2 (rhel7-auto1) due to node availability diff --git a/pengine/test10/whitebox-imply-stop-on-fence.dot b/pengine/test10/whitebox-imply-stop-on-fence.dot index 5885d4b..8ef42fd 100644 --- a/pengine/test10/whitebox-imply-stop-on-fence.dot +++ b/pengine/test10/whitebox-imply-stop-on-fence.dot @@ -7,7 +7,6 @@ "R-lxc-01_kiff-01_stop_0 kiff-01" -> "R-lxc-01_kiff-01_start_0 kiff-02" [ style = bold] "R-lxc-01_kiff-01_stop_0 kiff-01" -> "all_stopped" [ style = bold] "R-lxc-01_kiff-01_stop_0 kiff-01" -> "shared0-clone_stop_0" [ style = bold] -"R-lxc-01_kiff-01_stop_0 kiff-01" -> "stonith 'reboot' lxc-01_kiff-01" [ style = bold] "R-lxc-01_kiff-01_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] "R-lxc-02_kiff-01_monitor_10000 kiff-02" [ style=bold color="green" fontcolor="black"] "R-lxc-02_kiff-01_start_0 kiff-02" -> "R-lxc-02_kiff-01_monitor_10000 kiff-02" [ style = bold] @@ -16,7 +15,6 @@ "R-lxc-02_kiff-01_stop_0 kiff-01" -> "R-lxc-02_kiff-01_start_0 kiff-02" [ style = bold] "R-lxc-02_kiff-01_stop_0 kiff-01" -> "all_stopped" [ style = bold] "R-lxc-02_kiff-01_stop_0 kiff-01" -> "shared0-clone_stop_0" [ style = bold] -"R-lxc-02_kiff-01_stop_0 kiff-01" -> "stonith 'reboot' lxc-02_kiff-01" [ style = bold] "R-lxc-02_kiff-01_stop_0 kiff-01" [ style=bold color="green" fontcolor="orange"] "all_stopped" -> "fence-kiff-02_start_0 kiff-02" [ style = bold] "all_stopped" [ style=bold color="green" fontcolor="orange"] @@ -77,6 +75,8 @@ "stonith 'reboot' kiff-01" -> "lxc-02_kiff-01_stop_0 kiff-01" [ style = bold] "stonith 'reboot' kiff-01" -> "shared0-clone_stop_0" [ style = bold] "stonith 'reboot' kiff-01" -> "shared0_stop_0 kiff-01" [ style = bold] +"stonith 'reboot' kiff-01" -> "stonith 'reboot' lxc-01_kiff-01" [ style = bold] +"stonith 'reboot' kiff-01" -> "stonith 'reboot' lxc-02_kiff-01" [ style = bold] "stonith 'reboot' kiff-01" -> "stonith_complete" [ style = bold] "stonith 'reboot' kiff-01" [ style=bold color="green" fontcolor="black"] "stonith 'reboot' lxc-01_kiff-01" -> "stonith_complete" [ style = bold] diff --git a/pengine/test10/whitebox-imply-stop-on-fence.exp b/pengine/test10/whitebox-imply-stop-on-fence.exp index 6639eb9..d1e22ee 100644 --- a/pengine/test10/whitebox-imply-stop-on-fence.exp +++ b/pengine/test10/whitebox-imply-stop-on-fence.exp @@ -417,7 +417,7 @@ - + @@ -432,7 +432,7 @@ - + diff --git a/pengine/test10/whitebox-imply-stop-on-fence.summary b/pengine/test10/whitebox-imply-stop-on-fence.summary index a3e9ce8..87d7b4f 100644 --- a/pengine/test10/whitebox-imply-stop-on-fence.summary +++ b/pengine/test10/whitebox-imply-stop-on-fence.summary @@ -43,15 +43,15 @@ Executing cluster transition: * Fencing kiff-01 (reboot) * Pseudo action: lxc-01_kiff-01_stop_0 * Pseudo action: lxc-02_kiff-01_stop_0 - * Pseudo action: R-lxc-01_kiff-01_stop_0 - * Pseudo action: R-lxc-02_kiff-01_stop_0 * Pseudo action: stonith-lxc-02_kiff-01-reboot on lxc-02_kiff-01 * Pseudo action: stonith-lxc-01_kiff-01-reboot on lxc-01_kiff-01 * Pseudo action: stonith_complete + * Pseudo action: R-lxc-01_kiff-01_stop_0 + * Pseudo action: R-lxc-02_kiff-01_stop_0 + * Pseudo action: vm-fs_stop_0 * Pseudo action: shared0-clone_stop_0 * Resource action: R-lxc-01_kiff-01 start on kiff-02 * Resource action: R-lxc-02_kiff-01 start on kiff-02 - * Pseudo action: vm-fs_stop_0 * Resource action: lxc-01_kiff-01 start on kiff-02 * Resource action: lxc-02_kiff-01 start on kiff-02 * Pseudo action: shared0_stop_0 -- 1.8.3.1 From 8f19403bdaf4722b82d794c10e9911976bd68b82 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Wed, 13 Sep 2017 20:14:21 +1000 Subject: [PATCH 09/21] Test: PE: Prevent graph loops when fencing the host out from underneath a bundle --- pengine/regression.sh | 2 + pengine/test10/bundle-order-fencing.dot | 442 ++++++ pengine/test10/bundle-order-fencing.exp | 1982 +++++++++++++++++++++++++++ pengine/test10/bundle-order-fencing.scores | 1148 ++++++++++++++++ pengine/test10/bundle-order-fencing.summary | 222 +++ pengine/test10/bundle-order-fencing.xml | 799 +++++++++++ 6 files changed, 4595 insertions(+) create mode 100644 pengine/test10/bundle-order-fencing.dot create mode 100644 pengine/test10/bundle-order-fencing.exp create mode 100644 pengine/test10/bundle-order-fencing.scores create mode 100644 pengine/test10/bundle-order-fencing.summary create mode 100644 pengine/test10/bundle-order-fencing.xml diff --git a/pengine/regression.sh b/pengine/regression.sh index d1a8a3f..6c3be88 100755 --- a/pengine/regression.sh +++ b/pengine/regression.sh @@ -811,6 +811,8 @@ do_test bundle-order-startup-clone-2 "Bundle startup with clones" do_test bundle-order-stop-clone "Stop bundle because clone is stopping" do_test bundle-nested-colocation "Colocation of nested connection resources" +do_test bundle-order-fencing "Order pseudo bundle fencing after parent node fencing if both are happening" + echo "" do_test whitebox-fail1 "Fail whitebox container rsc." do_test whitebox-fail2 "Fail whitebox container rsc lrmd connection." diff --git a/pengine/test10/bundle-order-fencing.dot b/pengine/test10/bundle-order-fencing.dot new file mode 100644 index 0000000..0db9605 --- /dev/null +++ b/pengine/test10/bundle-order-fencing.dot @@ -0,0 +1,442 @@ +digraph "g" { +"Cancel redis_monitor_45000 redis-bundle-1" -> "redis_promote_0 redis-bundle-1" [ style = bold] +"Cancel redis_monitor_45000 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"Cancel redis_monitor_60000 redis-bundle-1" -> "redis_promote_0 redis-bundle-1" [ style = bold] +"Cancel redis_monitor_60000 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"all_stopped" -> "stonith-fence_ipmilan-5254000dcb3f_start_0 controller-2" [ style = bold] +"all_stopped" -> "stonith-fence_ipmilan-5254003e8e97_start_0 controller-1" [ style = bold] +"all_stopped" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-0_monitor_60000 controller-2" [ style=dashed color="red" fontcolor="black"] +"galera-bundle-0_start_0 controller-2" -> "galera-bundle-0_monitor_60000 controller-2" [ style = dashed] +"galera-bundle-0_start_0 controller-2" -> "galera_monitor_20000 galera-bundle-0" [ style = dashed] +"galera-bundle-0_start_0 controller-2" -> "galera_monitor_30000 galera-bundle-0" [ style = dashed] +"galera-bundle-0_start_0 controller-2" -> "galera_start_0 galera-bundle-0" [ style = dashed] +"galera-bundle-0_start_0 controller-2" [ style=dashed color="red" fontcolor="black"] +"galera-bundle-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"galera-bundle-0_stop_0 controller-0" -> "galera-bundle-0_start_0 controller-2" [ style = dashed] +"galera-bundle-0_stop_0 controller-0" -> "galera-bundle-docker-0_stop_0 controller-0" [ style = bold] +"galera-bundle-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-docker-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"galera-bundle-docker-0_stop_0 controller-0" -> "galera-bundle_stopped_0" [ style = bold] +"galera-bundle-docker-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-master_demote_0" -> "galera-bundle-master_demoted_0" [ style = bold] +"galera-bundle-master_demote_0" -> "galera_demote_0 galera-bundle-0" [ style = bold] +"galera-bundle-master_demote_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-master_demoted_0" -> "galera-bundle-master_start_0" [ style = bold] +"galera-bundle-master_demoted_0" -> "galera-bundle-master_stop_0" [ style = bold] +"galera-bundle-master_demoted_0" -> "galera-bundle_demoted_0" [ style = bold] +"galera-bundle-master_demoted_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-master_running_0" -> "galera-bundle_running_0" [ style = bold] +"galera-bundle-master_running_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-master_start_0" -> "galera-bundle-master_running_0" [ style = bold] +"galera-bundle-master_start_0" -> "galera_start_0 galera-bundle-0" [ style = dashed] +"galera-bundle-master_start_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-master_stop_0" -> "galera-bundle-master_stopped_0" [ style = bold] +"galera-bundle-master_stop_0" -> "galera_stop_0 galera-bundle-0" [ style = bold] +"galera-bundle-master_stop_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle-master_stopped_0" -> "galera-bundle-master_start_0" [ style = bold] +"galera-bundle-master_stopped_0" -> "galera-bundle_stopped_0" [ style = bold] +"galera-bundle-master_stopped_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle_demote_0" -> "galera-bundle-master_demote_0" [ style = bold] +"galera-bundle_demote_0" -> "galera-bundle_demoted_0" [ style = bold] +"galera-bundle_demote_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle_demoted_0" -> "galera-bundle_start_0" [ style = bold] +"galera-bundle_demoted_0" -> "galera-bundle_stop_0" [ style = bold] +"galera-bundle_demoted_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle_running_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle_start_0" -> "galera-bundle-master_start_0" [ style = bold] +"galera-bundle_start_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle_stop_0" -> "galera-bundle-docker-0_stop_0 controller-0" [ style = bold] +"galera-bundle_stop_0" -> "galera-bundle-master_stop_0" [ style = bold] +"galera-bundle_stop_0" -> "galera_stop_0 galera-bundle-0" [ style = bold] +"galera-bundle_stop_0" [ style=bold color="green" fontcolor="orange"] +"galera-bundle_stopped_0" -> "galera-bundle_start_0" [ style = bold] +"galera-bundle_stopped_0" [ style=bold color="green" fontcolor="orange"] +"galera_demote_0 galera-bundle-0" -> "galera-bundle-master_demoted_0" [ style = bold] +"galera_demote_0 galera-bundle-0" -> "galera_monitor_20000 galera-bundle-0" [ style = dashed] +"galera_demote_0 galera-bundle-0" -> "galera_monitor_30000 galera-bundle-0" [ style = dashed] +"galera_demote_0 galera-bundle-0" -> "galera_stop_0 galera-bundle-0" [ style = bold] +"galera_demote_0 galera-bundle-0" [ style=bold color="green" fontcolor="orange"] +"galera_monitor_20000 galera-bundle-0" [ style=dashed color="red" fontcolor="black"] +"galera_monitor_30000 galera-bundle-0" [ style=dashed color="red" fontcolor="black"] +"galera_start_0 galera-bundle-0" -> "galera-bundle-master_running_0" [ style = dashed] +"galera_start_0 galera-bundle-0" -> "galera_monitor_20000 galera-bundle-0" [ style = dashed] +"galera_start_0 galera-bundle-0" -> "galera_monitor_30000 galera-bundle-0" [ style = dashed] +"galera_start_0 galera-bundle-0" [ style=dashed color="red" fontcolor="black"] +"galera_stop_0 galera-bundle-0" -> "all_stopped" [ style = bold] +"galera_stop_0 galera-bundle-0" -> "galera-bundle-master_stopped_0" [ style = bold] +"galera_stop_0 galera-bundle-0" -> "galera_start_0 galera-bundle-0" [ style = dashed] +"galera_stop_0 galera-bundle-0" [ style=bold color="green" fontcolor="orange"] +"haproxy-bundle-docker-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"haproxy-bundle-docker-0_stop_0 controller-0" -> "haproxy-bundle_stopped_0" [ style = bold] +"haproxy-bundle-docker-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"haproxy-bundle_stop_0" -> "haproxy-bundle-docker-0_stop_0 controller-0" [ style = bold] +"haproxy-bundle_stop_0" [ style=bold color="green" fontcolor="orange"] +"haproxy-bundle_stopped_0" -> "ip-10.0.0.109_stop_0 controller-0" [ style = bold] +"haproxy-bundle_stopped_0" -> "ip-172.17.4.11_stop_0 controller-0" [ style = bold] +"haproxy-bundle_stopped_0" -> "ip-192.168.24.7_stop_0 controller-0" [ style = bold] +"haproxy-bundle_stopped_0" [ style=bold color="green" fontcolor="orange"] +"ip-10.0.0.109_monitor_10000 controller-1" [ style=bold color="green" fontcolor="black"] +"ip-10.0.0.109_start_0 controller-1" -> "ip-10.0.0.109_monitor_10000 controller-1" [ style = bold] +"ip-10.0.0.109_start_0 controller-1" [ style=bold color="green" fontcolor="black"] +"ip-10.0.0.109_stop_0 controller-0" -> "all_stopped" [ style = bold] +"ip-10.0.0.109_stop_0 controller-0" -> "ip-10.0.0.109_start_0 controller-1" [ style = bold] +"ip-10.0.0.109_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"ip-172.17.4.11_monitor_10000 controller-1" [ style=bold color="green" fontcolor="black"] +"ip-172.17.4.11_start_0 controller-1" -> "ip-172.17.4.11_monitor_10000 controller-1" [ style = bold] +"ip-172.17.4.11_start_0 controller-1" [ style=bold color="green" fontcolor="black"] +"ip-172.17.4.11_stop_0 controller-0" -> "all_stopped" [ style = bold] +"ip-172.17.4.11_stop_0 controller-0" -> "ip-172.17.4.11_start_0 controller-1" [ style = bold] +"ip-172.17.4.11_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"ip-192.168.24.7_monitor_10000 controller-2" [ style=bold color="green" fontcolor="black"] +"ip-192.168.24.7_start_0 controller-2" -> "ip-192.168.24.7_monitor_10000 controller-2" [ style = bold] +"ip-192.168.24.7_start_0 controller-2" [ style=bold color="green" fontcolor="black"] +"ip-192.168.24.7_stop_0 controller-0" -> "all_stopped" [ style = bold] +"ip-192.168.24.7_stop_0 controller-0" -> "ip-192.168.24.7_start_0 controller-2" [ style = bold] +"ip-192.168.24.7_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-0_monitor_60000 controller-1" [ style=dashed color="red" fontcolor="black"] +"rabbitmq-bundle-0_start_0 controller-1" -> "rabbitmq-bundle-0_monitor_60000 controller-1" [ style = dashed] +"rabbitmq-bundle-0_start_0 controller-1" -> "rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style = dashed] +"rabbitmq-bundle-0_start_0 controller-1" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] +"rabbitmq-bundle-0_start_0 controller-1" [ style=dashed color="red" fontcolor="black"] +"rabbitmq-bundle-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"rabbitmq-bundle-0_stop_0 controller-0" -> "rabbitmq-bundle-0_start_0 controller-1" [ style = dashed] +"rabbitmq-bundle-0_stop_0 controller-0" -> "rabbitmq-bundle-docker-0_stop_0 controller-0" [ style = bold] +"rabbitmq-bundle-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_confirmed-post_notify_running_0" -> "rabbitmq-bundle_running_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-post_notify_running_0" -> "rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style = dashed] +"rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" -> "all_stopped" [ style = bold] +"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" -> "rabbitmq-bundle-clone_pre_notify_start_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" -> "rabbitmq-bundle_stopped_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_confirmed-pre_notify_start_0" -> "rabbitmq-bundle-clone_post_notify_running_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-pre_notify_start_0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-pre_notify_start_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" -> "rabbitmq-bundle-clone_post_notify_stopped_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" -> "rabbitmq-bundle-clone_stop_0" [ style = bold] +"rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_post_notify_running_0" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = bold] +"rabbitmq-bundle-clone_post_notify_running_0" -> "rabbitmq_post_notify_running_0 rabbitmq-bundle-0" [ style = bold] +"rabbitmq-bundle-clone_post_notify_running_0" -> "rabbitmq_post_notify_running_0 rabbitmq-bundle-1" [ style = bold] +"rabbitmq-bundle-clone_post_notify_running_0" -> "rabbitmq_post_notify_running_0 rabbitmq-bundle-2" [ style = bold] +"rabbitmq-bundle-clone_post_notify_running_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_post_notify_stopped_0" -> "rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" [ style = bold] +"rabbitmq-bundle-clone_post_notify_stopped_0" -> "rabbitmq_post_notify_stonith_0 rabbitmq-bundle-1" [ style = bold] +"rabbitmq-bundle-clone_post_notify_stopped_0" -> "rabbitmq_post_notify_stonith_0 rabbitmq-bundle-2" [ style = bold] +"rabbitmq-bundle-clone_post_notify_stopped_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_pre_notify_start_0" -> "rabbitmq-bundle-clone_confirmed-pre_notify_start_0" [ style = bold] +"rabbitmq-bundle-clone_pre_notify_start_0" -> "rabbitmq_pre_notify_start_0 rabbitmq-bundle-1" [ style = bold] +"rabbitmq-bundle-clone_pre_notify_start_0" -> "rabbitmq_pre_notify_start_0 rabbitmq-bundle-2" [ style = bold] +"rabbitmq-bundle-clone_pre_notify_start_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = bold] +"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq_pre_notify_stop_0 rabbitmq-bundle-1" [ style = bold] +"rabbitmq-bundle-clone_pre_notify_stop_0" -> "rabbitmq_pre_notify_stop_0 rabbitmq-bundle-2" [ style = bold] +"rabbitmq-bundle-clone_pre_notify_stop_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_running_0" -> "rabbitmq-bundle-clone_post_notify_running_0" [ style = bold] +"rabbitmq-bundle-clone_running_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_start_0" -> "rabbitmq-bundle-clone_running_0" [ style = bold] +"rabbitmq-bundle-clone_start_0" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] +"rabbitmq-bundle-clone_start_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_stop_0" -> "rabbitmq-bundle-clone_stopped_0" [ style = bold] +"rabbitmq-bundle-clone_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-0" [ style = bold] +"rabbitmq-bundle-clone_stop_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-clone_stopped_0" -> "rabbitmq-bundle-clone_post_notify_stopped_0" [ style = bold] +"rabbitmq-bundle-clone_stopped_0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] +"rabbitmq-bundle-clone_stopped_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle-docker-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"rabbitmq-bundle-docker-0_stop_0 controller-0" -> "rabbitmq-bundle_stopped_0" [ style = bold] +"rabbitmq-bundle-docker-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle_running_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle_start_0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] +"rabbitmq-bundle_start_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle_stop_0" -> "rabbitmq-bundle-clone_stop_0" [ style = bold] +"rabbitmq-bundle_stop_0" -> "rabbitmq-bundle-docker-0_stop_0 controller-0" [ style = bold] +"rabbitmq-bundle_stop_0" -> "rabbitmq_stop_0 rabbitmq-bundle-0" [ style = bold] +"rabbitmq-bundle_stop_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq-bundle_stopped_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq_confirmed-post_notify_stonith_0" -> "all_stopped" [ style = bold] +"rabbitmq_confirmed-post_notify_stonith_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style=dashed color="red" fontcolor="black"] +"rabbitmq_post_notify_running_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = bold] +"rabbitmq_post_notify_running_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] +"rabbitmq_post_notify_running_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = bold] +"rabbitmq_post_notify_running_0 rabbitmq-bundle-1" [ style=bold color="green" fontcolor="black"] +"rabbitmq_post_notify_running_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = bold] +"rabbitmq_post_notify_running_0 rabbitmq-bundle-2" [ style=bold color="green" fontcolor="black"] +"rabbitmq_post_notify_stonith_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" [ style = bold] +"rabbitmq_post_notify_stonith_0 rabbitmq-bundle-1" -> "rabbitmq_confirmed-post_notify_stonith_0" [ style = bold] +"rabbitmq_post_notify_stonith_0 rabbitmq-bundle-1" [ style=bold color="green" fontcolor="black"] +"rabbitmq_post_notify_stonith_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_confirmed-post_notify_stopped_0" [ style = bold] +"rabbitmq_post_notify_stonith_0 rabbitmq-bundle-2" -> "rabbitmq_confirmed-post_notify_stonith_0" [ style = bold] +"rabbitmq_post_notify_stonith_0 rabbitmq-bundle-2" [ style=bold color="green" fontcolor="black"] +"rabbitmq_post_notify_stonith_0" -> "rabbitmq_confirmed-post_notify_stonith_0" [ style = bold] +"rabbitmq_post_notify_stonith_0" -> "rabbitmq_post_notify_stonith_0 rabbitmq-bundle-1" [ style = bold] +"rabbitmq_post_notify_stonith_0" -> "rabbitmq_post_notify_stonith_0 rabbitmq-bundle-2" [ style = bold] +"rabbitmq_post_notify_stonith_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq_pre_notify_start_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_confirmed-pre_notify_start_0" [ style = bold] +"rabbitmq_pre_notify_start_0 rabbitmq-bundle-1" [ style=bold color="green" fontcolor="black"] +"rabbitmq_pre_notify_start_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_confirmed-pre_notify_start_0" [ style = bold] +"rabbitmq_pre_notify_start_0 rabbitmq-bundle-2" [ style=bold color="green" fontcolor="black"] +"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-1" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = bold] +"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-1" [ style=bold color="green" fontcolor="black"] +"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-2" -> "rabbitmq-bundle-clone_confirmed-pre_notify_stop_0" [ style = bold] +"rabbitmq_pre_notify_stop_0 rabbitmq-bundle-2" [ style=bold color="green" fontcolor="black"] +"rabbitmq_start_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_running_0" [ style = dashed] +"rabbitmq_start_0 rabbitmq-bundle-0" -> "rabbitmq_monitor_10000 rabbitmq-bundle-0" [ style = dashed] +"rabbitmq_start_0 rabbitmq-bundle-0" [ style=dashed color="red" fontcolor="black"] +"rabbitmq_stop_0 rabbitmq-bundle-0" -> "all_stopped" [ style = bold] +"rabbitmq_stop_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_stopped_0" [ style = bold] +"rabbitmq_stop_0 rabbitmq-bundle-0" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] +"rabbitmq_stop_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-0_monitor_60000 controller-1" [ style=dashed color="red" fontcolor="black"] +"redis-bundle-0_start_0 controller-1" -> "redis-bundle-0_monitor_60000 controller-1" [ style = dashed] +"redis-bundle-0_start_0 controller-1" -> "redis_monitor_45000 redis-bundle-0" [ style = dashed] +"redis-bundle-0_start_0 controller-1" -> "redis_monitor_60000 redis-bundle-0" [ style = dashed] +"redis-bundle-0_start_0 controller-1" -> "redis_start_0 redis-bundle-0" [ style = dashed] +"redis-bundle-0_start_0 controller-1" [ style=dashed color="red" fontcolor="black"] +"redis-bundle-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"redis-bundle-0_stop_0 controller-0" -> "redis-bundle-0_start_0 controller-1" [ style = dashed] +"redis-bundle-0_stop_0 controller-0" -> "redis-bundle-docker-0_stop_0 controller-0" [ style = bold] +"redis-bundle-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-docker-0_stop_0 controller-0" -> "all_stopped" [ style = bold] +"redis-bundle-docker-0_stop_0 controller-0" -> "redis-bundle_stopped_0" [ style = bold] +"redis-bundle-docker-0_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-post_notify_demoted_0" -> "redis-bundle-master_pre_notify_promote_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_demoted_0" -> "redis-bundle-master_pre_notify_start_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_demoted_0" -> "redis-bundle-master_pre_notify_stop_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_demoted_0" -> "redis-bundle_demoted_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_demoted_0" -> "redis_monitor_20000 redis-bundle-1" [ style = bold] +"redis-bundle-master_confirmed-post_notify_demoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-post_notify_promoted_0" -> "redis-bundle_promoted_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_promoted_0" -> "redis_monitor_20000 redis-bundle-1" [ style = bold] +"redis-bundle-master_confirmed-post_notify_promoted_0" -> "redis_monitor_45000 redis-bundle-0" [ style = dashed] +"redis-bundle-master_confirmed-post_notify_promoted_0" -> "redis_monitor_60000 redis-bundle-0" [ style = dashed] +"redis-bundle-master_confirmed-post_notify_promoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-post_notify_running_0" -> "redis-bundle-master_pre_notify_promote_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_running_0" -> "redis-bundle_running_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_running_0" -> "redis_monitor_20000 redis-bundle-1" [ style = bold] +"redis-bundle-master_confirmed-post_notify_running_0" -> "redis_monitor_45000 redis-bundle-0" [ style = dashed] +"redis-bundle-master_confirmed-post_notify_running_0" -> "redis_monitor_60000 redis-bundle-0" [ style = dashed] +"redis-bundle-master_confirmed-post_notify_running_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-post_notify_stopped_0" -> "all_stopped" [ style = bold] +"redis-bundle-master_confirmed-post_notify_stopped_0" -> "redis-bundle-master_pre_notify_promote_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_stopped_0" -> "redis-bundle-master_pre_notify_start_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_stopped_0" -> "redis-bundle_stopped_0" [ style = bold] +"redis-bundle-master_confirmed-post_notify_stopped_0" -> "redis_monitor_20000 redis-bundle-1" [ style = bold] +"redis-bundle-master_confirmed-post_notify_stopped_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-pre_notify_demote_0" -> "redis-bundle-master_demote_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_demote_0" -> "redis-bundle-master_post_notify_demoted_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_demote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-pre_notify_promote_0" -> "redis-bundle-master_post_notify_promoted_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_promote_0" -> "redis-bundle-master_promote_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_promote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-pre_notify_start_0" -> "redis-bundle-master_post_notify_running_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_start_0" -> "redis-bundle-master_start_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_start_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_confirmed-pre_notify_stop_0" -> "redis-bundle-master_post_notify_stopped_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_stop_0" -> "redis-bundle-master_stop_0" [ style = bold] +"redis-bundle-master_confirmed-pre_notify_stop_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_demote_0" -> "redis-bundle-master_demoted_0" [ style = bold] +"redis-bundle-master_demote_0" -> "redis_demote_0 redis-bundle-0" [ style = bold] +"redis-bundle-master_demote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_demoted_0" -> "redis-bundle-master_post_notify_demoted_0" [ style = bold] +"redis-bundle-master_demoted_0" -> "redis-bundle-master_promote_0" [ style = bold] +"redis-bundle-master_demoted_0" -> "redis-bundle-master_start_0" [ style = bold] +"redis-bundle-master_demoted_0" -> "redis-bundle-master_stop_0" [ style = bold] +"redis-bundle-master_demoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_post_notify_demoted_0" -> "redis-bundle-master_confirmed-post_notify_demoted_0" [ style = bold] +"redis-bundle-master_post_notify_demoted_0" -> "redis_post_notify_demoted_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_post_notify_demoted_0" -> "redis_post_notify_demoted_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_post_notify_demoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_post_notify_promoted_0" -> "redis-bundle-master_confirmed-post_notify_promoted_0" [ style = bold] +"redis-bundle-master_post_notify_promoted_0" -> "redis_post_notify_promoted_0 redis-bundle-0" [ style = bold] +"redis-bundle-master_post_notify_promoted_0" -> "redis_post_notify_promoted_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_post_notify_promoted_0" -> "redis_post_notify_promoted_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_post_notify_promoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_post_notify_running_0" -> "redis-bundle-master_confirmed-post_notify_running_0" [ style = bold] +"redis-bundle-master_post_notify_running_0" -> "redis_post_notify_running_0 redis-bundle-0" [ style = bold] +"redis-bundle-master_post_notify_running_0" -> "redis_post_notify_running_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_post_notify_running_0" -> "redis_post_notify_running_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_post_notify_running_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_post_notify_stopped_0" -> "redis-bundle-master_confirmed-post_notify_stopped_0" [ style = bold] +"redis-bundle-master_post_notify_stopped_0" -> "redis_post_notify_stonith_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_post_notify_stopped_0" -> "redis_post_notify_stonith_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_post_notify_stopped_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_pre_notify_demote_0" -> "redis-bundle-master_confirmed-pre_notify_demote_0" [ style = bold] +"redis-bundle-master_pre_notify_demote_0" -> "redis_pre_notify_demote_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_pre_notify_demote_0" -> "redis_pre_notify_demote_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_pre_notify_demote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_pre_notify_promote_0" -> "redis-bundle-master_confirmed-pre_notify_promote_0" [ style = bold] +"redis-bundle-master_pre_notify_promote_0" -> "redis_pre_notify_promote_0 redis-bundle-0" [ style = bold] +"redis-bundle-master_pre_notify_promote_0" -> "redis_pre_notify_promote_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_pre_notify_promote_0" -> "redis_pre_notify_promote_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_pre_notify_promote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_pre_notify_start_0" -> "redis-bundle-master_confirmed-pre_notify_start_0" [ style = bold] +"redis-bundle-master_pre_notify_start_0" -> "redis_pre_notify_start_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_pre_notify_start_0" -> "redis_pre_notify_start_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_pre_notify_start_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_pre_notify_stop_0" -> "redis-bundle-master_confirmed-pre_notify_stop_0" [ style = bold] +"redis-bundle-master_pre_notify_stop_0" -> "redis_pre_notify_stop_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_pre_notify_stop_0" -> "redis_pre_notify_stop_0 redis-bundle-2" [ style = bold] +"redis-bundle-master_pre_notify_stop_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_promote_0" -> "redis_promote_0 redis-bundle-1" [ style = bold] +"redis-bundle-master_promote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_promoted_0" -> "redis-bundle-master_post_notify_promoted_0" [ style = bold] +"redis-bundle-master_promoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_running_0" -> "redis-bundle-master_post_notify_running_0" [ style = bold] +"redis-bundle-master_running_0" -> "redis-bundle-master_promote_0" [ style = bold] +"redis-bundle-master_running_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_start_0" -> "redis-bundle-master_running_0" [ style = bold] +"redis-bundle-master_start_0" -> "redis_start_0 redis-bundle-0" [ style = dashed] +"redis-bundle-master_start_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_stop_0" -> "redis-bundle-master_stopped_0" [ style = bold] +"redis-bundle-master_stop_0" -> "redis_stop_0 redis-bundle-0" [ style = bold] +"redis-bundle-master_stop_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle-master_stopped_0" -> "redis-bundle-master_post_notify_stopped_0" [ style = bold] +"redis-bundle-master_stopped_0" -> "redis-bundle-master_promote_0" [ style = bold] +"redis-bundle-master_stopped_0" -> "redis-bundle-master_start_0" [ style = bold] +"redis-bundle-master_stopped_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_demote_0" -> "redis-bundle-master_demote_0" [ style = bold] +"redis-bundle_demote_0" -> "redis-bundle_demoted_0" [ style = bold] +"redis-bundle_demote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_demoted_0" -> "redis-bundle_promote_0" [ style = bold] +"redis-bundle_demoted_0" -> "redis-bundle_start_0" [ style = bold] +"redis-bundle_demoted_0" -> "redis-bundle_stop_0" [ style = bold] +"redis-bundle_demoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_promote_0" -> "redis-bundle-master_promote_0" [ style = bold] +"redis-bundle_promote_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_promoted_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_running_0" -> "redis-bundle_promote_0" [ style = bold] +"redis-bundle_running_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_start_0" -> "redis-bundle-master_start_0" [ style = bold] +"redis-bundle_start_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_stop_0" -> "redis-bundle-docker-0_stop_0 controller-0" [ style = bold] +"redis-bundle_stop_0" -> "redis-bundle-master_stop_0" [ style = bold] +"redis-bundle_stop_0" -> "redis_stop_0 redis-bundle-0" [ style = bold] +"redis-bundle_stop_0" [ style=bold color="green" fontcolor="orange"] +"redis-bundle_stopped_0" -> "redis-bundle_promote_0" [ style = bold] +"redis-bundle_stopped_0" -> "redis-bundle_start_0" [ style = bold] +"redis-bundle_stopped_0" [ style=bold color="green" fontcolor="orange"] +"redis_confirmed-post_notify_stonith_0" -> "all_stopped" [ style = bold] +"redis_confirmed-post_notify_stonith_0" -> "redis_monitor_20000 redis-bundle-1" [ style = bold] +"redis_confirmed-post_notify_stonith_0" [ style=bold color="green" fontcolor="orange"] +"redis_demote_0 redis-bundle-0" -> "redis-bundle-master_demoted_0" [ style = bold] +"redis_demote_0 redis-bundle-0" -> "redis_monitor_45000 redis-bundle-0" [ style = dashed] +"redis_demote_0 redis-bundle-0" -> "redis_monitor_60000 redis-bundle-0" [ style = dashed] +"redis_demote_0 redis-bundle-0" -> "redis_stop_0 redis-bundle-0" [ style = bold] +"redis_demote_0 redis-bundle-0" [ style=bold color="green" fontcolor="orange"] +"redis_monitor_20000 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_monitor_45000 redis-bundle-0" [ style=dashed color="red" fontcolor="black"] +"redis_monitor_60000 redis-bundle-0" [ style=dashed color="red" fontcolor="black"] +"redis_post_notify_demoted_0 redis-bundle-1" -> "redis-bundle-master_confirmed-post_notify_demoted_0" [ style = bold] +"redis_post_notify_demoted_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_demoted_0 redis-bundle-2" -> "redis-bundle-master_confirmed-post_notify_demoted_0" [ style = bold] +"redis_post_notify_demoted_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_promoted_0 redis-bundle-0" -> "redis-bundle-master_confirmed-post_notify_promoted_0" [ style = bold] +"redis_post_notify_promoted_0 redis-bundle-0" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_promoted_0 redis-bundle-1" -> "redis-bundle-master_confirmed-post_notify_promoted_0" [ style = bold] +"redis_post_notify_promoted_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_promoted_0 redis-bundle-2" -> "redis-bundle-master_confirmed-post_notify_promoted_0" [ style = bold] +"redis_post_notify_promoted_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_running_0 redis-bundle-0" -> "redis-bundle-master_confirmed-post_notify_running_0" [ style = bold] +"redis_post_notify_running_0 redis-bundle-0" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_running_0 redis-bundle-1" -> "redis-bundle-master_confirmed-post_notify_running_0" [ style = bold] +"redis_post_notify_running_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_running_0 redis-bundle-2" -> "redis-bundle-master_confirmed-post_notify_running_0" [ style = bold] +"redis_post_notify_running_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_stonith_0 redis-bundle-1" -> "redis-bundle-master_confirmed-post_notify_stopped_0" [ style = bold] +"redis_post_notify_stonith_0 redis-bundle-1" -> "redis_confirmed-post_notify_stonith_0" [ style = bold] +"redis_post_notify_stonith_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_stonith_0 redis-bundle-2" -> "redis-bundle-master_confirmed-post_notify_stopped_0" [ style = bold] +"redis_post_notify_stonith_0 redis-bundle-2" -> "redis_confirmed-post_notify_stonith_0" [ style = bold] +"redis_post_notify_stonith_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_post_notify_stonith_0" -> "redis_confirmed-post_notify_stonith_0" [ style = bold] +"redis_post_notify_stonith_0" -> "redis_post_notify_stonith_0 redis-bundle-1" [ style = bold] +"redis_post_notify_stonith_0" -> "redis_post_notify_stonith_0 redis-bundle-2" [ style = bold] +"redis_post_notify_stonith_0" [ style=bold color="green" fontcolor="orange"] +"redis_pre_notify_demote_0 redis-bundle-1" -> "redis-bundle-master_confirmed-pre_notify_demote_0" [ style = bold] +"redis_pre_notify_demote_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_demote_0 redis-bundle-2" -> "redis-bundle-master_confirmed-pre_notify_demote_0" [ style = bold] +"redis_pre_notify_demote_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_promote_0 redis-bundle-0" -> "redis-bundle-master_confirmed-pre_notify_promote_0" [ style = bold] +"redis_pre_notify_promote_0 redis-bundle-0" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_promote_0 redis-bundle-1" -> "redis-bundle-master_confirmed-pre_notify_promote_0" [ style = bold] +"redis_pre_notify_promote_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_promote_0 redis-bundle-2" -> "redis-bundle-master_confirmed-pre_notify_promote_0" [ style = bold] +"redis_pre_notify_promote_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_start_0 redis-bundle-1" -> "redis-bundle-master_confirmed-pre_notify_start_0" [ style = bold] +"redis_pre_notify_start_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_start_0 redis-bundle-2" -> "redis-bundle-master_confirmed-pre_notify_start_0" [ style = bold] +"redis_pre_notify_start_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_stop_0 redis-bundle-1" -> "redis-bundle-master_confirmed-pre_notify_stop_0" [ style = bold] +"redis_pre_notify_stop_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_pre_notify_stop_0 redis-bundle-2" -> "redis-bundle-master_confirmed-pre_notify_stop_0" [ style = bold] +"redis_pre_notify_stop_0 redis-bundle-2" [ style=bold color="green" fontcolor="black"] +"redis_promote_0 redis-bundle-1" -> "redis-bundle-master_promoted_0" [ style = bold] +"redis_promote_0 redis-bundle-1" -> "redis_monitor_20000 redis-bundle-1" [ style = bold] +"redis_promote_0 redis-bundle-1" [ style=bold color="green" fontcolor="black"] +"redis_start_0 redis-bundle-0" -> "redis-bundle-master_running_0" [ style = dashed] +"redis_start_0 redis-bundle-0" -> "redis_monitor_45000 redis-bundle-0" [ style = dashed] +"redis_start_0 redis-bundle-0" -> "redis_monitor_60000 redis-bundle-0" [ style = dashed] +"redis_start_0 redis-bundle-0" [ style=dashed color="red" fontcolor="black"] +"redis_stop_0 redis-bundle-0" -> "all_stopped" [ style = bold] +"redis_stop_0 redis-bundle-0" -> "redis-bundle-master_stopped_0" [ style = bold] +"redis_stop_0 redis-bundle-0" -> "redis_start_0 redis-bundle-0" [ style = dashed] +"redis_stop_0 redis-bundle-0" [ style=bold color="green" fontcolor="orange"] +"stonith 'off' galera-bundle-0" -> "galera-bundle-master_stop_0" [ style = bold] +"stonith 'off' galera-bundle-0" -> "galera_demote_0 galera-bundle-0" [ style = bold] +"stonith 'off' galera-bundle-0" -> "galera_stop_0 galera-bundle-0" [ style = bold] +"stonith 'off' galera-bundle-0" -> "stonith_complete" [ style = bold] +"stonith 'off' galera-bundle-0" [ style=bold color="green" fontcolor="orange"] +"stonith 'off' rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_stop_0" [ style = bold] +"stonith 'off' rabbitmq-bundle-0" -> "rabbitmq_post_notify_stonith_0" [ style = bold] +"stonith 'off' rabbitmq-bundle-0" -> "rabbitmq_stop_0 rabbitmq-bundle-0" [ style = bold] +"stonith 'off' rabbitmq-bundle-0" -> "stonith_complete" [ style = bold] +"stonith 'off' rabbitmq-bundle-0" [ style=bold color="green" fontcolor="orange"] +"stonith 'off' redis-bundle-0" -> "redis-bundle-master_stop_0" [ style = bold] +"stonith 'off' redis-bundle-0" -> "redis_demote_0 redis-bundle-0" [ style = bold] +"stonith 'off' redis-bundle-0" -> "redis_post_notify_stonith_0" [ style = bold] +"stonith 'off' redis-bundle-0" -> "redis_stop_0 redis-bundle-0" [ style = bold] +"stonith 'off' redis-bundle-0" -> "stonith_complete" [ style = bold] +"stonith 'off' redis-bundle-0" [ style=bold color="green" fontcolor="orange"] +"stonith 'reboot' controller-0" -> "galera-bundle-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "galera-bundle-docker-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "haproxy-bundle-docker-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "ip-10.0.0.109_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "ip-172.17.4.11_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "ip-192.168.24.7_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "rabbitmq-bundle-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "rabbitmq-bundle-docker-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "redis-bundle-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "redis-bundle-docker-0_stop_0 controller-0" [ style = bold] +"stonith 'reboot' controller-0" -> "stonith 'off' galera-bundle-0" [ style = bold] +"stonith 'reboot' controller-0" -> "stonith 'off' rabbitmq-bundle-0" [ style = bold] +"stonith 'reboot' controller-0" -> "stonith 'off' redis-bundle-0" [ style = bold] +"stonith 'reboot' controller-0" -> "stonith_complete" [ style = bold] +"stonith 'reboot' controller-0" [ style=bold color="green" fontcolor="black"] +"stonith-fence_ipmilan-5254000dcb3f_monitor_60000 controller-2" [ style=bold color="green" fontcolor="black"] +"stonith-fence_ipmilan-5254000dcb3f_start_0 controller-2" -> "stonith-fence_ipmilan-5254000dcb3f_monitor_60000 controller-2" [ style = bold] +"stonith-fence_ipmilan-5254000dcb3f_start_0 controller-2" [ style=bold color="green" fontcolor="black"] +"stonith-fence_ipmilan-5254000dcb3f_stop_0 controller-0" -> "all_stopped" [ style = bold] +"stonith-fence_ipmilan-5254000dcb3f_stop_0 controller-0" -> "stonith-fence_ipmilan-5254000dcb3f_start_0 controller-2" [ style = bold] +"stonith-fence_ipmilan-5254000dcb3f_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"stonith-fence_ipmilan-5254003e8e97_monitor_60000 controller-1" [ style=bold color="green" fontcolor="black"] +"stonith-fence_ipmilan-5254003e8e97_start_0 controller-1" -> "stonith-fence_ipmilan-5254003e8e97_monitor_60000 controller-1" [ style = bold] +"stonith-fence_ipmilan-5254003e8e97_start_0 controller-1" [ style=bold color="green" fontcolor="black"] +"stonith-fence_ipmilan-5254003e8e97_stop_0 controller-0" -> "all_stopped" [ style = bold] +"stonith-fence_ipmilan-5254003e8e97_stop_0 controller-0" -> "stonith-fence_ipmilan-5254003e8e97_start_0 controller-1" [ style = bold] +"stonith-fence_ipmilan-5254003e8e97_stop_0 controller-0" [ style=bold color="green" fontcolor="orange"] +"stonith_complete" -> "all_stopped" [ style = bold] +"stonith_complete" -> "galera-bundle-0_start_0 controller-2" [ style = dashed] +"stonith_complete" -> "galera_start_0 galera-bundle-0" [ style = dashed] +"stonith_complete" -> "ip-10.0.0.109_start_0 controller-1" [ style = bold] +"stonith_complete" -> "ip-172.17.4.11_start_0 controller-1" [ style = bold] +"stonith_complete" -> "ip-192.168.24.7_start_0 controller-2" [ style = bold] +"stonith_complete" -> "rabbitmq-bundle-0_start_0 controller-1" [ style = dashed] +"stonith_complete" -> "rabbitmq_start_0 rabbitmq-bundle-0" [ style = dashed] +"stonith_complete" -> "redis-bundle-0_start_0 controller-1" [ style = dashed] +"stonith_complete" -> "redis_promote_0 redis-bundle-1" [ style = bold] +"stonith_complete" -> "redis_start_0 redis-bundle-0" [ style = dashed] +"stonith_complete" [ style=bold color="green" fontcolor="orange"] +} diff --git a/pengine/test10/bundle-order-fencing.exp b/pengine/test10/bundle-order-fencing.exp new file mode 100644 index 0000000..d072d85 --- /dev/null +++ b/pengine/test10/bundle-order-fencing.exp @@ -0,0 +1,1982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pengine/test10/bundle-order-fencing.scores b/pengine/test10/bundle-order-fencing.scores new file mode 100644 index 0000000..9037624 --- /dev/null +++ b/pengine/test10/bundle-order-fencing.scores @@ -0,0 +1,1148 @@ +Allocation scores: +Using the original execution date of: 2017-09-12 10:51:59Z +clone_color: galera-bundle-master allocation score on controller-0: -INFINITY +clone_color: galera-bundle-master allocation score on controller-1: -INFINITY +clone_color: galera-bundle-master allocation score on controller-2: -INFINITY +clone_color: galera-bundle-master allocation score on galera-bundle-0: 0 +clone_color: galera-bundle-master allocation score on galera-bundle-1: 0 +clone_color: galera-bundle-master allocation score on galera-bundle-2: 0 +clone_color: galera-bundle-master allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: galera-bundle-master allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: galera-bundle-master allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: galera:0 allocation score on controller-0: -INFINITY +clone_color: galera:0 allocation score on controller-1: -INFINITY +clone_color: galera:0 allocation score on controller-2: -INFINITY +clone_color: galera:0 allocation score on galera-bundle-0: INFINITY +clone_color: galera:0 allocation score on galera-bundle-1: -INFINITY +clone_color: galera:0 allocation score on galera-bundle-2: -INFINITY +clone_color: galera:0 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: galera:0 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: galera:0 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: galera:1 allocation score on controller-0: -INFINITY +clone_color: galera:1 allocation score on controller-1: -INFINITY +clone_color: galera:1 allocation score on controller-2: -INFINITY +clone_color: galera:1 allocation score on galera-bundle-0: -INFINITY +clone_color: galera:1 allocation score on galera-bundle-1: INFINITY +clone_color: galera:1 allocation score on galera-bundle-2: -INFINITY +clone_color: galera:1 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: galera:1 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: galera:1 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: galera:2 allocation score on controller-0: -INFINITY +clone_color: galera:2 allocation score on controller-1: -INFINITY +clone_color: galera:2 allocation score on controller-2: -INFINITY +clone_color: galera:2 allocation score on galera-bundle-0: -INFINITY +clone_color: galera:2 allocation score on galera-bundle-1: -INFINITY +clone_color: galera:2 allocation score on galera-bundle-2: INFINITY +clone_color: galera:2 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: galera:2 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: galera:2 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: rabbitmq-bundle-clone allocation score on controller-0: -INFINITY +clone_color: rabbitmq-bundle-clone allocation score on controller-1: -INFINITY +clone_color: rabbitmq-bundle-clone allocation score on controller-2: -INFINITY +clone_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-0: 0 +clone_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-1: 0 +clone_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-2: 0 +clone_color: rabbitmq:0 allocation score on controller-0: -INFINITY +clone_color: rabbitmq:0 allocation score on controller-1: -INFINITY +clone_color: rabbitmq:0 allocation score on controller-2: -INFINITY +clone_color: rabbitmq:0 allocation score on rabbitmq-bundle-0: INFINITY +clone_color: rabbitmq:0 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: rabbitmq:0 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: rabbitmq:1 allocation score on controller-0: -INFINITY +clone_color: rabbitmq:1 allocation score on controller-1: -INFINITY +clone_color: rabbitmq:1 allocation score on controller-2: -INFINITY +clone_color: rabbitmq:1 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: rabbitmq:1 allocation score on rabbitmq-bundle-1: INFINITY +clone_color: rabbitmq:1 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: rabbitmq:2 allocation score on controller-0: -INFINITY +clone_color: rabbitmq:2 allocation score on controller-1: -INFINITY +clone_color: rabbitmq:2 allocation score on controller-2: -INFINITY +clone_color: rabbitmq:2 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: rabbitmq:2 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: rabbitmq:2 allocation score on rabbitmq-bundle-2: INFINITY +clone_color: redis-bundle-master allocation score on controller-0: -INFINITY +clone_color: redis-bundle-master allocation score on controller-1: -INFINITY +clone_color: redis-bundle-master allocation score on controller-2: -INFINITY +clone_color: redis-bundle-master allocation score on galera-bundle-0: -INFINITY +clone_color: redis-bundle-master allocation score on galera-bundle-1: -INFINITY +clone_color: redis-bundle-master allocation score on galera-bundle-2: -INFINITY +clone_color: redis-bundle-master allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: redis-bundle-master allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: redis-bundle-master allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: redis-bundle-master allocation score on redis-bundle-0: 0 +clone_color: redis-bundle-master allocation score on redis-bundle-1: 0 +clone_color: redis-bundle-master allocation score on redis-bundle-2: 0 +clone_color: redis:0 allocation score on controller-0: -INFINITY +clone_color: redis:0 allocation score on controller-1: -INFINITY +clone_color: redis:0 allocation score on controller-2: -INFINITY +clone_color: redis:0 allocation score on galera-bundle-0: -INFINITY +clone_color: redis:0 allocation score on galera-bundle-1: -INFINITY +clone_color: redis:0 allocation score on galera-bundle-2: -INFINITY +clone_color: redis:0 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: redis:0 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: redis:0 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: redis:0 allocation score on redis-bundle-0: INFINITY +clone_color: redis:0 allocation score on redis-bundle-1: -INFINITY +clone_color: redis:0 allocation score on redis-bundle-2: -INFINITY +clone_color: redis:1 allocation score on controller-0: -INFINITY +clone_color: redis:1 allocation score on controller-1: -INFINITY +clone_color: redis:1 allocation score on controller-2: -INFINITY +clone_color: redis:1 allocation score on galera-bundle-0: -INFINITY +clone_color: redis:1 allocation score on galera-bundle-1: -INFINITY +clone_color: redis:1 allocation score on galera-bundle-2: -INFINITY +clone_color: redis:1 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: redis:1 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: redis:1 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: redis:1 allocation score on redis-bundle-0: -INFINITY +clone_color: redis:1 allocation score on redis-bundle-1: INFINITY +clone_color: redis:1 allocation score on redis-bundle-2: -INFINITY +clone_color: redis:2 allocation score on controller-0: -INFINITY +clone_color: redis:2 allocation score on controller-1: -INFINITY +clone_color: redis:2 allocation score on controller-2: -INFINITY +clone_color: redis:2 allocation score on galera-bundle-0: -INFINITY +clone_color: redis:2 allocation score on galera-bundle-1: -INFINITY +clone_color: redis:2 allocation score on galera-bundle-2: -INFINITY +clone_color: redis:2 allocation score on rabbitmq-bundle-0: -INFINITY +clone_color: redis:2 allocation score on rabbitmq-bundle-1: -INFINITY +clone_color: redis:2 allocation score on rabbitmq-bundle-2: -INFINITY +clone_color: redis:2 allocation score on redis-bundle-0: -INFINITY +clone_color: redis:2 allocation score on redis-bundle-1: -INFINITY +clone_color: redis:2 allocation score on redis-bundle-2: INFINITY +container_color: galera-bundle allocation score on controller-0: 0 +container_color: galera-bundle allocation score on controller-1: 0 +container_color: galera-bundle allocation score on controller-2: 0 +container_color: galera-bundle allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-0 allocation score on controller-0: INFINITY +container_color: galera-bundle-0 allocation score on controller-1: 0 +container_color: galera-bundle-0 allocation score on controller-2: 0 +container_color: galera-bundle-0 allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-0 allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-0 allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-1 allocation score on controller-0: 0 +container_color: galera-bundle-1 allocation score on controller-1: INFINITY +container_color: galera-bundle-1 allocation score on controller-2: 0 +container_color: galera-bundle-1 allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-1 allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-1 allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-2 allocation score on controller-0: 0 +container_color: galera-bundle-2 allocation score on controller-1: 0 +container_color: galera-bundle-2 allocation score on controller-2: INFINITY +container_color: galera-bundle-2 allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-2 allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-2 allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-docker-0 allocation score on controller-0: INFINITY +container_color: galera-bundle-docker-0 allocation score on controller-1: 0 +container_color: galera-bundle-docker-0 allocation score on controller-2: 0 +container_color: galera-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-docker-1 allocation score on controller-0: 0 +container_color: galera-bundle-docker-1 allocation score on controller-1: INFINITY +container_color: galera-bundle-docker-1 allocation score on controller-2: 0 +container_color: galera-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-docker-2 allocation score on controller-0: 0 +container_color: galera-bundle-docker-2 allocation score on controller-1: 0 +container_color: galera-bundle-docker-2 allocation score on controller-2: INFINITY +container_color: galera-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera-bundle-master allocation score on controller-0: 0 +container_color: galera-bundle-master allocation score on controller-1: 0 +container_color: galera-bundle-master allocation score on controller-2: 0 +container_color: galera-bundle-master allocation score on galera-bundle-0: -INFINITY +container_color: galera-bundle-master allocation score on galera-bundle-1: -INFINITY +container_color: galera-bundle-master allocation score on galera-bundle-2: -INFINITY +container_color: galera-bundle-master allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera-bundle-master allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera-bundle-master allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera:0 allocation score on controller-0: 0 +container_color: galera:0 allocation score on controller-1: 0 +container_color: galera:0 allocation score on controller-2: 0 +container_color: galera:0 allocation score on galera-bundle-0: -INFINITY +container_color: galera:0 allocation score on galera-bundle-1: -INFINITY +container_color: galera:0 allocation score on galera-bundle-2: -INFINITY +container_color: galera:0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera:0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera:0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera:1 allocation score on controller-0: 0 +container_color: galera:1 allocation score on controller-1: 0 +container_color: galera:1 allocation score on controller-2: 0 +container_color: galera:1 allocation score on galera-bundle-0: -INFINITY +container_color: galera:1 allocation score on galera-bundle-1: -INFINITY +container_color: galera:1 allocation score on galera-bundle-2: -INFINITY +container_color: galera:1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera:1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera:1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: galera:2 allocation score on controller-0: 0 +container_color: galera:2 allocation score on controller-1: 0 +container_color: galera:2 allocation score on controller-2: 0 +container_color: galera:2 allocation score on galera-bundle-0: -INFINITY +container_color: galera:2 allocation score on galera-bundle-1: -INFINITY +container_color: galera:2 allocation score on galera-bundle-2: -INFINITY +container_color: galera:2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: galera:2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: galera:2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-0: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-1: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on controller-2: 0 +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-0: INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on controller-2: 0 +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-0: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-0: 0 +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on controller-2: 0 +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: rabbitmq-bundle allocation score on controller-0: 0 +container_color: rabbitmq-bundle allocation score on controller-1: 0 +container_color: rabbitmq-bundle allocation score on controller-2: 0 +container_color: rabbitmq-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq-bundle-0 allocation score on controller-0: INFINITY +container_color: rabbitmq-bundle-0 allocation score on controller-1: 0 +container_color: rabbitmq-bundle-0 allocation score on controller-2: 0 +container_color: rabbitmq-bundle-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq-bundle-1 allocation score on controller-0: 0 +container_color: rabbitmq-bundle-1 allocation score on controller-1: INFINITY +container_color: rabbitmq-bundle-1 allocation score on controller-2: 0 +container_color: rabbitmq-bundle-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq-bundle-2 allocation score on controller-0: 0 +container_color: rabbitmq-bundle-2 allocation score on controller-1: 0 +container_color: rabbitmq-bundle-2 allocation score on controller-2: INFINITY +container_color: rabbitmq-bundle-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq-bundle-clone allocation score on controller-0: 0 +container_color: rabbitmq-bundle-clone allocation score on controller-1: 0 +container_color: rabbitmq-bundle-clone allocation score on controller-2: 0 +container_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-0: 0 +container_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-1: 0 +container_color: rabbitmq-bundle-clone allocation score on rabbitmq-bundle-2: 0 +container_color: rabbitmq-bundle-docker-0 allocation score on controller-0: INFINITY +container_color: rabbitmq-bundle-docker-0 allocation score on controller-1: 0 +container_color: rabbitmq-bundle-docker-0 allocation score on controller-2: 0 +container_color: rabbitmq-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq-bundle-docker-1 allocation score on controller-0: 0 +container_color: rabbitmq-bundle-docker-1 allocation score on controller-1: INFINITY +container_color: rabbitmq-bundle-docker-1 allocation score on controller-2: 0 +container_color: rabbitmq-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq-bundle-docker-2 allocation score on controller-0: 0 +container_color: rabbitmq-bundle-docker-2 allocation score on controller-1: 0 +container_color: rabbitmq-bundle-docker-2 allocation score on controller-2: INFINITY +container_color: rabbitmq-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: rabbitmq-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: rabbitmq-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: rabbitmq:0 allocation score on controller-0: 0 +container_color: rabbitmq:0 allocation score on controller-1: 0 +container_color: rabbitmq:0 allocation score on controller-2: 0 +container_color: rabbitmq:0 allocation score on rabbitmq-bundle-0: INFINITY +container_color: rabbitmq:0 allocation score on rabbitmq-bundle-1: 0 +container_color: rabbitmq:0 allocation score on rabbitmq-bundle-2: 0 +container_color: rabbitmq:1 allocation score on controller-0: 0 +container_color: rabbitmq:1 allocation score on controller-1: 0 +container_color: rabbitmq:1 allocation score on controller-2: 0 +container_color: rabbitmq:1 allocation score on rabbitmq-bundle-0: 0 +container_color: rabbitmq:1 allocation score on rabbitmq-bundle-1: INFINITY +container_color: rabbitmq:1 allocation score on rabbitmq-bundle-2: 0 +container_color: rabbitmq:2 allocation score on controller-0: 0 +container_color: rabbitmq:2 allocation score on controller-1: 0 +container_color: rabbitmq:2 allocation score on controller-2: 0 +container_color: rabbitmq:2 allocation score on rabbitmq-bundle-0: 0 +container_color: rabbitmq:2 allocation score on rabbitmq-bundle-1: 0 +container_color: rabbitmq:2 allocation score on rabbitmq-bundle-2: INFINITY +container_color: redis-bundle allocation score on controller-0: 0 +container_color: redis-bundle allocation score on controller-1: 0 +container_color: redis-bundle allocation score on controller-2: 0 +container_color: redis-bundle allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-0 allocation score on controller-0: INFINITY +container_color: redis-bundle-0 allocation score on controller-1: 0 +container_color: redis-bundle-0 allocation score on controller-2: 0 +container_color: redis-bundle-0 allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-0 allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-0 allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-0 allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-0 allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-0 allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-1 allocation score on controller-0: 0 +container_color: redis-bundle-1 allocation score on controller-1: INFINITY +container_color: redis-bundle-1 allocation score on controller-2: 0 +container_color: redis-bundle-1 allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-1 allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-1 allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-1 allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-1 allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-1 allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-2 allocation score on controller-0: 0 +container_color: redis-bundle-2 allocation score on controller-1: 0 +container_color: redis-bundle-2 allocation score on controller-2: INFINITY +container_color: redis-bundle-2 allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-2 allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-2 allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-2 allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-2 allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-2 allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-docker-0 allocation score on controller-0: INFINITY +container_color: redis-bundle-docker-0 allocation score on controller-1: 0 +container_color: redis-bundle-docker-0 allocation score on controller-2: 0 +container_color: redis-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-docker-1 allocation score on controller-0: 0 +container_color: redis-bundle-docker-1 allocation score on controller-1: INFINITY +container_color: redis-bundle-docker-1 allocation score on controller-2: 0 +container_color: redis-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-docker-2 allocation score on controller-0: 0 +container_color: redis-bundle-docker-2 allocation score on controller-1: 0 +container_color: redis-bundle-docker-2 allocation score on controller-2: INFINITY +container_color: redis-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +container_color: redis-bundle-master allocation score on controller-0: 0 +container_color: redis-bundle-master allocation score on controller-1: 0 +container_color: redis-bundle-master allocation score on controller-2: 0 +container_color: redis-bundle-master allocation score on galera-bundle-0: -INFINITY +container_color: redis-bundle-master allocation score on galera-bundle-1: -INFINITY +container_color: redis-bundle-master allocation score on galera-bundle-2: -INFINITY +container_color: redis-bundle-master allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis-bundle-master allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis-bundle-master allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis-bundle-master allocation score on redis-bundle-0: -INFINITY +container_color: redis-bundle-master allocation score on redis-bundle-1: -INFINITY +container_color: redis-bundle-master allocation score on redis-bundle-2: -INFINITY +container_color: redis:0 allocation score on controller-0: 0 +container_color: redis:0 allocation score on controller-1: 0 +container_color: redis:0 allocation score on controller-2: 0 +container_color: redis:0 allocation score on galera-bundle-0: -INFINITY +container_color: redis:0 allocation score on galera-bundle-1: -INFINITY +container_color: redis:0 allocation score on galera-bundle-2: -INFINITY +container_color: redis:0 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis:0 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis:0 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis:0 allocation score on redis-bundle-0: -INFINITY +container_color: redis:0 allocation score on redis-bundle-1: -INFINITY +container_color: redis:0 allocation score on redis-bundle-2: -INFINITY +container_color: redis:1 allocation score on controller-0: 0 +container_color: redis:1 allocation score on controller-1: 0 +container_color: redis:1 allocation score on controller-2: 0 +container_color: redis:1 allocation score on galera-bundle-0: -INFINITY +container_color: redis:1 allocation score on galera-bundle-1: -INFINITY +container_color: redis:1 allocation score on galera-bundle-2: -INFINITY +container_color: redis:1 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis:1 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis:1 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis:1 allocation score on redis-bundle-0: -INFINITY +container_color: redis:1 allocation score on redis-bundle-1: -INFINITY +container_color: redis:1 allocation score on redis-bundle-2: -INFINITY +container_color: redis:2 allocation score on controller-0: 0 +container_color: redis:2 allocation score on controller-1: 0 +container_color: redis:2 allocation score on controller-2: 0 +container_color: redis:2 allocation score on galera-bundle-0: -INFINITY +container_color: redis:2 allocation score on galera-bundle-1: -INFINITY +container_color: redis:2 allocation score on galera-bundle-2: -INFINITY +container_color: redis:2 allocation score on rabbitmq-bundle-0: -INFINITY +container_color: redis:2 allocation score on rabbitmq-bundle-1: -INFINITY +container_color: redis:2 allocation score on rabbitmq-bundle-2: -INFINITY +container_color: redis:2 allocation score on redis-bundle-0: -INFINITY +container_color: redis:2 allocation score on redis-bundle-1: -INFINITY +container_color: redis:2 allocation score on redis-bundle-2: -INFINITY +galera:0 promotion score on galera-bundle-0: -1 +galera:1 promotion score on galera-bundle-1: 100 +galera:2 promotion score on galera-bundle-2: 100 +native_color: galera-bundle-0 allocation score on controller-0: INFINITY +native_color: galera-bundle-0 allocation score on controller-1: 0 +native_color: galera-bundle-0 allocation score on controller-2: 0 +native_color: galera-bundle-0 allocation score on galera-bundle-0: -INFINITY +native_color: galera-bundle-0 allocation score on galera-bundle-1: -INFINITY +native_color: galera-bundle-0 allocation score on galera-bundle-2: -INFINITY +native_color: galera-bundle-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera-bundle-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera-bundle-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera-bundle-1 allocation score on controller-0: 0 +native_color: galera-bundle-1 allocation score on controller-1: INFINITY +native_color: galera-bundle-1 allocation score on controller-2: 0 +native_color: galera-bundle-1 allocation score on galera-bundle-0: -INFINITY +native_color: galera-bundle-1 allocation score on galera-bundle-1: -INFINITY +native_color: galera-bundle-1 allocation score on galera-bundle-2: -INFINITY +native_color: galera-bundle-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera-bundle-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera-bundle-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera-bundle-2 allocation score on controller-0: 0 +native_color: galera-bundle-2 allocation score on controller-1: 0 +native_color: galera-bundle-2 allocation score on controller-2: INFINITY +native_color: galera-bundle-2 allocation score on galera-bundle-0: -INFINITY +native_color: galera-bundle-2 allocation score on galera-bundle-1: -INFINITY +native_color: galera-bundle-2 allocation score on galera-bundle-2: -INFINITY +native_color: galera-bundle-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera-bundle-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera-bundle-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera-bundle-docker-0 allocation score on controller-0: -INFINITY +native_color: galera-bundle-docker-0 allocation score on controller-1: -INFINITY +native_color: galera-bundle-docker-0 allocation score on controller-2: -INFINITY +native_color: galera-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +native_color: galera-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +native_color: galera-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +native_color: galera-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera-bundle-docker-1 allocation score on controller-0: -INFINITY +native_color: galera-bundle-docker-1 allocation score on controller-1: INFINITY +native_color: galera-bundle-docker-1 allocation score on controller-2: 0 +native_color: galera-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +native_color: galera-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +native_color: galera-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +native_color: galera-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera-bundle-docker-2 allocation score on controller-0: -INFINITY +native_color: galera-bundle-docker-2 allocation score on controller-1: -INFINITY +native_color: galera-bundle-docker-2 allocation score on controller-2: INFINITY +native_color: galera-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +native_color: galera-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +native_color: galera-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +native_color: galera-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera:0 allocation score on controller-0: -INFINITY +native_color: galera:0 allocation score on controller-1: -INFINITY +native_color: galera:0 allocation score on controller-2: -INFINITY +native_color: galera:0 allocation score on galera-bundle-0: INFINITY +native_color: galera:0 allocation score on galera-bundle-1: -INFINITY +native_color: galera:0 allocation score on galera-bundle-2: -INFINITY +native_color: galera:0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera:0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera:0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera:1 allocation score on controller-0: -INFINITY +native_color: galera:1 allocation score on controller-1: -INFINITY +native_color: galera:1 allocation score on controller-2: -INFINITY +native_color: galera:1 allocation score on galera-bundle-0: -INFINITY +native_color: galera:1 allocation score on galera-bundle-1: INFINITY +native_color: galera:1 allocation score on galera-bundle-2: -INFINITY +native_color: galera:1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera:1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera:1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: galera:2 allocation score on controller-0: -INFINITY +native_color: galera:2 allocation score on controller-1: -INFINITY +native_color: galera:2 allocation score on controller-2: -INFINITY +native_color: galera:2 allocation score on galera-bundle-0: -INFINITY +native_color: galera:2 allocation score on galera-bundle-1: -INFINITY +native_color: galera:2 allocation score on galera-bundle-2: INFINITY +native_color: galera:2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: galera:2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: galera:2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on controller-0: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on controller-1: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on controller-2: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on controller-0: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on controller-1: 0 +native_color: haproxy-bundle-docker-1 allocation score on controller-2: INFINITY +native_color: haproxy-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on controller-0: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on controller-1: INFINITY +native_color: haproxy-bundle-docker-2 allocation score on controller-2: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +native_color: haproxy-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +native_color: ip-10.0.0.109 allocation score on controller-0: -INFINITY +native_color: ip-10.0.0.109 allocation score on controller-1: 0 +native_color: ip-10.0.0.109 allocation score on controller-2: 0 +native_color: ip-10.0.0.109 allocation score on galera-bundle-0: -INFINITY +native_color: ip-10.0.0.109 allocation score on galera-bundle-1: -INFINITY +native_color: ip-10.0.0.109 allocation score on galera-bundle-2: -INFINITY +native_color: ip-10.0.0.109 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: ip-10.0.0.109 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: ip-10.0.0.109 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: ip-10.0.0.109 allocation score on redis-bundle-0: -INFINITY +native_color: ip-10.0.0.109 allocation score on redis-bundle-1: -INFINITY +native_color: ip-10.0.0.109 allocation score on redis-bundle-2: -INFINITY +native_color: ip-172.17.1.14 allocation score on controller-0: -INFINITY +native_color: ip-172.17.1.14 allocation score on controller-1: 0 +native_color: ip-172.17.1.14 allocation score on controller-2: INFINITY +native_color: ip-172.17.1.14 allocation score on galera-bundle-0: -INFINITY +native_color: ip-172.17.1.14 allocation score on galera-bundle-1: -INFINITY +native_color: ip-172.17.1.14 allocation score on galera-bundle-2: -INFINITY +native_color: ip-172.17.1.14 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: ip-172.17.1.14 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: ip-172.17.1.14 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: ip-172.17.1.14 allocation score on redis-bundle-0: -INFINITY +native_color: ip-172.17.1.14 allocation score on redis-bundle-1: -INFINITY +native_color: ip-172.17.1.14 allocation score on redis-bundle-2: -INFINITY +native_color: ip-172.17.1.19 allocation score on controller-0: -INFINITY +native_color: ip-172.17.1.19 allocation score on controller-1: 0 +native_color: ip-172.17.1.19 allocation score on controller-2: INFINITY +native_color: ip-172.17.1.19 allocation score on galera-bundle-0: -INFINITY +native_color: ip-172.17.1.19 allocation score on galera-bundle-1: -INFINITY +native_color: ip-172.17.1.19 allocation score on galera-bundle-2: -INFINITY +native_color: ip-172.17.1.19 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: ip-172.17.1.19 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: ip-172.17.1.19 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: ip-172.17.1.19 allocation score on redis-bundle-0: -INFINITY +native_color: ip-172.17.1.19 allocation score on redis-bundle-1: -INFINITY +native_color: ip-172.17.1.19 allocation score on redis-bundle-2: -INFINITY +native_color: ip-172.17.3.19 allocation score on controller-0: -INFINITY +native_color: ip-172.17.3.19 allocation score on controller-1: 0 +native_color: ip-172.17.3.19 allocation score on controller-2: INFINITY +native_color: ip-172.17.3.19 allocation score on galera-bundle-0: -INFINITY +native_color: ip-172.17.3.19 allocation score on galera-bundle-1: -INFINITY +native_color: ip-172.17.3.19 allocation score on galera-bundle-2: -INFINITY +native_color: ip-172.17.3.19 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: ip-172.17.3.19 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: ip-172.17.3.19 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: ip-172.17.3.19 allocation score on redis-bundle-0: -INFINITY +native_color: ip-172.17.3.19 allocation score on redis-bundle-1: -INFINITY +native_color: ip-172.17.3.19 allocation score on redis-bundle-2: -INFINITY +native_color: ip-172.17.4.11 allocation score on controller-0: -INFINITY +native_color: ip-172.17.4.11 allocation score on controller-1: 0 +native_color: ip-172.17.4.11 allocation score on controller-2: 0 +native_color: ip-172.17.4.11 allocation score on galera-bundle-0: -INFINITY +native_color: ip-172.17.4.11 allocation score on galera-bundle-1: -INFINITY +native_color: ip-172.17.4.11 allocation score on galera-bundle-2: -INFINITY +native_color: ip-172.17.4.11 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: ip-172.17.4.11 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: ip-172.17.4.11 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: ip-172.17.4.11 allocation score on redis-bundle-0: -INFINITY +native_color: ip-172.17.4.11 allocation score on redis-bundle-1: -INFINITY +native_color: ip-172.17.4.11 allocation score on redis-bundle-2: -INFINITY +native_color: ip-192.168.24.7 allocation score on controller-0: -INFINITY +native_color: ip-192.168.24.7 allocation score on controller-1: 0 +native_color: ip-192.168.24.7 allocation score on controller-2: 0 +native_color: ip-192.168.24.7 allocation score on galera-bundle-0: -INFINITY +native_color: ip-192.168.24.7 allocation score on galera-bundle-1: -INFINITY +native_color: ip-192.168.24.7 allocation score on galera-bundle-2: -INFINITY +native_color: ip-192.168.24.7 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: ip-192.168.24.7 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: ip-192.168.24.7 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: ip-192.168.24.7 allocation score on redis-bundle-0: -INFINITY +native_color: ip-192.168.24.7 allocation score on redis-bundle-1: -INFINITY +native_color: ip-192.168.24.7 allocation score on redis-bundle-2: -INFINITY +native_color: openstack-cinder-volume allocation score on controller-0: 0 +native_color: openstack-cinder-volume allocation score on controller-1: 0 +native_color: openstack-cinder-volume allocation score on controller-2: INFINITY +native_color: openstack-cinder-volume allocation score on galera-bundle-0: -INFINITY +native_color: openstack-cinder-volume allocation score on galera-bundle-1: -INFINITY +native_color: openstack-cinder-volume allocation score on galera-bundle-2: -INFINITY +native_color: openstack-cinder-volume allocation score on rabbitmq-bundle-0: -INFINITY +native_color: openstack-cinder-volume allocation score on rabbitmq-bundle-1: -INFINITY +native_color: openstack-cinder-volume allocation score on rabbitmq-bundle-2: -INFINITY +native_color: openstack-cinder-volume allocation score on redis-bundle-0: -INFINITY +native_color: openstack-cinder-volume allocation score on redis-bundle-1: -INFINITY +native_color: openstack-cinder-volume allocation score on redis-bundle-2: -INFINITY +native_color: rabbitmq-bundle-0 allocation score on controller-0: INFINITY +native_color: rabbitmq-bundle-0 allocation score on controller-1: 0 +native_color: rabbitmq-bundle-0 allocation score on controller-2: 0 +native_color: rabbitmq-bundle-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq-bundle-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq-bundle-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq-bundle-1 allocation score on controller-0: 0 +native_color: rabbitmq-bundle-1 allocation score on controller-1: INFINITY +native_color: rabbitmq-bundle-1 allocation score on controller-2: 0 +native_color: rabbitmq-bundle-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq-bundle-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq-bundle-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq-bundle-2 allocation score on controller-0: 0 +native_color: rabbitmq-bundle-2 allocation score on controller-1: 0 +native_color: rabbitmq-bundle-2 allocation score on controller-2: INFINITY +native_color: rabbitmq-bundle-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq-bundle-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq-bundle-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq-bundle-docker-0 allocation score on controller-0: -INFINITY +native_color: rabbitmq-bundle-docker-0 allocation score on controller-1: -INFINITY +native_color: rabbitmq-bundle-docker-0 allocation score on controller-2: -INFINITY +native_color: rabbitmq-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq-bundle-docker-1 allocation score on controller-0: -INFINITY +native_color: rabbitmq-bundle-docker-1 allocation score on controller-1: INFINITY +native_color: rabbitmq-bundle-docker-1 allocation score on controller-2: 0 +native_color: rabbitmq-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq-bundle-docker-2 allocation score on controller-0: -INFINITY +native_color: rabbitmq-bundle-docker-2 allocation score on controller-1: -INFINITY +native_color: rabbitmq-bundle-docker-2 allocation score on controller-2: INFINITY +native_color: rabbitmq-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq:0 allocation score on controller-0: -INFINITY +native_color: rabbitmq:0 allocation score on controller-1: -INFINITY +native_color: rabbitmq:0 allocation score on controller-2: -INFINITY +native_color: rabbitmq:0 allocation score on rabbitmq-bundle-0: INFINITY +native_color: rabbitmq:0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq:0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq:1 allocation score on controller-0: -INFINITY +native_color: rabbitmq:1 allocation score on controller-1: -INFINITY +native_color: rabbitmq:1 allocation score on controller-2: -INFINITY +native_color: rabbitmq:1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq:1 allocation score on rabbitmq-bundle-1: INFINITY +native_color: rabbitmq:1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: rabbitmq:2 allocation score on controller-0: -INFINITY +native_color: rabbitmq:2 allocation score on controller-1: -INFINITY +native_color: rabbitmq:2 allocation score on controller-2: -INFINITY +native_color: rabbitmq:2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: rabbitmq:2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: rabbitmq:2 allocation score on rabbitmq-bundle-2: INFINITY +native_color: redis-bundle-0 allocation score on controller-0: INFINITY +native_color: redis-bundle-0 allocation score on controller-1: 0 +native_color: redis-bundle-0 allocation score on controller-2: 0 +native_color: redis-bundle-0 allocation score on galera-bundle-0: -INFINITY +native_color: redis-bundle-0 allocation score on galera-bundle-1: -INFINITY +native_color: redis-bundle-0 allocation score on galera-bundle-2: -INFINITY +native_color: redis-bundle-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis-bundle-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis-bundle-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis-bundle-0 allocation score on redis-bundle-0: -INFINITY +native_color: redis-bundle-0 allocation score on redis-bundle-1: -INFINITY +native_color: redis-bundle-0 allocation score on redis-bundle-2: -INFINITY +native_color: redis-bundle-1 allocation score on controller-0: 0 +native_color: redis-bundle-1 allocation score on controller-1: INFINITY +native_color: redis-bundle-1 allocation score on controller-2: 0 +native_color: redis-bundle-1 allocation score on galera-bundle-0: -INFINITY +native_color: redis-bundle-1 allocation score on galera-bundle-1: -INFINITY +native_color: redis-bundle-1 allocation score on galera-bundle-2: -INFINITY +native_color: redis-bundle-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis-bundle-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis-bundle-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis-bundle-1 allocation score on redis-bundle-0: -INFINITY +native_color: redis-bundle-1 allocation score on redis-bundle-1: -INFINITY +native_color: redis-bundle-1 allocation score on redis-bundle-2: -INFINITY +native_color: redis-bundle-2 allocation score on controller-0: 0 +native_color: redis-bundle-2 allocation score on controller-1: 0 +native_color: redis-bundle-2 allocation score on controller-2: INFINITY +native_color: redis-bundle-2 allocation score on galera-bundle-0: -INFINITY +native_color: redis-bundle-2 allocation score on galera-bundle-1: -INFINITY +native_color: redis-bundle-2 allocation score on galera-bundle-2: -INFINITY +native_color: redis-bundle-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis-bundle-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis-bundle-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis-bundle-2 allocation score on redis-bundle-0: -INFINITY +native_color: redis-bundle-2 allocation score on redis-bundle-1: -INFINITY +native_color: redis-bundle-2 allocation score on redis-bundle-2: -INFINITY +native_color: redis-bundle-docker-0 allocation score on controller-0: -INFINITY +native_color: redis-bundle-docker-0 allocation score on controller-1: -INFINITY +native_color: redis-bundle-docker-0 allocation score on controller-2: -INFINITY +native_color: redis-bundle-docker-0 allocation score on galera-bundle-0: -INFINITY +native_color: redis-bundle-docker-0 allocation score on galera-bundle-1: -INFINITY +native_color: redis-bundle-docker-0 allocation score on galera-bundle-2: -INFINITY +native_color: redis-bundle-docker-0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis-bundle-docker-0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis-bundle-docker-0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis-bundle-docker-0 allocation score on redis-bundle-0: -INFINITY +native_color: redis-bundle-docker-0 allocation score on redis-bundle-1: -INFINITY +native_color: redis-bundle-docker-0 allocation score on redis-bundle-2: -INFINITY +native_color: redis-bundle-docker-1 allocation score on controller-0: -INFINITY +native_color: redis-bundle-docker-1 allocation score on controller-1: INFINITY +native_color: redis-bundle-docker-1 allocation score on controller-2: 0 +native_color: redis-bundle-docker-1 allocation score on galera-bundle-0: -INFINITY +native_color: redis-bundle-docker-1 allocation score on galera-bundle-1: -INFINITY +native_color: redis-bundle-docker-1 allocation score on galera-bundle-2: -INFINITY +native_color: redis-bundle-docker-1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis-bundle-docker-1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis-bundle-docker-1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis-bundle-docker-1 allocation score on redis-bundle-0: -INFINITY +native_color: redis-bundle-docker-1 allocation score on redis-bundle-1: -INFINITY +native_color: redis-bundle-docker-1 allocation score on redis-bundle-2: -INFINITY +native_color: redis-bundle-docker-2 allocation score on controller-0: -INFINITY +native_color: redis-bundle-docker-2 allocation score on controller-1: -INFINITY +native_color: redis-bundle-docker-2 allocation score on controller-2: INFINITY +native_color: redis-bundle-docker-2 allocation score on galera-bundle-0: -INFINITY +native_color: redis-bundle-docker-2 allocation score on galera-bundle-1: -INFINITY +native_color: redis-bundle-docker-2 allocation score on galera-bundle-2: -INFINITY +native_color: redis-bundle-docker-2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis-bundle-docker-2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis-bundle-docker-2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis-bundle-docker-2 allocation score on redis-bundle-0: -INFINITY +native_color: redis-bundle-docker-2 allocation score on redis-bundle-1: -INFINITY +native_color: redis-bundle-docker-2 allocation score on redis-bundle-2: -INFINITY +native_color: redis:0 allocation score on controller-0: -INFINITY +native_color: redis:0 allocation score on controller-1: -INFINITY +native_color: redis:0 allocation score on controller-2: -INFINITY +native_color: redis:0 allocation score on galera-bundle-0: -INFINITY +native_color: redis:0 allocation score on galera-bundle-1: -INFINITY +native_color: redis:0 allocation score on galera-bundle-2: -INFINITY +native_color: redis:0 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis:0 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis:0 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis:0 allocation score on redis-bundle-0: INFINITY +native_color: redis:0 allocation score on redis-bundle-1: -INFINITY +native_color: redis:0 allocation score on redis-bundle-2: -INFINITY +native_color: redis:1 allocation score on controller-0: -INFINITY +native_color: redis:1 allocation score on controller-1: -INFINITY +native_color: redis:1 allocation score on controller-2: -INFINITY +native_color: redis:1 allocation score on galera-bundle-0: -INFINITY +native_color: redis:1 allocation score on galera-bundle-1: -INFINITY +native_color: redis:1 allocation score on galera-bundle-2: -INFINITY +native_color: redis:1 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis:1 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis:1 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis:1 allocation score on redis-bundle-0: -INFINITY +native_color: redis:1 allocation score on redis-bundle-1: INFINITY +native_color: redis:1 allocation score on redis-bundle-2: -INFINITY +native_color: redis:2 allocation score on controller-0: -INFINITY +native_color: redis:2 allocation score on controller-1: -INFINITY +native_color: redis:2 allocation score on controller-2: -INFINITY +native_color: redis:2 allocation score on galera-bundle-0: -INFINITY +native_color: redis:2 allocation score on galera-bundle-1: -INFINITY +native_color: redis:2 allocation score on galera-bundle-2: -INFINITY +native_color: redis:2 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: redis:2 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: redis:2 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: redis:2 allocation score on redis-bundle-0: -INFINITY +native_color: redis:2 allocation score on redis-bundle-1: -INFINITY +native_color: redis:2 allocation score on redis-bundle-2: INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on controller-0: INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on controller-1: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on controller-2: 0 +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on galera-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on galera-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on galera-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on rabbitmq-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on rabbitmq-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on rabbitmq-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on redis-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on redis-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-5254000dcb3f allocation score on redis-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on controller-0: INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on controller-1: 0 +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on controller-2: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on galera-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on galera-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on galera-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on rabbitmq-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on rabbitmq-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on rabbitmq-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on redis-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on redis-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-5254003e8e97 allocation score on redis-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on controller-0: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on controller-1: 0 +native_color: stonith-fence_ipmilan-525400efba5c allocation score on controller-2: INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on galera-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on galera-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on galera-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on rabbitmq-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on rabbitmq-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on rabbitmq-bundle-2: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on redis-bundle-0: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on redis-bundle-1: -INFINITY +native_color: stonith-fence_ipmilan-525400efba5c allocation score on redis-bundle-2: -INFINITY +redis:0 promotion score on redis-bundle-0: -1 +redis:1 promotion score on redis-bundle-1: 1 +redis:2 promotion score on redis-bundle-2: 1 diff --git a/pengine/test10/bundle-order-fencing.summary b/pengine/test10/bundle-order-fencing.summary new file mode 100644 index 0000000..e2128cb --- /dev/null +++ b/pengine/test10/bundle-order-fencing.summary @@ -0,0 +1,222 @@ +Using the original execution date of: 2017-09-12 10:51:59Z + +Current cluster status: +Node controller-0 (1): UNCLEAN (offline) +Online: [ controller-1 controller-2 ] +Containers: [ galera-bundle-1:galera-bundle-docker-1 galera-bundle-2:galera-bundle-docker-2 rabbitmq-bundle-1:rabbitmq-bundle-docker-1 rabbitmq-bundle-2:rabbitmq-bundle-docker-2 redis-bundle-1:redis-bundle-docker-1 redis-bundle-2:redis-bundle-docker-2 ] + + Docker container set: rabbitmq-bundle [192.168.24.1:8787/rhosp12/openstack-rabbitmq-docker:pcmklatest] + rabbitmq-bundle-0 (ocf::heartbeat:rabbitmq-cluster): FAILED controller-0 (UNCLEAN) + rabbitmq-bundle-1 (ocf::heartbeat:rabbitmq-cluster): Started controller-1 + rabbitmq-bundle-2 (ocf::heartbeat:rabbitmq-cluster): Started controller-2 + Docker container set: galera-bundle [192.168.24.1:8787/rhosp12/openstack-mariadb-docker:pcmklatest] + galera-bundle-0 (ocf::heartbeat:galera): FAILED Master controller-0 (UNCLEAN) + galera-bundle-1 (ocf::heartbeat:galera): Master controller-1 + galera-bundle-2 (ocf::heartbeat:galera): Master controller-2 + Docker container set: redis-bundle [192.168.24.1:8787/rhosp12/openstack-redis-docker:pcmklatest] + redis-bundle-0 (ocf::heartbeat:redis): FAILED Master controller-0 (UNCLEAN) + redis-bundle-1 (ocf::heartbeat:redis): Slave controller-1 + redis-bundle-2 (ocf::heartbeat:redis): Slave controller-2 + ip-192.168.24.7 (ocf::heartbeat:IPaddr2): Started controller-0 (UNCLEAN) + ip-10.0.0.109 (ocf::heartbeat:IPaddr2): Started controller-0 (UNCLEAN) + ip-172.17.1.14 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-172.17.1.19 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-172.17.3.19 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-172.17.4.11 (ocf::heartbeat:IPaddr2): Started controller-0 (UNCLEAN) + Docker container set: haproxy-bundle [192.168.24.1:8787/rhosp12/openstack-haproxy-docker:pcmklatest] + haproxy-bundle-docker-0 (ocf::heartbeat:docker): Started controller-0 (UNCLEAN) + haproxy-bundle-docker-1 (ocf::heartbeat:docker): Started controller-2 + haproxy-bundle-docker-2 (ocf::heartbeat:docker): Started controller-1 + openstack-cinder-volume (systemd:openstack-cinder-volume): Started controller-2 + stonith-fence_ipmilan-525400efba5c (stonith:fence_ipmilan): Started controller-2 + stonith-fence_ipmilan-5254003e8e97 (stonith:fence_ipmilan): Started controller-0 (UNCLEAN) + stonith-fence_ipmilan-5254000dcb3f (stonith:fence_ipmilan): Started controller-0 (UNCLEAN) + +Transition Summary: + * Fence (off) redis-bundle-0 (resource: redis-bundle-docker-0) 'guest is unclean' + * Fence (off) rabbitmq-bundle-0 (resource: rabbitmq-bundle-docker-0) 'guest is unclean' + * Fence (off) galera-bundle-0 (resource: galera-bundle-docker-0) 'guest is unclean' + * Fence (reboot) controller-0 'peer is no longer part of the cluster' + * Stop rabbitmq-bundle-docker-0 ( controller-0 ) due to node availability + * Stop rabbitmq-bundle-0 ( controller-0 ) due to unrunnable rabbitmq-bundle-docker-0 start + * Stop rabbitmq:0 ( rabbitmq-bundle-0 ) due to unrunnable rabbitmq-bundle-docker-0 start + * Stop galera-bundle-docker-0 ( controller-0 ) due to node availability + * Stop galera-bundle-0 ( controller-0 ) due to unrunnable galera-bundle-docker-0 start + * Stop galera:0 ( Master galera-bundle-0 ) due to unrunnable galera-bundle-docker-0 start + * Stop redis-bundle-docker-0 ( controller-0 ) due to node availability + * Stop redis-bundle-0 ( controller-0 ) due to unrunnable redis-bundle-docker-0 start + * Stop redis:0 ( Master redis-bundle-0 ) due to unrunnable redis-bundle-docker-0 start + * Promote redis:1 ( Slave -> Master redis-bundle-1 ) + * Move ip-192.168.24.7 ( controller-0 -> controller-2 ) + * Move ip-10.0.0.109 ( controller-0 -> controller-1 ) + * Move ip-172.17.4.11 ( controller-0 -> controller-1 ) + * Stop haproxy-bundle-docker-0 ( controller-0 ) due to node availability + * Move stonith-fence_ipmilan-5254003e8e97 ( controller-0 -> controller-1 ) + * Move stonith-fence_ipmilan-5254000dcb3f ( controller-0 -> controller-2 ) + +Executing cluster transition: + * Pseudo action: rabbitmq-bundle-clone_pre_notify_stop_0 + * Resource action: redis cancel=45000 on redis-bundle-1 + * Resource action: redis cancel=60000 on redis-bundle-1 + * Pseudo action: redis-bundle-master_pre_notify_demote_0 + * Pseudo action: stonith-fence_ipmilan-5254003e8e97_stop_0 + * Pseudo action: stonith-fence_ipmilan-5254000dcb3f_stop_0 + * Pseudo action: haproxy-bundle_stop_0 + * Pseudo action: redis-bundle_demote_0 + * Pseudo action: galera-bundle_demote_0 + * Pseudo action: rabbitmq-bundle_stop_0 + * Pseudo action: rabbitmq-bundle_start_0 + * Fencing controller-0 (reboot) + * Resource action: rabbitmq notify on rabbitmq-bundle-1 + * Resource action: rabbitmq notify on rabbitmq-bundle-2 + * Pseudo action: rabbitmq-bundle-clone_confirmed-pre_notify_stop_0 + * Pseudo action: rabbitmq-bundle-0_stop_0 + * Pseudo action: galera-bundle-master_demote_0 + * Pseudo action: galera-bundle-0_stop_0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-pre_notify_demote_0 + * Pseudo action: redis-bundle-master_demote_0 + * Pseudo action: redis-bundle-0_stop_0 + * Pseudo action: haproxy-bundle-docker-0_stop_0 + * Pseudo action: stonith-redis-bundle-0-off on redis-bundle-0 + * Pseudo action: stonith-rabbitmq-bundle-0-off on rabbitmq-bundle-0 + * Pseudo action: stonith-galera-bundle-0-off on galera-bundle-0 + * Pseudo action: stonith_complete + * Pseudo action: haproxy-bundle_stopped_0 + * Pseudo action: rabbitmq_post_notify_stop_0 + * Pseudo action: rabbitmq-bundle-clone_stop_0 + * Pseudo action: rabbitmq-bundle-docker-0_stop_0 + * Pseudo action: galera_demote_0 + * Pseudo action: galera-bundle-master_demoted_0 + * Pseudo action: redis_post_notify_stop_0 + * Pseudo action: redis_demote_0 + * Pseudo action: redis-bundle-master_demoted_0 + * Pseudo action: ip-192.168.24.7_stop_0 + * Pseudo action: ip-10.0.0.109_stop_0 + * Pseudo action: ip-172.17.4.11_stop_0 + * Pseudo action: galera-bundle_demoted_0 + * Pseudo action: galera-bundle_stop_0 + * Pseudo action: rabbitmq_stop_0 + * Pseudo action: rabbitmq-bundle-clone_stopped_0 + * Pseudo action: galera-bundle-master_stop_0 + * Pseudo action: galera-bundle-docker-0_stop_0 + * Pseudo action: redis-bundle-master_post_notify_demoted_0 + * Resource action: ip-192.168.24.7 start on controller-2 + * Resource action: ip-10.0.0.109 start on controller-1 + * Resource action: ip-172.17.4.11 start on controller-1 + * Pseudo action: rabbitmq-bundle-clone_post_notify_stopped_0 + * Pseudo action: galera_stop_0 + * Pseudo action: galera-bundle-master_stopped_0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-post_notify_demoted_0 + * Pseudo action: redis-bundle-master_pre_notify_stop_0 + * Resource action: ip-192.168.24.7 monitor=10000 on controller-2 + * Resource action: ip-10.0.0.109 monitor=10000 on controller-1 + * Resource action: ip-172.17.4.11 monitor=10000 on controller-1 + * Pseudo action: redis-bundle_demoted_0 + * Pseudo action: redis-bundle_stop_0 + * Pseudo action: galera-bundle_stopped_0 + * Pseudo action: galera-bundle_start_0 + * Resource action: rabbitmq notify on rabbitmq-bundle-1 + * Resource action: rabbitmq notify on rabbitmq-bundle-2 + * Pseudo action: rabbitmq-bundle-clone_confirmed-post_notify_stopped_0 + * Pseudo action: rabbitmq-bundle-clone_pre_notify_start_0 + * Pseudo action: galera-bundle-master_start_0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-pre_notify_stop_0 + * Pseudo action: redis-bundle-master_stop_0 + * Pseudo action: redis-bundle-docker-0_stop_0 + * Pseudo action: rabbitmq-bundle_stopped_0 + * Pseudo action: rabbitmq_notified_0 + * Resource action: rabbitmq notify on rabbitmq-bundle-1 + * Resource action: rabbitmq notify on rabbitmq-bundle-2 + * Pseudo action: rabbitmq-bundle-clone_confirmed-pre_notify_start_0 + * Pseudo action: rabbitmq-bundle-clone_start_0 + * Pseudo action: galera-bundle-master_running_0 + * Pseudo action: redis_stop_0 + * Pseudo action: redis-bundle-master_stopped_0 + * Pseudo action: galera-bundle_running_0 + * Pseudo action: rabbitmq-bundle-clone_running_0 + * Pseudo action: redis-bundle-master_post_notify_stopped_0 + * Pseudo action: rabbitmq-bundle-clone_post_notify_running_0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-post_notify_stopped_0 + * Pseudo action: redis-bundle-master_pre_notify_start_0 + * Pseudo action: redis-bundle_stopped_0 + * Pseudo action: redis-bundle_start_0 + * Resource action: rabbitmq notify on rabbitmq-bundle-0 + * Resource action: rabbitmq notify on rabbitmq-bundle-1 + * Resource action: rabbitmq notify on rabbitmq-bundle-2 + * Pseudo action: rabbitmq-bundle-clone_confirmed-post_notify_running_0 + * Pseudo action: redis_notified_0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-pre_notify_start_0 + * Pseudo action: redis-bundle-master_start_0 + * Pseudo action: rabbitmq-bundle_running_0 + * Pseudo action: all_stopped + * Pseudo action: redis-bundle-master_running_0 + * Resource action: stonith-fence_ipmilan-5254003e8e97 start on controller-1 + * Resource action: stonith-fence_ipmilan-5254000dcb3f start on controller-2 + * Pseudo action: redis-bundle-master_post_notify_running_0 + * Resource action: stonith-fence_ipmilan-5254003e8e97 monitor=60000 on controller-1 + * Resource action: stonith-fence_ipmilan-5254000dcb3f monitor=60000 on controller-2 + * Resource action: redis notify on redis-bundle-0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-post_notify_running_0 + * Pseudo action: redis-bundle_running_0 + * Pseudo action: redis-bundle-master_pre_notify_promote_0 + * Pseudo action: redis-bundle_promote_0 + * Resource action: redis notify on redis-bundle-0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-pre_notify_promote_0 + * Pseudo action: redis-bundle-master_promote_0 + * Resource action: redis promote on redis-bundle-1 + * Pseudo action: redis-bundle-master_promoted_0 + * Pseudo action: redis-bundle-master_post_notify_promoted_0 + * Resource action: redis notify on redis-bundle-0 + * Resource action: redis notify on redis-bundle-1 + * Resource action: redis notify on redis-bundle-2 + * Pseudo action: redis-bundle-master_confirmed-post_notify_promoted_0 + * Pseudo action: redis-bundle_promoted_0 + * Resource action: redis monitor=20000 on redis-bundle-1 +Using the original execution date of: 2017-09-12 10:51:59Z + +Revised cluster status: +Online: [ controller-1 controller-2 ] +OFFLINE: [ controller-0 ] +Containers: [ galera-bundle-1:galera-bundle-docker-1 galera-bundle-2:galera-bundle-docker-2 rabbitmq-bundle-1:rabbitmq-bundle-docker-1 rabbitmq-bundle-2:rabbitmq-bundle-docker-2 redis-bundle-1:redis-bundle-docker-1 redis-bundle-2:redis-bundle-docker-2 ] + + Docker container set: rabbitmq-bundle [192.168.24.1:8787/rhosp12/openstack-rabbitmq-docker:pcmklatest] + rabbitmq-bundle-0 (ocf::heartbeat:rabbitmq-cluster): FAILED + rabbitmq-bundle-1 (ocf::heartbeat:rabbitmq-cluster): Started controller-1 + rabbitmq-bundle-2 (ocf::heartbeat:rabbitmq-cluster): Started controller-2 + Docker container set: galera-bundle [192.168.24.1:8787/rhosp12/openstack-mariadb-docker:pcmklatest] + galera-bundle-0 (ocf::heartbeat:galera): FAILED Master + galera-bundle-1 (ocf::heartbeat:galera): Master controller-1 + galera-bundle-2 (ocf::heartbeat:galera): Master controller-2 + Docker container set: redis-bundle [192.168.24.1:8787/rhosp12/openstack-redis-docker:pcmklatest] + redis-bundle-0 (ocf::heartbeat:redis): FAILED Master + redis-bundle-1 (ocf::heartbeat:redis): Master controller-1 + redis-bundle-2 (ocf::heartbeat:redis): Slave controller-2 + ip-192.168.24.7 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-10.0.0.109 (ocf::heartbeat:IPaddr2): Started controller-1 + ip-172.17.1.14 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-172.17.1.19 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-172.17.3.19 (ocf::heartbeat:IPaddr2): Started controller-2 + ip-172.17.4.11 (ocf::heartbeat:IPaddr2): Started controller-1 + Docker container set: haproxy-bundle [192.168.24.1:8787/rhosp12/openstack-haproxy-docker:pcmklatest] + haproxy-bundle-docker-0 (ocf::heartbeat:docker): Stopped + haproxy-bundle-docker-1 (ocf::heartbeat:docker): Started controller-2 + haproxy-bundle-docker-2 (ocf::heartbeat:docker): Started controller-1 + openstack-cinder-volume (systemd:openstack-cinder-volume): Started controller-2 + stonith-fence_ipmilan-525400efba5c (stonith:fence_ipmilan): Started controller-2 + stonith-fence_ipmilan-5254003e8e97 (stonith:fence_ipmilan): Started controller-1 + stonith-fence_ipmilan-5254000dcb3f (stonith:fence_ipmilan): Started controller-2 + diff --git a/pengine/test10/bundle-order-fencing.xml b/pengine/test10/bundle-order-fencing.xml new file mode 100644 index 0000000..b303116 --- /dev/null +++ b/pengine/test10/bundle-order-fencing.xml @@ -0,0 +1,799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 1.8.3.1 From 14583c664638d17a14bccfd130739c7242f5cec4 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Wed, 20 Sep 2017 21:53:00 +1000 Subject: [PATCH 10/21] Fix: PE: Resources in bundles should also respect failcounts --- pengine/container.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/pengine/container.c b/pengine/container.c index 1e9b971..0e556bb 100644 --- a/pengine/container.c +++ b/pengine/container.c @@ -74,6 +74,38 @@ static GListPtr get_containers_or_children(resource_t *rsc) } } +static bool +migration_threshold_reached(resource_t *rsc, node_t *node, + pe_working_set_t *data_set) +{ + int fail_count, countdown; + + /* Migration threshold of 0 means never force away */ + if (rsc->migration_threshold == 0) { + return FALSE; + } + + /* If there are no failures, there's no need to force away */ + fail_count = get_failcount_all(node, rsc, NULL, data_set); + if (fail_count <= 0) { + return FALSE; + } + + /* How many more times recovery will be tried on this node */ + countdown = QB_MAX(rsc->migration_threshold - fail_count, 0); + + if (countdown == 0) { + crm_warn("Forcing %s away from %s after %d failures (max=%d)", + rsc->id, node->details->uname, fail_count, + rsc->migration_threshold); + return TRUE; + } + + crm_info("%s can fail %d more times on %s before being forced off", + rsc->id, countdown, node->details->uname); + return FALSE; +} + node_t * container_color(resource_t * rsc, node_t * prefer, pe_working_set_t * data_set) { @@ -128,7 +160,7 @@ container_color(resource_t * rsc, node_t * prefer, pe_working_set_t * data_set) while (g_hash_table_iter_next(&iter, NULL, (gpointer *) & node)) { if(node->details != tuple->node->details) { node->weight = -INFINITY; - } else { + } else if(migration_threshold_reached(tuple->child, node, data_set) == FALSE) { node->weight = INFINITY; } } @@ -158,6 +190,7 @@ container_color(resource_t * rsc, node_t * prefer, pe_working_set_t * data_set) return NULL; } + void container_create_actions(resource_t * rsc, pe_working_set_t * data_set) { -- 1.8.3.1 From 1eacc741d04098d24b97631a273501ef0aff2fc1 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Thu, 21 Sep 2017 20:59:16 +1000 Subject: [PATCH 11/21] crm_resource: Do not send history erasure commands for nodes where this is none If a resource is not known on a given node, thats because we have no operation history for it there. So there is no benefit to requesting a cleanup for that resource/node combination. --- tools/crm_resource_runtime.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c index 8f9ae0d..210ea7d 100644 --- a/tools/crm_resource_runtime.c +++ b/tools/crm_resource_runtime.c @@ -573,7 +573,7 @@ send_lrm_rsc_op(crm_ipc_t * crmd_channel, const char *op, rc = 0; } else { - CMD_ERR("Could not send %s op to the crmd", op); + crm_debug("Could not send %s op to the crmd", op); rc = -ENOTCONN; } @@ -627,8 +627,9 @@ cli_resource_delete(crm_ipc_t *crmd_channel, const char *host_uname, } else if (host_uname == NULL) { GListPtr lpc = NULL; + GListPtr nodes = g_hash_table_get_values(rsc->known_on); - for (lpc = data_set->nodes; lpc != NULL; lpc = lpc->next) { + for (lpc = nodes; lpc != NULL; lpc = lpc->next) { node = (node_t *) lpc->data; if (node->details->online) { @@ -637,6 +638,7 @@ cli_resource_delete(crm_ipc_t *crmd_channel, const char *host_uname, } } + g_list_free(nodes); return pcmk_ok; } -- 1.8.3.1 From e10299600e87356114dbb96df981c2ff196b8f9e Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Fri, 22 Sep 2017 19:51:35 +1000 Subject: [PATCH 12/21] Log: attrd: Tweak log messages for clarity --- attrd/commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/attrd/commands.c b/attrd/commands.c index 6f40d60..96a1167 100644 --- a/attrd/commands.c +++ b/attrd/commands.c @@ -670,12 +670,12 @@ attrd_peer_remove(const char *host, gboolean uncache, const char *source) GHashTableIter aIter; CRM_CHECK(host != NULL, return); - crm_notice("Removing all %s attributes for %s", host, source); + crm_notice("Removing all %s attributes for peer %s", host, source); g_hash_table_iter_init(&aIter, attributes); while (g_hash_table_iter_next(&aIter, NULL, (gpointer *) & a)) { if(g_hash_table_remove(a->values, host)) { - crm_debug("Removed %s[%s] for %s", a->id, host, source); + crm_debug("Removed %s[%s] for peer %s", a->id, host, source); } } -- 1.8.3.1 From e4bd6faed4481c10befd65e5c8315d81d5e8e43d Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Fri, 22 Sep 2017 20:03:02 +1000 Subject: [PATCH 13/21] PE: Revert e21a4d00 since we will support probing remote connections Also it causes containers to be unnecessarily restarted when the admin triggers a cleanup. --- lib/pengine/unpack.c | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c index 6e0651e..859d638 100644 --- a/lib/pengine/unpack.c +++ b/lib/pengine/unpack.c @@ -2342,9 +2342,6 @@ unpack_lrm_resources(node_t * node, xmlNode * lrm_rsc_list, pe_working_set_t * d { xmlNode *rsc_entry = NULL; gboolean found_orphaned_container_filler = FALSE; - GListPtr unexpected_containers = NULL; - GListPtr gIter = NULL; - resource_t *remote = NULL; CRM_CHECK(node != NULL, return FALSE); @@ -2354,31 +2351,13 @@ unpack_lrm_resources(node_t * node, xmlNode * lrm_rsc_list, pe_working_set_t * d rsc_entry = __xml_next_element(rsc_entry)) { if (crm_str_eq((const char *)rsc_entry->name, XML_LRM_TAG_RESOURCE, TRUE)) { - resource_t *rsc; - rsc = unpack_lrm_rsc_state(node, rsc_entry, data_set); + resource_t *rsc = unpack_lrm_rsc_state(node, rsc_entry, data_set); if (!rsc) { continue; } if (is_set(rsc->flags, pe_rsc_orphan_container_filler)) { found_orphaned_container_filler = TRUE; } - if (is_set(rsc->flags, pe_rsc_unexpectedly_running)) { - remote = rsc_contains_remote_node(data_set, rsc); - if (remote) { - unexpected_containers = g_list_append(unexpected_containers, remote); - } - } - } - } - - /* If a container resource is unexpectedly up... and the remote-node - * connection resource for that container is not up, the entire container - * must be recovered. */ - for (gIter = unexpected_containers; gIter != NULL; gIter = gIter->next) { - remote = (resource_t *) gIter->data; - if (remote->role != RSC_ROLE_STARTED) { - crm_warn("Recovering container resource %s. Resource is unexpectedly running and involves a remote-node.", remote->container->id); - set_bit(remote->container->flags, pe_rsc_failed); } } @@ -2388,7 +2367,6 @@ unpack_lrm_resources(node_t * node, xmlNode * lrm_rsc_list, pe_working_set_t * d if (found_orphaned_container_filler) { handle_orphaned_container_fillers(lrm_rsc_list, data_set); } - g_list_free(unexpected_containers); return TRUE; } -- 1.8.3.1 From 12d453ccfa3a3a36456e6c2985f65137fde2a01d Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Mon, 25 Sep 2017 17:48:40 +1000 Subject: [PATCH 14/21] PE: Implement probing of container remote nodes --- include/crm/pengine/status.h | 7 + lib/pengine/container.c | 3 + pengine/allocate.c | 3 +- pengine/native.c | 71 +++- pengine/pengine.h | 6 - pengine/test10/bug-cl-5247.dot | 6 + pengine/test10/bug-cl-5247.exp | 346 +++++++++------- pengine/test10/bug-cl-5247.summary | 2 + pengine/test10/bug-rh-1097457.dot | 32 ++ pengine/test10/bug-rh-1097457.exp | 456 +++++++++++++++------ pengine/test10/bug-rh-1097457.summary | 20 + pengine/test10/bundle-order-partial-start-2.dot | 2 + pengine/test10/bundle-order-partial-start-2.exp | 282 +++++++------ .../test10/bundle-order-partial-start-2.summary | 1 + pengine/test10/bundle-order-partial-start.dot | 2 + pengine/test10/bundle-order-partial-start.exp | 272 ++++++------ pengine/test10/bundle-order-partial-start.summary | 1 + pengine/test10/bundle-order-startup.exp | 8 +- pengine/test10/container-is-remote-node.dot | 4 + pengine/test10/container-is-remote-node.exp | 39 +- pengine/test10/container-is-remote-node.summary | 4 + pengine/test10/guest-node-host-dies.dot | 2 + pengine/test10/guest-node-host-dies.exp | 6 + pengine/test10/whitebox-asymmetric.dot | 4 + pengine/test10/whitebox-asymmetric.exp | 48 ++- pengine/test10/whitebox-asymmetric.summary | 2 + pengine/test10/whitebox-fail1.dot | 5 + pengine/test10/whitebox-fail1.exp | 145 ++++--- pengine/test10/whitebox-fail1.summary | 3 + pengine/test10/whitebox-fail2.dot | 5 + pengine/test10/whitebox-fail2.exp | 145 ++++--- pengine/test10/whitebox-fail2.summary | 3 + pengine/test10/whitebox-fail3.dot | 3 + pengine/test10/whitebox-fail3.exp | 15 +- pengine/test10/whitebox-fail3.summary | 4 +- pengine/test10/whitebox-imply-stop-on-fence.dot | 19 + pengine/test10/whitebox-imply-stop-on-fence.exp | 325 ++++++++++----- .../test10/whitebox-imply-stop-on-fence.summary | 8 + pengine/test10/whitebox-migrate1.dot | 1 + pengine/test10/whitebox-move.dot | 3 + pengine/test10/whitebox-move.exp | 108 ++--- pengine/test10/whitebox-move.summary | 3 +- pengine/test10/whitebox-ms-ordering-move.dot | 12 + pengine/test10/whitebox-ms-ordering-move.exp | 294 ++++++++----- pengine/test10/whitebox-ms-ordering-move.summary | 12 + pengine/test10/whitebox-nested-group.dot | 21 + pengine/test10/whitebox-nested-group.exp | 66 ++- pengine/test10/whitebox-nested-group.summary | 16 +- pengine/test10/whitebox-orphan-ms.dot | 18 + pengine/test10/whitebox-orphan-ms.exp | 92 ++--- pengine/test10/whitebox-orphaned.dot | 8 + pengine/test10/whitebox-orphaned.exp | 120 ++++-- pengine/test10/whitebox-orphaned.summary | 9 +- pengine/test10/whitebox-start.dot | 4 + pengine/test10/whitebox-start.exp | 99 +++-- pengine/test10/whitebox-start.summary | 10 +- pengine/test10/whitebox-stop.dot | 5 + pengine/test10/whitebox-stop.exp | 82 ++-- pengine/test10/whitebox-stop.summary | 9 +- pengine/test10/whitebox-unexpectedly-running.dot | 24 +- pengine/test10/whitebox-unexpectedly-running.exp | 112 +++-- .../test10/whitebox-unexpectedly-running.scores | 8 + .../test10/whitebox-unexpectedly-running.summary | 23 +- pengine/test10/whitebox-unexpectedly-running.xml | 11 + 64 files changed, 2322 insertions(+), 1157 deletions(-) diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h index fcd5226..dc5f6eb 100644 --- a/include/crm/pengine/status.h +++ b/include/crm/pengine/status.h @@ -395,6 +395,13 @@ enum pe_link_state { pe_link_dup, }; + +enum rsc_discover_e { + discover_always = 0, + discover_never, + discover_exclusive, +}; + /* *INDENT-OFF* */ enum pe_ordering { pe_order_none = 0x0, /* deleted */ diff --git a/lib/pengine/container.c b/lib/pengine/container.c index 5831b58..a550ff3 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -348,6 +348,7 @@ disallow_node(resource_t *rsc, const char *uname) if (match) { ((pe_node_t *) match)->weight = -INFINITY; + ((pe_node_t *) match)->rsc_discover_mode = discover_never; } if (rsc->children) { GListPtr child; @@ -434,6 +435,7 @@ create_remote_resource( } else { node->weight = -INFINITY; } + node->rsc_discover_mode = discover_never; /* unpack_remote_nodes() ensures that each remote node and guest node * has a pe_node_t entry. Ideally, it would do the same for bundle nodes. @@ -458,6 +460,7 @@ create_remote_resource( tuple->node = node_copy(node); tuple->node->weight = 500; + tuple->node->rsc_discover_mode = discover_exclusive; if (common_unpack(xml_remote, &tuple->remote, parent, data_set) == FALSE) { return FALSE; diff --git a/pengine/allocate.c b/pengine/allocate.c index d610035..401c18e 100644 --- a/pengine/allocate.c +++ b/pengine/allocate.c @@ -900,8 +900,7 @@ probe_resources(pe_working_set_t * data_set) const char *probed = node_attribute_raw(node, CRM_OP_PROBED); if (is_container_remote_node(node)) { - /* TODO enable guest node probes once ordered probing is implemented */ - continue; + /* Guest node probes and their ordering requirements are now functional */ } else if (node->details->online == FALSE && node->details->remote_rsc) { enum remote_connection_state state = get_remote_node_state(node); diff --git a/pengine/native.c b/pengine/native.c index 37cf541..2e40a4c 100644 --- a/pengine/native.c +++ b/pengine/native.c @@ -2784,10 +2784,6 @@ native_create_probe(resource_t * rsc, node_t * node, action_t * complete, if (force == FALSE && is_not_set(data_set->flags, pe_flag_startup_probes)) { pe_rsc_trace(rsc, "Skipping active resource detection for %s", rsc->id); return FALSE; - } else if (force == FALSE && is_container_remote_node(node)) { - pe_rsc_trace(rsc, "Skipping active resource detection for %s on container %s", - rsc->id, node->details->id); - return FALSE; } if (is_remote_node(node)) { @@ -2847,6 +2843,7 @@ native_create_probe(resource_t * rsc, node_t * node, action_t * complete, } allowed = g_hash_table_lookup(rsc->allowed_nodes, node->details->id); + if (rsc->exclusive_discover || top->exclusive_discover) { if (allowed == NULL) { /* exclusive discover is enabled and this node is not in the allowed list. */ @@ -2857,11 +2854,77 @@ native_create_probe(resource_t * rsc, node_t * node, action_t * complete, return FALSE; } } + + if(allowed == NULL && node->rsc_discover_mode == discover_never) { + /* If this node was allowed to host this resource it would + * have been explicitly added to the 'allowed_nodes' list. + * However it wasn't and the node has discovery disabled, so + * no need to probe for this resource. + */ + return FALSE; + } + if (allowed && allowed->rsc_discover_mode == discover_never) { /* this resource is marked as not needing to be discovered on this node */ return FALSE; } + if(allowed != NULL && is_container_remote_node(allowed)) { + resource_t *remote = allowed->details->remote_rsc; + + if(remote->role == RSC_ROLE_STOPPED) { + /* If the container is stopped, then we know anything that + * might have been inside it is also stopped and there is + * no need to probe. + * + * If we don't know the container's state on the target + * either: + * + * - the container is running, the transition will abort + * and we'll end up in a different case next time, or + * + * - the container is stopped + * + * Either way there is no need to probe. + * + */ + if(remote->allocated_to + && g_hash_table_lookup(remote->known_on, remote->allocated_to->details->id) == NULL) { + /* For safety, we order the 'rsc' start after 'remote' + * has been probed. + * + * Using 'top' helps for groups, but in we may need to + * follow the start's ordering chain backwards. + */ + custom_action_order(remote, generate_op_key(remote->id, RSC_STATUS, 0), NULL, + top, generate_op_key(top->id, RSC_START, 0), NULL, + pe_order_optional, data_set); + } + return FALSE; + + /* Here we really we want to check if remote->stop is required, + * but that information doesn't exist yet + */ + } else if(allowed->details->remote_requires_reset + || allowed->details->unclean + || is_set(remote->flags, pe_rsc_failed) + || remote->next_role == RSC_ROLE_STOPPED + || (remote->allocated_to + && pe_find_node(remote->running_on, remote->allocated_to->details->uname) == NULL) + ) { + /* The container is stopping or restarting, don't start + * 'rsc' until 'remote' stops as this also implies that + * 'rsc' is stopped - avoiding the need to probe + */ + custom_action_order(remote, generate_op_key(remote->id, RSC_STOP, 0), NULL, + top, generate_op_key(top->id, RSC_START, 0), NULL, + pe_order_optional, data_set); + return FALSE; +/* } else { + * The container is running so there is no problem probing it + */ + } + } key = generate_op_key(rsc->id, RSC_STATUS, 0); probe = custom_action(rsc, key, RSC_STATUS, node, FALSE, TRUE, data_set); diff --git a/pengine/pengine.h b/pengine/pengine.h index e3f4874..2c13258 100644 --- a/pengine/pengine.h +++ b/pengine/pengine.h @@ -75,12 +75,6 @@ struct rsc_ticket_s { int role_lh; }; -enum rsc_discover_e { - discover_always = 0, - discover_never, - discover_exclusive, -}; - struct rsc_to_node_s { char *id; resource_t *rsc_lh; diff --git a/pengine/test10/bug-cl-5247.dot b/pengine/test10/bug-cl-5247.dot index 44f788d..decf5c3 100644 --- a/pengine/test10/bug-cl-5247.dot +++ b/pengine/test10/bug-cl-5247.dot @@ -127,6 +127,9 @@ digraph "g" { "stonith_complete" -> "vip-master_start_0 pgsr01" [ style = bold] "stonith_complete" -> "vip-rep_start_0 pgsr01" [ style = bold] "stonith_complete" [ style=bold color="green" fontcolor="orange"] +"vip-master_monitor_0 pgsr01" -> "vip-master_start_0 pgsr01" [ style = bold] +"vip-master_monitor_0 pgsr01" -> "vip-master_stop_0 pgsr02" [ style = bold] +"vip-master_monitor_0 pgsr01" [ style=bold color="green" fontcolor="black"] "vip-master_monitor_10000 pgsr01" [ style=bold color="green" fontcolor="black"] "vip-master_start_0 pgsr01" -> "master-group_running_0" [ style = bold] "vip-master_start_0 pgsr01" -> "vip-master_monitor_10000 pgsr01" [ style = bold] @@ -136,6 +139,9 @@ digraph "g" { "vip-master_stop_0 pgsr02" -> "master-group_stopped_0" [ style = bold] "vip-master_stop_0 pgsr02" -> "vip-master_start_0 pgsr01" [ style = bold] "vip-master_stop_0 pgsr02" [ style=bold color="green" fontcolor="orange"] +"vip-rep_monitor_0 pgsr01" -> "vip-rep_start_0 pgsr01" [ style = bold] +"vip-rep_monitor_0 pgsr01" -> "vip-rep_stop_0 pgsr02" [ style = bold] +"vip-rep_monitor_0 pgsr01" [ style=bold color="green" fontcolor="black"] "vip-rep_monitor_10000 pgsr01" [ style=bold color="green" fontcolor="black"] "vip-rep_start_0 pgsr01" -> "master-group_running_0" [ style = bold] "vip-rep_start_0 pgsr01" -> "vip-rep_monitor_10000 pgsr01" [ style = bold] diff --git a/pengine/test10/bug-cl-5247.exp b/pengine/test10/bug-cl-5247.exp index 2ec83c0..47c369a 100644 --- a/pengine/test10/bug-cl-5247.exp +++ b/pengine/test10/bug-cl-5247.exp @@ -8,28 +8,28 @@ - + - + - + - + - + @@ -37,7 +37,7 @@ - + @@ -46,32 +46,32 @@ - + - + - + - + - + @@ -87,10 +87,10 @@ - + - + @@ -109,22 +109,22 @@ - + - + - + - + @@ -132,7 +132,7 @@ - + @@ -141,32 +141,32 @@ - + - + - + - + - + @@ -182,10 +182,10 @@ - + - + @@ -204,472 +204,502 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + + + + - + - + - + + + + + + + + + + - + - + - + - + + + + - + - + - + - + - + - + + + + - + - + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -678,9 +708,9 @@ - + - + @@ -694,7 +724,7 @@ - + @@ -703,9 +733,9 @@ - + - + @@ -718,19 +748,19 @@ - + - + - + - + @@ -741,31 +771,31 @@ - + - + - + - + - + - + - + - + - + diff --git a/pengine/test10/bug-cl-5247.summary b/pengine/test10/bug-cl-5247.summary index 3e5511d..f15ef2e 100644 --- a/pengine/test10/bug-cl-5247.summary +++ b/pengine/test10/bug-cl-5247.summary @@ -32,6 +32,8 @@ Executing cluster transition: * Resource action: prmStonith1-2 stop on bl460g8n4 * Pseudo action: grpStonith2_stop_0 * Resource action: prmStonith2-2 stop on bl460g8n3 + * Resource action: vip-master monitor on pgsr01 + * Resource action: vip-rep monitor on pgsr01 * Pseudo action: msPostgresql_pre_notify_demote_0 * Resource action: pgsr01 monitor on bl460g8n4 * Resource action: pgsr02 monitor on bl460g8n3 diff --git a/pengine/test10/bug-rh-1097457.dot b/pengine/test10/bug-rh-1097457.dot index e74c8fb..7791e06 100644 --- a/pengine/test10/bug-rh-1097457.dot +++ b/pengine/test10/bug-rh-1097457.dot @@ -1,4 +1,16 @@ digraph "g" { +"FAKE1-IP_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE1_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE2-IP_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE2_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE3-IP_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE3_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE4-IP_monitor_0 lamaVM1" -> "FAKE4-IP_start_0 lamaVM2" [ style = bold] +"FAKE4-IP_monitor_0 lamaVM1" -> "FAKE4-IP_stop_0 lamaVM2" [ style = bold] +"FAKE4-IP_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] +"FAKE4-IP_monitor_0 lamaVM3" -> "FAKE4-IP_start_0 lamaVM2" [ style = bold] +"FAKE4-IP_monitor_0 lamaVM3" -> "FAKE4-IP_stop_0 lamaVM2" [ style = bold] +"FAKE4-IP_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] "FAKE4-IP_monitor_30000 lamaVM2" [ style=bold color="green" fontcolor="black"] "FAKE4-IP_start_0 lamaVM2" -> "FAKE4-IP_monitor_30000 lamaVM2" [ style = bold] "FAKE4-IP_start_0 lamaVM2" -> "lamaVM2-G4_running_0" [ style = bold] @@ -8,6 +20,12 @@ digraph "g" { "FAKE4-IP_stop_0 lamaVM2" -> "all_stopped" [ style = bold] "FAKE4-IP_stop_0 lamaVM2" -> "lamaVM2-G4_stopped_0" [ style = bold] "FAKE4-IP_stop_0 lamaVM2" [ style=bold color="green" fontcolor="orange"] +"FAKE4_monitor_0 lamaVM1" -> "FAKE4_start_0 lamaVM2" [ style = bold] +"FAKE4_monitor_0 lamaVM1" -> "FAKE4_stop_0 lamaVM2" [ style = bold] +"FAKE4_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] +"FAKE4_monitor_0 lamaVM3" -> "FAKE4_start_0 lamaVM2" [ style = bold] +"FAKE4_monitor_0 lamaVM3" -> "FAKE4_stop_0 lamaVM2" [ style = bold] +"FAKE4_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] "FAKE4_monitor_30000 lamaVM2" [ style=bold color="green" fontcolor="black"] "FAKE4_start_0 lamaVM2" -> "FAKE4-IP_start_0 lamaVM2" [ style = bold] "FAKE4_start_0 lamaVM2" -> "FAKE4_monitor_30000 lamaVM2" [ style = bold] @@ -17,6 +35,11 @@ digraph "g" { "FAKE4_stop_0 lamaVM2" -> "all_stopped" [ style = bold] "FAKE4_stop_0 lamaVM2" -> "lamaVM2-G4_stopped_0" [ style = bold] "FAKE4_stop_0 lamaVM2" [ style=bold color="green" fontcolor="orange"] +"FAKE5-IP_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] +"FAKE5-IP_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FAKE5_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] +"FAKE6-IP_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] +"FAKE6-IP_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] "FAKE6-clone_running_0" [ style=bold color="green" fontcolor="orange"] "FAKE6-clone_start_0" -> "FAKE6-clone_running_0" [ style = bold] "FAKE6-clone_start_0" -> "FAKE6_start_0 lamaVM2" [ style = bold] @@ -34,6 +57,14 @@ digraph "g" { "FAKE6_stop_0 lamaVM2" -> "FAKE6_start_0 lamaVM2" [ style = bold] "FAKE6_stop_0 lamaVM2" -> "all_stopped" [ style = bold] "FAKE6_stop_0 lamaVM2" [ style=bold color="green" fontcolor="orange"] +"FSlun1_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FSlun2_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] +"FSlun3_monitor_0 lamaVM1" -> "FSlun3_start_0 lama2" [ style = bold] +"FSlun3_monitor_0 lamaVM1" -> "FSlun3_stop_0 lamaVM2" [ style = bold] +"FSlun3_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] +"FSlun3_monitor_0 lamaVM3" -> "FSlun3_start_0 lama2" [ style = bold] +"FSlun3_monitor_0 lamaVM3" -> "FSlun3_stop_0 lamaVM2" [ style = bold] +"FSlun3_monitor_0 lamaVM3" [ style=bold color="green" fontcolor="black"] "FSlun3_monitor_10000 lama2" [ style=bold color="green" fontcolor="black"] "FSlun3_monitor_10000 lamaVM2" [ style=bold color="green" fontcolor="black"] "FSlun3_start_0 lama2" -> "FSlun3_monitor_10000 lama2" [ style = bold] @@ -42,6 +73,7 @@ digraph "g" { "FSlun3_stop_0 lamaVM2" -> "FSlun3_start_0 lama2" [ style = bold] "FSlun3_stop_0 lamaVM2" -> "all_stopped" [ style = bold] "FSlun3_stop_0 lamaVM2" [ style=bold color="green" fontcolor="orange"] +"FSlun4_monitor_0 lamaVM1" [ style=bold color="green" fontcolor="black"] "VM2_monitor_10000 lama3" [ style=bold color="green" fontcolor="black"] "VM2_start_0 lama3" -> "FAKE4-IP_start_0 lamaVM2" [ style = bold] "VM2_start_0 lama3" -> "FAKE4_start_0 lamaVM2" [ style = bold] diff --git a/pengine/test10/bug-rh-1097457.exp b/pengine/test10/bug-rh-1097457.exp index eb9b225..33c13bd 100644 --- a/pengine/test10/bug-rh-1097457.exp +++ b/pengine/test10/bug-rh-1097457.exp @@ -1,34 +1,52 @@ - + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -37,58 +55,88 @@ - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + + + + + + + - + - + + + + + + + + + + + + + + + + + + + @@ -97,117 +145,255 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + + + + + + + - + + + + + + + + + + + + + + + + + + + @@ -216,57 +402,87 @@ - + - + - + - + - + + + + - + - + - + - + - + + + + - + - + - + - + + + + + + + - + + + + + + + + + + + + + + + + + + + @@ -275,54 +491,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -331,89 +547,89 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -423,7 +639,7 @@ - + @@ -432,13 +648,13 @@ - + - + - + @@ -447,23 +663,23 @@ - + - + - + - + - + @@ -471,25 +687,25 @@ - + - + - + - + - + - + - + diff --git a/pengine/test10/bug-rh-1097457.summary b/pengine/test10/bug-rh-1097457.summary index c50df5f..e23c6ad 100644 --- a/pengine/test10/bug-rh-1097457.summary +++ b/pengine/test10/bug-rh-1097457.summary @@ -41,6 +41,26 @@ Transition Summary: * Restart lamaVM2 ( lama3 ) due to required VM2 start Executing cluster transition: + * Resource action: FSlun1 monitor on lamaVM3 + * Resource action: FSlun2 monitor on lamaVM3 + * Resource action: FSlun3 monitor on lamaVM3 + * Resource action: FSlun3 monitor on lamaVM1 + * Resource action: FSlun4 monitor on lamaVM1 + * Resource action: FAKE5-IP monitor on lamaVM3 + * Resource action: FAKE5-IP monitor on lamaVM1 + * Resource action: FAKE6-IP monitor on lamaVM3 + * Resource action: FAKE6-IP monitor on lamaVM1 + * Resource action: FAKE5 monitor on lamaVM1 + * Resource action: FAKE1 monitor on lamaVM3 + * Resource action: FAKE1-IP monitor on lamaVM3 + * Resource action: FAKE2 monitor on lamaVM3 + * Resource action: FAKE2-IP monitor on lamaVM3 + * Resource action: FAKE3 monitor on lamaVM3 + * Resource action: FAKE3-IP monitor on lamaVM3 + * Resource action: FAKE4 monitor on lamaVM3 + * Resource action: FAKE4 monitor on lamaVM1 + * Resource action: FAKE4-IP monitor on lamaVM3 + * Resource action: FAKE4-IP monitor on lamaVM1 * Resource action: lamaVM2 stop on lama3 * Resource action: VM2 stop on lama3 * Pseudo action: stonith-lamaVM2-reboot on lamaVM2 diff --git a/pengine/test10/bundle-order-partial-start-2.dot b/pengine/test10/bundle-order-partial-start-2.dot index d58e809..163be1f 100644 --- a/pengine/test10/bundle-order-partial-start-2.dot +++ b/pengine/test10/bundle-order-partial-start-2.dot @@ -64,6 +64,8 @@ digraph "g" { "rabbitmq-bundle_running_0" [ style=bold color="green" fontcolor="orange"] "rabbitmq-bundle_start_0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] "rabbitmq-bundle_start_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq:0_monitor_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] +"rabbitmq:0_monitor_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] "rabbitmq:0_monitor_10000 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] "rabbitmq:0_post_notify_start_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = bold] "rabbitmq:0_post_notify_start_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] diff --git a/pengine/test10/bundle-order-partial-start-2.exp b/pengine/test10/bundle-order-partial-start-2.exp index f600983..087ed6c 100644 --- a/pengine/test10/bundle-order-partial-start-2.exp +++ b/pengine/test10/bundle-order-partial-start-2.exp @@ -1,234 +1,246 @@ - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -237,29 +249,29 @@ - + - + - + - + - + - + - + @@ -269,7 +281,7 @@ - + @@ -278,277 +290,277 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -556,10 +568,10 @@ - + - + diff --git a/pengine/test10/bundle-order-partial-start-2.summary b/pengine/test10/bundle-order-partial-start-2.summary index bf14db0..50933a2 100644 --- a/pengine/test10/bundle-order-partial-start-2.summary +++ b/pengine/test10/bundle-order-partial-start-2.summary @@ -29,6 +29,7 @@ Transition Summary: * Start haproxy-bundle-docker-0 (undercloud) Executing cluster transition: + * Resource action: rabbitmq:0 monitor on rabbitmq-bundle-0 * Pseudo action: rabbitmq-bundle-clone_pre_notify_start_0 * Resource action: galera-bundle-0 stop on undercloud * Pseudo action: redis-bundle-master_pre_notify_promote_0 diff --git a/pengine/test10/bundle-order-partial-start.dot b/pengine/test10/bundle-order-partial-start.dot index 796749d..958e7f4 100644 --- a/pengine/test10/bundle-order-partial-start.dot +++ b/pengine/test10/bundle-order-partial-start.dot @@ -58,6 +58,8 @@ digraph "g" { "rabbitmq-bundle_running_0" [ style=bold color="green" fontcolor="orange"] "rabbitmq-bundle_start_0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] "rabbitmq-bundle_start_0" [ style=bold color="green" fontcolor="orange"] +"rabbitmq:0_monitor_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_start_0" [ style = bold] +"rabbitmq:0_monitor_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] "rabbitmq:0_monitor_10000 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] "rabbitmq:0_post_notify_start_0 rabbitmq-bundle-0" -> "rabbitmq-bundle-clone_confirmed-post_notify_running_0" [ style = bold] "rabbitmq:0_post_notify_start_0 rabbitmq-bundle-0" [ style=bold color="green" fontcolor="black"] diff --git a/pengine/test10/bundle-order-partial-start.exp b/pengine/test10/bundle-order-partial-start.exp index d48fccf..8aad157 100644 --- a/pengine/test10/bundle-order-partial-start.exp +++ b/pengine/test10/bundle-order-partial-start.exp @@ -1,529 +1,541 @@ - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/pengine/test10/bundle-order-partial-start.summary b/pengine/test10/bundle-order-partial-start.summary index 4e02e88..9045545 100644 --- a/pengine/test10/bundle-order-partial-start.summary +++ b/pengine/test10/bundle-order-partial-start.summary @@ -29,6 +29,7 @@ Transition Summary: * Start haproxy-bundle-docker-0 (undercloud) Executing cluster transition: + * Resource action: rabbitmq:0 monitor on rabbitmq-bundle-0 * Pseudo action: rabbitmq-bundle-clone_pre_notify_start_0 * Resource action: galera-bundle-docker-0 monitor on undercloud * Pseudo action: redis-bundle-master_pre_notify_promote_0 diff --git a/pengine/test10/bundle-order-startup.exp b/pengine/test10/bundle-order-startup.exp index 03b064a..ec1053c 100644 --- a/pengine/test10/bundle-order-startup.exp +++ b/pengine/test10/bundle-order-startup.exp @@ -1,7 +1,7 @@ - + @@ -61,7 +61,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -417,7 +417,7 @@ - + diff --git a/pengine/test10/container-is-remote-node.dot b/pengine/test10/container-is-remote-node.dot index d8f1c9f..ebb0793 100644 --- a/pengine/test10/container-is-remote-node.dot +++ b/pengine/test10/container-is-remote-node.dot @@ -1,2 +1,6 @@ digraph "g" { +"clvmd_monitor_0 RNVM1" [ style=bold color="green" fontcolor="black"] +"dlm_monitor_0 RNVM1" [ style=bold color="green" fontcolor="black"] +"gfs2-lv_1_1_monitor_0 RNVM1" [ style=bold color="green" fontcolor="black"] +"gfs2-lv_1_2_monitor_0 RNVM1" [ style=bold color="green" fontcolor="black"] } diff --git a/pengine/test10/container-is-remote-node.exp b/pengine/test10/container-is-remote-node.exp index 56e315f..d656dd2 100644 --- a/pengine/test10/container-is-remote-node.exp +++ b/pengine/test10/container-is-remote-node.exp @@ -1 +1,38 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pengine/test10/container-is-remote-node.summary b/pengine/test10/container-is-remote-node.summary index 6ed0526..f5c78ce 100644 --- a/pengine/test10/container-is-remote-node.summary +++ b/pengine/test10/container-is-remote-node.summary @@ -26,6 +26,10 @@ Containers: [ RNVM1:VM1 ] Transition Summary: Executing cluster transition: + * Resource action: dlm monitor on RNVM1 + * Resource action: clvmd monitor on RNVM1 + * Resource action: gfs2-lv_1_1 monitor on RNVM1 + * Resource action: gfs2-lv_1_2 monitor on RNVM1 Revised cluster status: Online: [ lama2 lama3 ] diff --git a/pengine/test10/guest-node-host-dies.dot b/pengine/test10/guest-node-host-dies.dot index 04152d1..83f38c4 100644 --- a/pengine/test10/guest-node-host-dies.dot +++ b/pengine/test10/guest-node-host-dies.dot @@ -83,6 +83,7 @@ digraph "g" { "lxc1_stop_0 rhel7-1" -> "all_stopped" [ style = bold] "lxc1_stop_0 rhel7-1" -> "container1_stop_0 rhel7-1" [ style = bold] "lxc1_stop_0 rhel7-1" -> "lxc1_start_0 rhel7-2" [ style = bold] +"lxc1_stop_0 rhel7-1" -> "rsc_rhel7-1_start_0 rhel7-5" [ style = bold] "lxc1_stop_0 rhel7-1" [ style=bold color="green" fontcolor="orange"] "lxc2_monitor_0 rhel7-2" -> "lxc2_start_0 rhel7-3" [ style = bold] "lxc2_monitor_0 rhel7-2" -> "lxc2_stop_0 rhel7-1" [ style = bold] @@ -101,6 +102,7 @@ digraph "g" { "lxc2_stop_0 rhel7-1" -> "all_stopped" [ style = bold] "lxc2_stop_0 rhel7-1" -> "container2_stop_0 rhel7-1" [ style = bold] "lxc2_stop_0 rhel7-1" -> "lxc2_start_0 rhel7-3" [ style = bold] +"lxc2_stop_0 rhel7-1" -> "rsc_rhel7-1_start_0 rhel7-5" [ style = bold] "lxc2_stop_0 rhel7-1" [ style=bold color="green" fontcolor="orange"] "rsc_rhel7-1_monitor_5000 rhel7-5" [ style=bold color="green" fontcolor="black"] "rsc_rhel7-1_start_0 rhel7-5" -> "rsc_rhel7-1_monitor_5000 rhel7-5" [ style = bold] diff --git a/pengine/test10/guest-node-host-dies.exp b/pengine/test10/guest-node-host-dies.exp index cd8d81a..01fe678 100644 --- a/pengine/test10/guest-node-host-dies.exp +++ b/pengine/test10/guest-node-host-dies.exp @@ -62,6 +62,12 @@ + + + + + + diff --git a/pengine/test10/whitebox-asymmetric.dot b/pengine/test10/whitebox-asymmetric.dot index 896f66a..da2f3e3 100644 --- a/pengine/test10/whitebox-asymmetric.dot +++ b/pengine/test10/whitebox-asymmetric.dot @@ -3,8 +3,12 @@ "18node2_start_0 18builder" -> "18node2_monitor_30000 18builder" [ style = bold] "18node2_start_0 18builder" -> "nfs_mount_monitor_10000 18node2" [ style = bold] "18node2_start_0 18builder" -> "nfs_mount_start_0 18node2" [ style = bold] +"18node2_start_0 18builder" -> "vg_tags_dup_monitor_0 18node2" [ style = bold] +"18node2_start_0 18builder" -> "webserver_monitor_0 18node2" [ style = bold] "18node2_start_0 18builder" [ style=bold color="green" fontcolor="black"] "nfs_mount_monitor_10000 18node2" [ style=bold color="green" fontcolor="black"] "nfs_mount_start_0 18node2" -> "nfs_mount_monitor_10000 18node2" [ style = bold] "nfs_mount_start_0 18node2" [ style=bold color="green" fontcolor="black"] +"vg_tags_dup_monitor_0 18node2" [ style=bold color="green" fontcolor="black"] +"webserver_monitor_0 18node2" [ style=bold color="green" fontcolor="black"] } diff --git a/pengine/test10/whitebox-asymmetric.exp b/pengine/test10/whitebox-asymmetric.exp index 1178fb6..db71443 100644 --- a/pengine/test10/whitebox-asymmetric.exp +++ b/pengine/test10/whitebox-asymmetric.exp @@ -1,49 +1,75 @@ - + + + + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + diff --git a/pengine/test10/whitebox-asymmetric.summary b/pengine/test10/whitebox-asymmetric.summary index 1c5011d..8da9996 100644 --- a/pengine/test10/whitebox-asymmetric.summary +++ b/pengine/test10/whitebox-asymmetric.summary @@ -17,7 +17,9 @@ Transition Summary: Executing cluster transition: * Resource action: 18node2 start on 18builder + * Resource action: webserver monitor on 18node2 * Resource action: nfs_mount start on 18node2 + * Resource action: vg_tags_dup monitor on 18node2 * Resource action: 18node2 monitor=30000 on 18builder * Resource action: nfs_mount monitor=10000 on 18node2 diff --git a/pengine/test10/whitebox-fail1.dot b/pengine/test10/whitebox-fail1.dot index 0123a58..3cf4f76 100644 --- a/pengine/test10/whitebox-fail1.dot +++ b/pengine/test10/whitebox-fail1.dot @@ -1,10 +1,15 @@ digraph "g" { +"A_monitor_0 lxc2" [ style=bold color="green" fontcolor="black"] +"B_monitor_0 lxc2" -> "B_start_0 lxc1" [ style = bold] +"B_monitor_0 lxc2" -> "B_stop_0 lxc1" [ style = bold] +"B_monitor_0 lxc2" [ style=bold color="green" fontcolor="black"] "B_monitor_10000 lxc1" [ style=bold color="green" fontcolor="black"] "B_start_0 lxc1" -> "B_monitor_10000 lxc1" [ style = bold] "B_start_0 lxc1" [ style=bold color="green" fontcolor="black"] "B_stop_0 lxc1" -> "B_start_0 lxc1" [ style = bold] "B_stop_0 lxc1" -> "all_stopped" [ style = bold] "B_stop_0 lxc1" [ style=bold color="green" fontcolor="orange"] +"D_monitor_0 lxc2" [ style=bold color="green" fontcolor="black"] "M-clone_running_0" [ style=bold color="green" fontcolor="orange"] "M-clone_start_0" -> "M-clone_running_0" [ style = bold] "M-clone_start_0" -> "M_start_0 lxc1" [ style = bold] diff --git a/pengine/test10/whitebox-fail1.exp b/pengine/test10/whitebox-fail1.exp index 4cb6136..ab739b5 100644 --- a/pengine/test10/whitebox-fail1.exp +++ b/pengine/test10/whitebox-fail1.exp @@ -1,7 +1,7 @@ - + @@ -11,7 +11,7 @@ - + @@ -24,192 +24,225 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - + + + + - + - + - + - + - + - + + + + - + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -219,7 +252,7 @@ - + @@ -228,13 +261,13 @@ - + - + - + @@ -247,19 +280,19 @@ - + - +