cle_clock
Home > wikikonf >  tom/actions/by kikonf > crtcluster







Crtcluster

print

Action : tom.crtcluster   (Category : tom, Name : crtcluster, By : kikonf)
Complete Name : tom.crtcluster.by.kikonf
Version : 4.0        License : Modified BSD License

Purpose of the tom category :
Easy to customize. This category use in background the Kikonf Repoz tools to create and configure Apache Tomcat ® root installs and Catalina bases at any level (server.xml, hosts or defaults).
You can use it to manage the whole Tomcat ® Architecture.

Purpose of this crtcluster plugin : Configure a Tomcat/Apache Cluster

The following shows the main Source Code File for the Action : tom.crtcluster

Toggle lines
##  Copyright (c) 2008, Patrick Germain Placidoux
##  All rights reserved.
##
##  This file is part of Kikonf Public Software.
##
##  Kikonf Public Software is released under the modified BSD License,
##  which should accompany it or any part of it in the file "COPYING".
##  If you do not have this file you can access the license 
##  through the WWW at http://www.kikonf.org/license/bsd/license.txt.
## 
##  Home: http://www.kikonf.org
##  Contact: kikonf@gmx.com




def injRealme(top_node, realme_node, realme, level=0, indent=None, logFile=None):
    """ Creates a Realme """
    realme_attrs=realme_node.getdAttrs()
    
    if realme=='udb':checkUdbescIntegrity(realme_attrs['resourceName'], level=level, indent=indent, logFile=logFile)
    elif realme=='datarsc':checkDatarscIntegrity(realme_attrs['dataSourceName'], level=level, indent=indent, logFile=logFile)
    
    verbose('Realme:' + realme + ' Creating.', level=level, ifLevel=4, indent=indent, logFile=logFile)
    attrs={}
    
    attrs.update(realme_attrs)
    attrs['digest']=top_node.getAttr('digest')
    attrs['className']=REALMES[realme]
        
    # creates
    target_node.newNode('Realme', **attrs)
    verbose('Realme:' + realme + ' Created.', level=level, ifLevel=3, indent=indent, logFile=logFile)



#------#
# Main #
#------#


# Stores the Action File's Processor Alias
var source_action_alias=ro['alias']

# Stores the Action File's First Node <=> self_action.getTop()
:ls
action_node=ro[0]


try:
    from StringIO import StringIO
    from os import path
    sbworkers=StringIO()
    sbmounts=StringIO()
    indent=self_action.getIndent() + 3*' '
    
    
    ## Retreives the Scope
    action_attrs=action_node.getAttrs()
    
    
    ## Check first
    print '## Check first'
    # if action_attrs.listener_host==None:action_attrs.listener_host=action_attrs.virtual_host
    if not path.isdir(action_attrs.includes_dir):raise xception.kikonfActionSystemException(self_action, 'inject', 'The directory: includes_dir, for the generated files must exist ! Your value: ' + action_attrs.includes_dir + '.')
    includes_dir = path.normpath(action_attrs.includes_dir)
    if action_attrs.cronolog!=None and not path.isfile(action_attrs.cronolog):raise xception.kikonfActionSystemException(self_action, 'inject', 'When guiven, the cronolog executable path must exist ! Your value: ' + action_attrs.cronolog + '.')
    uris_node=action_node.getNode('uris')[0]
    uris=uris_node.getTexts()
    if len(uris)==0:raise xception.kikonfActionSystemException(self_action, 'inject', 'Tag uris must be filled !')
    for i in range(len(uris)):
        uri=uris[i]
        if not uri.startswith('/'):uris[i]='/' + uri
    
    name_separator=action_node.getNode('nodes')[0].getAttr('name_separator')
    node_nodes=action_node.getNode('nodes')[0].getNode('node')
    

    ## Creates Include file
    print
    print '## Creates Include file'
    verbose('Include file: ' + action_attrs.lbname + '_jk.conf' + ' Creating.', level=self_action.getVerbose(), ifLevel=4, indent=indent, logFile=self_action.getLogFile())
    
    templates_dir = path.normpath(self_action.getCurrentDir() + '/templates')
    target_jk_conf=path.normpath(path.realpath(includes_dir + '/' +  action_attrs.lbname + '_jk.conf'))
    if action_attrs.usejk=='true':mod_apa=path.normpath(path.realpath(templates_dir + '/mod_jk.tmpl'))
    else:mod_apa=path.normpath(path.realpath(templates_dir + '/mod_proxy.tmpl'))
        
    attrs = {
        'lbname': action_attrs.lbname,
        'conf_dir': action_attrs.conf_dir,
        'static_dir': action_attrs.static_dir,
        'log_dir' : action_attrs.log_dir,
        'listener_host': action_attrs.listener_host,
        'listener_port': action_attrs.listener_port,
        'virtual_host': action_attrs.virtual_host
    }
    
    if action_attrs.cronolog==None:attrs['log_base']=action_attrs.log_dir
    else:attrs['log_base']='|' + action_attrs.cronolog + ' -l ' + action_attrs.log_dir
    
    var mod_apa = mod_apa
    var target_jk_conf = target_jk_conf
    var attrs = attrs
    :tpc -D $mod_apa -f $target_jk_conf --temp_vars $attrs -s -n
    var mod_apa_alias = ro['alias']
    :mount $mod_apa_alias
    verbose('Include file: ' + action_attrs.lbname + '_jk.conf' + ' Created.', level=self_action.getVerbose(), ifLevel=3, indent=indent, logFile=self_action.getLogFile())


    ## Feeds worker/mount files
    print
    print '## Feeds worker/mount files'        
    
    # Mod_jk
    if action_attrs.usejk=='true':
        fmounts='jk_mounts.properties'
        sbmounts.write('# Mod_Proxy Workers for cluster' + action_attrs.lbname + LINESEP) 
        sbmounts.write('# ' + DESIGN_NOTICE + 2*LINESEP)
        for uri in uris:sbmounts.write(uri + '=' + action_attrs.lbname + LINESEP)
        
        fworkers='jk_workers.properties'
        sbworkers.write('# Mod_Proxy Workers for cluster' + action_attrs.lbname + LINESEP) 
        sbworkers.write('# ' + DESIGN_NOTICE + 2*LINESEP)
        
        sbworkers.write('# Worker list for mapping requests:' + LINESEP)
        sbworkers.write('worker.list=' + action_attrs.lbname + ',status' + 2*LINESEP)
        nodes=[]
        for node_node in node_nodes:
            node_attrs=node_node.getAttrs()
            nodes.append(node_attrs.name)

            sbworkers.write('# Define node ' + node_attrs.name + ':' + LINESEP)            
            sbworkers.write('worker.' + node_attrs.name + '.host=' + node_attrs.host + LINESEP)
            sbworkers.write('worker.' + node_attrs.name + '.port=' + str(node_attrs.port) + LINESEP)
            sbworkers.write('worker.' + node_attrs.name + '.type=ajp13' + LINESEP)
            sbworkers.write('worker.' + node_attrs.name + '.lbfactor=' + str(node_attrs.load_factor) + LINESEP)
            sbworkers.write('worker.' + node_attrs.name + '.cachesize=' + str(node_attrs.jk_cache_size) + 2*LINESEP)
        
        sbworkers.write('# Load-blancing behaviour:' + LINESEP)
        sbworkers.write('worker' + node_attrs.name + '.type=lb' + LINESEP)
        sbworkers.write('worker' + node_attrs.name + '.balance_workers=' + str(nodes)[1:-1].replace("'", '').replace(' ', '') + LINESEP)
        sbworkers.write('worker' + node_attrs.name + '.sticky_session=1' + 2*LINESEP)
        
        sbworkers.write('# Status Worker for management:' + LINESEP)
        sbworkers.write('worker.status.type=status' + LINESEP)
    
    # Mod_proxy
    else:
        
        fmounts='proxy_mounts.conf'        
        sbmounts.write('# Mod_Proxy Workers for cluster' + action_attrs.lbname + LINESEP) 
        sbmounts.write('# ' + DESIGN_NOTICE + 2*LINESEP)
        for uri in uris:
            sbmounts.write(
                'ProxyPass ' + uri + ' balancer://' + action_attrs.lbname + uri + ' stickysession=JSESSIONID|jsessionid nofailover=' + action_attrs.proxy_nofailover + LINESEP
            )
        
        fworkers='proxy_workers.conf'
        sbworkers.write('# Mod_Proxy Workers for cluster' + action_attrs.lbname + LINESEP) 
        sbworkers.write('# ' + DESIGN_NOTICE + 2*LINESEP)
        for node_node in node_nodes:
            node_attrs=node_node.getAttrs()
            sbworkers.write(
                'BalancerMember ajp://' + node_attrs.host + ':' + str(node_attrs.port) + ' route=' + node_attrs.name + name_separator + action_attrs.lbname + ' retry=60 loadfactor=' + str(node_attrs.load_factor) + LINESEP
            )
    
    ## Creates worker/mount files
    print
    print '## Creates worker/mount files'    
    verbose('Worker/mount files: ' + fworkers + '/' + fmounts + ' Creating.', level=self_action.getVerbose(), ifLevel=4, indent=indent, logFile=self_action.getLogFile())
    if not self_action.getCAttr('test'):
        #-- Create fworkers
        fd = open(path.normpath(path.realpath(includes_dir + '/' +  fworkers)), 'wb')
        fd.write(sbworkers.getvalue())
        fd.close()        
        #-- Create fmounts
        fd = open(path.normpath(path.realpath(includes_dir + '/' + fmounts)), 'wb')
        fd.write(sbmounts.getvalue())
        fd.close()
        verbose('Worker/mount files: ' + fworkers + '/' + fmounts + ' Created.', level=self_action.getVerbose(), ifLevel=3, indent=indent, logFile=self_action.getLogFile())
    else:
        message=xception.kikonfActionInformation(self_action, 'inject', 'Worker/mount files: ' + fworkers + '/' + fmounts + ' Not created, because Action is running in test mode.').warn(verbose=self_action.getVerbose(), doPrint=False)
        verbose(message, level=self_action.getVerbose(), ifLevel=3, indent=indent, logFile=self_action.getLogFile())
    
    if self_action.getCAttr('test'):
        exit
    
    # scope_name, scope_attrs, scope=
    
except Exception, e:
    
    _e=xception.kikonfActionSystemException(self_action, 'inject', 'An exception occures ! SubException is:' + str(e) + ' !')
    _e.setSubException(e)
    REPOZ.recordSessionException(self_action.getName(), _e)
    if self_action.getVerbose()>=10:raise
    # Dont forget to skipt a strict empty line at the end to let the Interpretor to interprete the End of the bloc !

							
(Source: <KIKONF_INSTALLATION_DIR>/plugins/actions/tom/crtcluster/by/kikonf/crtcluster.inject.repoz)


  • Line 1 to 3 say something , say something , say something
  • Line 10 to 17 say something , say something , say something , say something , say something
  • Line 20 to 25 say something



Trademarks :
  • "Apache", "Apache Tomcat" and "Tomcat" are trademarks of the Apache Software Foundation.
  • "Java" and "JVM" are a registred trademarks of Oracle and/or its affiliates.
  • Other names may be trademarks of their respective owners.

Copyright © 2011 - Patrick Placidoux, Hélène Malamoud