[Pacemaker] [Patch] Optional and message change of the "crm migrate" command.

renayama19661014 at ybb.ne.jp renayama19661014 at ybb.ne.jp
Wed Jun 15 19:49:17 EDT 2011


Hi Dejan,

Thank you for a reply.

> Many thanks for the patch. But we need a common procedure to
> fetch and remove options which are used in many commands from
> the list of arguments. Options such as "force" and "quiet".
> Right now I'm quite busy elsewhere, so that may take time ...

All right.

I think about the patch which I can commonize more.

Best Regards,
Hideo Yamauchi.



--- On Thu, 2011/6/16, Dejan Muhamedagic <dejanmm at fastmail.fm> wrote:

> Hi Hideo-san,
> 
> On Wed, Jun 15, 2011 at 02:47:09PM +0900, renayama19661014 at ybb.ne.jp wrote:
> > 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.
> 
> Many thanks for the patch. But we need a common procedure to
> fetch and remove options which are used in many commands from
> the list of arguments. Options such as "force" and "quiet".
> Right now I'm quite busy elsewhere, so that may take time ...
> 
> Cheers,
> 
> Dejan
> 
> > 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 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