[Pacemaker] [PATCH] crm shell (configure node) for Heartbeat stack
Kazunori INOUE
inouekazu at intellilink.co.jp
Wed Jun 22 05:14:04 UTC 2011
Hi Dejan,
Thank you for the response.
All right. We'll wait.
Then, I revised a patch a little.
(The result to be provided is the same as the first patch.)
# hg diff -r 22acba43e041 shell/modules/cibconfig.py
diff -r 22acba43e041 shell/modules/cibconfig.py
--- a/shell/modules/cibconfig.py Tue Jun 07 17:18:05 2011 +0200
+++ b/shell/modules/cibconfig.py Wed Jun 22 13:37:31 2011 +0900
@@ -318,6 +318,22 @@
except: pass
return []
+def replace_node_id(cli_list):
+ head = cli_list[0]
+ id = find_value(head[1],"id")
+ if head[0] != "node":
+ return
+ common_debug("cli_list: %s"%cli_list)
+ for obj in [obj for obj in cib_factory.cib_objects if obj.obj_type == head[0]]:
+ uname = obj.node.getAttribute("uname")
+ # The following conditions means 'Heartbeat stack' and '$id is not specified'
+ if obj.obj_id != uname and uname == id:
+ for x in [x for x in head[1] if x[0] == "id"]:
+ common_debug("replace node's id: <%s> to <%s>"%(x[1],obj.obj_id))
+ x[1] = obj.obj_id.encode('ascii')
+ common_debug("cli_list: %s"%cli_list)
+ return
+
class CibObjectSetCli(CibObjectSet):
'''
Edit or display a set of cib objects (using cli notation).
@@ -372,6 +388,7 @@
err_buf.incr_lineno()
cli_list = cp.parse(cli_text)
if cli_list:
+ replace_node_id(cli_list)
id = find_value(cli_list[0][1],"id")
if id:
if id in id_list:
@@ -2058,6 +2075,8 @@
if obj_type == "op":
return self.add_op(cli_list)
if obj_type == "node":
+ replace_node_id(cli_list)
+ obj_id = find_value(head[1],"id")
obj = self.find_object(obj_id)
# make an exception and allow updating nodes
if obj:
#
Best Regards,
Kazunori INOUE
(2011/06/21 21:59), Dejan Muhamedagic wrote:
> Hi Kazunori-san,
>
> Apologies for not getting back to you sooner.
>
> On Mon, Jun 06, 2011 at 06:17:31PM +0900, Kazunori INOUE wrote:
>> Hi,
>>
>> (2011/05/27 19:32), Lars Ellenberg wrote:
>>>
>>> Oh no.
>>> Now you have duplicated all nodes, and will always get "unclean" nodes.
>>>
>>> Is this some variant of:
>>> http://www.clusterlabs.org/wiki/Initial_Configuration#A_Special_Note_for_People_Switching_Cluster_Stacks
>>>
>>> Could that be the root cause of your duplicate node instances with
>>> different ids?
>>>
>> Yes.
>> Corosync uses uname (output of 'uname -n') as ID of the node, and
>> Heartbeat uses UUID as ID of the node. Therefore, on Heartbeat stack,
>> unclean node is added when I loaded the following CLI.
>> # cat test1.cli
>> node srv-a1 utilization capacity="1"
>> #
>>
>> Attached "crm_configure_node_for_hb.patch" replaces ID of node (uname)
>> with UUID, after parsing the node ('node srv-a1 utilization capacity="1"')
>> command.
>> # crm -d configure load update test1.cli
>> (snip)
>> DEBUG: 1: cli_list: [['node', [['uname', 'srv-a1'], ['id', 'srv-a1']]], ['utilization', [['capacity', '1']]]]
>> DEBUG: 1: id_replace:<srv-a1> to<0cd9d2df-13fa-4b11-93d3-27a57192caeb>
>> DEBUG: 1: cli_list: [['node', [['uname', 'srv-a1'], ['id', '0cd9d2df-13fa-4b11-93d3-27a57192caeb']]], ['utilization', [['capacity', '1']]]]
>> (snip)
>>
>> In other words attached patch will get the same result as loading
>> following cli.
>> # cat test2.cli
>> node $id="0cd9d2df-13fa-4b11-93d3-27a57192caeb" utilization capacity="1"
>> #
>> Is not this patch effective?
>
> Took a look at the patch, but I still need to investigate this
> further. Unfortunately, my schedule got really tight lately.
> I'll try to get to it as soon as I can.
>
> Cheers,
>
> Dejan
>
> _______________________________________________
> Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>
> Project Home: http://www.clusterlabs.org
> Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> Bugs: http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker
More information about the Pacemaker
mailing list