Package not found: devel:languages:python:backports/.collapse-python-azure-mgmt-containerservicefleet-16_0

File pacemaker-crm_resource-restart-remember-existing-target-role.patch of Package pacemaker.3577

commit 06cc891dd16b1e1b8a004ed364a9f46c64127ffd
Author: Ken Gaillot <kgaillot@redhat.com>
Date:   Sun Jun 12 15:05:04 2016 -0500

    Fix: tools: remember any existing target-role when doing crm_resource --restart

diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
index b246e34..1567559 100644
--- a/tools/crm_resource_runtime.c
+++ b/tools/crm_resource_runtime.c
@@ -1070,6 +1070,7 @@ cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t *
 
     bool is_clone = FALSE;
     char *rsc_id = NULL;
+    char *orig_target_role = NULL;
 
     GList *list_delta = NULL;
     GList *target_active = NULL;
@@ -1088,7 +1089,9 @@ cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t *
         return -ENXIO;
     }
 
+    /* We might set the target-role meta-attribute */
     attr_set_type = XML_TAG_META_SETS;
+
     rsc_id = strdup(rsc->id);
     if(rsc->variant > pe_group) {
         is_clone = TRUE;
@@ -1127,10 +1130,20 @@ cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t *
     dump_list(current_active, "Origin");
 
     if(is_clone && host) {
+        /* Stop the clone instance by banning it from the host */
         BE_QUIET = TRUE;
         rc = cli_resource_ban(rsc_id, host, NULL, cib);
 
     } else {
+        /* Stop the resource by setting target-role to Stopped.
+         * Remember any existing target-role so we can restore it later
+         * (though it only makes any difference if it's Slave).
+         */
+        char *lookup_id = clone_strip(rsc->id);
+
+        find_resource_attr(cib, XML_NVPAIR_ATTR_VALUE, lookup_id, NULL, NULL,
+                           NULL, XML_RSC_ATTR_TARGET_ROLE, &orig_target_role);
+        free(lookup_id);
         rc = cli_resource_update_attribute(rsc_id, NULL, NULL, XML_RSC_ATTR_TARGET_ROLE, RSC_STOPPED, FALSE, cib, &data_set);
     }
     if(rc != pcmk_ok) {
@@ -1192,6 +1205,13 @@ cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t *
     if(is_clone && host) {
         rc = cli_resource_clear(rsc_id, host, NULL, cib);
 
+    } else if (orig_target_role) {
+        rc = cli_resource_update_attribute(rsc_id, NULL, NULL,
+                                           XML_RSC_ATTR_TARGET_ROLE,
+                                           orig_target_role, FALSE, cib,
+                                           &data_set);
+        free(orig_target_role);
+        orig_target_role = NULL;
     } else {
         rc = cli_resource_delete_attribute(rsc_id, NULL, NULL, XML_RSC_ATTR_TARGET_ROLE, cib, &data_set);
     }
@@ -1250,7 +1270,11 @@ cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t *
   failure:
     if(is_clone && host) {
         cli_resource_clear(rsc_id, host, NULL, cib);
-
+    } else if (orig_target_role) {
+        cli_resource_update_attribute(rsc_id, NULL, NULL,
+                                      XML_RSC_ATTR_TARGET_ROLE,
+                                      orig_target_role, FALSE, cib, &data_set);
+        free(orig_target_role);
     } else {
         cli_resource_delete_attribute(rsc_id, NULL, NULL, XML_RSC_ATTR_TARGET_ROLE, cib, &data_set);
     }
openSUSE Build Service is sponsored by