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"
>                ;;
>        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
>       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

>       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/

Reply via email to