Blame SOURCES/038-clone-handling.patch

60de42
From f296fea9e3d20bc5fd3e58725e5d536dff947ea8 Mon Sep 17 00:00:00 2001
60de42
From: Andrew Beekhof <andrew@beekhof.net>
60de42
Date: Tue, 21 Mar 2017 14:44:56 +1100
60de42
Subject: [PATCH 1/2] PE: Restore ABI compatibility with pre-container code
60de42
60de42
---
60de42
 fencing/main.c                |  2 +-
60de42
 include/crm/pengine/complex.h |  6 +++---
60de42
 lib/pengine/clone.c           |  2 +-
60de42
 lib/pengine/complex.c         | 29 +++++++++++++++--------------
60de42
 lib/pengine/unpack.c          |  6 +++---
60de42
 pengine/allocate.c            | 32 ++++++++++++++++----------------
60de42
 pengine/clone.c               |  6 +++---
60de42
 pengine/constraints.c         | 14 +++++++-------
60de42
 pengine/graph.c               |  4 ++--
60de42
 pengine/native.c              |  4 ++--
60de42
 pengine/utilization.c         | 13 ++++---------
60de42
 tools/crm_resource_runtime.c  | 21 ++++++++++-----------
60de42
 12 files changed, 67 insertions(+), 72 deletions(-)
60de42
60de42
diff --git a/fencing/main.c b/fencing/main.c
60de42
index e6eb087..437c31f 100644
60de42
--- a/fencing/main.c
60de42
+++ b/fencing/main.c
60de42
@@ -620,7 +620,7 @@ static void cib_device_update(resource_t *rsc, pe_working_set_t *data_set)
60de42
         GListPtr gIter = NULL;
60de42
         for (gIter = rsc->children; gIter != NULL; gIter = gIter->next) {
60de42
             cib_device_update(gIter->data, data_set);
60de42
-            if(rsc->variant == pe_clone || rsc->variant == pe_master) {
60de42
+            if(pe_rsc_is_clone(rsc)) {
60de42
                 crm_trace("Only processing one copy of the clone %s", rsc->id);
60de42
                 break;
60de42
             }
60de42
diff --git a/include/crm/pengine/complex.h b/include/crm/pengine/complex.h
60de42
index 92829f9..664d576 100644
60de42
--- a/include/crm/pengine/complex.h
60de42
+++ b/include/crm/pengine/complex.h
60de42
@@ -31,9 +31,9 @@ enum pe_obj_types {
60de42
     pe_unknown = -1,
60de42
     pe_native = 0,
60de42
     pe_group = 1,
60de42
-    pe_container = 2,
60de42
-    pe_clone = 3,
60de42
-    pe_master = 4
60de42
+    pe_clone = 2,
60de42
+    pe_master = 3,
60de42
+    pe_container = 4,
60de42
 };
60de42
 
60de42
 enum pe_obj_types get_resource_type(const char *name);
60de42
diff --git a/lib/pengine/clone.c b/lib/pengine/clone.c
60de42
index 6604a29..6652e59 100644
60de42
--- a/lib/pengine/clone.c
60de42
+++ b/lib/pengine/clone.c
60de42
@@ -47,7 +47,7 @@ mark_as_orphan(resource_t * rsc)
60de42
 void
60de42
 force_non_unique_clone(resource_t * rsc, const char *rid, pe_working_set_t * data_set)
60de42
 {
60de42
-    if (rsc->variant == pe_clone || rsc->variant == pe_master) {
60de42
+    if (pe_rsc_is_clone(rsc)) {
60de42
         clone_variant_data_t *clone_data = NULL;
60de42
 
60de42
         get_clone_variant_data(clone_data, rsc);
60de42
diff --git a/lib/pengine/complex.c b/lib/pengine/complex.c
60de42
index adc8abc..c4823f4 100644
60de42
--- a/lib/pengine/complex.c
60de42
+++ b/lib/pengine/complex.c
60de42
@@ -46,16 +46,6 @@ resource_object_functions_t resource_class_functions[] = {
60de42
      group_free
60de42
     },
60de42
     {
60de42
-     container_unpack,
60de42
-     native_find_rsc,
60de42
-     native_parameter,
60de42
-     container_print,
60de42
-     container_active,
60de42
-     container_resource_state,
60de42
-     native_location,
60de42
-     container_free
60de42
-    },
60de42
-    {
60de42
      clone_unpack,
60de42
      native_find_rsc,
60de42
      native_parameter,
60de42
@@ -73,7 +63,18 @@ resource_object_functions_t resource_class_functions[] = {
60de42
      clone_active,
60de42
      clone_resource_state,
60de42
      native_location,
60de42
-     clone_free}
60de42
+     clone_free
60de42
+    },
60de42
+    {
60de42
+     container_unpack,
60de42
+     native_find_rsc,
60de42
+     native_parameter,
60de42
+     container_print,
60de42
+     container_active,
60de42
+     container_resource_state,
60de42
+     native_location,
60de42
+     container_free
60de42
+    }
60de42
 };
60de42
 
60de42
 enum pe_obj_types
60de42
@@ -404,7 +405,7 @@ handle_rsc_isolation(resource_t *rsc)
60de42
      * at the clone level. this is really the only sane thing to do in this situation.
60de42
      * This allows someone to clone an isolated resource without having to shuffle
60de42
      * around the isolation attributes to the clone parent */
60de42
-    if (top == rsc->parent && top->variant >= pe_clone) {
60de42
+    if (top == rsc->parent && pe_rsc_is_clone(top)) {
60de42
         iso = top;
60de42
     }
60de42
 
60de42
@@ -414,7 +415,7 @@ handle_rsc_isolation(resource_t *rsc)
60de42
 set_rsc_opts:
60de42
     clear_bit(rsc->flags, pe_rsc_allow_migrate);
60de42
     set_bit(rsc->flags, pe_rsc_unique);
60de42
-    if (top->variant >= pe_clone) {
60de42
+    if (pe_rsc_is_clone(top)) {
60de42
         add_hash_param(rsc->meta, XML_RSC_ATTR_UNIQUE, XML_BOOLEAN_TRUE);
60de42
     }
60de42
 }
60de42
@@ -591,7 +592,7 @@ common_unpack(xmlNode * xml_obj, resource_t ** rsc,
60de42
 
60de42
     top = uber_parent(*rsc);
60de42
     value = g_hash_table_lookup((*rsc)->meta, XML_RSC_ATTR_UNIQUE);
60de42
-    if (crm_is_true(value) || top->variant < pe_clone) {
60de42
+    if (crm_is_true(value) || pe_rsc_is_clone(top) == FALSE) {
60de42
         set_bit((*rsc)->flags, pe_rsc_unique);
60de42
     }
60de42
 
60de42
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
60de42
index 717c23b..2f03493 100644
60de42
--- a/lib/pengine/unpack.c
60de42
+++ b/lib/pengine/unpack.c
60de42
@@ -1692,7 +1692,7 @@ find_anonymous_clone(pe_working_set_t * data_set, node_t * node, resource_t * pa
60de42
     gboolean skip_inactive = FALSE;
60de42
 
60de42
     CRM_ASSERT(parent != NULL);
60de42
-    CRM_ASSERT(parent->variant == pe_clone || parent->variant == pe_master);
60de42
+    CRM_ASSERT(pe_rsc_is_clone(parent));
60de42
     CRM_ASSERT(is_not_set(parent->flags, pe_rsc_unique));
60de42
 
60de42
     /* Find an instance active (or partially active for grouped clones) on the specified node */
60de42
@@ -1815,7 +1815,7 @@ unpack_find_resource(pe_working_set_t * data_set, node_t * node, const char *rsc
60de42
     if(parent && parent->parent) {
60de42
         rsc = find_container_child(rsc_id, rsc, node);
60de42
 
60de42
-    } else if (parent && parent->variant >= pe_clone) {
60de42
+    } else if (pe_rsc_is_clone(parent)) {
60de42
         if (is_not_set(parent->flags, pe_rsc_unique)) {
60de42
             char *base = clone_strip(rsc_id);
60de42
 
60de42
@@ -2721,7 +2721,7 @@ unpack_rsc_op_failure(resource_t * rsc, node_t * node, int rc, xmlNode * xml_op,
60de42
         if (fail_rsc->parent) {
60de42
             resource_t *parent = uber_parent(fail_rsc);
60de42
 
60de42
-            if ((parent->variant == pe_clone || parent->variant == pe_master)
60de42
+            if (pe_rsc_is_clone(parent)
60de42
                 && is_not_set(parent->flags, pe_rsc_unique)) {
60de42
                 /* for clone and master resources, if a child fails on an operation
60de42
                  * with on-fail = stop, all the resources fail.  Do this by preventing
60de42
diff --git a/pengine/allocate.c b/pengine/allocate.c
60de42
index bfc2471..3314d77 100644
60de42
--- a/pengine/allocate.c
60de42
+++ b/pengine/allocate.c
60de42
@@ -69,20 +69,6 @@ resource_alloc_functions_t resource_class_alloc_functions[] = {
60de42
      group_append_meta,
60de42
      },
60de42
     {
60de42
-     container_merge_weights,
60de42
-     container_color,
60de42
-     container_create_actions,
60de42
-     container_create_probe,
60de42
-     container_internal_constraints,
60de42
-     container_rsc_colocation_lh,
60de42
-     container_rsc_colocation_rh,
60de42
-     container_rsc_location,
60de42
-     container_action_flags,
60de42
-     container_update_actions,
60de42
-     container_expand,
60de42
-     container_append_meta,
60de42
-     },
60de42
-    {
60de42
      clone_merge_weights,
60de42
      clone_color,
60de42
      clone_create_actions,
60de42
@@ -109,6 +95,20 @@ resource_alloc_functions_t resource_class_alloc_functions[] = {
60de42
      clone_update_actions,
60de42
      clone_expand,
60de42
      master_append_meta,
60de42
+     },
60de42
+    {
60de42
+     container_merge_weights,
60de42
+     container_color,
60de42
+     container_create_actions,
60de42
+     container_create_probe,
60de42
+     container_internal_constraints,
60de42
+     container_rsc_colocation_lh,
60de42
+     container_rsc_colocation_rh,
60de42
+     container_rsc_location,
60de42
+     container_action_flags,
60de42
+     container_update_actions,
60de42
+     container_expand,
60de42
+     container_append_meta,
60de42
      }
60de42
 };
60de42
 
60de42
@@ -389,7 +389,7 @@ check_actions_for(xmlNode * rsc_entry, resource_t * rsc, node_t * node, pe_worki
60de42
     if (is_set(rsc->flags, pe_rsc_orphan)) {
60de42
         resource_t *parent = uber_parent(rsc);
60de42
         if(parent == NULL
60de42
-           || parent->variant < pe_clone
60de42
+           || pe_rsc_is_clone(parent) == FALSE
60de42
            || is_set(parent->flags, pe_rsc_unique)) {
60de42
             pe_rsc_trace(rsc, "Skipping param check for %s and deleting: orphan", rsc->id);
60de42
             DeleteRsc(rsc, node, FALSE, data_set);
60de42
@@ -2022,7 +2022,7 @@ order_probes(pe_working_set_t * data_set)
60de42
                 crm_trace("Same parent %s for %s", first_rsc->id, start->uuid);
60de42
                 continue;
60de42
 
60de42
-            } else if(FALSE && uber_parent(first_rsc)->variant < pe_clone) {
60de42
+            } else if(FALSE && pe_rsc_is_clone(uber_parent(first_rsc)) == FALSE) {
60de42
                 crm_trace("Not a clone %s for %s", first_rsc->id, start->uuid);
60de42
                 continue;
60de42
             }
60de42
diff --git a/pengine/clone.c b/pengine/clone.c
60de42
index 9e2835d..2b332b1 100644
60de42
--- a/pengine/clone.c
60de42
+++ b/pengine/clone.c
60de42
@@ -1071,7 +1071,7 @@ clone_rsc_colocation_rh(resource_t * rsc_lh, resource_t * rsc_rh, rsc_colocation
60de42
     pe_rsc_trace(rsc_rh, "Processing constraint %s: %s -> %s %d",
60de42
                  constraint->id, rsc_lh->id, rsc_rh->id, constraint->score);
60de42
 
60de42
-    if (constraint->rsc_lh->variant >= pe_clone) {
60de42
+    if (pe_rsc_is_clone(constraint->rsc_lh)) {
60de42
 
60de42
         get_clone_variant_data(clone_data_lh, constraint->rsc_lh);
60de42
         if (clone_data_lh->interleave
60de42
@@ -1339,8 +1339,8 @@ clone_update_actions(action_t * first, action_t * then, node_t * node, enum pe_a
60de42
     enum pe_graph_flags changed = pe_graph_none;
60de42
 
60de42
     if (first->rsc != then->rsc
60de42
-        && first->rsc && first->rsc->variant >= pe_clone
60de42
-        && then->rsc && then->rsc->variant >= pe_clone) {
60de42
+        && pe_rsc_is_clone(first->rsc)
60de42
+        && pe_rsc_is_clone(then->rsc)) {
60de42
         clone_variant_data_t *clone_data = NULL;
60de42
 
60de42
         if (crm_ends_with(then->uuid, "_stop_0")
60de42
diff --git a/pengine/constraints.c b/pengine/constraints.c
60de42
index 92b9dd0..501cb57 100644
60de42
--- a/pengine/constraints.c
60de42
+++ b/pengine/constraints.c
60de42
@@ -316,13 +316,13 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set)
60de42
         crm_config_err("Constraint %s: no resource found for name '%s'", id, id_first);
60de42
         return FALSE;
60de42
 
60de42
-    } else if (instance_then && rsc_then->variant < pe_clone) {
60de42
+    } else if (instance_then && pe_rsc_is_clone(rsc_then) == FALSE) {
60de42
         crm_config_err("Invalid constraint '%s':"
60de42
                        " Resource '%s' is not a clone but instance %s was requested",
60de42
                        id, id_then, instance_then);
60de42
         return FALSE;
60de42
 
60de42
-    } else if (instance_first && rsc_first->variant < pe_clone) {
60de42
+    } else if (instance_first && pe_rsc_is_clone(rsc_first) == FALSE) {
60de42
         crm_config_err("Invalid constraint '%s':"
60de42
                        " Resource '%s' is not a clone but instance %s was requested",
60de42
                        id, id_first, instance_first);
60de42
@@ -350,11 +350,11 @@ unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set)
60de42
     require_all_s = crm_element_value(xml_obj, "require-all");
60de42
     if (require_all_s
60de42
         && crm_is_true(require_all_s) == FALSE
60de42
-        && rsc_first->variant >= pe_clone) {
60de42
+        && pe_rsc_is_clone(rsc_first)) {
60de42
 
60de42
         /* require-all=false means only one instance of the clone is required */
60de42
         min_required_before = 1;
60de42
-    } else if (rsc_first->variant >= pe_clone) {
60de42
+    } else if (pe_rsc_is_clone(rsc_first)) {
60de42
         const char *min_clones_s = g_hash_table_lookup(rsc_first->meta, XML_RSC_ATTR_INCARNATION_MIN);
60de42
         if (min_clones_s) {
60de42
             /* if clone min is set, we require at a minimum X number of instances
60de42
@@ -2343,13 +2343,13 @@ unpack_simple_colocation(xmlNode * xml_obj, pe_working_set_t * data_set)
60de42
         crm_config_err("Invalid constraint '%s': No resource named '%s'", id, id_rh);
60de42
         return FALSE;
60de42
 
60de42
-    } else if (instance_lh && rsc_lh->variant < pe_clone) {
60de42
+    } else if (instance_lh && pe_rsc_is_clone(rsc_lh) == FALSE) {
60de42
         crm_config_err
60de42
             ("Invalid constraint '%s': Resource '%s' is not a clone but instance %s was requested",
60de42
              id, id_lh, instance_lh);
60de42
         return FALSE;
60de42
 
60de42
-    } else if (instance_rh && rsc_rh->variant < pe_clone) {
60de42
+    } else if (instance_rh && pe_rsc_is_clone(rsc_rh) == FALSE) {
60de42
         crm_config_err
60de42
             ("Invalid constraint '%s': Resource '%s' is not a clone but instance %s was requested",
60de42
              id, id_rh, instance_rh);
60de42
@@ -2721,7 +2721,7 @@ unpack_simple_rsc_ticket(xmlNode * xml_obj, pe_working_set_t * data_set)
60de42
         crm_config_err("Invalid constraint '%s': No resource named '%s'", id, id_lh);
60de42
         return FALSE;
60de42
 
60de42
-    } else if (instance_lh && rsc_lh->variant < pe_clone) {
60de42
+    } else if (instance_lh && pe_rsc_is_clone(rsc_lh) == FALSE) {
60de42
         crm_config_err
60de42
             ("Invalid constraint '%s': Resource '%s' is not a clone but instance %s was requested",
60de42
              id, id_lh, instance_lh);
60de42
diff --git a/pengine/graph.c b/pengine/graph.c
60de42
index 07fc60a..2dba08e 100644
60de42
--- a/pengine/graph.c
60de42
+++ b/pengine/graph.c
60de42
@@ -40,7 +40,7 @@ get_action_flags(action_t * action, node_t * node)
60de42
     if (action->rsc) {
60de42
         flags = action->rsc->cmds->action_flags(action, NULL);
60de42
 
60de42
-        if (action->rsc->variant >= pe_clone && node) {
60de42
+        if (pe_rsc_is_clone(action->rsc) && node) {
60de42
 
60de42
             /* We only care about activity on $node */
60de42
             enum pe_action_flags clone_flags = action->rsc->cmds->action_flags(action, node);
60de42
@@ -1426,7 +1426,7 @@ check_dump_input(int last_action, action_t * action, action_wrapper_t * wrapper)
60de42
                && is_set(wrapper->action->rsc->flags, pe_rsc_failed)
60de42
                && is_not_set(wrapper->action->rsc->flags, pe_rsc_managed)
60de42
                && crm_ends_with(wrapper->action->uuid, "_stop_0")
60de42
-               && action->rsc && action->rsc->variant >= pe_clone) {
60de42
+               && action->rsc && pe_rsc_is_clone(action->rsc)) {
60de42
         crm_warn("Ignoring requirement that %s complete before %s:"
60de42
                  " unmanaged failed resources cannot prevent clone shutdown",
60de42
                  wrapper->action->uuid, action->uuid);
60de42
diff --git a/pengine/native.c b/pengine/native.c
60de42
index 4d91c00..d0cebb3 100644
60de42
--- a/pengine/native.c
60de42
+++ b/pengine/native.c
60de42
@@ -2827,7 +2827,7 @@ native_create_probe(resource_t * rsc, node_t * node, action_t * complete,
60de42
     if(is_set(rsc->flags, pe_rsc_fence_device) && is_set(data_set->flags, pe_flag_enable_unfencing)) {
60de42
         top = rsc;
60de42
 
60de42
-    } else if (top->variant < pe_clone) {
60de42
+    } else if (pe_rsc_is_clone(top) == FALSE) {
60de42
         top = rsc;
60de42
 
60de42
     } else {
60de42
@@ -3221,7 +3221,7 @@ native_append_meta(resource_t * rsc, xmlNode * xml)
60de42
 
60de42
         /* instance name for isolated environment */
60de42
         name = crm_meta_name(XML_RSC_ATTR_ISOLATION_INSTANCE);
60de42
-        if (iso_parent->variant >= pe_clone) { 
60de42
+        if (pe_rsc_is_clone(iso_parent)) { 
60de42
             /* if isolation is set at the clone/master level, we have to 
60de42
              * give this resource the unique isolation instance associated
60de42
              * with the clone child (last_parent)*/
60de42
diff --git a/pengine/utilization.c b/pengine/utilization.c
60de42
index e3996e2..5219fb8 100644
60de42
--- a/pengine/utilization.c
60de42
+++ b/pengine/utilization.c
60de42
@@ -201,8 +201,7 @@ add_unallocated_utilization(GHashTable * all_utilization, resource_t * rsc,
60de42
                      orig_rsc->id, rsc->id);
60de42
         group_add_unallocated_utilization(all_utilization, rsc, all_rscs);
60de42
 
60de42
-    } else if (rsc->variant == pe_clone ||
60de42
-               rsc->variant == pe_master) {
60de42
+    } else if (pe_rsc_is_clone(rsc)) {
60de42
         GListPtr gIter1 = NULL;
60de42
         gboolean existing = FALSE;
60de42
 
60de42
@@ -317,7 +316,7 @@ find_colocated_rscs(GListPtr colocated_rscs, resource_t * rsc, resource_t * orig
60de42
             continue;
60de42
         }
60de42
 
60de42
-        if (rsc_lh->variant <= pe_group && rsc->variant >= pe_clone) {
60de42
+        if (pe_rsc_is_clone(rsc_lh) == FALSE && pe_rsc_is_clone(rsc)) {
60de42
             /* We do not know if rsc_lh will be colocated with orig_rsc in this case */
60de42
             continue;
60de42
         }
60de42
@@ -427,9 +426,7 @@ group_find_colocated_rscs(GListPtr colocated_rscs, resource_t * rsc, resource_t
60de42
     group_variant_data_t *group_data = NULL;
60de42
 
60de42
     get_group_variant_data(group_data, rsc);
60de42
-    if (group_data->colocated ||
60de42
-        (rsc->parent &&
60de42
-         (rsc->parent->variant == pe_clone || rsc->parent->variant == pe_master))) {
60de42
+    if (group_data->colocated || pe_rsc_is_clone(rsc->parent)) {
60de42
         GListPtr gIter = rsc->children;
60de42
 
60de42
         for (; gIter != NULL; gIter = gIter->next) {
60de42
@@ -456,9 +453,7 @@ group_add_unallocated_utilization(GHashTable * all_utilization, resource_t * rsc
60de42
     group_variant_data_t *group_data = NULL;
60de42
 
60de42
     get_group_variant_data(group_data, rsc);
60de42
-    if (group_data->colocated ||
60de42
-        (rsc->parent &&
60de42
-         (rsc->parent->variant == pe_clone || rsc->parent->variant == pe_master))) {
60de42
+    if (group_data->colocated || pe_rsc_is_clone(rsc->parent)) {
60de42
         GListPtr gIter = rsc->children;
60de42
 
60de42
         for (; gIter != NULL; gIter = gIter->next) {
60de42
diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
60de42
index 9c201a0..af96909 100644
60de42
--- a/tools/crm_resource_runtime.c
60de42
+++ b/tools/crm_resource_runtime.c
60de42
@@ -40,7 +40,7 @@ do_find_resource(const char *rsc, resource_t * the_rsc, pe_working_set_t * data_
60de42
         } else {
60de42
             const char *state = "";
60de42
 
60de42
-            if (the_rsc->variant < pe_clone && the_rsc->fns->state(the_rsc, TRUE) == RSC_ROLE_MASTER) {
60de42
+            if (!pe_rsc_is_clone(the_rsc) && the_rsc->fns->state(the_rsc, TRUE) == RSC_ROLE_MASTER) {
60de42
                 state = "Master";
60de42
             }
60de42
             fprintf(stdout, "resource %s is running on: %s %s\n", rsc, node->details->uname, state);
60de42
@@ -71,7 +71,7 @@ cli_resource_search(const char *rsc, pe_working_set_t * data_set)
60de42
         return -ENXIO;
60de42
     }
60de42
 
60de42
-    if (the_rsc->variant >= pe_clone) {
60de42
+    if (pe_rsc_is_clone(the_rsc)) {
60de42
         GListPtr gIter = the_rsc->children;
60de42
 
60de42
         for (; gIter != NULL; gIter = gIter->next) {
60de42
@@ -80,7 +80,7 @@ cli_resource_search(const char *rsc, pe_working_set_t * data_set)
60de42
 
60de42
     /* The anonymous clone children's common ID is supplied */
60de42
     } else if ((parent = uber_parent(the_rsc)) != NULL
60de42
-               && parent->variant >= pe_clone
60de42
+               && pe_rsc_is_clone(parent)
60de42
                && is_not_set(the_rsc->flags, pe_rsc_unique)
60de42
                && the_rsc->clone_name
60de42
                && safe_str_eq(rsc, the_rsc->clone_name)
60de42
@@ -618,8 +618,7 @@ cli_resource_delete(cib_t *cib_conn, crm_ipc_t *crmd_channel, const char *host_uname,
60de42
             resource_t *child = (resource_t *) lpc->data;
60de42
 
60de42
             rc = cli_resource_delete(cib_conn, crmd_channel, host_uname, child, data_set);
60de42
-            if(rc != pcmk_ok
60de42
-               || (rsc->variant >= pe_clone && is_not_set(rsc->flags, pe_rsc_unique))) {
60de42
+            if(rc != pcmk_ok || (pe_rsc_is_clone(rsc) && is_not_set(rsc->flags, pe_rsc_unique))) {
60de42
                 return rc;
60de42
             }
60de42
         }
60de42
@@ -711,7 +710,7 @@ cli_resource_check(cib_t * cib_conn, resource_t *rsc)
60de42
             printf("\n  * The configuration specifies that '%s' should remain stopped\n", parent->id);
60de42
             need_nl++;
60de42
 
60de42
-        } else if(parent->variant > pe_clone && role == RSC_ROLE_SLAVE) {
60de42
+        } else if(parent->variant == pe_master && role == RSC_ROLE_SLAVE) {
60de42
             printf("\n  * The configuration specifies that '%s' should not be promoted\n", parent->id);
60de42
             need_nl++;
60de42
         }
60de42
@@ -1117,7 +1116,7 @@ cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t *
60de42
     attr_set_type = XML_TAG_META_SETS;
60de42
 
60de42
     rsc_id = strdup(rsc->id);
60de42
-    if(rsc->variant >= pe_clone) {
60de42
+    if(pe_rsc_is_clone(rsc)) {
60de42
         is_clone = TRUE;
60de42
     }
60de42
 
60de42
@@ -1489,7 +1488,7 @@ cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *ove
60de42
                || safe_str_eq(rsc_action, "force-promote")) {
60de42
         action = rsc_action+6;
60de42
 
60de42
-        if(rsc->variant >= pe_clone) {
60de42
+        if(pe_rsc_is_clone(rsc)) {
60de42
             rc = cli_resource_search(rsc_id, data_set);
60de42
             if(rc > 0 && do_force == FALSE) {
60de42
                 CMD_ERR("It is not safe to %s %s here: the cluster claims it is already active", action, rsc_id);
60de42
@@ -1499,7 +1498,7 @@ cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *ove
60de42
         }
60de42
     }
60de42
 
60de42
-    if(rsc->variant == pe_clone || rsc->variant == pe_master) {
60de42
+    if(pe_rsc_is_clone(rsc)) {
60de42
         /* Grab the first child resource in the hope it's not a group */
60de42
         rsc = rsc->children->data;
60de42
     }
60de42
@@ -1613,7 +1612,7 @@ cli_resource_move(const char *rsc_id, const char *host_name, cib_t * cib, pe_wor
60de42
         CMD_ERR("Resource '%s' not moved: not found", rsc_id);
60de42
         return -ENXIO;
60de42
 
60de42
-    } else if (scope_master && rsc->variant < pe_master) {
60de42
+    } else if (scope_master && rsc->variant != pe_master) {
60de42
         resource_t *p = uber_parent(rsc);
60de42
         if(p->variant == pe_master) {
60de42
             CMD_ERR("Using parent '%s' for --move command instead of '%s'.", rsc->id, rsc_id);
60de42
@@ -1644,7 +1643,7 @@ cli_resource_move(const char *rsc_id, const char *host_name, cib_t * cib, pe_wor
60de42
             count = g_list_length(rsc->running_on);
60de42
         }
60de42
 
60de42
-    } else if (rsc->variant >= pe_clone) {
60de42
+    } else if (pe_rsc_is_clone(rsc)) {
60de42
         count = g_list_length(rsc->running_on);
60de42
 
60de42
     } else if (g_list_length(rsc->running_on) > 1) {
60de42
-- 
60de42
1.8.3.1
60de42
60de42
60de42
From 41e08386cb3671c19a5045b5a3084c9c8c4799c1 Mon Sep 17 00:00:00 2001
60de42
From: Andrew Beekhof <andrew@beekhof.net>
60de42
Date: Tue, 21 Mar 2017 14:47:16 +1100
60de42
Subject: [PATCH 2/2] PE: Rename 'bucket' to 'bundle' for public consumption
60de42
60de42
---
60de42
 include/crm/msg_xml.h | 2 +-
60de42
 1 file changed, 1 insertion(+), 1 deletion(-)
60de42
60de42
diff --git a/include/crm/msg_xml.h b/include/crm/msg_xml.h
60de42
index 7f8ee7e..7198fe5 100644
60de42
--- a/include/crm/msg_xml.h
60de42
+++ b/include/crm/msg_xml.h
60de42
@@ -186,7 +186,7 @@
60de42
 #  define XML_CIB_TAG_GROUP	  	"group"
60de42
 #  define XML_CIB_TAG_INCARNATION	"clone"
60de42
 #  define XML_CIB_TAG_MASTER		"master"
60de42
-#  define XML_CIB_TAG_CONTAINER		"bucket"
60de42
+#  define XML_CIB_TAG_CONTAINER		"bundle"
60de42
 
60de42
 #  define XML_CIB_TAG_RSC_TEMPLATE	"template"
60de42
 
60de42
-- 
60de42
1.8.3.1
60de42