Home | History | Annotate | only in /ha-utilities/GDS-template
Up to higher level directory
NameDateSize
CDDL.txt09-Dec-200818.5K
Make_package/09-Dec-2008
README09-Dec-200811.4K
SUNCscxxx/09-Dec-2008
tools/19-Jan-2009

README

      1 #
      2 # CDDL HEADER START
      3 #
      4 # The contents of this file are subject to the terms of the
      5 # Common Development and Distribution License (the License).
      6 # You may not use this file except in compliance with the License.
      7 #
      8 # You can obtain a copy of the license at SUNCsc_template/CDDL.txt
      9 # or http://www.opensolaris.org/os/licensing.
     10 # See the License for the specific language governing permissions
     11 # and limitations under the License.
     12 #
     13 # When distributing Covered Code, include this CDDL HEADER in each
     14 # file and include the License file at <packagename>/CDDL.txt.
     15 # If applicable, add the following below this CDDL HEADER, with the
     16 # fields enclosed by brackets [] replaced with your own identifying
     17 # information: Portions Copyright [yyyy] [name of copyright owner]
     18 #
     19 # CDDL HEADER END
     20 #
     21 
     22 #
     23 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 # ident	"@(#)README	1.2	08/02/12 SMI"
     27 #
     28 
     29 SUNCsc_template - Template for writing GDS based Suncluster Data Services. 
     30 
     31 Version 1.0	14.11.2007
     32 
     33 
     34 Here are just some guidelines for using this template:
     35 
     36 1. This SC3.x Data Service template is setup to work with GDS.
     37    Subsequently this is the callback behavior with SC3.x
     38 
     39    RGM -> GDS -> "control_xxx <options> start" | "control_xxx <options> stop" 
     40                   | "control_xxx <options> probe" 
     41 
     42 2. There are lots of debug messages within this template that 
     43    are there to help you. The debug message flow is as 
     44    follows, ie here's what a unsuccessful start_xxx does
     45 
     46     daemon.debug "Method: ${MYNAME} - Begin"
     47     daemon.debug "Function: validate - Begin"
     48     daemon.err   "Validate - file %s does not exist"
     49     daemon.debug "Function: validate - End"
     50     daemon.debug "Method: ${MYNAME} - End (Exit 1)"
     51 
     52 3. If possible please try to EXIT (return to caller) from the
     53    control_xxx script.
     54 
     55    Doing this will ensure that your debug messages 
     56    "Begin" and "End"
     57 
     58 4. Turning debug on just requires that you edit the SUNCscxxx/etc/config 
     59    file. Either enter the resource name for debug on just
     60    the resource, a "," separated list of resources, or ALL for all resources, 
     61    if you are running multiple instances that use this data service.
     62 
     63 5. When printing out messages, you'll see in the SUNCscxxx/lib/funtions_static
     64    file that there is a wrapper function called log_message
     65    which in turn uses scds_syslog. If using scds_syslog
     66    try to use %s to substitute any variables. An example
     67    of this can be found in the function debug_message.
     68 
     69 6. If you produce documentation for your data service and also
     70    want to document the messages and their msgid's you'll need
     71    need to do this outside of your scripts, eg.
     72 
     73     echo "Validate - file %s does not exist" | msgid
     74 
     75    will generate the following
     76 
     77     600366 Validate - file %s does not exist
     78 
     79    Please be aware that if this msgid is in use, you can check
     80    the SC3.x Error Message Guide to see if it's in use, then
     81    you MUST modify your message, ie
     82 
     83     echo "Validate - file %s does not exist " | msgid
     84                                            ^
     85    will generate the following (Note the space)
     86    
     87     409456 Validate - file %s does not exist 
     88 
     89    This is only feasible in a sun cluster environment, because the necessary
     90    scds_syslog binary is unavailable if no cluster is installed. In this case, 
     91    the logger command is used which generates the msgid 702911 only.
     92 
     93 7. Adding more options to either the 
     94    control_xxx, just requires some more lines from you, 
     95 
     96     control_xxx 
     97 
     98     while getopts 'R:G:C' opt
     99     do
    100         case "${opt}" in
    101                 R)      RESOURCE=${OPTARG};;
    102                 G)      RESOURCEGROUP=${OPTARG};;
    103                 C)      CONFIG_FILE=${OPTARG};;
    104                 *)      logger -p daemon.err \
    105                         "ERROR: ${MYNAME} Option ${OPTARG} unknown"
    106                         exit 1;;
    107         esac
    108     done
    109     
    110 
    111     ./bin/functions - validate_options
    112 
    113     validate_options()
    114     {
    115 	debug_message "Function: validate_options - Begin"
    116 	${SET_DEBUG}
    117         #
    118         # Ensure all options are set
    119         #
    120 
    121 	MYNAME=`basename $0`
    122 	
    123 	rc_validate_options=0
    124 
    125 	for i in RESOURCE RESOURCEGROUP CONFIG_FILE 
    126 	do
    127                 case $i in
    128                         RESOURCE)
    129                         if [ -z ${RESOURCE} ]; then
    130                                 logger -p daemon.err \
    131                                 "ERROR: ${MYNAME} Option -R not set"
    132                                 rc_validate_options=1
    133                         fi;;
    134 
    135                         RESOURCEGROUP)
    136                         if [ -z ${RESOURCEGROUP} ]; then
    137                                 logger -p daemon.err \
    138                                 "ERROR: ${MYNAME} Option -G not set"
    139                                 rc_validate_options=1
    140                         fi;;
    141 
    142                         CONFIG_FILE)
    143                         if [ -z ${CONFIG_FILE} ]; then
    144                                 logger -p daemon.err \
    145                                 "ERROR: ${MYNAME} Option -C not set"
    146                                 rc_validate_options=1
    147                         fi;;
    148 
    149                 esac
    150         done
    151 
    152 	debug_message "Function: validate_options - End"
    153 	return ${rc_validate_options}
    154 	
    155      }
    156 
    157 8. If you want to use the built-in start dependency follow the guidelines
    158    in the start_xxx() function.
    159 
    160 9. If you want to use the built-in restart dependency follow the guidelines
    161     in the check_xxx() function.
    162 
    163 10. Do not change the exit codes. They are there for a purpose and required
    164     by GDS to function.
    165 
    166 11. Personalize the scripts and the functions.
    167     If your package and the scripts should not be named xxx, execute the rename
    168     script in the tools directory
    169     tools/rename <new_name>
    170    
    171     From this moment all reference in this readme to xxx_ or _xxx should be
    172     read as
    173     <new_name>_ or _<new_name>
    174 
    175 12. When creating the package edit the Make_package/etc/pkginfo file and
    176     change PKG, NAME and DESC entries in that file.
    177 
    178     If you don't want your package to be named as SUNCscxxx change the
    179     directory SUNCscxxx to SUNCsc<new_name>.
    180 
    181     Run the Make_package in the directory Make_package/bin.
    182     You have to be in that directory when running the command.
    183 
    184 13. In order to work properly on Solaris 10 with Zones, if you use
    185     /usr/bin/ps or /usr/bin/pgrep within the agent, you should
    186     call the function zone_function() and call ps/pgrep like
    187 
    188 	zone_function
    189 
    190 	/usr/bin/pgrep ${PZONEOPT} <whatever you else want to call>
    191 
    192     This will set option "-z <zonename>" if the agent is used on
    193     a Solaris 10 system, else ${PZONEOPT} is empty.
    194     If you have additional code special to Solaris 10, you can set it
    195     within zone_function() as well.
    196 
    197 14. If your application does not leave a process behind, you need to remove 
    198     the hashes between the lines "### "disabling pmf" code begin" and 
    199     "### "disabling pmf" code end".
    200 
    201     An occurrence of this scenario are applications which just trigger an
    202     pre-spawned daemon to start and stop something or "Applications" which just
    203     manipulate flat files.
    204 
    205 15. How to make your agent runnable in a local zone.
    206 
    207     It is important, that the zone inherits at least the /opt/agent_name
    208     directory of the global zone, otherwise it will not have the agent code.
    209     IMPORTANT this can only be defined at zone creation, so it may be better to
    210     inherit /opt.
    211 
    212     Having the code in the local zone is not enough. The necessary resources
    213     needs to be configured in the global zone. You have two options:
    214 
    215     1. use the zsh script component of the Sun Cluster HA Container agent.
    216     2. use the smf component with an optional boot script.
    217 
    218     The zsh component is the simplest approach, it has the drawback/benefit,
    219     that it does not react on pmf restarts. 
    220     In this case configure the start stop and probe script with the options -S
    221     and -P. The tradeoff, is that a failure detection happens only after the
    222     probe interval.
    223     Another tradeoff is that you have to disable your resource every time you
    224     want to to change an option of the start, stop and probe script.
    225     Handling the resource manager project has to be done in the code of the
    226     start, stop and probe script.
    227 
    228     If you need a process based restart use the smf component. SMF offers an 
    229     immediate process restart and in addition online configurable properties.
    230     The tradeoff is the additional complexity of the smf manifest, the benefit
    231     is the additional flexibility you get with smf and the faster detection of
    232     vanishing process trees.
    233 
    234     Handeling user credentials and the resource manager project for start and
    235     stop is a built in capability of smf services. The probe runs under the
    236     root user, but the probe_smf_xxx script is fired under the right project.
    237 
    238     The template delivers the xxx_smf_register script, the xxx_smf_remove and
    239     the control_xxx method.
    240 
    241     The control_xxx script is the start and stop method for all the instances
    242     of your agent. You need to modify the control_xxx to extract the properties
    243     you specified in the manifest. These properties needs to be used as options
    244     for the start stop and probe command.
    245 
    246     The xxx_smf_register script generates the manifest file under:
    247     /local/svc/manifest/application/sczone-agents/$RS.xml and imports the
    248     manifest under
    249 
    250     svc:/application/sczone-agents:$RS
    251 
    252     $RS is the resource name, so you will have one smf manifast/resource per
    253     cluster resource.
    254 
    255     The values for properties are sourced from the config file you need to
    256     register for a resource in a global zone. These properties are stored in
    257     the smf repository for the service svc:/application/sczone-agents:$RS.
    258 
    259     To specify the properties you need to modify the property group parameters.
    260 
    261         <property_group name='parameters' type='general'>
    262         <propval name='Resource' type='astring' value='$RS'/>
    263         <propval name='Resource_group' type='astring' value='$RG'/>
    264         </property_group>
    265 
    266     You can amend the manifest with all the options useful for your agent. To
    267     achieve this you need to modify the SUNCscxxx/util/xxx_smf_register file.
    268 
    269     The xxx_smf_register script can be called directly. It takes the -f option
    270     for an alternate config file.
    271 
    272     The xxx_smf_remove script removes the manifest and the smf service in the
    273     specified zone.
    274 
    275     Summary: 
    276     To use the zsh component, modify the local_zone function in the xxx_register
    277     script and configure the start stop and probe command of your agent with
    278     all the necessary options. 
    279     It is done via xxx_register -z zsh, it registers the smf_xxx method as the
    280     start stop and probe command with the necessary options.
    281 
    282     To use the smf component, rename and modify the xxx_smf_register and the
    283     xxx_smf_remove script, then call xxx_register script with -z smf in the
    284     global zone to configure the smf component in the global zone.
    285 
    286     To remove the smf manifest and its related smf service call xxx_smf_remove
    287     after the shutdown of the Sun Cluster Container smf resource. Specify the
    288     -f filename option if you used an alternate config file.
    289 
    290     A validation of your configuration can be done for a smf service with
    291     control_xxx validate FMRI or with control_xxx -R resource .. validate.
    292 
    293     All the three scripts use the xxx_config file if no -f option is specified.
    294 
    295 
    296 16. Optional config file
    297     the xxx_register, xxx_smf_register and xxx_smf_remove script take the -f
    298     option. Use -f filename to specify an alternate config file.
    299 
    300 17. This template is supplied as-is, if you have any comments please 
    301     email ha-clusters-discuss@opensolaris.org.
    302