|
|
26ee02 |
From a6466923875cb752cb68ad412cfc8296191e62ac Mon Sep 17 00:00:00 2001
|
|
|
26ee02 |
From: Andrew Beekhof <andrew@beekhof.net>
|
|
|
26ee02 |
Date: Wed, 11 Oct 2017 13:28:58 +1100
|
|
|
26ee02 |
Subject: [PATCH 1/2] Fix: tools: Clean up everywhere if we don't know anything
|
|
|
26ee02 |
about the resource
|
|
|
26ee02 |
|
|
|
26ee02 |
---
|
|
|
26ee02 |
tools/crm_resource_runtime.c | 4 ++++
|
|
|
26ee02 |
1 file changed, 4 insertions(+)
|
|
|
26ee02 |
|
|
|
26ee02 |
diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c
|
|
|
26ee02 |
index b1fe892..2c3949a 100644
|
|
|
26ee02 |
--- a/tools/crm_resource_runtime.c
|
|
|
26ee02 |
+++ b/tools/crm_resource_runtime.c
|
|
|
26ee02 |
@@ -617,6 +617,10 @@ cli_resource_delete(crm_ipc_t *crmd_channel, const char *host_uname,
|
|
|
26ee02 |
GListPtr lpc = NULL;
|
|
|
26ee02 |
GListPtr nodes = g_hash_table_get_values(rsc->known_on);
|
|
|
26ee02 |
|
|
|
26ee02 |
+ if(nodes == NULL) {
|
|
|
26ee02 |
+ nodes = node_list_dup(data_set->nodes, FALSE, FALSE);
|
|
|
26ee02 |
+ }
|
|
|
26ee02 |
+
|
|
|
26ee02 |
for (lpc = nodes; lpc != NULL; lpc = lpc->next) {
|
|
|
26ee02 |
node = (node_t *) lpc->data;
|
|
|
26ee02 |
|
|
|
26ee02 |
--
|
|
|
26ee02 |
1.8.3.1
|
|
|
26ee02 |
|
|
|
26ee02 |
|
|
|
26ee02 |
From b0ca9a11581e3ec62429e41899f76fe3afc8b294 Mon Sep 17 00:00:00 2001
|
|
|
26ee02 |
From: Andrew Beekhof <andrew@beekhof.net>
|
|
|
26ee02 |
Date: Wed, 11 Oct 2017 22:28:58 +1100
|
|
|
26ee02 |
Subject: [PATCH 2/2] Fix: Tools: Allow crm_resource to operate on anonymous
|
|
|
26ee02 |
clones in unknown states
|
|
|
26ee02 |
|
|
|
26ee02 |
Since the clone_name value wont be set
|
|
|
26ee02 |
---
|
|
|
26ee02 |
include/crm/pengine/status.h | 8 +++++---
|
|
|
26ee02 |
lib/pengine/native.c | 15 ++++++++++-----
|
|
|
26ee02 |
lib/pengine/status.c | 8 +++++++-
|
|
|
26ee02 |
tools/crm_resource.c | 10 +++++-----
|
|
|
26ee02 |
4 files changed, 27 insertions(+), 14 deletions(-)
|
|
|
26ee02 |
|
|
|
26ee02 |
diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h
|
|
|
26ee02 |
index 4aacfe7..17787dd 100644
|
|
|
26ee02 |
--- a/include/crm/pengine/status.h
|
|
|
26ee02 |
+++ b/include/crm/pengine/status.h
|
|
|
26ee02 |
@@ -49,9 +49,10 @@ enum pe_restart {
|
|
|
26ee02 |
};
|
|
|
26ee02 |
|
|
|
26ee02 |
enum pe_find {
|
|
|
26ee02 |
- pe_find_renamed = 0x001,
|
|
|
26ee02 |
- pe_find_clone = 0x004,
|
|
|
26ee02 |
- pe_find_current = 0x008,
|
|
|
26ee02 |
+ pe_find_renamed = 0x001,
|
|
|
26ee02 |
+ pe_find_anon = 0x002,
|
|
|
26ee02 |
+ pe_find_clone = 0x004,
|
|
|
26ee02 |
+ pe_find_current = 0x008,
|
|
|
26ee02 |
pe_find_inactive = 0x010,
|
|
|
26ee02 |
};
|
|
|
26ee02 |
|
|
|
26ee02 |
@@ -459,6 +460,7 @@ gboolean cluster_status(pe_working_set_t * data_set);
|
|
|
26ee02 |
void set_working_set_defaults(pe_working_set_t * data_set);
|
|
|
26ee02 |
void cleanup_calculations(pe_working_set_t * data_set);
|
|
|
26ee02 |
resource_t *pe_find_resource(GListPtr rsc_list, const char *id_rh);
|
|
|
26ee02 |
+resource_t *pe_find_resource_with_flags(GListPtr rsc_list, const char *id, enum pe_find flags);
|
|
|
26ee02 |
node_t *pe_find_node(GListPtr node_list, const char *uname);
|
|
|
26ee02 |
node_t *pe_find_node_id(GListPtr node_list, const char *id);
|
|
|
26ee02 |
node_t *pe_find_node_any(GListPtr node_list, const char *id, const char *uname);
|
|
|
26ee02 |
diff --git a/lib/pengine/native.c b/lib/pengine/native.c
|
|
|
26ee02 |
index 81977aa..777dcf3 100644
|
|
|
26ee02 |
--- a/lib/pengine/native.c
|
|
|
26ee02 |
+++ b/lib/pengine/native.c
|
|
|
26ee02 |
@@ -180,14 +180,19 @@ native_find_rsc(resource_t * rsc, const char *id, node_t * on_node, int flags)
|
|
|
26ee02 |
match = TRUE;
|
|
|
26ee02 |
}
|
|
|
26ee02 |
|
|
|
26ee02 |
- } else {
|
|
|
26ee02 |
- if (strcmp(rsc->id, id) == 0) {
|
|
|
26ee02 |
- match = TRUE;
|
|
|
26ee02 |
+ } else if (strcmp(rsc->id, id) == 0) {
|
|
|
26ee02 |
+ match = TRUE;
|
|
|
26ee02 |
+
|
|
|
26ee02 |
+ } else if (is_set(flags, pe_find_renamed)
|
|
|
26ee02 |
+ && rsc->clone_name && strcmp(rsc->clone_name, id) == 0) {
|
|
|
26ee02 |
+ match = TRUE;
|
|
|
26ee02 |
|
|
|
26ee02 |
- } else if (is_set(flags, pe_find_renamed)
|
|
|
26ee02 |
- && rsc->clone_name && strcmp(rsc->clone_name, id) == 0) {
|
|
|
26ee02 |
+ } else if (is_set(flags, pe_find_anon) && is_not_set(rsc->flags, pe_rsc_unique)) {
|
|
|
26ee02 |
+ char *tmp = clone_strip(rsc->id);
|
|
|
26ee02 |
+ if(strcmp(tmp, id) == 0) {
|
|
|
26ee02 |
match = TRUE;
|
|
|
26ee02 |
}
|
|
|
26ee02 |
+ free(tmp);
|
|
|
26ee02 |
}
|
|
|
26ee02 |
|
|
|
26ee02 |
if (match && on_node) {
|
|
|
26ee02 |
diff --git a/lib/pengine/status.c b/lib/pengine/status.c
|
|
|
26ee02 |
index 09874a3..ec5a028 100644
|
|
|
26ee02 |
--- a/lib/pengine/status.c
|
|
|
26ee02 |
+++ b/lib/pengine/status.c
|
|
|
26ee02 |
@@ -248,13 +248,19 @@ set_working_set_defaults(pe_working_set_t * data_set)
|
|
|
26ee02 |
resource_t *
|
|
|
26ee02 |
pe_find_resource(GListPtr rsc_list, const char *id)
|
|
|
26ee02 |
{
|
|
|
26ee02 |
+ return pe_find_resource_with_flags(rsc_list, id, pe_find_renamed | pe_find_current);
|
|
|
26ee02 |
+}
|
|
|
26ee02 |
+
|
|
|
26ee02 |
+resource_t *
|
|
|
26ee02 |
+pe_find_resource_with_flags(GListPtr rsc_list, const char *id, enum pe_find flags)
|
|
|
26ee02 |
+{
|
|
|
26ee02 |
GListPtr rIter = NULL;
|
|
|
26ee02 |
|
|
|
26ee02 |
for (rIter = rsc_list; id && rIter; rIter = rIter->next) {
|
|
|
26ee02 |
resource_t *parent = rIter->data;
|
|
|
26ee02 |
|
|
|
26ee02 |
resource_t *match =
|
|
|
26ee02 |
- parent->fns->find_rsc(parent, id, NULL, pe_find_renamed | pe_find_current);
|
|
|
26ee02 |
+ parent->fns->find_rsc(parent, id, NULL, flags);
|
|
|
26ee02 |
if (match != NULL) {
|
|
|
26ee02 |
return match;
|
|
|
26ee02 |
}
|
|
|
26ee02 |
diff --git a/tools/crm_resource.c b/tools/crm_resource.c
|
|
|
26ee02 |
index 0eefa3b..56a1d09 100644
|
|
|
26ee02 |
--- a/tools/crm_resource.c
|
|
|
26ee02 |
+++ b/tools/crm_resource.c
|
|
|
26ee02 |
@@ -674,7 +674,7 @@ main(int argc, char **argv)
|
|
|
26ee02 |
goto bail;
|
|
|
26ee02 |
}
|
|
|
26ee02 |
|
|
|
26ee02 |
- rsc = pe_find_resource(data_set.resources, rsc_id);
|
|
|
26ee02 |
+ rsc = pe_find_resource_with_flags(data_set.resources, rsc_id, pe_find_renamed | pe_find_current | pe_find_anon);
|
|
|
26ee02 |
|
|
|
26ee02 |
rc = -EINVAL;
|
|
|
26ee02 |
if (rsc == NULL) {
|
|
|
26ee02 |
@@ -692,7 +692,7 @@ main(int argc, char **argv)
|
|
|
26ee02 |
|
|
|
26ee02 |
} else if (rsc_cmd == 'A' || rsc_cmd == 'a') {
|
|
|
26ee02 |
GListPtr lpc = NULL;
|
|
|
26ee02 |
- resource_t *rsc = pe_find_resource(data_set.resources, rsc_id);
|
|
|
26ee02 |
+ resource_t *rsc = pe_find_resource_with_flags(data_set.resources, rsc_id, pe_find_renamed | pe_find_current | pe_find_anon);
|
|
|
26ee02 |
xmlNode *cib_constraints = get_object_root(XML_CIB_TAG_CONSTRAINTS, data_set.input);
|
|
|
26ee02 |
|
|
|
26ee02 |
if (rsc == NULL) {
|
|
|
26ee02 |
@@ -804,7 +804,7 @@ main(int argc, char **argv)
|
|
|
26ee02 |
rc = cli_resource_move(rsc_id, host_uname, cib_conn, &data_set);
|
|
|
26ee02 |
|
|
|
26ee02 |
} else if (rsc_cmd == 'B' && host_uname) {
|
|
|
26ee02 |
- resource_t *rsc = pe_find_resource(data_set.resources, rsc_id);
|
|
|
26ee02 |
+ resource_t *rsc = pe_find_resource_with_flags(data_set.resources, rsc_id, pe_find_renamed | pe_find_current | pe_find_anon);
|
|
|
26ee02 |
node_t *dest = pe_find_node(data_set.nodes, host_uname);
|
|
|
26ee02 |
|
|
|
26ee02 |
rc = -ENXIO;
|
|
|
26ee02 |
@@ -821,7 +821,7 @@ main(int argc, char **argv)
|
|
|
26ee02 |
rc = cli_resource_ban(rsc_id, dest->details->uname, NULL, cib_conn);
|
|
|
26ee02 |
|
|
|
26ee02 |
} else if (rsc_cmd == 'B' || rsc_cmd == 'M') {
|
|
|
26ee02 |
- resource_t *rsc = pe_find_resource(data_set.resources, rsc_id);
|
|
|
26ee02 |
+ resource_t *rsc = pe_find_resource_with_flags(data_set.resources, rsc_id, pe_find_renamed | pe_find_current | pe_find_anon);
|
|
|
26ee02 |
|
|
|
26ee02 |
rc = -ENXIO;
|
|
|
26ee02 |
if (rsc_id == NULL) {
|
|
|
26ee02 |
@@ -939,7 +939,7 @@ main(int argc, char **argv)
|
|
|
26ee02 |
rc = cli_resource_delete_attribute(rsc_id, prop_set, prop_id, prop_name, cib_conn, &data_set);
|
|
|
26ee02 |
|
|
|
26ee02 |
} else if (rsc_cmd == 'C' && rsc_id) {
|
|
|
26ee02 |
- resource_t *rsc = pe_find_resource(data_set.resources, rsc_id);
|
|
|
26ee02 |
+ resource_t *rsc = pe_find_resource_with_flags(data_set.resources, rsc_id, pe_find_renamed | pe_find_current | pe_find_anon);
|
|
|
26ee02 |
|
|
|
26ee02 |
if(do_force == FALSE) {
|
|
|
26ee02 |
rsc = uber_parent(rsc);
|
|
|
26ee02 |
--
|
|
|
26ee02 |
1.8.3.1
|
|
|
26ee02 |
|