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