New pgs_smf_register.ksh
  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 
 28 #ident  "%Z%%M% %I%     %E% SMI"
 29 
 30 MYDIR=/opt/SUNWscPostgreSQL
 31 MYFILE=
 32 MYCONFIG=
 33 MANIFEST_DIR=/var/svc/manifest/application/sczone-agents
 34 
 35 MYNAME=`basename ${0}`
 36 
 37 . ${MYDIR}/etc/config
 38 . ${MYDIR}/lib/functions_static
 39 . ${MYDIR}/bin/functions
 40 
 41 
 42 #############################################################
 43 # create_xml()
 44 #
 45 # This function creates the xml manifest that will get called 
 46 # by SMF, i.e. svcadm enable <service> . This allows the SMF
 47 # service to be called in a zone by the 
 48 #
 49 #       Sun Cluster Data Service for Solaris Container
 50 #       - sczsmf component
 51 #
 52 #############################################################
 53 
 54 create_xml()
 55 {
 56         MYDIR=$1
 57         MYFILE=$2
 58 
 59         if [ ! -d "${MANIFEST_DIR}" ]
 60         then
 61                 mkdir -p ${MANIFEST_DIR}
 62         fi
 63                 
 64         cat > ${MANIFEST_DIR}/${MYFILE}.xml <<-EOF
 65         <?xml version="1.0"?>
 66         <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
 67 
 68         <!--
 69             Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
 70             Use is subject to license terms.
 71 
 72         -->
 73 
 74         <service_bundle type='manifest' name='${MYFILE}'>
 75 
 76         <service
 77         name='application/sczone-agents'
 78         type='service'
 79         version='1'>
 80 
 81         <!--
 82             Common dependencies for the service
 83         -->
 84 
 85         <dependency name='pgs_services'
 86         grouping='require_all'
 87         restart_on='none'
 88         type='service'>
 89                 <service_fmri value='svc:/milestone/multi-user-server'/>
 90                 <service_fmri value='svc:/network/loopback'/>
 91         </dependency>
 92 
 93         <instance name='${MYFILE}' enabled='false'>
 94 
 95 
 96         <exec_method
 97         type='method'
 98         name='start'
 99         exec='${MYDIR}/bin/control_pgs start'
100         timeout_seconds='300' >
101         <method_context project='${PROJECT}' >
102                 <method_credential user='${USER}' />
103         </method_context>
104         </exec_method>
105 
106         <exec_method
107         type='method'
108         name='stop'
109         exec='${MYDIR}/bin/control_pgs stop'
110         timeout_seconds='300' >
111         <method_context project='${PROJECT}' >
112                 <method_credential user='${USER}' />
113         </method_context>
114         </exec_method>
115 
116         <!--
117             Instance specific parameters
118         -->
119 
120         <!--
121 
122         This  manifest does not restart on coredumps or abnormal process termination.
123         PostgreSQL has its own restart capabilities, to restart child postmaster processes.
124         If the parent postmaster dies, the whole process tree will disappear..
125         Due to this fact it is sufficient, to restart on an empty process tree and on HW error.
126 
127         For additional information start with man svc.startd
128 
129         -->
130 
131         <property_group name='startd' type='framework'>
132                  <propval name='ignore_error' type='astring' value='core,signal' />
133         </property_group>
134 
135         <property_group name='parameters' type='general'>
136         <propval name='Resource' type='astring' value='${RS}'/>
137         <propval name='Resource_group' type='astring' value='${RG}'/>
138         <propval name='Parameter_File' type='astring' value='${PFILE}'/>
139         </property_group>
140 
141         </instance>
142 
143         <stability value='Evolving' />
144 
145         <template>
146         <common_name>
147         <loctext xml:lang='C'>
148         Application PostgresSql
149         </loctext>
150         </common_name>
151         </template>
152         </service>
153 
154         </service_bundle>
155 
156         EOF
157 }
158 
159 typeset opt
160 
161 while getopts 'f:' opt
162 do
163         case "${opt}" in
164                 f)      MYCONFIG=${OPTARG};;
165                 *)      exit 1;;
166         esac
167 done
168 
169 # Sourcing the specified config file, either the default one,
170 # or the one supplied with -f
171 
172 if [ -n "${MYCONFIG}" ] && [ -f "${MYCONFIG}" ]
173 then
174         echo "sourcing ${MYCONFIG}"
175         . ${MYCONFIG}
176 else
177         PKGCONF=`dirname $0`/pgs_config
178         echo "sourcing ${PKGCONF}"
179         . ${PKGCONF}
180 fi
181 
182 # checking and initializing user and project, if they are not set
183 
184 if [ -z "${PROJECT}" ]
185 then
186         PROJECT=:default
187 fi
188 
189 if [ -z "${USER}" ]
190 then
191         USER=root
192 fi
193 
194 
195 MYFILE=${RS}
196 
197 if create_xml $MYDIR $MYFILE
198 then
199         printf "${MANIFEST_DIR}/${MYFILE}.xml successfully created\n"
200 else
201         printf "${MANIFEST_DIR}/${MYFILE}.xml failed\n"
202         exit 1
203 fi
204 
205 if /usr/sbin/svccfg validate ${MANIFEST_DIR}/${MYFILE}.xml
206 then
207         printf "${MANIFEST_DIR}/${MYFILE}.xml successfully validated\n"
208 else
209         exit 1
210 fi
211         
212 if /usr/sbin/svccfg import ${MANIFEST_DIR}/${MYFILE}.xml
213 then
214         printf "${MANIFEST_DIR}/${MYFILE}.xml successfully imported\n"
215 else
216         exit 1
217 fi
218 
219 # create the parameter file
220 
221 if  create_pfile
222 then
223         echo "creation of the parameter file ${PFILE} successful"
224 else
225         echo "creation of the parameter file ${PFILE} unsuccessful"
226         exit 1
227 fi
228 
229 # Validate the parameters of the Postgres Resource
230 
231 if  ${MYDIR}/bin/control_pgs validate svc:/application/sczone-agents:${RS}
232 then
233         echo " validation of the PostrgeSQL smf service svc:/application/sczone-agents:${RS} successful"
234 else
235         echo " validation of the PostrgeSQL smf service svc:/application/sczone-agents:${RS} failed, fix the errors and retry"
236         exit 1
237 fi
238 
239 exit 0