diff --git a/heartbeat/pgagent b/heartbeat/pgagent index b85872f8e..26ea13cb4 100644 --- a/heartbeat/pgagent +++ b/heartbeat/pgagent @@ -1,121 +1,152 @@ #!/bin/sh # # High-Availability pgagent OCF resource agent # # Description: starts/stops pgagent. # Author: Oleg Selin # License: GNU General Public License (GPL) # # OCF parameters: # OCF_RESKEY_connection_string # OCF_RESKEY_user # OCF_RESKEY_options # ####################################################################### # Initialization: : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs +OCF_RESKEY_executable_default="/usr/bin/pgagent" +OCF_RESKEY_connection_string_default="user=postgres host=/var/run/postgresql" +OCF_RESKEY_user_default="postgres" +OCF_RESKEY_options_default="-r 5" + +: ${OCF_RESKEY_executable="${OCF_RESKEY_executable_default}"} +: ${OCF_RESKEY_connection_string="${OCF_RESKEY_connection_string_default}"} +: ${OCF_RESKEY_user="${OCF_RESKEY_user_default}"} +: ${OCF_RESKEY_options="${OCF_RESKEY_options_default}"} + +pgagent_validate_all() { + check_binary pgagent + check_binary start-stop-daemon + ocf_log debug "executable: '$OCF_RESKEY_executable'" + ocf_log debug "connection string: '$OCF_RESKEY_connection_string'" + ocf_log debug "user: '$OCF_RESKEY_user'" + ocf_log debug "options: '$OCF_RESKEY_options'" + if [ -z "$OCF_RESKEY_connection_string" ]; then + ocf_log err "Connection string is not configured!" + exit $OCF_ERR_CONFIGURED + fi + if [ -z "$OCF_RESKEY_user" ]; then + ocf_log err "User is not configured!" + exit $OCF_ERR_CONFIGURED + fi + getent passwd $OCF_RESKEY_user >/dev/null 2>&1 + if [ ! $? -eq 0 ]; then + ocf_log err "User $OCF_RESKEY_user doesn't exist"; + return $OCF_ERR_CONFIGURED; + fi + return $OCF_SUCCESS +} + +pgagent_start() { + pgagent_validate_all + start-stop-daemon --exec $OCF_RESKEY_executable --chuid $OCF_RESKEY_user --background --start -- $OCF_RESKEY_options $OCF_RESKEY_connection_string + check_status + if [ $? -eq 0 ]; then + return $OCF_SUCCESS + elif [ $? -eq 1 ]; then + ocf_log info "pgagent already running" + return $OCF_SUCCESS + fi + return $OCF_ERR_GENERIC +} + +pgagent_stop() { + pgagent_validate_all + start-stop-daemon --exec $OCF_RESKEY_executable --chuid $OCF_RESKEY_user --stop + check_status + if [ $? -eq 0 ]; then + return $OCF_SUCCESS + elif [ $? -eq 1 ]; then + ocf_log info "pgagent is not running and the pid file exists!" + return $OCF_SUCCESS + fi + return $OCF_ERR_GENERIC +} + +pgagent_monitor() { + check_status + if [ $? -eq 0 ]; then + return $OCF_SUCCESS + fi + return $OCF_NOT_RUNNING +} + +check_status() { + start-stop-daemon --exec $OCF_RESKEY_executable --status + return $? +} + meta_data() { cat < 1.0 - This is a pgagent Resource Agent. Controls pgagent - Connection string for pgagent. pgagent connection string - + User to run pgagent as. User to run pgagent - + Options for pgagent. pgagent run options, see pgagent --help for details - + - - - - - + + + + + END } -####################################################################### - pgagent_usage() { cat <