i missed a "!". fixed version attached.

Raoul Bhatia [IPAX] wrote:
> ups, it seems that i messed something up.
> will fix and resend the ra asap!
> 
> cheers,
> raoul
> 
> Raoul Bhatia [IPAX] wrote:
>> hi dejan,
>>
>> Dejan Muhamedagic wrote:
>>>>>>> # TODO
>>>>>>> # * remove debian specific code (e.g. start-stop-daemon)
>>>> this is still open. i would like to see mysql-proxy included so i
>>>> can provide patches against the hg repository instead of re-submitting
>>>> the ocf every time.
>> ...
>>> At risk of being ungrateful and rude, I'd still insist on this
>>> point, because people expect the whole shebang to run on Linux,
>>> not just on distribution XY. It shouldn't be that hard to do
>>> after all :) Take a look at this changeset for example:
>>>
>>> changeset:   12393:60cc2d6eee88
>>> user:        NAKAHIRA Kazutomo <[email protected]>
>>> date:        Fri Apr 24 08:38:48 2009 +0200
>>> summary:     High (LF 2112): RA: sfex: checkproc/killproc are not available 
>>> everywhere
>> i now replaced the start-stop-daemon calls. however, i left these
>> calls as comments for reference. if the ra proves stable, one can
>> remove them during the next maintanance.
>>
>> thank you for the reference. it saved me some time!
>>
>> changes:
>> * replace debian specific start-stop-daemon calls
>> * protect $pidfile
>> * remove obsolete code/comments
>> * add some more error checking
>>
>> is it ready for initial inclusion now?
>>
>> cheers,
>> raoul
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________________
>> Linux-HA-Dev: [email protected]
>> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
>> Home Page: http://linux-ha.org/
> 
> 


-- 
____________________________________________________________________
DI (FH) Raoul Bhatia M.Sc.          email.          [email protected]
Technischer Leiter

IPAX - Aloy Bhatia Hava OEG         web.          http://www.ipax.at
Barawitzkagasse 10/2/2/11           email.            [email protected]
1190 Wien                           tel.               +43 1 3670030
FN 277995t HG Wien                  fax.            +43 1 3670030 15
____________________________________________________________________
#!/bin/sh
#
# Resource script for MySQL Proxy
#
# Description:  Manages MySQL Proxy as an OCF resource in 
#               an high-availability setup.
#
#               Tested with mysql-proxy 0.7.0 on Debian 5.0.
#               Based on the mysql and Pure-Ftpd OCF resource agents.
#
# Author:       Raoul Bhatia <[email protected]> : Original Author
# License:      GNU General Public License (GPL) 
#
#
#       usage: $0 {start|stop|status|monitor|validate-all|meta-data}
#
#       The "start" arg starts a MySQL Proxy instance
#
#       The "stop" arg stops it.
#
# TODO
# * add error checking like in mysql ocf ra (e.g. socketdir)
# * verify if mysql-proxy supports multiple --proxy-address(es)
#
# OCF parameters:
#  OCF_RESKEY_binary
#  OCF_RESKEY_defaults_file
#  OCF_RESKEY_proxy_backend_addresses
#  OCF_RESKEY_proxy_read_only_backend_addresses
#  OCF_RESKEY_proxy_address
#  OCF_RESKEY_admin_address
#  OCF_RESKEY_parameters
#  OCF_RESKEY_pidfile
#
##########################################################################

# Initialization:

. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs

: ${OCF_RESKEY_binary="/usr/sbin/mysql-proxy"}
: ${OCF_RESKEY_defaults_file=""}
: ${OCF_RESKEY_proxy_backend_addresses="127.0.0.1:3306"}
: ${OCF_RESKEY_proxy_read_only_backend_addresses=""}
: ${OCF_RESKEY_proxy_address=":4040"}
: ${OCF_RESKEY_admin_address="127.0.0.1:4041"}
: ${OCF_RESKEY_parameters=""}
: ${OCF_RESKEY_pidfile="${HA_RSCTMP}/mysql-proxy-${OCF_RESOURCE_INSTANCE}.pid"}
USAGE="Usage: $0 {start|stop|status|monitor|validate-all|meta-data}";

##########################################################################

usage() {
    echo $USAGE >&2
}

meta_data() {
        cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="mysql-proxy">
<version>0.1</version>
<longdesc lang="en">
This script manages MySQL Proxy as an OCF resource in a high-availability setup.
Tested with MySQL Proxy 0.7.0 on Debian 5.0.
</longdesc>
<shortdesc lang="en">OCF Resource Agent compliant MySQL Proxy 
script.</shortdesc>

<parameters>

<parameter name="binary" unique="1" required="1">
<longdesc lang="en">
Full path to the MySQL Proxy binary.
For example, "/usr/sbin/mysql-proxy".
</longdesc>
<shortdesc lang="en">Full path to MySQL Proxy binary</shortdesc>
<content type="string" default="/usr/sbin/mysql-proxy" />
</parameter>

<parameter name="defaults_file" unique="1" required="0">
<longdesc lang="en">
Full path to a MySQL Proxy configuration file.
For example, "/etc/mysql-proxy.conf".
</longdesc>
<shortdesc lang="en">Full path to configuration file</shortdesc>
<content type="string" default="" />
</parameter>

<parameter name="proxy_backend_addresses" unique="0" required="0">
<longdesc lang="en">
Address:port of the remote backend-servers (default: 127.0.0.1:3306).
</longdesc>
<shortdesc lang="en"></shortdesc>
<content type="string" default="127.0.0.1:3306" />
</parameter>

<parameter name="proxy_read_only_backend_addresses" unique="0" required="0">
<longdesc lang="en">
Address:port of the remote slave-server (default: not set).
</longdesc>
<shortdesc lang="en"></shortdesc>
<content type="string" default="127.0.0.1:3306" />
</parameter>

<parameter name="proxy_address" unique="0" required="0">
<longdesc lang="en">
Listening address:port of the proxy-server (default: :4040).
You can also specify a socket like "/tmp/mysql-proxy.sock".
</longdesc>
<shortdesc lang="en"></shortdesc>
<content type="string" default=":4040" />
</parameter>

<parameter name="admin_address" unique="0" required="0">
<longdesc lang="en">
Listening address:port of the admin-server (default: 127.0.0.1:4041).
</longdesc>
<shortdesc lang="en"></shortdesc>
<content type="string" default="127.0.0.1:4041" />
</parameter>

<parameter name="parameters" unique="1" required="0">
<longdesc lang="en">
The MySQL Proxy daemon may be called with additional parameters.
Specify any of them here.
</longdesc>
<shortdesc lang="en"></shortdesc>
<content type="string" default="" />
</parameter>

<parameter name="pidfile" unique="0">
<longdesc lang="en">PID file</longdesc>
<shortdesc lang="en">PID file</shortdesc>
<content type="string" 
default="${HA_RSCTMP}/mysql-proxy-${OCF_RESOURCE_INSTANCE}.pid" />
</parameter>

</parameters>

<actions>
<action name="start"   timeout="90" />
<action name="stop"    timeout="100" />
<action name="monitor" depth="10"  timeout="20s" interval="60s" 
start-delay="1s" />
<action name="validate-all"  timeout="30s" />
<action name="meta-data"  timeout="5s" />
</actions>
</resource-agent>
END
        exit $OCF_SUCCESS
}

isRunning()
{
    kill -0 "$1" 2>/dev/null
}

mysqlproxy_status()
{
    if [ -f "${pidfile}" ]; then
    # MySQL Proxy is probably running
        PID=`head -n 1 "${pidfile}"`
        if [ ! -z "$PID" ] ; then
            isRunning "$PID"
            return $?
        fi
    else 
        ocf_log err "Cannot check MySQL Proxy status because PID-file was lost."
    fi
    
    # MySQL Proxy is not running
    false
}

mysqlproxy_start()
{
    # if MySQL Proxy is running return success
    if mysqlproxy_status ; then
        ocf_log info "MySQL Proxy already running."
        exit $OCF_SUCCESS
    fi

    # check that the MySQL Proxy binary exists and can be executed
    if [ ! -x "$binary" ]; then
        ocf_log err "MySQL Proxy binary '$binary' does not exist or cannot be 
executed."
        exit $OCF_ERR_GENERIC
    fi

    # check if the MySQL Proxy defaults-file exist
    PARAM_PREFIX=''
    if [ -f "$defaults_file" ]; then
        PARAM_PREFIX="--defaults-file=$defaults_file "
    fi

    # split multiple proxy-address options.
    # currently unsupported but let us hope for the future ;)
    for pa in $proxy_address; do
        [ -z "$pa" ] && continue
        OPTIONS=" $OPTIONS --proxy-address=$pa"
    done

    # split multiple proxy-backend-addresses options.
    for pba in $proxy_backend_addresses; do
        [ -z "$pba" ] && continue
        OPTIONS=" $OPTIONS --proxy-backend-addresses=$pba"
    done

    # split multiple proxy-backend-addresses options.
    for proba in $proxy_read_only_backend_addresses; do
        [ -z "$proba" ] && continue
        OPTIONS=" $OPTIONS --proxy-read-only-backend-addresses=$proba"
    done

    # build $OPTIONS and add addmin-address and pidfile
    OPTIONS="$PARAM_PREFIX $OPTIONS --admin-address=$admin_address 
--pid-file=$pidfile $PARAM_SUFFIX"

    # start MySQL Proxy
    #start-stop-daemon --start --quiet --pidfile $pidfile --make-pidfile --name 
mysql-proxy --startas $binary -b -- $OPTIONS
    $binary --daemon $OPTIONS
    
    ret=$?
  
    if [ $ret -ne 0 ]; then
        ocf_log err "MySQL Proxy returned error." $ret
        exit $OCF_ERR_GENERIC
    fi

    exit $OCF_SUCCESS
}


mysqlproxy_stop()
{
    if mysqlproxy_status ; then
        #start-stop-daemon --stop --quiet --retry 3 --exec $binary --pidfile 
$pidfile
        /bin/kill `cat "${pidfile}"`
        ret=$?

        if [ $ret -ne 0 ]; then
            ocf_log err "MySQL Proxy returned error while stopping." $ret
            exit $OCF_ERR_GENERIC
        fi

        # grant some time for shutdown and recheck
        if ! mysqlproxy_status ; then
            ocf_log err "MySQL Proxy failed to stop."
            exit $OCF_ERR_GENERIC
        fi

        # remove dangling socketfile if specified
        for pa in $proxy_address; do
            if [ -S "$pa" ]; then
                ocf_log info "Removing dangling socket file '$pa'."
                rm -f "$pa"
            fi
        done
    fi

    exit $OCF_SUCCESS
}

mysqlproxy_monitor()
{

    if mysqlproxy_status ; then
        return $OCF_SUCCESS
    fi

    return $OCF_NOT_RUNNING
}

mysqlproxy_validate_all()
{
    # @TODO
    return $OCF_SUCCESS
}

#
# Main
#

if [ $# -ne 1 ]; then
    usage
    exit $OCF_ERR_ARGS
fi

pidfile=$OCF_RESKEY_pidfile
binary=$OCF_RESKEY_binary
defaults_file=$OCF_RESKEY_defaults_file
proxy_backend_addresses=$OCF_RESKEY_proxy_backend_addresses
proxy_read_only_backend_addresses=$OCF_RESKEY_proxy_read_only_backend_addresses
admin_address=$OCF_RESKEY_admin_address
proxy_address=$OCF_RESKEY_proxy_address

# debugging stuff
#echo OCF_RESKEY_binary=$OCF_RESKEY_binary >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo OCF_RESKEY_defaults_file=$OCF_RESKEY_defaults_file >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo OCF_RESKEY_proxy_backend_addresses=$OCF_RESKEY_proxy_backend_addresses >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo 
OCF_RESKEY_proxy_read_only_backend_addresses=$OCF_RESKEY_proxy_read_only_backend_addresses
 >> /tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo OCF_RESKEY_proxy_address=$OCF_RESKEY_proxy_address >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo OCF_RESKEY_admin_address=$OCF_RESKEY_admin_address >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo OCF_RESKEY_parameters=$OCF_RESKEY_parameters >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE
#echo OCF_RESKEY_pidfile=$OCF_RESKEY_pidfile >> 
/tmp/prox_conf_$OCF_RESOURCE_INSTANCE


case $1 in
    start)      mysqlproxy_start
                ;;
    
    stop)       mysqlproxy_stop
                ;;
        
    status)     if mysqlproxy_status; then
                    ocf_log info "MySQL Proxy is running."
                    exit $OCF_SUCCESS
                else
                    ocf_log info "MySQL Proxy is stopped."
                    exit $OCF_NOT_RUNNING
                fi
                ;;
        
    monitor)    mysqlproxy_monitor
                exit $?
                ;;
        
    validate-all)   mysqlproxy_validate_all
                    exit $?
                    ;;
            
    meta-data)  meta_data
                ;;
        
    usage)      usage
                exit $OCF_SUCCESS
                ;;
        
    *)          usage
                exit $OCF_ERR_UNIMPLEMENTED
                ;;
esac

_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to