Guest User

pgsql

a guest
Oct 12th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 18.38 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # Description:  Manages a PostgreSQL Server as an OCF High-Availability
  4. #               resource
  5. #
  6. # Authors:      Serge Dubrouski ([email protected]) -- original RA
  7. #               Florian Haas ([email protected]) -- makeover
  8. #
  9. # Copyright:    2006-2010 Serge Dubrouski <[email protected]>
  10. #                         and other Linux-HA contributors
  11. # License:      GNU General Public License (GPL)
  12. #
  13. ###############################################################################
  14. # Initialization:
  15.  
  16. : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
  17. . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
  18.  
  19. #
  20. # Get PostgreSQL Configuration parameter
  21. #
  22. get_pgsql_param() {
  23.     local config_file
  24.     local param_name
  25.  
  26.     param_name=$1
  27.  
  28.     #Check that config file exists
  29.     if [ -n "$OCF_RESKEY_config" ]; then
  30.         config=$OCF_RESKEY_config
  31.     else
  32.         config=$OCF_RESKEY_pgdata/postgresql.conf
  33.     fi
  34.  
  35.     check_config "$config"
  36.     [ $? -eq 0 ] || return
  37.  
  38.     perl_code="if (/^\s*$param_name[\s=]+\s*(.*)$/) {
  39.       \$dir=\$1;
  40.       \$dir =~ s/\s*\#.*//;
  41.       \$dir =~ s/^'(\S*)'/\$1/;
  42.       print \$dir;}"
  43.  
  44.     perl -ne "$perl_code" < $config
  45. }
  46.  
  47. # Defaults
  48. OCF_RESKEY_pgctl_default=/usr/bin/pg_ctl
  49. OCF_RESKEY_psql_default=/usr/bin/psql
  50. OCF_RESKEY_pgdata_default=/var/lib/pgsql/data
  51. OCF_RESKEY_pgdba_default=postgres
  52. OCF_RESKEY_pghost_default=""
  53. OCF_RESKEY_pgport_default=5432
  54. OCF_RESKEY_config_default=""
  55. OCF_RESKEY_start_opt_default=""
  56. OCF_RESKEY_pgdb_default=template1
  57. OCF_RESKEY_logfile_default=/dev/null
  58. OCF_RESKEY_stop_escalate_default=30
  59. OCF_RESKEY_monitor_user_default=""
  60. OCF_RESKEY_monitor_password_default=""
  61. OCF_RESKEY_monitor_sql_default="select now();"
  62.  
  63. : ${OCF_RESKEY_pgctl=${OCF_RESKEY_pgctl_default}}
  64. : ${OCF_RESKEY_psql=${OCF_RESKEY_psql_default}}
  65. : ${OCF_RESKEY_pgdata=${OCF_RESKEY_pgdata_default}}
  66. : ${OCF_RESKEY_pgdba=${OCF_RESKEY_pgdba_default}}
  67. : ${OCF_RESKEY_pghost=${OCF_RESKEY_pghost_default}}
  68. : ${OCF_RESKEY_pgport=${OCF_RESKEY_pgport_default}}
  69. : ${OCF_RESKEY_config=${OCF_RESKEY_config_default}}
  70. : ${OCF_RESKEY_start_opt=${OCF_RESKEY_start_opt_default}}
  71. : ${OCF_RESKEY_pgdb=${OCF_RESKEY_pgdb_default}}
  72. : ${OCF_RESKEY_logfile=${OCF_RESKEY_logfile_default}}
  73. : ${OCF_RESKEY_stop_escalate=${OCF_RESKEY_stop_escalate_default}}
  74. : ${OCF_RESKEY_monitor_user=${OCF_RESKEY_monitor_user_default}}
  75. : ${OCF_RESKEY_monitor_password=${OCF_RESKEY_monitor_password_default}}
  76. : ${OCF_RESKEY_monitor_sql=${OCF_RESKEY_monitor_sql_default}}
  77.  
  78. usage() {
  79.     cat <<EOF
  80.     usage: $0 start|stop|status|monitor|meta-data|validate-all|methods
  81.  
  82.     $0 manages a PostgreSQL Server as an HA resource.
  83.  
  84.         The 'start' operation starts the PostgreSQL server.
  85.         The 'stop' operation stops the PostgreSQL server.
  86.         The 'status' operation reports whether the PostgreSQL is up.
  87.         The 'monitor' operation reports whether the PostgreSQL is running.
  88.         The 'validate-all' operation reports whether the parameters are valid.
  89.         The 'methods' operation reports on the methods $0 supports.
  90. EOF
  91.   return $OCF_ERR_ARGS
  92. }
  93.  
  94. meta_data() {
  95.     cat <<EOF
  96. <?xml version="1.0"?>
  97. <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
  98. <resource-agent name="pgsql">
  99. <version>1.0</version>
  100.  
  101. <longdesc lang="en">
  102. Resource script for PostgreSQL. It manages a PostgreSQL as an HA resource.
  103. </longdesc>
  104. <shortdesc lang="en">Manages a PostgreSQL database instance</shortdesc>
  105.  
  106. <parameters>
  107. <parameter name="pgctl" unique="0" required="0">
  108. <longdesc lang="en">
  109. Path to pg_ctl command.
  110. </longdesc>
  111. <shortdesc lang="en">pgctl</shortdesc>
  112. <content type="string" default="${OCF_RESKEY_pgctl_default}" />
  113. </parameter>
  114.  
  115. <parameter name="start_opt" unique="0" required="0">
  116. <longdesc lang="en">
  117. Start options (-o start_opt in pg_ctl). "-i -p 5432" for example.
  118. </longdesc>
  119. <shortdesc lang="en">start_opt</shortdesc>
  120. <content type="string" default="${OCF_RESKEY_start_opt_default}" />
  121.  
  122. </parameter>
  123. <parameter name="ctl_opt" unique="0" required="0">
  124. <longdesc lang="en">
  125. Additional pg_ctl options (-w, -W etc..).
  126. </longdesc>
  127. <shortdesc lang="en">ctl_opt</shortdesc>
  128. <content type="string" default="${OCF_RESKEY_ctl_opt_default}" />
  129. </parameter>
  130.  
  131. <parameter name="psql" unique="0" required="0">
  132. <longdesc lang="en">
  133. Path to psql command.
  134. </longdesc>
  135. <shortdesc lang="en">psql</shortdesc>
  136. <content type="string" default="${OCF_RESKEY_psql_default}" />
  137. </parameter>
  138.  
  139. <parameter name="pgdata" unique="0" required="0">
  140. <longdesc lang="en">
  141. Path to PostgreSQL data directory.
  142. </longdesc>
  143. <shortdesc lang="en">pgdata</shortdesc>
  144. <content type="string" default="${OCF_RESKEY_pgdata_default}" />
  145. </parameter>
  146.  
  147. <parameter name="pgdba" unique="0" required="0">
  148. <longdesc lang="en">
  149. User that owns PostgreSQL.
  150. </longdesc>
  151. <shortdesc lang="en">pgdba</shortdesc>
  152. <content type="string" default="${OCF_RESKEY_pgdba_default}" />
  153. </parameter>
  154.  
  155. <parameter name="pghost" unique="0" required="0">
  156. <longdesc lang="en">
  157. Hostname/IP address where PostgreSQL is listening
  158. </longdesc>
  159. <shortdesc lang="en">pghost</shortdesc>
  160. <content type="string" default="${OCF_RESKEY_pghost_default}" />
  161. </parameter>
  162.  
  163. <parameter name="pgport" unique="0" required="0">
  164. <longdesc lang="en">
  165. Port where PostgreSQL is listening
  166. </longdesc>
  167. <shortdesc lang="en">pgport</shortdesc>
  168. <content type="integer" default="${OCF_RESKEY_pgport_default}" />
  169. </parameter>
  170.  
  171. <parameter name="monitor_user" unique="0" required="0">
  172. <longdesc lang="en">
  173. PostgreSQL user that pgsql RA will user for monitor operations. If it's not set
  174. pgdba user will be used.
  175. </longdesc>
  176. <shortdesc lang="en">monitor_user</shortdesc>
  177. <content type="string" default="${OCF_RESKEY_monitor_user_default}" />
  178. </parameter>
  179.  
  180. <parameter name="monitor_password" unique="0" required="0">
  181. <longdesc lang="en">
  182. Password for monitor user.
  183. </longdesc>
  184. <shortdesc lang="en">monitor_password</shortdesc>
  185. <content type="string" default="${OCF_RESKEY_monitor_password_default}" />
  186. </parameter>
  187.  
  188. <parameter name="monitor_sql" unique="0" required="0">
  189. <longdesc lang="en">
  190. SQL script that will be used for monitor operations.
  191. </longdesc>
  192. <shortdesc lang="en">monitor_sql</shortdesc>
  193. <content type="string" default="${OCF_RESKEY_monitor_sql_default}" />
  194. </parameter>
  195.  
  196.  
  197. <parameter name="config" unique="0" required="0">
  198. <longdesc lang="en">
  199. Path to the PostgreSQL configuration file for the instance
  200. </longdesc>
  201. <shortdesc lang="en">Configuration file</shortdesc>
  202. <content type="integer" default="${OCF_RESKEY_config_default}" />
  203. </parameter>
  204.  
  205. <parameter name="pgdb" unique="0" required="0">
  206. <longdesc lang="en">
  207. Database that will be used for monitoring.
  208. </longdesc>
  209. <shortdesc lang="en">pgdb</shortdesc>
  210. <content type="string" default="${OCF_RESKEY_pgdb_default}" />
  211. </parameter>
  212.  
  213. <parameter name="logfile" unique="0" required="0">
  214. <longdesc lang="en">
  215. Path to PostgreSQL server log output file.
  216. </longdesc>
  217. <shortdesc lang="en">logfile</shortdesc>
  218. <content type="string" default="${OCF_RESKEY_logfile_default}" />
  219. </parameter>
  220.  
  221. <parameter name="socketdir" unique="0" required="0">
  222. <longdesc lang="en">
  223. Unix socket directory for PostgeSQL
  224. </longdesc>
  225. <shortdesc lang="en">socketdir</shortdesc>
  226. <content type="string" default="" />
  227. </parameter>
  228.  
  229. <parameter name="stop_escalate" unique="0" required="0">
  230. <longdesc lang="en">
  231. Number of shutdown retries (using -m fast) before resorting to -m immediate
  232. </longdesc>
  233. <shortdesc lang="en">stop escalation</shortdesc>
  234. <content type="integer" default="${OCF_RESKEY_stop_escalation}" />
  235. </parameter>
  236. </parameters>
  237.  
  238. <actions>
  239. <action name="start" timeout="120" />
  240. <action name="stop" timeout="120" />
  241. <action name="status" timeout="60" />
  242. <action name="monitor" depth="0" timeout="30" interval="30"/>
  243. <action name="meta-data" timeout="5" />
  244. <action name="validate-all" timeout="5" />
  245. <action name="methods" timeout="5" />
  246. </actions>
  247. </resource-agent>
  248. EOF
  249. }
  250.  
  251.  
  252. #
  253. #   Run the given command in the Resource owner environment...
  254. #
  255. runasowner() {
  256.     local quietrun=""
  257.     local loglevel="-err"
  258.     local var
  259.  
  260.     for var in 1 2
  261.     do
  262.         case "$1" in
  263.             "-q")
  264.                 quietrun="-q"
  265.                 shift 1;;
  266.             "warn"|"err")
  267.                 loglevel="-$1"
  268.                 shift 1;;
  269.             *)
  270.                 ;;
  271.         esac
  272.     done
  273.  
  274.     ocf_run $quietrun $loglevel su $OCF_RESKEY_pgdba -c "cd $OCF_RESKEY_pgdata; $*"
  275. }
  276.  
  277. #
  278. #       Shell escape
  279. #
  280. escape_string() {
  281.     echo "$*" | sed -e "s/'/'\\\\''/g"
  282. }
  283.  
  284.  
  285. #
  286. # methods: What methods/operations do we support?
  287. #
  288.  
  289. pgsql_methods() {
  290.   cat <<EOF
  291.     start
  292.     stop
  293.     status
  294.     monitor
  295.     methods
  296.     meta-data
  297.     validate-all
  298. EOF
  299. }
  300.  
  301.  
  302. #pgsql_start: Starts PostgreSQL
  303. pgsql_start() {
  304.     local pgctl_options
  305.     local postgres_options
  306.     local rc
  307.  
  308.     if pgsql_status; then
  309.         ocf_log info "PostgreSQL is already running. PID=`cat $PIDFILE`"
  310.         return $OCF_SUCCESS
  311.     fi
  312.  
  313.     # Remove postmaster.pid if it exists
  314.     rm -f $PIDFILE
  315.  
  316.     # Remove backup_label if it exists
  317.     if [ -f $BACKUPLABEL ]; then
  318.     ocf_log info "Removing $BACKUPLABEL. The previous backup might have failed."
  319.     rm -f $BACKUPLABEL
  320.     fi
  321.  
  322.     # Check if we need to create a log file
  323.     if ! check_log_file $OCF_RESKEY_logfile
  324.     then
  325.         ocf_log err "PostgreSQL can't write to the log file: $OCF_RESKEY_logfile"
  326.     return $OCF_ERR_PERM
  327.     fi
  328.  
  329.     # Check socket directory
  330.     if [ -n "$OCF_RESKEY_socketdir" ]
  331.     then
  332.         check_socket_dir
  333.     fi
  334.  
  335.     # Set options passed to pg_ctl
  336.     pgctl_options="$OCF_RESKEY_ctl_opt -D $OCF_RESKEY_pgdata -l $OCF_RESKEY_logfile"
  337.  
  338.     # Set options passed to the PostgreSQL server process
  339.     postgres_options=""
  340.     if [ -n "$OCF_RESKEY_config" ]; then
  341.     postgres_options="$postgres_options -c config_file=${OCF_RESKEY_config}"
  342.     fi
  343.     if [ -n "$OCF_RESKEY_pghost" ]; then
  344.     postgres_options="$postgres_options -h $OCF_RESKEY_pghost"
  345.     fi
  346.     if [ -n "$OCF_RESKEY_start_opt" ]; then
  347.     postgres_options="$postgres_options $OCF_RESKEY_start_opt"
  348.     fi
  349.  
  350.     # Tack pass-through options onto pg_ctl options
  351.     if [ -n "$postgres_options" ]; then
  352.     pgctl_options="$pgctl_options -o '$postgres_options'"
  353.     fi
  354.  
  355.     # Invoke pg_ctl
  356.     runasowner "$OCF_RESKEY_pgctl $pgctl_options start"
  357.  
  358.     if [ $? -eq 0 ]; then
  359.     # Probably started.....
  360.         ocf_log info "PostgreSQL start command sent."
  361.     else
  362.     ocf_log err "Can't start PostgreSQL."
  363.         return $OCF_ERR_GENERIC
  364.     fi
  365.  
  366.     while :
  367.     do
  368.         pgsql_monitor warn
  369.         rc=$?
  370.         if [ $rc -eq 0 ]; then
  371.             break;
  372.         fi
  373.         sleep 1
  374.     ocf_log debug "PostgreSQL still hasn't started yet. Waiting..."
  375.     done
  376.     ocf_log info "PostgreSQL is started."
  377.  
  378.     return $OCF_SUCCESS
  379. }
  380.  
  381. #pgsql_stop: Stop PostgreSQL
  382. pgsql_stop() {
  383.     local rc
  384.  
  385.     if ! pgsql_status
  386.     then
  387.         #Already stopped
  388.         return $OCF_SUCCESS
  389.     fi
  390.  
  391.     # Stop PostgreSQL, do not wait for clients to disconnect
  392.     runasowner "$OCF_RESKEY_pgctl -D $OCF_RESKEY_pgdata stop -m fast"
  393.  
  394.     # stop waiting
  395.     count=0
  396.     while [ $count -lt $OCF_RESKEY_stop_escalate ]
  397.     do
  398.         if ! pgsql_status
  399.         then
  400.             #PostgreSQL stopped
  401.             break;
  402.         fi
  403.         count=`expr $count + 1`
  404.         sleep 1
  405.     done
  406.  
  407.     if pgsql_status
  408.     then
  409.        #PostgreSQL is still up. Use another shutdown mode.
  410.        ocf_log info "PostgreSQL failed to stop after ${OCF_RESKEY_stop_escalate}s using -m fast. Trying -m immediate..."
  411.        runasowner "$OCF_RESKEY_pgctl -D $OCF_RESKEY_pgdata stop -m immediate"
  412.     fi
  413.  
  414.     while :
  415.     do
  416.         pgsql_monitor
  417.         rc=$?
  418.         if [ $rc -eq $OCF_NOT_RUNNING ]; then
  419.             # An unnecessary debug log is prevented.
  420.             break;
  421.         fi
  422.     sleep 1
  423.     ocf_log debug "PostgreSQL still hasn't stopped yet. Waiting..."
  424.     done
  425.  
  426.     # Remove postmaster.pid if it exists
  427.     rm -f $PIDFILE
  428.  
  429.     return $OCF_SUCCESS
  430. }
  431.  
  432. #
  433. # pgsql_status: is PostgreSQL up?
  434. #
  435.  
  436. pgsql_status() {
  437.      if [ -f $PIDFILE ]
  438.      then
  439.          PID=`head -n 1 $PIDFILE`
  440.          runasowner "kill -s 0 $PID >/dev/null 2>&1"
  441.          return $?
  442.      fi
  443.  
  444.      # No PID file
  445.      false
  446. }
  447.  
  448. #
  449. # pgsql_monitor
  450. #
  451.  
  452. pgsql_monitor() {
  453.     local loglevel
  454.     local psql_options
  455.     local rc
  456.  
  457.     # Set the log level of the error message
  458.     loglevel=${1:-err}
  459.  
  460.     if ! pgsql_status
  461.     then
  462.     ocf_log info "PostgreSQL is down"
  463.     return $OCF_NOT_RUNNING
  464.     fi
  465.  
  466.     if [ -n "$OCF_RESKEY_monitor_user" ]; then
  467.         PGUSER=$OCF_RESKEY_monitor_user; export PGUSER
  468.         PGPASSWORD=$OCF_RESKEY_monitor_password; export PGPASSWORD
  469.         psql_options="-p $OCF_RESKEY_pgport $OCF_RESKEY_pgdb"
  470.     else
  471.         psql_options="-p $OCF_RESKEY_pgport -U $OCF_RESKEY_pgdba $OCF_RESKEY_pgdb"
  472.     fi
  473.  
  474.     if [ -n "$OCF_RESKEY_pghost" ]; then
  475.     psql_options="$psql_options -h $OCF_RESKEY_pghost"
  476.     else
  477.        if [ -n "$OCF_RESKEY_socketdir" ]; then
  478.            psql_options="$psql_options -h $OCF_RESKEY_socketdir"
  479.        fi
  480.     fi
  481.  
  482.     OCF_RESKEY_monitor_sql=`escape_string "$OCF_RESKEY_monitor_sql"`
  483.     runasowner -q $loglevel "$OCF_RESKEY_psql $psql_options -c '$OCF_RESKEY_monitor_sql'"
  484.  
  485.     rc=$?
  486.     if [ $rc -ne  0 ]; then
  487.     ocf_log $loglevel "PostgreSQL $OCF_RESKEY_pgdb isn't running"
  488.         if [ $rc -eq 1 ]; then
  489.             ocf_log err "Fatal error (out of memory, file not found, etc.) occurred while executing the psql command."
  490.         elif [ $rc -eq 2 ]; then
  491.             ocf_log $loglevel "Connection error (connection to the server went bad and the session was not interactive) occurred while executing the psql command."
  492.         elif [ $rc -eq 3 ]; then
  493.             ocf_log err "Script error (the variable ON_ERROR_STOP was set) occurred while executing the psql command."
  494.         fi
  495.     return $OCF_ERR_GENERIC
  496.     fi
  497.  
  498.     return $OCF_SUCCESS
  499. }
  500.  
  501. check_binary2() {
  502.     if ! have_binary "$1"; then
  503.         ocf_log err "Setup problem: couldn't find command: $1"
  504.         return 1
  505.     fi
  506.     return 0
  507. }
  508.  
  509. check_config() {
  510.     local rc=0
  511.  
  512.     if [ ! -f "$1" ]; then
  513.         if ocf_is_probe; then
  514.            ocf_log info "Configuration file $1 not readable during probe."
  515.            rc=1
  516.         else
  517.            ocf_log err "Configuration file $1 doesn't exist"
  518.            rc=2
  519.         fi
  520.     fi
  521.  
  522.     return $rc
  523. }
  524.  
  525. # Validate most critical parameters
  526. pgsql_validate_all() {
  527.     if ! check_binary2 "$OCF_RESKEY_pgctl" ||
  528.        ! check_binary2 "$OCF_RESKEY_psql"; then
  529.         return $OCF_ERR_INSTALLED
  530.     fi
  531.  
  532.     if [ -n "$OCF_RESKEY_config" -a ! -f "$OCF_RESKEY_config" ]; then
  533.        check_config "$OCF_RESKEY_config"
  534.        [ $? -eq 2 ] && return $OCF_ERR_INSTALLED
  535.     fi
  536.  
  537.     getent passwd $OCF_RESKEY_pgdba >/dev/null 2>&1
  538.     if [ ! $? -eq 0 ]; then
  539.         ocf_log err "User $OCF_RESKEY_pgdba doesn't exist";
  540.         return $OCF_ERR_INSTALLED;
  541.     fi
  542.  
  543.     if ocf_is_probe; then
  544.         ocf_log info "Don't check $OCF_RESKEY_pgdata during probe"
  545.     else
  546.         if ! runasowner "test -w $OCF_RESKEY_pgdata"; then
  547.             ocf_log err "Directory $OCF_RESKEY_pgdata is not writable by $OCF_RESKEY_pgdba"
  548.             return $OCF_ERR_PERM;
  549.         fi
  550.     fi
  551.  
  552.     if [ -n "$OCF_RESKEY_monitor_user" -a ! -n "$OCF_RESKEY_monitor_password" ]
  553.     then
  554.         ocf_log err "monitor password can't be empty"
  555.         return $OCF_ERR_CONFIGURED
  556.     fi
  557.  
  558.     if [ ! -n "$OCF_RESKEY_monitor_user" -a -n "$OCF_RESKEY_monitor_password" ]
  559.     then
  560.         ocf_log err "monitor_user has to be set if monitor_password is set"
  561.         return $OCF_ERR_CONFIGURED
  562.     fi
  563.  
  564.     return $OCF_SUCCESS
  565. }
  566.  
  567.  
  568. #
  569. # Check if we need to create a log file
  570. #
  571.  
  572. check_log_file() {
  573.     if [ ! -f "$1" ]
  574.     then
  575.         touch $1 > /dev/null 2>&1
  576.         chown $OCF_RESKEY_pgdba:`getent passwd $OCF_RESKEY_pgdba | cut -d ":" -f 4` $1
  577.     fi
  578.  
  579.     #Check if $OCF_RESKEY_pgdba can write to the log file
  580.     if ! runasowner "test -w $1"
  581.     then
  582.         return 1
  583.     fi
  584.  
  585.     return 0
  586. }
  587.  
  588. #
  589. # Check socket directory
  590. #
  591. check_socket_dir() {
  592.     if [ ! -d "$OCF_RESKEY_socketdir" ]; then
  593.         if ! mkdir "$OCF_RESKEY_socketdir"; then
  594.             ocf_log err "Cannot create directory $OCF_RESKEY_socketdir"
  595.             exit $OCF_ERR_PERM
  596.         fi
  597.  
  598.         if ! chown $OCF_RESKEY_pgdba:`getent passwd \
  599.              $OCF_RESKEY_pgdba | cut -d ":" -f 4` "$OCF_RESKEY_socketdir"
  600.         then
  601.             ocf_log err "Cannot change ownership for $OCF_RESKEY_socketdir"
  602.             exit $OCF_ERR_PERM
  603.         fi
  604.  
  605.         if ! chmod 2775 "$OCF_RESKEY_socketdir"; then
  606.             ocf_log err "Cannot change permissions for $OCF_RESKEY_socketdir"
  607.             exit $OCF_ERR_PERM
  608.         fi
  609.     else
  610.         if ! runasowner "touch $OCF_RESKEY_socketdir/test.$$"; then
  611.             ocf_log err "$OCF_RESKEY_pgdba cannot create files in $OCF_RESKEY_socketdir"
  612.             exit $OCF_ERR_PERM
  613.         fi
  614.         rm $OCF_RESKEY_socketdir/test.$$
  615.     fi
  616. }
  617.  
  618. #
  619. #   'main' starts here...
  620. #
  621.  
  622.  
  623. if [ $# -ne 1 ]
  624. then
  625.     usage
  626.     exit $OCF_ERR_GENERIC
  627. fi
  628.  
  629.  
  630. PIDFILE=${OCF_RESKEY_pgdata}/postmaster.pid
  631. BACKUPLABEL=${OCF_RESKEY_pgdata}/backup_label
  632.  
  633. case "$1" in
  634.     methods)    pgsql_methods
  635.                 exit $?;;
  636.  
  637.     meta-data)  meta_data
  638.                 exit $OCF_SUCCESS;;
  639. esac
  640.  
  641. # $OCF_RESKEY_pgdata has to be initialized at this momemnt
  642. : ${OCF_RESKEY_socketdir=`get_pgsql_param unix_socket_directory`}
  643.  
  644. pgsql_validate_all
  645. rc=$?
  646.  
  647. [ "$1" == "validate-all" ] && exit $rc
  648.  
  649. if [ $rc -ne 0 ]
  650. then
  651.     case "$1" in
  652.         stop)    exit $OCF_SUCCESS;;
  653.         monitor) exit $OCF_NOT_RUNNING;;
  654.         status)  exit $OCF_NOT_RUNNING;;
  655.         *)       exit $rc;;
  656.     esac
  657. fi
  658.  
  659. US=`id -u -n`
  660.  
  661. if [ $US != root -a $US != $OCF_RESKEY_pgdba ]
  662. then
  663.     ocf_log err "$0 must be run as root or $OCF_RESKEY_pgdba"
  664.     exit $OCF_ERR_GENERIC
  665. fi
  666.  
  667. # What kind of method was invoked?
  668. case "$1" in
  669.     status)     if pgsql_status
  670.                 then
  671.                     ocf_log info "PostgreSQL is up"
  672.                     exit $OCF_SUCCESS
  673.                 else
  674.                     ocf_log info "PostgreSQL is down"
  675.                     exit $OCF_NOT_RUNNING
  676.                 fi;;
  677.  
  678.     monitor)    pgsql_monitor
  679.                 exit $?;;
  680.  
  681.     start)      pgsql_start
  682.                 exit $?;;
  683.  
  684.     stop)       pgsql_stop
  685.                 exit $?;;
  686.     *)
  687.                 exit $OCF_ERR_UNIMPLEMENTED;;
  688. esac
  689.  
  690.  
Advertisement
Add Comment
Please, Sign In to add comment