#!/bin/bash
#
-# OCF Resource Agent for pgpool-II 2.0
+# OCF Resource Agent for pgpool-II 2.x
#
-# Copyright 2012 PgPool Global Development Group
+# Copyright 2012-2013 PgPool Global Development Group
#
# Permission to use, copy, modify, and distribute this software and
# its documentation for any purpose and without fee is hereby
# (default: "-U postgres -h localhost -l -p 9999")
#
+VERSION=2.1
+
##### Source function library.
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat}
OCF_RESKEY_pgpooluser_default="postgres"
OCF_RESKEY_checkmethod_default="pid"
OCF_RESKEY_checkstring_default=""
+OCF_RESKEY_pgpoolcmd_default=@_PGPOOL_DIR_@/bin/pgpool
+OCF_RESKEY_psqlcmd_default=@_PGSQL_DIR_@/bin/psql
+OCF_RESKEY_pcpnccmd_default=@_PGPOOL_DIR_@/bin/pcp_node_count
: ${OCF_RESKEY_pgpoolconf=${OCF_RESKEY_pgpoolconf_default}}
: ${OCF_RESKEY_pcpconf=${OCF_RESKEY_pcpconf_default}}
: ${OCF_RESKEY_options=${OCF_RESKEY_options_default}}
: ${OCF_RESKEY_pgpooluser=${OCF_RESKEY_pgpooluser_default}}
: ${OCF_RESKEY_checkmethod=${OCF_RESKEY_checkmethod_default}}
+: ${OCF_RESKEY_pgpoolcmd=${OCF_RESKEY_pgpoolcmd_default}}
+: ${OCF_RESKEY_psqlcmd=${OCF_RESKEY_psqlcmd_default}}
+: ${OCF_RESKEY_pcpnccmd=${OCF_RESKEY_pcpnccmd_default}}
if [ ! -e $OCF_RESKEY_pgpoolconf ]; then
ocf_log warn "${OCF_RESOURCE_INSTANCE}: file '$OCF_RESKEY_pgpoolconf' (pgpoolconf) does not exists."
esac
fi
-###### Configured parameter
-
-PGPOOLCMD=@_PGPOOL_DIR_@/bin/pgpool
-PSQLCMD=@_PGSQL_DIR_@/bin/psql
-PCPNCCMD=@_PGPOOL_DIR_@/bin/pcp_node_count
-
-###### Build Start/Stop command
+###### Build Start command
-PGPOOL="$PGPOOLCMD -f $OCF_RESKEY_pgpoolconf"
+PGPOOL="$OCF_RESKEY_pgpoolcmd -f $OCF_RESKEY_pgpoolconf"
PGPOOL_START_ARG=""
if [ "x$OCF_RESKEY_hbaconf" != 'x' ]; then
do_pcp_check() {
- ocf_run -q $PCPNCCMD $OCF_RESKEY_checkstring
+ ocf_run -q $OCF_RESKEY_pcpnccmd $OCF_RESKEY_checkstring
rc=$?
if [ $rc -eq 0 ]
then
do_psql_check() {
- ocf_run -q $PSQLCMD $OCF_RESKEY_checkstring
+ ocf_run -q $OCF_RESKEY_psqlcmd $OCF_RESKEY_checkstring
rc=$?
if [ $rc -eq 0 ]
then
return $OCF_SUCCESS
}
+
do_stop() {
if ! pidfile_process_exists_p
then
return $OCF_ERR_GENERIC
fi
+ while pidfile_process_exists_p ; do
+ ocf_log debug "${OCF_RESOURCE_INSTANCE}: not stopped yet, waiting"
+ sleep 1
+ done
+
return $OCF_SUCCESS
}
+
do_reload() {
su -c "$PGPOOL reload"
return $OCF_SUCCESS
}
-# has side effect: kills zombie immediately
-# dependency: /proc/PID/status file
+
+# - has side effect: kills zombie immediately
+# - dependency: /proc/PID/status file
#
pidfile_process_exists_p() {
if [ -f $PIDFILE ]; then
kill -QUIT $RPID
return 1
else
- return 0
+ return 0 # ok, process exists
fi
else
return 1
fi
}
+
do_metadata() {
cat <<EOF
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="pgpool">
- <version>2.0</version>
+ <version>${VERSION}</version>
<longdesc lang="en">
This is an OCF Resource Agent for pgpool-II.
</longdesc>
when checkmetod="pcp", this means a parameter string for pcp_node_count.
(e.g.) "10 localhost 9898 postgres pass"
when checkmetod="psql", this means a parameter string for psql.
- (e.g.) "-U postgres -h localhost -c 'SELECT 1' -p 9999"
+ (e.g.) "-U postgres -h localhost -l -p 9999"
</longdesc>
<shortdesc lang="en">a parameter for monitoring method</shortdesc>
<content type="string" default="$OCF_RESKEY_checkstring_default" />
</parameter>
+ <parameter name="pgpoolcmd" unique="0" required="0">
+ <longdesc lang="en">
+pgpool command.
+ </longdesc>
+ <shortdesc lang="en"></shortdesc>
+ <content type="string" default="$OCF_RESKEY_pgpoolcmd_default" />
+ </parameter>
+ <parameter name="psqlcmd" unique="0" required="0">
+ <longdesc lang="en">
+psql command.
+ </longdesc>
+ <shortdesc lang="en">psql command</shortdesc>
+ <content type="string" default="$OCF_RESKEY_psqlcmd_default" />
+ </parameter>
+ <parameter name="pcpnccmd" unique="0" required="0">
+ <longdesc lang="en">
+pcp_node_count command.
+ </longdesc>
+ <shortdesc lang="en">pcp_node_count command</shortdesc>
+ <content type="string" default="$OCF_RESKEY_pcpnccmd_default" />
+ </parameter>
</parameters>
<actions>
<action name="start" timeout="20" />
return $OCF_SUCCESS
}
+
do_help() {
echo "pgpool (start|stop|reload|monitor|meta-data|validate-all|help)"
return $OCF_SUCCESS
}
+
do_validate_all() {
if [ "x$OCF_RESKEY_pgpoolconf" = "x" ] ; then
return $OCF_ERR_CONFIGURED
if [ ! -e $OCF_RESKEY_pgpoolconf ] ; then
return $OCF_ERR_CONFIGURED
fi
- if [ ! -x $PGPOOLCMD ] ; then
+ if [ ! -x $OCF_RESKEY_pgpoolcmd ] ; then
return $OCF_ERR_INSALLED
fi
- if [ ! -x $PSQLCMD -a $OCF_RESKEY_checkmethod = "psql" ] ; then
+ if [ ! -x $OCF_RESKEY_psqlcmd -a $OCF_RESKEY_checkmethod = "psql" ] ; then
return $OCF_ERR_INSALLED
fi
- if [ ! -x $PCPNCCMD -a $OCF_RESKEY_checkmethod = "pcp" ] ; then
+ if [ ! -x $OCF_RESKEY_pcpnccmd -a $OCF_RESKEY_checkmethod = "pcp" ] ; then
return $OCF_ERR_INSALLED
fi
if [ "x$PIDFILE" = "x" -a $OCF_RESKEY_checkmethod = "pid" ]