diff options
Diffstat (limited to '')
-rwxr-xr-x | heartbeat/Pure-FTPd | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/heartbeat/Pure-FTPd b/heartbeat/Pure-FTPd new file mode 100755 index 0000000..1499ddd --- /dev/null +++ b/heartbeat/Pure-FTPd @@ -0,0 +1,260 @@ +#!/bin/sh +# +# Resource script for Pure-FTPd +# +# Description: Manages Pure-FTPd as an OCF resource in +# an Active-Passive High Availability setup. +# +# Author: Rajat Upadhyaya <urajat@novell.com> : Pure-FTPd script +# Author: Raoul Bhatia <r.bhatia@ipax.at> : Minor Cleanup. Added Debian GNU/Linux Support +# License: GNU General Public License (GPL) +# +# +# usage: $0 {start|stop|status|monitor|validate-all|meta-data} +# +# The "start" arg starts Pure-FTPd. +# +# The "stop" arg stops it. +# +# OCF parameters: +# OCF_RESKEY_script +# OCF_RESKEY_conffile +# OCF_RESKEY_daemon_type +# OCF_RESKEY_pidfile +# +########################################################################## +# Initialization: + +: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} +. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + +# Parameter defaults + +OCF_RESKEY_script_default="/sbin/pure-config.pl" +OCF_RESKEY_conffile_default="/etc/pure-ftpd/pure-ftpd.conf" +OCF_RESKEY_daemon_type_default="" +OCF_RESKEY_pidfile_default="${HA_RSCTMP}/pure-ftpd-${OCF_RESOURCE_INSTANCE}.pid" + +: ${OCF_RESKEY_script=${OCF_RESKEY_script_default}} +: ${OCF_RESKEY_conffile=${OCF_RESKEY_conffile_default}} +: ${OCF_RESKEY_daemon_type=${OCF_RESKEY_daemon_type_default}} +: ${OCF_RESKEY_pidfile=${OCF_RESKEY_pidfile_default}} + +script_basename=`basename $OCF_RESKEY_script` + +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="Pure-FTPd" version="1.0"> +<version>1.0</version> +<longdesc lang="en"> +This script manages Pure-FTPd in an Active-Passive setup +</longdesc> +<shortdesc lang="en">Manages a Pure-FTPd FTP server instance</shortdesc> + +<parameters> + +<parameter name="script" unique="1" required="0"> +<longdesc lang="en"> +The full path to the Pure-FTPd startup script. +For example, "/sbin/pure-config.pl" +</longdesc> +<shortdesc lang="en">Script name with full path</shortdesc> +<content type="string" default="${OCF_RESKEY_script_default}" /> +</parameter> + +<parameter name="conffile" unique="1" required="0"> +<longdesc lang="en"> +The Pure-FTPd configuration file name with full path. +For example, "/etc/pure-ftpd/pure-ftpd.conf" +</longdesc> +<shortdesc lang="en">Configuration file name with full path</shortdesc> +<content type="string" default="${OCF_RESKEY_conffile_default}" /> +</parameter> + +<parameter name="daemon_type" unique="1" required="0"> +<longdesc lang="en"> +The Pure-FTPd daemon to be called by pure-ftpd-wrapper. +Valid options are "" for pure-ftpd, "mysql" for pure-ftpd-mysql, +"postgresql" for pure-ftpd-postgresql and "ldap" for pure-ftpd-ldap +</longdesc> +<shortdesc lang="en">Configuration file name with full path</shortdesc> +<content type="string" default="${OCF_RESKEY_daemon_type_default}" /> +</parameter> + +<parameter name="pidfile" unique="0"> +<longdesc lang="en">PID file</longdesc> +<shortdesc lang="en">PID file</shortdesc> +<content type="string" default="${OCF_RESKEY_pidfile_default}" /> +</parameter> + +</parameters> + +<actions> +<action name="start" timeout="20s" /> +<action name="stop" timeout="20s" /> +<action name="monitor" depth="0" timeout="20s" interval="60s" /> +<action name="validate-all" timeout="20s" /> +<action name="meta-data" timeout="5s" /> +</actions> +</resource-agent> +END + exit $OCF_SUCCESS +} + +isRunning() +{ + kill -s 0 "$1" > /dev/null +} + +PureFTPd_status() +{ + if [ -f $OCF_RESKEY_pidfile ] + then + # Pure-FTPd is probably running + PID=`head -n 1 $OCF_RESKEY_pidfile` + if [ ! -z $PID ] ; then + isRunning "$PID" && [ `ps -p $PID | grep pure-ftpd | wc -l` -eq 1 ] + return $? + fi + fi + + # Pure-FTPd is not running + false +} + +PureFTPd_start() +{ + local pid_dir + + # + # make a few checks and start Pure-FTPd + # + if ocf_is_root ; then : ; else + ocf_log err "You must be root." + exit $OCF_ERR_PERM + fi + + # if Pure-FTPd is running return success + + if PureFTPd_status ; then + exit $OCF_SUCCESS + fi + + # check that the Pure-FTPd script exists and can be executed + if [ ! -x "$OCF_RESKEY_script" ]; then + ocf_log err "Pure-FTPd script '$OCF_RESKEY_script' does not exist or cannot be executed" + exit $OCF_ERR_GENERIC + fi + + # make sure that the pid directory exists + pid_dir=`dirname $OCF_RESKEY_pidfile` + if [ ! -d $pid_dir ] ; then + ocf_log info "Creating PID directory '$pid_dir'." + mkdir -p $pid_dir + fi + + # test for pure-ftpd-wrapper (e.g. Debian GNU/Linux Systems) + if [ "$script_basename" = "pure-ftpd-wrapper" ]; then + # pure-ftpd-wrapper expects STANDALONE_OR_INETD to be set to standalone + STANDALONE_OR_INETD=standalone $OCF_RESKEY_script $OCF_RESKEY_daemon_type + else + # check that the Pure-FTPd config file exist + if [ ! -f "$OCF_RESKEY_conffile" ]; then + ocf_log err "Pure_FTPd config file '$OCF_RESKEY_conffile' does not exist" + exit $OCF_ERR_GENERIC + fi + + $OCF_RESKEY_script $OCF_RESKEY_conffile -g $OCF_RESKEY_pidfile + fi + + if [ $? -ne 0 ]; then + ocf_log info "Pure-FTPd returned error" $? + exit $OCF_ERR_GENERIC + fi + + exit $OCF_SUCCESS +} + + +PureFTPd_stop() +{ + if PureFTPd_status ; then + PID=`head -n 1 $OCF_RESKEY_pidfile` + if [ ! -z $PID ] ; then + kill $PID + fi + fi + + exit $OCF_SUCCESS +} + +PureFTPd_monitor() +{ + if PureFTPd_status ; then + return $OCF_SUCCESS + fi + + return $OCF_NOT_RUNNING +} + +PureFTPd_validate_all() +{ + return $OCF_SUCCESS +} + +# +# Main +# + +if [ $# -ne 1 ] +then + usage + exit $OCF_ERR_ARGS +fi + +case $1 in + start) PureFTPd_start + ;; + + stop) PureFTPd_stop + ;; + + status) if PureFTPd_status + then + ocf_log info "Pure-FTPd is running" + exit $OCF_SUCCESS + else + ocf_log info "Pure-FTPd is stopped" + exit $OCF_NOT_RUNNING + fi + ;; + + monitor) PureFTPd_monitor + exit $? + ;; + + validate-all) PureFTPd_validate_all + exit $? + ;; + + meta-data) meta_data + ;; + + usage) usage + exit $OCF_SUCCESS + ;; + + *) usage + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac |