Blob Blame History Raw
From aa584a7cf34a0e740f6d8249a7adabf358d66e41 Mon Sep 17 00:00:00 2001
From: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
Date: Fri, 10 Mar 2017 14:31:33 +0100
Subject: [PATCH 1/2] Low: tools: crm_resource should set
 OCF_RESKEY_crm_feature_set

Some resource agent relies on this environment variable during their
validate-all action to check the CRM feature set compatibility.

Without this environment variable, most of the --force-ACTION are
failing.

At least the Linbit/drbd and PAF (pgsqlms) agents are using it.
---
 tools/crm_resource_runtime.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
index ee7523f..e6a186a 100644
--- a/tools/crm_resource_runtime.c
+++ b/tools/crm_resource_runtime.c
@@ -1508,6 +1508,10 @@ cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *ove
     }
 
     params = generate_resource_params(rsc, data_set);
+
+    /* add crm_feature_set env needed by some resource agents */
+    g_hash_table_insert(params, strdup(XML_ATTR_CRM_VERSION), strdup(CRM_FEATURE_SET));
+
     op = resources_action_create(rsc->id, rclass, rprov, rtype, action, 0, -1, params, 0);
 
     if(do_trace) {
-- 
1.8.3.1


From 02a737976d34d41da65fa25a64e5708a1269cef7 Mon Sep 17 00:00:00 2001
From: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
Date: Fri, 10 Mar 2017 14:50:43 +0100
Subject: [PATCH 2/2] Feature: tools: Add "--validate" command to crm_resource

This command calls the validate-all action from the resource agent. It
allows admins to check their resource is setup correctly in a shadow
environment before pushing their setup to the cluster.
---
 tools/crm_resource.c         | 6 ++++--
 tools/crm_resource_runtime.c | 5 ++++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/tools/crm_resource.c b/tools/crm_resource.c
index 45dfd4a..e8cd80e 100644
--- a/tools/crm_resource.c
+++ b/tools/crm_resource.c
@@ -128,6 +128,7 @@ static struct crm_option long_options[] = {
     {"constraints",0, 0, 'a', "\tDisplay the (co)location constraints that apply to a resource"},
 
     {"-spacer-",	1, 0, '-', "\nCommands:"},
+    {"validate",   0, 0, 0, "\t\tCall the validate-all action of the local given resource"},
     {"cleanup",         0, 0, 'C',
         "\t\tDelete resource's history and re-check its current state. "
         "Optional: --resource (if not specified, all resources), "
@@ -303,7 +304,8 @@ main(int argc, char **argv)
                     require_dataset = FALSE;
 
                 } else if (
-                    safe_str_eq("restart", longname)
+                    safe_str_eq("validate", longname)
+                    || safe_str_eq("restart", longname)
                     || safe_str_eq("force-demote",  longname)
                     || safe_str_eq("force-stop",    longname)
                     || safe_str_eq("force-start",   longname)
@@ -687,7 +689,7 @@ main(int argc, char **argv)
     } else if (rsc_cmd == 0 && rsc_long_cmd && safe_str_eq(rsc_long_cmd, "wait")) {
         rc = wait_till_stable(timeout_ms, cib_conn);
 
-    } else if (rsc_cmd == 0 && rsc_long_cmd) { /* force-(stop|start|check) */
+    } else if (rsc_cmd == 0 && rsc_long_cmd) { /* validate or force-(stop|start|check) */
         rc = cli_resource_execute(rsc_id, rsc_long_cmd, override_params, cib_conn, &data_set);
 
     } else if (rsc_cmd == 'A' || rsc_cmd == 'a') {
diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
index e6a186a..ca38aea 100644
--- a/tools/crm_resource_runtime.c
+++ b/tools/crm_resource_runtime.c
@@ -1467,7 +1467,10 @@ cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *ove
         return -ENXIO;
     }
 
-    if (safe_str_eq(rsc_action, "force-check")) {
+    if (safe_str_eq(rsc_action, "validate")) {
+        action = "validate-all";
+
+    } else if (safe_str_eq(rsc_action, "force-check")) {
         action = "monitor";
 
     } else if (safe_str_eq(rsc_action, "force-stop")) {
-- 
1.8.3.1