cle_clock
Home > wikikonf >  was/actions/by kikonf > instapp







Instapp

print

Action : was.instapp   (Category : was, Name : instapp, By : kikonf)
Complete Name : was.instapp.by.kikonf
Version : 5.0        License : Modified BSD License

Purpose of the was category :
Easy to customize. This category use in background the wsadmin command in jython mode (through AdminConfig, AdminControl and AdminTask), to drive WebSphere Application Server ® configuration.
You can use it to manage the whole WebSphere ® architecture.

Purpose of this instapp plugin : Install one Application

The following shows the main Source Code File for the Action : was.instapp

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



from actions.was.tools import *



class Instapp(wasAction):

    def extract(self, name=None, **keywords):
        self_funct='extract'
        self.verbose(name)
        indent=self.getIndent() + 3*' '
        
        application=name
        verbose('deployedObject retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())        
        dep=AdminConfig.getid("/Deployment:" + application +"/")
        if dep=='':raise xception.kikonfActionSystemException(self, self_funct, 'Application:' + application + ' not Found !')
        deps=getShowAsDict(AdminConfig.show(AdminConfig.showAttribute(dep, "deployedObject")))
        
        verbose('DeployedObject retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
        ear_install_path=deps['binariesURL']
        
        #-- check vhost
        vhost=None
        verbose('Application view retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        mods = getViewTaskInfoAsDict(AdminApp.view(application, ["-MapWebModToVH"]))
        for module in mods.keys():
            if vhost==None:vhost=mods[module]['vhost']
            if mods[module]['vhost']!=vhost:raise xception.kikonfActionSystemException(self, self_funct, 'Application:' + application + ', Found multiple Virtual host ! InstApp can only manage single virtual host mapping !')            
        if vhost!=None and vhost.find(',')>=0:raise xception.kikonfActionSystemException(self, self_funct, 'Application:' + application + ', Found multiple Virtual host ! InstApp can only manage single virtual host mapping !')
        if vhost==None:vhost=''

        #-- sharedlibs
        sharedlibs=[]
        verbose('classloader retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        classldr=deps['classloader']

        ls=split(AdminConfig.showAttribute(classldr, 'libraries'))
        for library in ls:
            if library=='':continue
            sharedlibs.append(AdminConfig.showAttribute(library, 'libraryName'))
        if len(sharedlibs)!=0:sharedlibs=','.join(sharedlibs)
        else:sharedlibs=''
    
        app_node = self.newTop()                                                # Tag: instapp
        attrs={'name':application, 'ear_path':'', 'ear_install_path':ear_install_path, 'vhost':vhost, 'sharedlibs':sharedlibs}
        app_node.setAttrs(**attrs)
    
        list_scope_attrs=rtvAppTargets(application)                             # Tag: scope
        mkNodeScope(app_node, list_scope_attrs, isUnique=False)

    def remove(self, no_name, no_name_no_prefix):
        self_funct='remove'
        app_node = self.getTop()        
        app_attrs = app_node.getAttrs()
        scopes=self.getScopes(parent_node=app_node, list_scope_attrs=None) #-- Retreives scope
        self.verbose(app_attrs.name)
        indent=self.getIndent() + 3*' '
        
        self.rmvApp(app_attrs.name, indent=indent)

    def inject(self):
        self_funct='inject'
        app_node = self.getTop()        
        app_attrs = app_node.getAttrs()
        scopes=self.getScopes(parent_node=app_node, list_scope_attrs=None) #-- Retreives scope
        self.verbose(app_attrs.name)
        indent=self.getIndent() + 3*' '

        self.rmvApp(app_attrs.name, indent=indent) #-- Removing first

        verbose('TaskInfo retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        modules = getInstTaskInfoAsDict(AdminApp.taskInfo(app_attrs.ear_path, 'MapModulesToServers'))
        
        cmdvalues=[]
        cmdvalues.append(['appname', app_attrs.name])
        cmdvalues.append(['installed.ear.destination', app_attrs.ear_install_path])
        cmdvalues.append(['noprocessEmbeddedConfig'])
        ms=[]
        mh=[]
        
        # Check vhost existence !
        if app_attrs.vhost!=None:
            vh=AdminConfig.getid('/VirtualHost:' + app_attrs.vhost + '/')
            if vh=='':raise xception.kikonfActionSystemException(self, self_funct, 'Inexistant vhost:' + app_attrs.vhost + '. Advice change the xml Attribute "vhost" to an existant Virtual Host !')
            
        for module in modules.keys():
            uri, server, typ=modules[module]['uri'], modules[module]['server'], modules[module]['type']
            
            # ms.append(['-WebModule', 'DefaultWebApplication.war,WEB-INF/web.xml', srv2 + '+' + srv3 + '+' + ihs1])
            if typ=='web':
                ms.append(['+"' + module + '" ' + uri + ' ' + self.getScopesON()])
                if app_attrs.vhost!=None:mh.append(['+"' + module + '" ' + uri + ' ' + app_attrs.vhost])
            elif typ=='ejb':ms.append(['+"' + module + '" ' + uri + ' ' + self.getScopesON(doIhs=False)])
            else:raise xception.kikonfActionSystemException(self, self_funct, 'UnManaged Module type:' + typ + ' !')    

        if len(ms)!=0:cmdvalues.append(['MapModulesToServers', ms])
        if len(mh)!=0:cmdvalues.append(['MapWebModToVH', mh])
        
        verbose('Application installing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())        
        cmdvalues=trsToAdminTask(cmdvalues)
        
        AdminApp.install(app_attrs.ear_path, cmdvalues)
        verbose('Application:' + app_attrs.name + ' deployed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
        
        if app_attrs.sharedlibs!=None:self.runSharedLib(app_attrs.name, app_attrs.sharedlibs.split(','), indent=indent)
        
        if app_attrs.post_script!=None:
            import java
            verbose('Running post_script:' + app_attrs.post_script +  '.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
            java.lang.Runtime.getRuntime().exec(app_attrs.post_script)
        
    def rmvApp(self, name, indent=None):
        scopes=self.getScopes()
        dep = AdminConfig.getid('/Deployment:' + name + '/')
        
        if dep not in ('', None):
            verbose('Application uninstaling.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
            AdminApp.uninstall(name)
            verbose('Application:' + name  + ' uninstalled.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())

    def runSharedLib(self, application, sharedlibs, indent=None):    
        verbose('classloader retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        classldr=AdminConfig.showAttribute(AdminConfig.showAttribute(AdminConfig.getid('/Deployment:' + application +'/'), 'deployedObject'), 'classloader')
        
        for sh in sharedlibs:
            verbose('LibraryRef creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
            AdminConfig.create('LibraryRef', classldr, 'libraryName', sh], ['sharedClassloader', 'true')
            verbose('SharedClassloader for SharedLib:' + sh + ' created', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
            
    def verbose(self, name):        
        verbose('Application:' + name + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
							
(Source: <KIKONF_INSTALLATION_DIR>/plugins/actions/was/instapp/by/kikonf/instapp.py)


  • 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 :
  • "IBM", "WebSphere", "WebSphere Aplication Server", "WAS" are registred trademarks of International Business Machines Corporation.
  • "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