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