Hi,

On Wed, Sep 23, 2009 at 06:18:03AM -0400, Karl W. Lewis wrote:
> On Wed, Sep 23, 2009 at 5:23 AM, Dejan Muhamedagic <[email protected]>wrote:
> 
> > Hi again,
> >
> > On Tue, Sep 22, 2009 at 12:06:06PM -0400, Karl W. Lewis wrote:
> > > As attachments, then.
> >
> > Any possibility to prepare also a short README on how to setup
> > the blades for stonith? That would be great. You don't have to go
> > into details which are not specific to Egenera.
> >
> > Cheers,
> >
> > Dejan
> >
> 
> Yes, I can and will do that.

Great!

> I've looked quickly at your changes - you are clearly correct about the
> reboot sequence.  I will rework that.
> 
> I don't much like the status check, either, but if I tell it what I'm
> looking for I can get a status back more quickly, otherwise, I *have* to
> wait for the timeout value, and return whatever condition the host is in at
> that point, for the script/stonith to decide if that's good or bad.  I was
> going for speed rather than elegance of code.

OK, that makes sense. My comments unfortunately can be based only
on the code.

> I am working a production problem this morning... and I will submit changes
> and a short README, once I've gotten a little time to think about the
> changes and test them.
> 
> Thank you for your efforts; I was not trying to make work for you.

Well, kudos are actually to you for contributing the code :)

Cheers,

Dejan

> Be well,
> 
> Karl
> 
> 
> > > Karl
> > >
> > >
> > > On Tue, Sep 22, 2009 at 10:51 AM, Dejan Muhamedagic <[email protected]
> > >wrote:
> > >
> > > > Hi,
> > > >
> > > > On Tue, Sep 22, 2009 at 09:39:00AM -0400, Karl W. Lewis wrote:
> > > > > On Mon, Sep 7, 2009 at 11:23 AM, Karl W. Lewis <
> > [email protected]
> > > > >wrote:
> > > > >
> > > > > >
> > > > > >
> > > > > > On Mon, Sep 7, 2009 at 10:16 AM, Dejan Muhamedagic <
> > > > [email protected]>wrote:
> > > > > >
> > > > > >> Hi,
> > > > > >>
> > > > > >> On Wed, Aug 26, 2009 at 01:11:24PM -0400, Karl W. Lewis wrote:
> > > > > >> > On Wed, Aug 26, 2009 at 10:58 AM, Dejan Muhamedagic <
> > > > > >> [email protected]>wrote:
> > > > > >> >
> > > > > >> > > Hi,
> > > > > >> > >
> > > > > >> > > On Mon, Aug 24, 2009 at 11:35:15AM -0400, Karl W. Lewis wrote:
> > > > > >> > > > I don't know if anyone else is running Heartbeat/Pacemaker
> > on an
> > > > > >> Egenera
> > > > > >> > > > BladeFrame, but if they are, these scripts might be useful
> > to
> > > > help
> > > > > >> set up
> > > > > >> > > > stonith.
> > > > > >> > > >
> > > > > >> > > > The Egeneras use an IPMI arrangement to control the various
> > > > > >> processor
> > > > > >> > > > blades, and these routines take advantage of that.
> > > > > >> > >
> > > > > >> > > Did you try ipmilan or external/ipmi too?
> > > > > >> >
> > > > > >> >
> > > > > >> > I did not, but a quick review leads me to believe that the
> > egenera
> > > > frame
> > > > > >> > does not count as an impi "device".   One might be able to make
> > that
> > > > > >> work,
> > > > > >> > but you'd have to modify the ipmi script until it looked much
> > like
> > > > this
> > > > > >> > example, or, you'd have to play very. very hard with the egnera
> > > > > >> c-blades,
> > > > > >> > and I can't imagine anyone would want to do that.
> > > > > >>
> > > > > >> Well, either they are IPMI compliant or not, i.e. our ipmi
> > > > > >> stonith modules should work without modifications. I think it's
> > > > > >> worth trying. At any rate, I think that this is a different
> > > > > >> solution worth pursuing, since it would reduce the configuration
> > > > > >> quite a bit.
> > > > > >>
> > > > > >
> > > > > > I've not forgotten this task, but it's been very busy at work and
> > I'm
> > > > doing
> > > > > > more research.  The ipmi commands do not work the way I expected
> > them
> > > > to,
> > > > > > (writing to "off" just resets the blade), so I'm looking at the
> > native
> > > > > > Egenera PAN Manager commands.
> > > > > >
> > > > > >>
> > > > > >> > > > This may not be the best method of doing it, but it does
> > appear
> > > > to
> > > > > >> work.
> > > > > >> > > > It is not fast.  What it lacks in speed, however, it makes
> > up
> > > > for in
> > > > > >> > > > flexibility.  It can figure out which c-blade is the master,
> > and
> > > > > >> then
> > > > > >> > > figure
> > > > > >> > > > out which p-blade is running the server to be stonithed, and
> > > > then
> > > > > >> > > stonith,
> > > > > >> > > > it.  The framework for this was an existing external stonith
> > > > script
> > > > > >> that
> > > > > >> > > I
> > > > > >> > > > simply modified to meet my needs.
> > > > > >> > > >
> > > > > >> > > > The two short shell scripts at the top need to live in
> > > > /root/bin/ on
> > > > > >> both
> > > > > >> > >
> > > > > >> > > I guess you wanted to say $HOME/bin. Note that the root user
> > may
> > > > > >> > > not always have the same home directory. Perhaps it would be
> > > > > >> > > better to go with an absolute path such as /usr/local/bin.
> > > > > >> >
> > > > > >> >
> > > > > >> > I actually put them in root's directory with malice
> > aforethought,
> > > > but
> > > > > >> now
> > > > > >> > that you've asked the question... I guess I can't defend that
> > > > decision.
> > > > > >>  I
> > > > > >> > use the user root because that's the only user on the c-blades
> > under
> > > > > >> > egenera's setup.  One could add another user, but I can't
> > advocate
> > > > > >> changing
> > > > > >> > the config of the c-blades.
> > > > > >> >
> > > > > >> >
> > > > > >> > >
> > > > > >> > >
> > > > > >> > > > control blades.  The cluster servers need to have ssh keys
> > and
> > > > any
> > > > > >> > > required
> > > > > >> > > > firewall rules setup such that root on the cluster servers
> > can
> > > > ssh
> > > > > >> to the
> > > > > >> > > > c-blades.
> > > > > >> > >
> > > > > >> > > There can be more than one? Is that covered in any way by the
> > > > > >> > > script, i.e. does it try all available?
> > > > > >> >
> > > > > >> >
> > > > > >> > Yes.  Just so.  There are two c-baldes; one is master and one is
> > > > > >> standby.  I
> > > > > >> > *think* that the master is the only one that can issue the ipmi
> > > > commands
> > > > > >> and
> > > > > >> > get a reaction.  I've not experimented with that, however.  (I
> > hit a
> > > > > >> > solution that worked, and I stopped experimenting.)
> > > > > >>
> > > > > >> It would be good if you do some :) You don't want any surprises
> > > > > >> when it comes to fencing.
> > > > > >>
> > > > > >
> > > > > > Right.  Surprises are for Birthday Parties, presents, and such, not
> > so
> > > > much
> > > > > > for servers.
> > > > > >
> > > > > > Karl
> > > > > >
> > > > > >
> > > > > >
> > > > > >>
> > > > > >> > The script tracks down
> > > > > >> > which of the two is  master and then talks to that server.  One
> > > > could
> > > > > >> avoid
> > > > > >> > that by giving both c-blades the same set of rsa host keys, and
> > then
> > > > > >> just
> > > > > >> > talking to the virtual IP Address that the master blade, which
> > ever
> > > > of
> > > > > >> the
> > > > > >> > two it is, is answering on.  Again, I am disinclined to modify
> > the
> > > > > >> egenera
> > > > > >> > setup that way.  I tried telling ssh to ignore the key
> > verification,
> > > > but
> > > > > >> it
> > > > > >> > still updates the knownhosts file when the script logs in, so
> > it'll
> > > > > >> throw
> > > > > >> > errors the next time it tries if the master has moved.
> > > > > >>
> > > > > >> Right. Isn't there an option to tell ssh not to update the
> > > > > >> knownhosts file.
> > > > > >>
> > > > > >> > > > If anyone else is already doing this and has a better way,
> > I'd
> > > > be
> > > > > >> happy
> > > > > >> > > to
> > > > > >> > > > hear about it.
> > > > > >> > > >
> > > > > >> > > > Karl
> > > > > >> > >
> > > > > >> > > > ### THESE TWO SHELL SCRIPTS ARE EXPECTED IN /root/bin ON
> > BOTH
> > > > > >> c-blades
> > > > > >> > > > ### THAT WAY THE SCRPIT THAT FOLLOWS WILL WORK REGARDLESS OF
> > > > WHICH
> > > > > >> > > > ### EGENERA c-blade IS PAN-MASTER
> > > > > >> > > >
> > > > > >> > > > #!/bin/bash
> > > > > >> > > > # get_master.sh -  returns the name of the master control
> > blade
> > > > in
> > > > > >> the
> > > > > >> > > > PAN.
> > > > > >> > > >
> > > > > >> > > > MASTER=`/opt/panmgr/bin/esh pan | grep ^c | grep Master |
> > cut -c
> > > > 2`
> > > > > >> > > > echo "cblade-${MASTER}"
> > > > > >> > > > #CUT HERE
> > > > > >> #############################################################
> > > > > >> > > >
> > > > > >> > > > #!/bin/bash
> > > > > >> > > >
> > > > > >> > > > # get_processor_blade.sh - identifies the blade running a
> > given
> > > > > >> pserver.
> > > > > >> > >
> > > > > >> > > This name doesn't exactly match the references in the script.
> > > > > >> >
> > > > > >> >
> > > > > >> >
> > > > > >> > :%s/_blade/-blade/
> > > > > >> >
> > > > > >> > I'm a lousy typist....
> > > > > >> >
> > > > > >> >
> > > > > >> >
> > > > > >> > >
> > > > > >> > >
> > > > > >> > > > BLADE=`/opt/panmgr/bin/esh pan | grep ^${1}`
> > > > > >> > > > echo ${BLADE} | sed -e "s/^.*MyBladeFrame\/\(.\)\(.\)
> > > > .*/a\1-\2/"
> > > > > >> > > > #CUT HERE
> > > > > >> #############################################################
> > > > > >> > > >
> > > > > >> > > > #!/bin/bash
> > > > > >> > > > #
> > > > > >> > > > # External STONITH module for Egenera.
> > > > > >> > > > #
> > > > > >> > > > # Copyright (c) 2004 SUSE LINUX AG - Lars Marowsky-Bree <
> > > > > >> [email protected]>
> > > > > >> > > > # Copyright (c) 2009 Karl W. Lewis <[email protected]>
> > > > > >> > > > # This program is free software; you can redistribute
> > > > > >> > > > #it and/or modify # it under the terms of version 2 of the
> > GNU
> > > > > >> General
> > > > > >> > > > #Public License as # published by the Free Software
> > Foundation.
> > > > > >> > > > #
> > > > > >> > > > # This program is distributed in the hope that it would be
> > > > useful,
> > > > > >> but
> > > > > >> > > > # WITHOUT ANY WARRANTY; without even the implied warranty of
> > > > > >> > > > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> > > > > >> > > > #
> > > > > >> > > > # Further, this software is distributed without any warranty
> > > > that it
> > > > > >> is
> > > > > >> > > > # free of the rightful claim of any third person regarding
> > > > > >> infringement
> > > > > >> > > > # or the like.  Any license provided herein, whether implied
> > or
> > > > > >> > > > # otherwise, applies only to this software file.  Patent
> > > > licenses,
> > > > > >> if
> > > > > >> > > > # any, provided herein do not apply to combinations of this
> > > > program
> > > > > >> with
> > > > > >> > > > # other software, or any other product whatsoever.
> > > > > >> > > > #
> > > > > >> > > > # You should have received a copy of the GNU General Public
> > > > License
> > > > > >> > > > # along with this program; if not, write the Free Software
> > > > > >> Foundation,
> > > > > >> > > > # Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
> > USA.
> > > > > >> > > > #
> > > > > >> > > >
> > > > > >> > > > SSH_COMMAND="/usr/bin/ssh"
> > > > > >> > > >
> > > > > >> > > > #LOG=/var/log/egenera-stonith.log
> > > > > >> > > > #echo `date` >> $LOG
> > > > > >> > > > #echo $hostlist >> $LOG
> > > > > >> > > > #echo $1 >> $LOG
> > > > > >> > > > #echo $2 >> $LOG
> > > > > >> > > > #echo "executing--------------" >> $LOG
> > > > > >> > > >
> > > > > >> > > > # Rewrite the hostlist to accept "," as a delimeter for
> > > > hostnames
> > > > > >> too.
> > > > > >> > > > hostlist=`echo $hostlist | tr ',' ' '`
> > > > > >> > > >
> > > > > >> > > > is_host_up() {
> > > > > >> > > >   for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
> > > > > >> > > >   do
> > > > > >> > > >     if
> > > > > >> > > >       ping -w1 -c1 "$1" >/dev/null 2>&1
> > > > > >> > > >     then
> > > > > >> > > >       sleep 10
> > > > > >> > > >     else
> > > > > >> > > >       return 1
> > > > > >> > > >     fi
> > > > > >> > > >   done
> > > > > >> > > >   return 0
> > > > > >> > > > }
> > > > > >> > >
> > > > > >> > > This is from external/ssh and used only if the parameter
> > > > > >> > > livedangerously is set to yes. Doesn't strike me as a very
> > robust
> > > > > >> > > way to check if a node is running. Is there another way? Using
> > > > > >> > > the cblades sounds like a most natural way.
> > > > > >> >
> > > > > >> >
> > > > > >> > Yes.  You're clearly right.  By way of excuse I'd claim I was
> > rather
> > > > > >> > narrowly focused on getting a server fenced and therefore I
> > ignored
> > > > > >> other
> > > > > >> > functions.  If you'll tolerate a "version 2, (or, I suppose
> > v0.02),
> > > > I'll
> > > > > >> try
> > > > > >> > again.  It'll take me a few hours to fix and test, I'll try
> > again.
> > > >  (A
> > > > > >> quick
> > > > > >> > experiment reveals that yes, the master blade does indeed know
> > the
> > > > > >> status of
> > > > > >> > a given processor blade.)
> > > > > >>
> > > > > >> Great.
> > > > > >>
> > > > > >> > > > MASTER_BLADE=`$SSH_COMMAND cblade-1 "bin/get_master.sh" |
> > tail
> > > > -1`
> > > > > >> > > >
> > > > > >> > > > case $1 in
> > > > > >> > > > gethosts)
> > > > > >> > > >         for h in $hostlist ; do
> > > > > >> > > >                 echo $h
> > > > > >> > > >         done
> > > > > >> > > >         exit 0
> > > > > >> > > >         ;;
> > > > > >> > > > on)
> > > > > >> > > >         for h in $hostlist
> > > > > >> > > >         do
> > > > > >> > > >           if
> > > > > >> > > >             [ "$h" != "$2" ]
> > > > > >> > > >           then
> > > > > >> > > >             continue
> > > > > >> > > >           else
> > > > > >> > > >                 P_BLADE=`$SSH_COMMAND $MASTER_BLADE
> > > > > >> > > "bin/get_processor-blade.sh $h"`
> > > > > >> > > >                 $SSH_COMMAND $MASTER_BLADE "echo 'please' >
> > > > > >> > > /proc/egenera/ipmi/node/$P_BLADE/control/on"
> > > > > >> > > >           fi
> > > > > >> > > >           sleep 30
> > > > > >> > > >           if
> > > > > >> > > >             is_host_up $h
> > > > > >> > > >           then
> > > > > >> > > >             exit 1
> > > > > >> > > >           else
> > > > > >> > > >             exit 0
> > > > > >> > > >           fi
> > > > > >> > > >         done
> > > > > >> > > >         exit 0
> > > > > >> > > >         ;;
> > > > > >> > > > off)
> > > > > >> > > >         for h in $hostlist
> > > > > >> > > >         do
> > > > > >> > > >           if
> > > > > >> > > >             [ "$h" != "$2" ]
> > > > > >> > > >           then
> > > > > >> > > >             continue
> > > > > >> > > >           else
> > > > > >> > > >                 P_BLADE=`$SSH_COMMAND $MASTER_BLADE
> > > > > >> > > "bin/get_processor-blade.sh $h"`
> > > > > >> > > >                 $SSH_COMMAND $MASTER_BLADE "echo 'please' >
> > > > > >> > > /proc/egenera/ipmi/node/$P_BLADE/control/off"
> > > > > >> > > >           fi
> > > > > >> > > >         done
> > > > > >> > > >         exit 0
> > > > > >> > > >         ;;
> > > > > >> > > > reset)
> > > > > >> > > >         for h in $hostlist
> > > > > >> > > >         do
> > > > > >> > > >           if
> > > > > >> > > >             [ "$h" != "$2" ]
> > > > > >> > > >           then
> > > > > >> > > >             continue
> > > > > >> > > >           else
> > > > > >> > > >                 P_BLADE=`$SSH_COMMAND $MASTER_BLADE
> > > > > >> > > "bin/get_processor-blade.sh $h"`
> > > > > >> > > >                 $SSH_COMMAND $MASTER_BLADE "echo 'please' >
> > > > > >> > > /proc/egenera/ipmi/node/$P_BLADE/control/nmi"
> > > > > >> > > >           fi
> > > > > >> > > >           sleep 20
> > > > > >> > > >           if
> > > > > >> > > >             is_host_up $h
> > > > > >> > > >           then
> > > > > >> > > >             exit 1
> > > > > >> > > >           else
> > > > > >> > > >             exit 0
> > > > > >> > > >           fi
> > > > > >> > > >         done
> > > > > >> > > >         exit 1
> > > > > >> > > >         ;;
> > > > > >> > >
> > > > > >> > > on), off), and reset) cases are very similar, they should be
> > made
> > > > > >> > > to share some code. Also, the sleep values look too ephemeral
> > for
> > > > > >> > > my taste. There should be a relatively tight loop to check the
> > > > > >> > > host status.
> > > > > >> > >
> > > > > >> >
> > > > > >> > I'm not sure yet what to do about the "ephemeral" sleep values.
> >  I
> > > > chose
> > > > > >> > arbitrarily long waits because egenera blades take a
> > surprisingly
> > > > long
> > > > > >> time
> > > > > >> > to boot.  Your point is well taken, however, the code can be
> > > > improved.
> > > > > >>
> > > > > >> Looking forward to it :)
> > > > > >>
> > > > > >> > > > status)
> > > > > >> > > >         if
> > > > > >> > > >           [ -z "$hostlist" ]
> > > > > >> > > >         then
> > > > > >> > > >           exit 1
> > > > > >> > > >         fi
> > > > > >> > > >         for h in $hostlist
> > > > > >> > > >         do
> > > > > >> > > >           if
> > > > > >> > > >             ping -w1 -c1 "$h" 2>&1 | grep "unknown host"
> > > > > >> > >
> > > > > >> > > The status should return the status of the device, not the
> > status
> > > > > >> > > of a node.
> > > > > >> >
> > > > > >> >
> > > > > >> > ??  I must have misunderstood the existing code.  Hmmmmm.  The
> > > > status of
> > > > > >> > this device is always "0" if there's a hostlist and if
> > $MASTER_BLADE
> > > > is
> > > > > >> set,
> > > > > >> > I think.
> > > > > >>
> > > > > >> And if the c-blade is reachable. Something like
> > > > > >> "ssh $MASTER_BLADE true" should do.
> > > > > >>
> > > > > >> > Thank you for taking the itme to look this over.  I'll clean it
> > up
> > > > some
> > > > > >> and
> > > > > >> > try again.
> > > > > >>
> > > > > >> Many thanks.
> > > > > >>
> > > > > >> Cheers,
> > > > > >>
> > > > > >> Dejan
> > > > > >>
> > > > > >> > Be well,
> > > > > >> >
> > > > > >> > Karl
> > > > > >> >
> > > > > >> > >
> > > > > >> > >
> > > > > >> > > Cheers,
> > > > > >> > >
> > > > > >> > > Dejan
> > > > > >> > >
> > > > > >>
> > > > > >
> > > > > >
> > > > > I've cleaned this up some, and reworked much of it.  It has been
> > tested
> > > > in
> > > > > production for a couple of weeks now, and it works properly as near
> > as I
> > > > can
> > > > > tell.  (It has properly restarted a misbehaving server.)
> > > > >
> > > > > I could not see a way to get the existing IPMI script to work with
> > > > Egenera,
> > > > > and  I have abandoned using anything other than native Egenera
> > commands
> > > > to
> > > > > control the blades.  These scripts require that ssh keys are set up
> > for
> > > > user
> > > > > root between the cluster servers and the c-blades.
> > > >
> > > > OK.
> > > >
> > > > > Code:
> > > >
> > > > Can you please send the scripts as attachments. The mail agents
> > > > kill the formatting.
> > > >
> > > > > #The two bash scripts here at the top go on each of the Egenera
> > C-Blades.
> > > > > #the STONITH module goes in /usr/lib/stonith/plugins/external/egenera
> > on
> > > > > #each of the servers in the cluster.
> > > >
> > > > These two scripts will go to the doc part of the package.
> > > >
> > > > Cheers,
> > > >
> > > > Dejan
> > > >
> > > > > ############################### cut here
> > > > > ######################################
> > > > > #!/bin/bash
> > > > > # get_status.sh -  returns the status of a pServer, given the LPAN
> > and
> > > > > pServer
> > > > >
> > > > > #called as:
> > > > > # get_status.sh pServer LPAN_Name UP
> > > > > # or
> > > > > # get_status.sh pServer LPAN_Name DOWN
> > > > > #depending on what you want.  This only works of the pServer is
> > running
> > > > the
> > > > > PAN Agent
> > > > > #because until the agent comes up, the server does not count as "Up"
> > > > >
> > > > > if [ ${3} = "UP" ]
> > > > > then
> > > > >         CONDITION=`/opt/panmgr/bin/esh pserver -l ${2}/${1} | grep
> > ^${1}
> > > > |
> > > > > grep "Booted" | grep "Up"`
> > > > >         if [ -z "${CONDITION}" ]
> > > > >         then
> > > > >                 echo "Down" # No Joy
> > > > >         else
> > > > >                 echo "Up" # Joy!
> > > > >         fi
> > > > > else # it should be the case that ${3} = "DOWN"
> > > > >         CONDITION=`/opt/panmgr/bin/esh pserver -l ${2}/${1} | grep
> > ^${1}
> > > > |
> > > > > grep "Shutdown"`
> > > > >         if [ -z "${CONDITION}" ]
> > > > >         then
> > > > >                 echo "Up" #  No Joy
> > > > >         else
> > > > >                 echo "Down" # Joy!
> > > > >         fi
> > > > > fi
> > > > >
> > > > > ############################### cut here
> > > > > ######################################
> > > > >
> > > > > #!/bin/bash
> > > > > # get_master.sh -  returns the name of the master control blade in
> > the
> > > > PAN.
> > > > >
> > > > > MASTER=`/opt/panmgr/bin/esh pan | grep ^c | grep Master | cut -c 2`
> > > > > echo "cblade-${MASTER}"
> > > > >
> > > > > ############################### cut here
> > > > > ######################################
> > > > >
> > > > > #!/bin/bash
> > > > > #
> > > > > # External STONITH module for Egenera pServers.
> > > > > #
> > > > > # Copyright (c) 2004 SUSE LINUX AG - Lars Marowsky-Bree <[email protected]
> > >
> > > > > # Copyright (c) 2009 Karl W. Lewis <karl.w.lewis - AT - gmail.com>
> > > > > #
> > > > > # This program is free software; you can redistribute it and/or
> > modify
> > > > > # it under the terms of version 2 of the GNU General Public License
> > as
> > > > > # published by the Free Software Foundation.
> > > > > #
> > > > > # This program is distributed in the hope that it would be useful,
> > but
> > > > > # WITHOUT ANY WARRANTY; without even the implied warranty of
> > > > > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> > > > > #
> > > > > # Further, this software is distributed without any warranty that it
> > is
> > > > > # free of the rightful claim of any third person regarding
> > infringement
> > > > > # or the like.  Any license provided herein, whether implied or
> > > > > # otherwise, applies only to this software file.  Patent licenses, if
> > > > > # any, provided herein do not apply to combinations of this program
> > with
> > > > > # other software, or any other product whatsoever.
> > > > > #
> > > > > # You should have received a copy of the GNU General Public License
> > > > > # along with this program; if not, write the Free Software
> > Foundation,
> > > > > # Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
> > > > > #
> > > > >
> > > > > SSH_COMMAND="/usr/bin/ssh -q -x -n -l root"
> > > > > GET_MASTER="/root/bin/get_master.sh"
> > > > > GET_STATUS="/root/bin/get_status.sh"
> > > > > PSERVER_COMMAND="/opt/panmgr/bin/esh pserver"
> > > > >
> > > > > #These TIMEOUT values were obtained from the 'pserver -l pan/pserver'
> > > > > command
> > > > > # on a given Egenera frame under "Timeouts"  YMMV.
> > > > >
> > > > > BOOT_TIMEOUT=270
> > > > > REBOOT_TIMEOUT=450
> > > > > SHUTDOWN_TIMEOUT=180
> > > > >
> > > > > TIMEOUT=${REBOOT_TIMEOUT}
> > > > > STATUS="UNKNOWN"
> > > > >
> > > > > #LOG=/var/log/egenera-stonith.log
> > > > > #echo `date` >> ${LOG}
> > > > > #echo ${hostlist} >> ${LOG}
> > > > > #echo ${lpan_name} >> ${LOG}
> > > > > #echo $1 >> ${LOG}
> > > > > #echo $2 >> ${LOG}
> > > > > #echo "executing--------------" >> ${LOG}
> > > > >
> > > > > # Rewrite the hostlist to accept "," as a delimeter for hostnames
> > too.
> > > > > hostlist=`echo ${hostlist} | tr ',' ' '`
> > > > >
> > > > > is_host_up() {
> > > > >     TIME=$((${TIMEOUT}/5))
> > > > >     for j in 1 2 3 4 5 6
> > > > >     do
> > > > >         STATUS=`${SSH_COMMAND} ${MASTER_BLADE} "${GET_STATUS} ${h}
> > > > > ${lpan_name} UP"`
> > > > >         if [ "${STATUS}" = "Down" ]
> > > > >         then
> > > > >             sleep ${TIME}
> > > > >         else
> > > > >             SYSTEM_STATUS="On Target"
> > > > >             return 1
> > > > >         fi
> > > > >     done
> > > > >     return 0
> > > > > }
> > > > >
> > > > > is_host_down() {
> > > > >     TIME=$((${TIMEOUT}/5))
> > > > >     for j in 1 2 3 4 5 6
> > > > >     do
> > > > >         STATUS=`${SSH_COMMAND} ${MASTER_BLADE} "${GET_STATUS} ${h}
> > > > > ${lpan_name} DOWN"`
> > > > >         if [ "${STATUS}" = "Up" ]
> > > > >         then
> > > > >             sleep ${TIME}
> > > > >         else
> > > > >             SYSTEM_STATUS="On Target"
> > > > >             return 1
> > > > >         fi
> > > > >     done
> > > > >     return 0
> > > > > }
> > > > >
> > > > > MASTER_BLADE=`${SSH_COMMAND} cblade-1 "${GET_MASTER}" | tail -1`
> > > > >
> > > > > if [ -z "${MASTER_BLADE}" ]
> > > > > then
> > > > >     MASTER_BLADE=`${SSH_COMMAND} cblade-2 "${GET_MASTER}" | tail -1`
> > > > > fi
> > > > >
> > > > > case ${1} in
> > > > > gethosts)
> > > > >     for h in ${hostlist}
> > > > >     do
> > > > >         echo ${h}
> > > > >     done
> > > > >     exit 0
> > > > >     ;;
> > > > > on|off|reboot)
> > > > >     for h in ${hostlist}
> > > > >     do
> > > > >         if [ "${h}" != "${2}" ]
> > > > >         then
> > > > >             continue
> > > > >         else
> > > > >             if [ "${1}" = "on" ]
> > > > >             then
> > > > >                 CMD="--boot"
> > > > >             elif [ "${1}" = "off" ]
> > > > >             then
> > > > >                 CMD="--shutdown --force"
> > > > >             else #must be "reboot"
> > > > >                 CMD="--reboot --force"
> > > > >             fi
> > > > >             ${SSH_COMMAND} ${MASTER_BLADE} "${PSERVER_COMMAND} ${CMD}
> > > > > ${lpan_name}/${h}"
> > > > >             if [ "${1}" = "on" ]
> > > > >             then
> > > > >                 TIMEOUT=${BOOT_TIMEOUT}
> > > > >             elif [ "${1}" = "reboot" ]
> > > > >             then
> > > > >                 TIMEOUT=${REBOOT_TIMEOUT}
> > > > >             else
> > > > >                 TIMEOUT=${SHUTDOWN_TIMEOUT}
> > > > >             fi
> > > > >             if [ "${1}" = "off" ]
> > > > >             then
> > > > >                 is_host_down ${h}
> > > > >             else
> > > > >                 is_host_up ${h}
> > > > >             fi
> > > > >         fi
> > > > >         if [ "${SYSTEM_STATUS}" = "On Target" ]
> > > > >         then
> > > > >             exit 0
> > > > >         else
> > > > >             exit 1
> > > > >         fi
> > > > >     done
> > > > >     exit 1 # We got here only if the host was not in the list....
> > > > >     ;;
> > > > > status)
> > > > >     if [ -z "${hostlist}" ] || [ -z "${lpan_name}" ] || [ -z
> > > > > "${MASTER_BLADE}" ]
> > > > >     then
> > > > >         exit 1
> > > > >     fi
> > > > >     exit 0
> > > > >     ;;
> > > > > getconfignames)
> > > > >     echo "hostlist lpan_name"
> > > > >     exit 0
> > > > >     ;;
> > > > > getinfo-devid)
> > > > >     echo "Egenera STONITH device"
> > > > >     exit 0
> > > > >     ;;
> > > > > getinfo-devname)
> > > > >     echo "Egenera STONITH external device"
> > > > >     exit 0
> > > > >     ;;
> > > > > getinfo-devdescr)
> > > > >     echo "Egenera-based Linux host reset"
> > > > >     exit 0
> > > > >     ;;
> > > > > getinfo-devurl)
> > > > >     echo "http://www.egenera.com";
> > > > >     exit 0
> > > > >     ;;
> > > > > getinfo-xml)
> > > > >     cat << EGENERAXML
> > > > > <parameters>
> > > > > <parameter name="hostlist" unique="1" required="1">
> > > > > <content type="string" />
> > > > > <shortdesc lang="en">
> > > > > Hostlist
> > > > > </shortdesc>
> > > > > <longdesc lang="en">
> > > > > The list of hosts that the STONITH device controls
> > > > > </longdesc>
> > > > > </parameter>
> > > > > <parameter name="lpan_name" unique="1" required="1">
> > > > > <content type="string" />
> > > > > <shortdesc lang="en">
> > > > > LPAN_Name
> > > > > </shortdesc>
> > > > > <longdesc lang="en">
> > > > > The name of the LPAN that the cluster blades, that this STONITH
> > device
> > > > > controls, live in
> > > > > </longdesc>
> > > > > </parameter>
> > > > > </parameters>
> > > > > EGENERAXML
> > > > >     exit 0
> > > > >     ;;
> > > > > *)
> > > > >     exit 1
> > > > >     ;;
> > > > > esac
> > > > > _______________________________________________
> > > > > Linux-HA mailing list
> > > > > [email protected]
> > > > > http://lists.linux-ha.org/mailman/listinfo/linux-ha
> > > > > See also: http://linux-ha.org/ReportingProblems
> > > > _______________________________________________
> > > > Linux-HA mailing list
> > > > [email protected]
> > > > http://lists.linux-ha.org/mailman/listinfo/linux-ha
> > > > See also: http://linux-ha.org/ReportingProblems
> > > >
> >
> >
> >
> >
> > > _______________________________________________
> > > Linux-HA mailing list
> > > [email protected]
> > > http://lists.linux-ha.org/mailman/listinfo/linux-ha
> > > See also: http://linux-ha.org/ReportingProblems
> > _______________________________________________
> > Linux-HA mailing list
> > [email protected]
> > http://lists.linux-ha.org/mailman/listinfo/linux-ha
> > See also: http://linux-ha.org/ReportingProblems
> >
> _______________________________________________
> Linux-HA mailing list
> [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha
> See also: http://linux-ha.org/ReportingProblems
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to