Hi, On Thu, May 26, 2011 at 10:50:52PM +0200, Lars Ellenberg wrote: > On Thu, May 26, 2011 at 06:31:16PM +0200, RaSca wrote: > > Il giorno Gio 26 Mag 2011 11:13:46 CET, RaSca ha scritto: > > [...] > > >The new version is attached. > > > > Hi all, > > After talking with Dejan on IRC, here it is the new version of the agent. > > Major changes: > > > > - The script do not relies anymore on SSH for checking the correct > > fence of the device, instead it checks the http response code from > > the webservice; > > > > - The status action looks for a 200 response from the webservice in > > "GET" mode; > > > > - In case of problems, the return code of the RA is 1 and I also > > added a description of the problem (check_http_response function); > > > > That's all, last but not least, it works. > > > > To make things perfect I just ask to Lars (following two days ago > > discussion) if there's a way to compact this: > > > > check_http_response $(curl --silent -o /dev/null -w > > '%{http_code}' -u $user:$pass $hetzner_server/reset/$remote_ip -d > > type=hw) > > exit $? > > > > to a one line statement. > > > > Thanks everybody for the help, > > > > -- > > RaSca > > Mia Mamma Usa Linux: Niente รจ impossibile da capire, se lo spieghi bene! > > ra...@miamammausalinux.org > > http://www.miamammausalinux.org > > > #!/bin/sh > > # > > # External STONITH module for Hetzner. > > # > > # Copyright (c) 2011 MMUL S.a.S. - Raoul Scarazzini <ra...@mmul.it> > > # > > # 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. > > # > > > > # Read parameters from config file, format is based upon the hetzner OCF > > resource agent > > # developed by Kumina: > > http://blog.kumina.nl/2011/02/hetzner-failover-ip-ocf-script/ > > conf_file="/etc/hetzner.cfg" > > user=`sed -n 's/^user.*=\ *//p' /etc/hetzner.cfg` > > pass=`sed -n 's/^pass.*=\ *//p' /etc/hetzner.cfg` > > hetzner_server="https://robot-ws.your-server.de" > > > > check_http_response() { > > # If the response is 200 then return 0 > > if [ "$1" = "200" ] > > then > > return 0 > > else > > # If the response is not 200 then display a description of the > > problem and return 1 > > case "$1" in > > "400") echo "INVALID_INPUT - Invalid input parameters" > > ;; > > "404") echo "SERVER_NOT_FOUND - Server with ip $remote_ip not found" > > ;; > > "409") echo "RESET_MANUAL_ACTIVE - There is already a running > > manual reset" > > ;; > > "500") echo "RESET_FAILED - Resetting failed due to an internal > > error" > > ;;
Please use ha_log.sh to log errors. See other external plugins for examples. > > esac > > return 1 > > fi > > suggestion: > ... > { > case $1 in > 200) > return 0 ;; > 400) > echo ... ;; > ...) > ... > 500) > echo ... ;; > *) > # catch all other "unexpected" return codes > echo "something went wrong, http response code: [$1]" > ... > esac > return 1 > } > > > > > > } > > > > case $1 in > > gethosts) > > echo $hostname > > exit 0 > > ;; > > on) > > # Can't really be implemented because Hetzner webservice cannot power > > on a system > > exit 1 > > ;; > > off) > > # Can't really be implemented because Hetzner webservice cannot power > > on a system Replace comments with ha_log.sh calls. > > exit 1 > > ;; > > reset) > > # Launching the reset action via webservice > > check_http_response $(curl --silent -o /dev/null -w '%{http_code}' > > -u $user:$pass $hetzner_server/reset/$remote_ip -d type=hw) > > exit $? > > > as this is the last command in your script, > you could also leave off the exit $?. > script exit code will be the exit code of the last simple command > respective the return code of the last function called. > > But I think it is ok to leave it in, to make it obvious and explicit > (and robust against other people editing the script later). > > > ;; > > status) > > # Check if we can contact the webservice > > check_http_response "$(curl --silent -o /dev/null -w '%{http_code}' > > -u $user:$pass $hetzner_server/server/$remote_ip)" > > exit $? > > ;; > > getconfignames) > > echo "hostname" > > echo "remote_ip" > > exit 0 > > all these exit 0 are not necessary, actually, as the last command of the > script will be "echo something", which should have a return value of > zero, anyways... but see above, to have it explicit and obvious and robust, > just leave it in. > > > ;; > > getinfo-devid) > > echo "Hetzner STONITH device" > > exit 0 > > ;; > > getinfo-devname) > > echo "Hetzner STONITH external device" > > exit 0 > > ;; > > getinfo-devdescr) > > echo "Hetzner host reset" > > echo "Manages the remote webservice for reset a remote server." > > exit 0 > > ;; > > getinfo-devurl) > > echo "http://wiki.hetzner.de/index.php/Robot_Webservice_en" > > exit 0 > > ;; > > getinfo-xml) > > cat << HETZNERXML > > <parameters> > > <parameter name="hostname" unique="1"> > > <content type="string" /> > > <shortdesc lang="en"> > > Hostname > > </shortdesc> > > <longdesc lang="en"> > > The name of the host to be managed by this STONITH device. > > </longdesc> > > </parameter> > > > > <parameter name="remote_ip" unique="1" required="1"> > > <content type="string" /> > > <shortdesc lang="en"> > > Remote IP > > </shortdesc> > > <longdesc lang="en"> > > The address of the remote IP that manages this server. > > </longdesc> > > </parameter> > > </parameters> > > HETZNERXML > > exit 0 > > ;; > > *) > > maybe: > echo >&2 "Don't know what to do for '$1'" > or display some usage or URL of wiki page or whatever Yes, just use ha_log.sh. Cheers, Dejan > > exit 1 > > ;; > > esac > > Thank you! > > Lars > > > -- > : Lars Ellenberg > : LINBIT | Your Way to High Availability > : DRBD/HA support and consulting http://www.linbit.com > _______________________________________________________ > Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > Home Page: http://linux-ha.org/ _______________________________________________________ Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/