Hi Raoul,

On Sat, May 16, 2009 at 08:02:41PM +0200, Raoul Bhatia [IPAX] wrote:
> hi,
> 
> this is my first shot at creating a ocf ra on my own. that's one reason
> i do not fully know if this should belong to heartbeat or pacemaker ;)

I'd say to heartbeat.

> > # 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.
> 
> i invite everyone to take a look and give me some feedback.
> currently, i have the following todos on my list:

The script looks good to me, though I've never used that
software. There's just one place where you should protect the
variable expansion with quotes ($PID). Also, a few places were
use of OCF_RESKEY_* variables makes it very hard to follow the
relevant context. Perhaps you'd want to replace OCF_RESKEY_*
variables with shorter names (i.e. pidf, defaultf, etc).

> > # TODO
> > # * remove debian specific code (e.g. start-stop-daemon)
> > # * add error checking like in mysql ocf ra (e.g. socketdir)
> > # * verify if mysql-proxy supports multiple --proxy-address(es)

Well, if you can make it distribution agnostic, that'd be great :)

Cheers,

Dejan

> i tested it with two instances of mysql-proxy, one using
> --proxy-address=/var/run/mysqld/mysqld.sock and the second one using
> --proxy-address=:3306 .
> 
> cheers,
> raoul
> -- 
> ____________________________________________________________________
> 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
> # * remove debian specific code (e.g. start-stop-daemon)
> # * 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_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_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_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 $OCF_RESKEY_pidfile ]; then
>     # MySQL Proxy is probably running
>         PID=`head -n 1 $OCF_RESKEY_pidfile`
>         if [ ! -z $PID ] ; then
>             isRunning "$PID"
>             return $?
>         fi
>     fi
>     
>     # MySQL Proxy is not running
>     false
> }
> 
> mysqlproxy_start()
> {
>     # if MySQL Proxy is running return success
>     if mysqlproxy_status ; then
>         exit $OCF_SUCCESS
>     fi
> 
>     # check that the MySQL Proxy binary exists and can be executed
>     if [ ! -x "$OCF_RESKEY_binary" ]; then
>         ocf_log err "MySQL Proxy binary '$OCF_RESKEY_binary' does not exist 
> or cannot be executed."
>         exit $OCF_ERR_GENERIC
>     fi
> 
>     # check if the MySQL Proxy defaults-file exist
>     FIRST_PARAM=''
>     if [ -f "$OCF_RESKEY_defaults_file" ]; then
>         FIRST_PARAM="--defaults-file=$OCF_RESKEY_defaults_file "
>     fi
> 
>     
> OPTIONS="$FIRST_PARAM--proxy-backend-addresses=$OCF_RESKEY_proxy_backend_addresses
>  --admin-address=$OCF_RESKEY_admin_address"
>     # split multiple proxy-address options
>     for pa in $OCF_RESKEY_proxy_address; do
>         OPTIONS=" $OPTIONS --proxy-address=$pa"
>     done
> 
>     # start MySQL Proxy
>     start-stop-daemon --start --quiet --pidfile $OCF_RESKEY_pidfile 
> --make-pidfile --name mysql-proxy --startas $OCF_RESKEY_binary -b -- $OPTIONS
>     ret=$?
>   
>     if [ $ret -ne 0 ]; then
>         ocf_log info "MySQL Proxy returned error" $?
>         exit $OCF_ERR_GENERIC
>     fi
> 
>     exit $OCF_SUCCESS
> }
> 
> 
> mysqlproxy_stop()
> {
>     LA=`mysqlproxy_status`
> echo $LA
>     if mysqlproxy_status ; then
>         start-stop-daemon --stop --quiet --retry 3 --exec $OCF_RESKEY_binary 
> --pidfile $OCF_RESKEY_pidfile
> 
>         # remove dangling socketfile if specified
>         for pa in $OCF_RESKEY_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
> 
> 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/

_______________________________________________________
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