Home | History | Annotate | Download | only in PostgreSQL
      1 #!/usr/bin/ksh
      2 #
      3 # CDDL HEADER START
      4 #
      5 # The contents of this file are subject to the terms of the
      6 # Common Development and Distribution License (the License).
      7 # You may not use this file except in compliance with the License.
      8 #
      9 # You can obtain a copy of the license at usr/src/CDDL.txt
     10 # or http://www.opensolaris.org/os/licensing.
     11 # See the License for the specific language governing permissions
     12 # and limitations under the License.
     13 #
     14 # When distributing Covered Code, include this CDDL HEADER in each
     15 # file and include the License file at usr/src/CDDL.txt.
     16 # If applicable, add the following below this CDDL HEADER, with the
     17 # fields enclosed by brackets [] replaced with your own identifying
     18 # information: Portions Copyright [yyyy] [name of copyright owner]
     19 #
     20 # CDDL HEADER END
     21 #
     22 
     23 #
     24 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     25 # Use is subject to license terms.
     26 
     27 #ident   "@(#)control_pgs.ksh 1.8     08/05/06 SMI"
     28 #
     29 # Method for the PostrgresSQL agents and the smf manifest
     30 #
     31 # This method is called by the GDS, manifest, by the optional probe script of the smf method.
     32 #
     33 # it is started with options and up to 2 parameters:
     34 #
     35 #
     36 # $1 start, stop, validate, check_stdby, start_ssh_agent or probe
     37 # $2 is the smf service tag name. It is used only if the parameter $1 is probe
     38 #
     39 
     40 MYNAME=`basename ${0}`
     41 MYDIR=`dirname ${0}`
     42 
     43 . ${MYDIR}/../etc/config
     44 . ${MYDIR}/../lib/functions_static
     45 . ${MYDIR}/functions
     46 
     47 debug_message "Method: ${MYNAME} ${*} - Begin"
     48 ${SET_DEBUG}
     49 
     50 # get the options for gds and the zsh command, amend as appropriate
     51 
     52 while getopts 'R:G:P:' opt
     53 do
     54         case "${opt}" in
     55                 R)      RESOURCE=${OPTARG};;
     56                 G)      RESOURCEGROUP=${OPTARG};;
     57                 P)      PARFILE=${OPTARG};;
     58                 *)      exit 1;;
     59         esac
     60 done
     61 
     62 # if no option is set ($OPTIND is 1 in this case), use the smf properties
     63 
     64 if [ ${OPTIND} -gt 1 ]
     65 then
     66 	shift $((${OPTIND} - 1))
     67 else
     68 
     69 	. /lib/svc/share/smf_include.sh
     70 	
     71 	# Setting SMF_FMRI in case of validate and probe and check_stdby
     72         
     73 	if [ -z "${SMF_FMRI}" ]
     74 	then
     75 		SMF_FMRI=${2}	
     76 	fi
     77 
     78 	# getting the necessary parameters and filling the variables usually filled
     79 	# in from options
     80 
     81 	get_fmri_parameters
     82 fi
     83 
     84 # set some generic variables
     85 
     86 LOGFILE=/var/tmp/${RESOURCE}_logfile
     87 
     88 case ${1} in
     89 start)
     90 
     91 	# start application PostrgresSQL
     92 
     93 	# exit from start, if the options are wrong
     94 
     95 	validate_options
     96 	rc_val=${?}
     97 	if [ ${rc_val} -ne 0 ]
     98 	then
     99 		terminate ${1} ${rc_val}
    100 	fi
    101 	
    102 	${RM} ${LOGFILE} 2>/dev/null
    103 	
    104 	# check the content of the options 
    105 
    106 	if validate
    107 	then
    108 
    109 		# source the parameter file before the actual start
    110 
    111 		. ${PARFILE}
    112 
    113 		start_pgs
    114 		rc_val=${?}
    115 		
    116 		if [ ${rc_val} -eq 0 ]
    117 		then
    118 		        log_message notice "start_command rc<${rc_val}>"
    119 		        debug_message "Method: ${MYNAME} - End (Exit 0)"
    120 		else
    121 		        log_message err "start_command rc<${rc_val}>"
    122 		fi
    123 	else
    124 	        debug_message "Method: ${MYNAME} - End (Exit 1)"
    125 		rc_val=1
    126 	fi;;
    127 stop)
    128 
    129 	# stop application PostrgresSQL
    130 
    131 	# exit from stop, if the options are wrong
    132 
    133 	validate_options
    134 	rc_val=${?}
    135 	if [ ${rc_val} -ne 0 ]
    136 	then
    137 		terminate ${1} ${rc_val}
    138 	fi
    139 
    140 	# source the parameter file before the actual stop
    141 
    142 	. ${PARFILE}
    143 	
    144 	stop_pgs
    145 	rc_val=${?}
    146 	
    147 	if [ "${rc_val}" -eq 0 ]
    148 	then
    149 	        log_message notice "stop_command rc<${rc_val}>"
    150 	else
    151 	        log_message err "stop_command rc<${rc_val}>"
    152 	fi
    153 	rc_val=0;;
    154 
    155 probe)
    156 
    157 	# probe application PostrgresSQL
    158 
    159 	# exit from probe, if the options are wrong
    160 
    161 	validate_options
    162 	rc_val=${?}
    163 	if [ ${rc_val} -ne 0 ]
    164 	then
    165 		terminate ${1} ${rc_val}
    166 	fi
    167 
    168 	
    169 	# Perform a short parameter validation for the probe, if the validation
    170 	# fails the return code is taken from the return code of the 
    171 	# validate_probe function. 
    172 	# The parameter file is sourced in validate_probe.
    173 
    174 	validate_probe
    175 	rc_val=${?}
    176 
    177 	if [ ${rc_val} -eq 0 ]
    178 	then
    179 
    180 		# spin off a project based smf probe if necessary, do the probe with the check function otherwise
    181 	
    182 		if [ "${Project}" != ":default" ] && [ -n "${SMF_FMRI}" ]
    183 		then
    184 			/usr/bin/newtask -p ${Project} ${MYDIR}/probe_smf_pgs ${SMF_FMRI}
    185 			rc_val=$?
    186 		else
    187 			check_pgs
    188 			rc_val=$?
    189 		fi
    190 	fi;;
    191 
    192 validate)
    193 
    194 	# validate the parameters for application PostrgresSQL
    195 
    196 	validate_options
    197 	rc_val=${?}
    198 	if [ ${rc_val} -ne 0 ]
    199 	then
    200 		terminate ${1} ${rc_val}
    201 	fi
    202 	
    203 	if validate
    204 	then
    205 	        rc_val=0
    206 	else
    207 	        rc_val=1
    208 	fi;;
    209 
    210 check_stdby)
    211 
    212 	# Check if the current host is configured as a PostgreSQL standby host
    213 
    214 	validate_options
    215 	rc_val=${?}
    216 	if [ ${rc_val} -ne 0 ]
    217 	then
    218 		terminate ${1} ${rc_val}
    219 	fi
    220 	
    221 	${RM} ${LOGFILE} 2>/dev/null
    222 	
    223 	# check the content of the options 
    224 
    225 	if validate
    226 	then
    227 
    228 		# Source the parameter file, to get the necessary informations for
    229 		# the check.
    230 
    231 		. ${PARFILE}
    232 
    233 		if check_stdby
    234 		then
    235 		        rc_val=0
    236 		else
    237 		        rc_val=1
    238 		fi
    239 	else
    240 		rc_val=1
    241 	fi;;
    242 
    243 start_ssh_agent)
    244 
    245 	# start an ssh-agent and decrypt the private ssh-key.
    246 
    247 	validate_options
    248 	rc_val=${?}
    249 	if [ ${rc_val} -ne 0 ]
    250 	then
    251 		terminate ${1} ${rc_val}
    252 	fi
    253 	
    254 	${RM} ${LOGFILE} 2>/dev/null
    255 	
    256 	# check the content of the options 
    257 
    258 	if validate
    259 	then
    260 
    261 		# Source the parameter file, to get the informations for the start
    262 		# of the ssh-agent.
    263 
    264 		. ${PARFILE}
    265 
    266 		SSH_PASSPHRASE=`${CAT} /tmp/${RESOURCE}-phrase`
    267 		if start_ssh_agent ${SSH_PASSPHRASE}
    268 		then
    269 		        rc_val=0
    270 		else
    271 		        rc_val=1
    272 		fi
    273 	else
    274 		rc_val=1
    275 	fi;;
    276 	
    277 esac
    278 
    279 # terminate with the right return code, either with an smf specific or the gds/zsh based
    280 # return code
    281 
    282 debug_message "Method: ${MYNAME} ${*} - End terminating"
    283 terminate ${1} ${rc_val}
    284