Blame SOURCES/019-crm_resource.patch

7ac83c
From b4e426a016a4d7c9ade39e60a83644fc537bce26 Mon Sep 17 00:00:00 2001
7ac83c
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
7ac83c
Date: Wed, 11 Aug 2021 12:10:32 +0200
7ac83c
Subject: [PATCH 1/2] Fix: crm_resource: translate LSB rc to exit code and fix
7ac83c
 resources_find_service_class() call
7ac83c
7ac83c
---
7ac83c
 tools/crm_resource_runtime.c | 16 ++++++++++++----
7ac83c
 1 file changed, 12 insertions(+), 4 deletions(-)
7ac83c
7ac83c
diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
7ac83c
index ce037c514..e9d8aa687 100644
7ac83c
--- a/tools/crm_resource_runtime.c
7ac83c
+++ b/tools/crm_resource_runtime.c
7ac83c
@@ -1718,10 +1718,10 @@ cli_resource_execute_from_params(pcmk__output_t *out, const char *rsc_name,
7ac83c
         crm_exit(CRM_EX_UNIMPLEMENT_FEATURE);
7ac83c
     } else if (pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_SERVICE,
7ac83c
                 pcmk__str_casei) && !pcmk__str_eq(
7ac83c
-                resources_find_service_class(rsc_name), PCMK_RESOURCE_CLASS_LSB,
7ac83c
+                resources_find_service_class(rsc_type), PCMK_RESOURCE_CLASS_LSB,
7ac83c
                 pcmk__str_casei)) {
7ac83c
         out->err(out, "Sorry, the %s option doesn't support %s resources",
7ac83c
-                 rsc_action, resources_find_service_class(rsc_name));
7ac83c
+                 rsc_action, resources_find_service_class(rsc_type));
7ac83c
         crm_exit(CRM_EX_UNIMPLEMENT_FEATURE);
7ac83c
     }
7ac83c
 
7ac83c
@@ -1798,9 +1798,17 @@ cli_resource_execute_from_params(pcmk__output_t *out, const char *rsc_name,
7ac83c
     if (services_action_sync(op)) {
7ac83c
         exit_code = op->rc;
7ac83c
 
7ac83c
+        /* Lookup exit code based on rc for LSB resources */
7ac83c
+        if (( pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei) ||
7ac83c
+              (pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_SERVICE, pcmk__str_casei) &&
7ac83c
+              pcmk__str_eq(resources_find_service_class(rsc_type), PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei)) ) &&
7ac83c
+              pcmk__str_eq(rsc_action, "force-check", pcmk__str_casei)) {
7ac83c
+            exit_code = services_get_ocf_exitcode(action, exit_code);
7ac83c
+        }
7ac83c
+
7ac83c
         out->message(out, "resource-agent-action", resource_verbose, rsc_class,
7ac83c
-                     rsc_prov, rsc_type, rsc_name, rsc_action, override_hash, op->rc,
7ac83c
-                     op->status, op->stdout_data, op->stderr_data);
7ac83c
+                     rsc_prov, rsc_type, rsc_name, rsc_action, override_hash,
7ac83c
+                     exit_code, op->status, op->stdout_data, op->stderr_data);
7ac83c
     } else {
7ac83c
         exit_code = op->rc == 0 ? CRM_EX_ERROR : op->rc;
7ac83c
     }
7ac83c
-- 
7ac83c
2.27.0
7ac83c
7ac83c
7ac83c
From 9a6beb74adfb4710fb3a4e588bef79a562c101f3 Mon Sep 17 00:00:00 2001
7ac83c
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
7ac83c
Date: Thu, 12 Aug 2021 18:54:30 +0200
7ac83c
Subject: [PATCH 2/2] Refactor: crm_resource: simplify rsc_class logic by
7ac83c
 getting actual class early if it's of class "service"
7ac83c
7ac83c
---
7ac83c
 tools/crm_resource_runtime.c | 23 +++++++++--------------
7ac83c
 1 file changed, 9 insertions(+), 14 deletions(-)
7ac83c
7ac83c
diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
7ac83c
index e9d8aa687..13b78b6b9 100644
7ac83c
--- a/tools/crm_resource_runtime.c
7ac83c
+++ b/tools/crm_resource_runtime.c
7ac83c
@@ -1702,26 +1702,23 @@ cli_resource_execute_from_params(pcmk__output_t *out, const char *rsc_name,
7ac83c
                                  int timeout_ms, int resource_verbose, gboolean force,
7ac83c
                                  int check_level)
7ac83c
 {
7ac83c
+    const char *class = NULL;
7ac83c
     const char *action = NULL;
7ac83c
     GHashTable *params_copy = NULL;
7ac83c
     crm_exit_t exit_code = CRM_EX_OK;
7ac83c
     svc_action_t *op = NULL;
7ac83c
 
7ac83c
-    if (pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_casei)) {
7ac83c
+    class = !pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_SERVICE, pcmk__str_casei) ?
7ac83c
+                rsc_class : resources_find_service_class(rsc_type);
7ac83c
+
7ac83c
+    if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_casei)) {
7ac83c
         out->err(out, "Sorry, the %s option doesn't support %s resources yet",
7ac83c
-                 rsc_action, rsc_class);
7ac83c
+                 rsc_action, class);
7ac83c
         crm_exit(CRM_EX_UNIMPLEMENT_FEATURE);
7ac83c
-    } else if (pcmk__strcase_any_of(rsc_class, PCMK_RESOURCE_CLASS_SYSTEMD,
7ac83c
+    } else if (pcmk__strcase_any_of(class, PCMK_RESOURCE_CLASS_SYSTEMD,
7ac83c
                 PCMK_RESOURCE_CLASS_UPSTART, PCMK_RESOURCE_CLASS_NAGIOS, NULL)) {
7ac83c
         out->err(out, "Sorry, the %s option doesn't support %s resources",
7ac83c
-                 rsc_action, rsc_class);
7ac83c
-        crm_exit(CRM_EX_UNIMPLEMENT_FEATURE);
7ac83c
-    } else if (pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_SERVICE,
7ac83c
-                pcmk__str_casei) && !pcmk__str_eq(
7ac83c
-                resources_find_service_class(rsc_type), PCMK_RESOURCE_CLASS_LSB,
7ac83c
-                pcmk__str_casei)) {
7ac83c
-        out->err(out, "Sorry, the %s option doesn't support %s resources",
7ac83c
-                 rsc_action, resources_find_service_class(rsc_type));
7ac83c
+                 rsc_action, class);
7ac83c
         crm_exit(CRM_EX_UNIMPLEMENT_FEATURE);
7ac83c
     }
7ac83c
 
7ac83c
@@ -1799,9 +1796,7 @@ cli_resource_execute_from_params(pcmk__output_t *out, const char *rsc_name,
7ac83c
         exit_code = op->rc;
7ac83c
 
7ac83c
         /* Lookup exit code based on rc for LSB resources */
7ac83c
-        if (( pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei) ||
7ac83c
-              (pcmk__str_eq(rsc_class, PCMK_RESOURCE_CLASS_SERVICE, pcmk__str_casei) &&
7ac83c
-              pcmk__str_eq(resources_find_service_class(rsc_type), PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei)) ) &&
7ac83c
+        if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_LSB, pcmk__str_casei) &&
7ac83c
               pcmk__str_eq(rsc_action, "force-check", pcmk__str_casei)) {
7ac83c
             exit_code = services_get_ocf_exitcode(action, exit_code);
7ac83c
         }
7ac83c
-- 
7ac83c
2.27.0
7ac83c