#!/bin/sh # # Dante OCF RA, based on Dummy OCF RA. # #/usr/lib/ocf/resource.d/dante/sockd ####################################################################### # Initialization #check for existence to simplify testing : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs # Defaults OCF_RESKEY_sockd_default="/usr/sbin/sockd" OCF_RESKEY_sockd_config_default="/etc/sockd.conf" OCF_RESKEY_sockd_pidfile_default="/var/run/sockd.pid" : ${OCF_RESKEY_sockd=${OCF_RESKEY_sockd_default}} : ${OCF_RESKEY_sockd_config=${OCF_RESKEY_sockd_config_default}} : ${OCF_RESKEY_sockd_pidfile=${OCF_RESKEY_sockd_pidfile_default}} ####################################################################### meta_data() { cat < 1.0 Resource Agent for the Dante SOCKS server. Dante SOCKS server management Path to the SOCKS server. sockd Path to the SOCKS server configuration file. sockd.conf Path to the SOCKS server pid file. sockd.pid END } ####################################################################### sockd_usage () { cat </dev/null; do sleep 1 done return $OCF_SUCCESS } sockd_reload () { sockd_monitor retval=$? if test $retval -ne $OCF_SUCCESS; then return $retval fi PID=`test -e "${OCF_RESKEY_sockd_pidfile}" && cat "${OCF_RESKEY_sockd_pidfile}"` if test x"$PID" = x; then ocf_exit_reason "server reload failed: no server pid" return $OCF_ERR_GENERIC fi #kill process kill -HUP "$PID" #return after sending signal return $OCF_SUCCESS } sockd_monitor () { #server states checked: #-no pid: ERROR #-pid, but process not running: NOT RUNNING #-pid, process running: SUCCESS PID=`test -e "${OCF_RESKEY_sockd_pidfile}" && cat "${OCF_RESKEY_sockd_pidfile}"` if test x"$PID" = x; then ocf_exit_reason "server monitor: found no server pid" return $OCF_NOT_RUNNING fi if ps -p "$PID" >/dev/null; then return $OCF_SUCCESS else ocf_exit_reason "server monitor: no running process matching pidfile pid" return $OCF_ERR_GENERIC fi } sockd_validate() { check_binary "${OCF_RESKEY_sockd}" retcode=$? if test $retcode != $OCF_SUCCESS ; then ocf_exit_reason "server binary not installed: ${OCF_RESKEY_sockd}" return $retcode fi test -e "${OCF_RESKEY_sockd_config}" if test $? -ne 0; then ocf_exit_reason "server config file not installed: ${OCF_RESKEY_sockd_config}" return $OCF_ERR_INSTALLED fi #verify server config file syntax ${OCF_RESKEY_sockd} -V -f ${OCF_RESKEY_sockd_config} if test $? -ne 0; then ocf_exit_reason "server config file verification failed: ${OCF_RESKEY_sockd_config}" return $OCF_ERR_GENERIC fi return $OCF_SUCCESS } if test x"$1" = x; then sockd_usage exit $OCF_ERR_ARGS fi case $1 in meta-data) meta_data exit $OCF_SUCCESS ;; usage|help) sockd_usage exit $OCF_SUCCESS ;; start) sockd_start ;; stop) sockd_stop ;; monitor|status) sockd_monitor ;; reload) sockd_reload ;; validate-all) sockd_validate ;; *) sockd_usage ocf_exit_reason "unimplemented command: $1" exit $OCF_ERR_UNIMPLEMENTED ;; esac exit $?