Hi all, There is the message which does not comply with real operation by the message of the crm command.
When an operator executes "migrate" command, crm should display "unmigrate" in a message. In addition, the crm command does not have the option corresponding to the Q option of the crm_resource command. (snip) crm(live)resource# move usage: migrate <rsc> [<node>] [<lifetime>] [force] crm(live)resource# move grpDummy srv01 P3S force Migration will take effect until: 2011-06-15 13:47:39Z WARNING: Creating rsc_location constraint 'cli-standby-grpDummy' with a score of -INFINITY for resource grpDummy on srv02. This will prevent grpDummy from running on srv02 until the constraint is removed using the 'crm_resource -U' command or manually with cibadmin This will be the case even if srv02 is the last node in the cluster This message can be disabled with -Q (snip) I contribute a patch to add message and Q option to.(quiet option) (snip) crm(live)resource# migrate usage: migrate <rsc> [<node>] [<lifetime>] [force] [quiet] crm(live)resource# migrate grpDummy srv02 P3S force quiet crm(live)resource# unmigrate grpDummy crm(live)resource# migrate grpDummy srv01 P3S force WARNING: Creating rsc_location constraint 'cli-standby-grpDummy' with a score of -INFINITY for resource grpDummy on srv02. This will prevent grpDummy from running on srv02 until the constraint is removed using the 'crm resource unmigrate' command or manually with cibadmin This will be the case even if srv02 is the last node in the cluster This message can be disabled with quiet crm(live)resource# move grpDummy srv02 P3S force WARNING: Creating rsc_location constraint 'cli-standby-grpDummy' with a score of -INFINITY for resource grpDummy on srv02. This will prevent grpDummy from running on srv02 until the constraint is removed using the 'crm resource unmove' command or manually with cibadmin This will be the case even if srv02 is the last node in the cluster This message can be disabled with quiet (snip) I am going to contribute the patch functionalizing Q option to other crm commands later. I do not yet revise crm_cli.txt. I intend to send it with the patch of other Q options. Best Regards, Hideo Yamauchi.
diff -r c3ac0f617f6a ui.py.in --- a/ui.py.in Wed Jun 15 23:35:31 2011 +0900 +++ b/ui.py.in Wed Jun 15 23:39:41 2011 +0900 @@ -759,7 +759,7 @@ self.cmd_table["demote"] = (self.demote,(1,1),0,(rsc_list,)) self.cmd_table["manage"] = (self.manage,(1,1),0,(rsc_list,)) self.cmd_table["unmanage"] = (self.unmanage,(1,1),0,(rsc_list,)) - self.cmd_table["migrate"] = (self.migrate,(1,4),0,(rsc_list,nodes_list)) + self.cmd_table["migrate"] = (self.migrate,(1,5),0,(rsc_list,nodes_list)) self.cmd_table["unmigrate"] = (self.unmigrate,(1,1),0,(rsc_list,)) self.cmd_table["param"] = (self.param,(3,4),1,(rsc_list,attr_cmds)) self.cmd_table["meta"] = (self.meta,(3,4),1,(rsc_list,attr_cmds)) @@ -829,32 +829,43 @@ return False return set_deep_meta_attr("is-managed","false",rsc) def migrate(self,cmd,*args): - """usage: migrate <rsc> [<node>] [<lifetime>] [force]""" + """usage: migrate <rsc> [<node>] [<lifetime>] [force] [quiet]""" rsc = args[0] if not is_name_sane(rsc): return False node = None lifetime = None force = False + quiet = None if len(args) == 2: if not args[1] in listnodes(): if args[1] == "force": force = True + elif args[1] == "quiet": + quiet = args[1] else: lifetime = args[1] else: node = args[1] - elif len(args) == 3: + elif len(args) == 3 or len(args) == 4: if not args[1] in listnodes(): - lifetime = args[1] - force = True + for i in range(1, len(args)): + if args[i] == "force": + force = True + elif args[i] == "quiet": + quiet = args[i] + else: + lifetime = args[i] else: node = args[1] - if args[2] == "force": - force = True - else: - lifetime = args[2] - elif len(args) == 4: + for i in range(2, len(args)): + if args[i] == "force": + force = True + elif args[i] == "quiet": + quiet = args[i] + else: + lifetime = args[i] + elif len(args) == 5: if not is_name_sane(args[1]): return False node = args[1] @@ -863,6 +874,10 @@ syntax_err((cmd,force)) return False force = True + if not args[4] == "quiet": + syntax_err((cmd,quiet)) + return False + quiet = args[4] opts = '' if node: opts = "--node='%s'" % node @@ -870,7 +885,18 @@ opts = "%s --lifetime='%s'" % (opts,lifetime) if force or user_prefs.get_force(): opts = "%s --force" % opts - return ext_cmd(self.rsc_migrate % (rsc,opts)) == 0 + if quiet: + opts = "%s -Q" % opts + so, se, rc = get_allout(add_sudo(self.rsc_migrate % (rsc,opts))) + re.search("crm_resource -U", se) + if re: + if cmd == "migrate": + se = re.sub("crm_resource -U", "crm resource unmigrate", se) + else: + se = re.sub("crm_resource -U", "crm resource unmove", se) + se = re.sub("with -Q", "with quiet", se) + page_string(se) + return rc == 0 def unmigrate(self,cmd,rsc): "usage: unmigrate <rsc>" if not is_name_sane(rsc): diff -r c3ac0f617f6a utils.py --- a/utils.py Wed Jun 15 23:35:31 2011 +0900 +++ b/utils.py Wed Jun 15 23:39:41 2011 +0900 @@ -176,6 +176,19 @@ print ".EXT", cmd return subprocess.call(add_sudo(cmd), shell=True) +def get_allout(cmd): + ''' + Run a cmd, return stdout, stderr, returncode output. + ''' + proc = subprocess.Popen(cmd, shell = True, \ + stdout = subprocess.PIPE, stderr = subprocess.PIPE) + stdout_value, stderr_value = proc.communicate() + proc.wait() + rc = proc.returncode + stdout_value = stdout_value.strip() + stderr_value = stderr_value.strip() + return stdout_value, stderr_value, rc + def get_stdout(cmd, stderr_on = True): ''' Run a cmd, return stdin output.
_______________________________________________ Pacemaker mailing list: Pacemaker@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