#################################################################### # Install App. #################################################################### # Patrick Finnegan 15/02/2005. V1. #################################################################### ###################################### # Proc - check number of arguments ###################################### proc check_args {argc} { if { $argc < 0 } { error "\nArgument Count is Zero. No arguments supplied.\n" } else { puts "\nargument count = $argc\n" } } ###################################### # Proc - check if dir path exists. If not create the directory. ###################################### proc check_file { file_name } { if { [ file exists $file_name ] == 1} { puts "File location confirmed for: $file_name" } else { set errMsg "$file_name does not exist. Create $file_name before running this scipt" return -code error \n$errMsg\n } } ######################################################## # Proc - get user roles from input file and process into list # - note that there can be several users to a role so "list user" ######################################################## proc get_userroles {userrolesFileid node cell } { puts "executing get_userroles" global list_userroleslist puts "User roles are ...................." puts "" while { [ gets $userrolesFileid line ] >=0 } { puts "role mapping is: $line" lappend roleslist $line } set list_userroleslist [list $roleslist] } ######################################################## # Proc - get group roles from input file and process into list # - note that there can be several groups to a role so we map multiple groups # to the same role. This requires an embedded loop. ######################################################## proc get_grouproles {grouprolesFileid} { puts "executing get_grouproles" puts "Group roles are ....................\n" gets $grouprolesFileid line while { ![ eof $grouprolesFileid ] } { set x [ lindex $line 0 ] set appRole $x while { $appRole == $x && \ ![ eof $grouprolesFileid ] } { set ldapRole [ lindex $line 1 ] puts [ format "%-5s %-20s" " " "###########################" ] puts [ format "%-5s %-20s %-20s " " " "Application Role" $appRole ] puts [ format "%-5s %-20s %-20s " " " "Ldap Role" $ldapRole ] append groups $ldapRole| gets $grouprolesFileid line set x [ lindex $line 0 ] } lappend groupRoleList [ list $appRole no no "" $groups] unset groups } close $grouprolesFileid return $groupRoleList } ######################################################## # Proc - get virtual host mappings # - note vhosts can be spread across nodes ######################################################## proc get_vhosts {vhostsFileid} { puts "\nexecuting get_vhosts\n" while { [ gets $vhostsFileid line ] != -1 } { set name [ lindex $line 0 ] set module [ lindex $line 1 ] set vhost [ lindex $line 2 ] puts [ format "%-5s %-20s" " " "###########################" ] puts [ format "%-5s %-20s %-20s " " " "Module Name" $name ] puts [ format "%-5s %-20s %-20s " " " "Module" $module ] puts [ format "%-5s %-20s %-20s " " " "Virtual Host" $vhost ] lappend vhostList [ list $name $module $vhost ] } close $vhostsFileid return $vhostList } ######################################################## # Proc - get appserver mappings # - note webmodules can be spread across appservers ######################################################## proc get_servers {serverFileid cellName nodeName } { puts "\nexecuting get_servers\n" while { [ gets $serverFileid line ] != -1 } { set name [ lindex $line 0 ] set module [ lindex $line 1 ] set server [ lindex $line 2 ] set serverName WebSphere:cell=$cellName,node=$nodeName,server=$server puts [ format "%-5s %-20s %-20s " " " "Module Name" $name ] puts [ format "%-5s %-20s %-20s " " " "Module" $module ] puts [ format "%-5s %-20s %-20s " " " "Server" $server ] puts [ format "%-5s %-20s" " " "###########################" ] lappend serverList [ list $name $module $serverName ] } close $serverFileid return $serverList } ######################################################## # Proc - get ejb jndi names ######################################################## proc get_ejbs {ejbFileid} { puts "\nexecuting get_ejbs\n" while { [ gets $ejbFileid line ] != -1 } { set name [ lindex $line 0 ] set module [ lindex $line 1 ] set ejb [ lindex $line 2 ] puts [ format "%-5s %-20s %-20s %-20s" " " $name $module $ejb ] lappend ejbList [ list $name $module $ejb ] } close $ejbFileid return $ejbList } ###################################################### # Proc - install enterprise app. ###################################################### proc installEnterpriseApp { nodeName earFile appName serverName vhostList groupRoleList serverList } { global AdminApp puts "\ninstallEnterpriseApp\n" puts "########################################" puts "Creating $appName Enterprise Application" puts "########################################" set optionList [ list -appname $appName \ -node $nodeName \ -server $serverName \ -MapWebModToVH $vhostList \ -MapRolesToUsers $groupRoleList \ -MapModulesToServers $serverList ] if { [ catch { $AdminApp install $earFile $optionList } result_var] == 0 } { puts $result_var puts "\n$appName deployed sucessfully\n" } else { puts \n$result_var\n puts "########################################" puts "$appName failed to deploy" puts "########################################" return -code error $result_var } } ###################################################### # Proc - modify enterprise app. ###################################################### proc modifyEnterpriseApp { appName sessionTimeout } { global AdminConfig puts "\nmodifyEnterpriseApp" puts "_____________________\n" puts "########################################" puts "Modify $appName Enterprise Application" puts "########################################" set appId [ $AdminConfig getid /Deployment:$appName ] # get deployed object characteristics. set depObject [ $AdminConfig showAttribute $appId deployedObject ] # get current policies. set warClassLoader [ $AdminConfig showAttribute $depObject warClassLoaderPolicy ] set reloadEnabled [ $AdminConfig showAttribute $depObject reloadEnabled ] set reloadInterval [ $AdminConfig showAttribute $depObject reloadInterval ] puts "\n#######################################################" puts "Current WAR Class Loader Policy is $warClassLoader" puts "Current WAR Reload Enabled Policy is $reloadEnabled" puts "Current WAR Reload Interval Policy is $reloadInterval" puts "#########################################################\n" set newWarClassLoaderPolicy [ list warClassLoaderPolicy SINGLE ] set reloadEnabled [ list reloadEnabled true ] set reloadInterval [ list reloadInterval 3 ] set attributes [ list $newWarClassLoaderPolicy \ $reloadEnabled \ $reloadInterval \ ] if { [ catch { $AdminConfig modify $depObject $attributes } result_var] == 0 } { set warClassLoader [ $AdminConfig showAttribute $depObject warClassLoaderPolicy ] set reloadEnabled [ $AdminConfig showAttribute $depObject reloadEnabled ] set reloadInterval [ $AdminConfig showAttribute $depObject reloadInterval ] puts "#######################################################" puts "New WAR Class Loader Policy is $warClassLoader" puts "New WAR Reload Enabled Policy is $reloadEnabled" puts "New WAR Reload Interval Policy is $reloadInterval" puts "#########################################################\n" } else { puts \n$result_var\n puts "########################################" puts "$appName - Modification failed" puts "########################################" return -code error } # set session manager parameters set newAllowSerializedSessionAccess [ list allowSerializedSessionAccess false] set newAccessSessionOnTimeOut [ list accessSessionOnTimeout true ] set newMaxWaitTime [ list maxWaitTime 90 ] # set Tuning Parms set allowOverflow [ list allowOverflow false ] set invalidationTimeout [ list invalidationTimeout $sessionTimeout ] set maxInMemorySessionCount [ list maxInMemorySessionCount 1000 ] set tuningParamsList [ list $allowOverflow \ $invalidationTimeout \ $maxInMemorySessionCount \ ] set tuningParams [ list tuningParams $tuningParamsList ] set sessionManagerAttr [ list $newAllowSerializedSessionAccess \ $newAccessSessionOnTimeOut \ $newMaxWaitTime \ $tuningParams \ ] set newSessionManagement [ list [ list sessionManagement $sessionManagerAttr ] ] if { [ catch { $AdminConfig create ApplicationConfig $depObject $newSessionManagement } result_var] == 0 } { puts "\nNew Session Manager Attributes for $appName are:\n" foreach i $sessionManagerAttr { foreach { a b } $i { puts "$a $b" } } puts "\n$appName modified sucessfully\n" $AdminConfig save } else { puts \n$result_var\n puts "########################################" puts "$appName - Modification failed" puts "########################################" return -code error } } ###################################################### # Proc - display attributes. ###################################################### proc displayAttributes { appName } { global AdminApp puts "displayAttributes" puts "_____________________" set taskList [ $AdminApp view $appName {-tasknames} ] foreach x $taskList { puts [ format "%-15s %-s " " " "################################" ] puts [ format "%-15s %-s " " " "Attributes - $x" ] puts [ format "%-15s %-s " " " "################################" ] puts [ $AdminApp view $appName -$x ] } } ###################################################### # Proc - nodeSync. ###################################################### proc nodeSync { nodeName } { global AdminControl puts "\nnodeSync" puts "________\n" puts "########################################" puts "Sync server application details with node." puts "########################################" set nodeSync [ $AdminControl queryNames type=NodeSync,node=$nodeName,* ] # if the node sync object is null then this is a WAS 5 base instalation. if { $nodeSync != {} } { puts "\n set enabled flag" set enabledFlag [ $AdminControl getAttribute $nodeSync serverStartupSyncEnabled ] if { [ string compare $enabledFlag false ] == 0 } { puts "\n Syncing node with DM" puts "______________________\n" if { [ catch { $AdminControl invoke $nodeSync sync } r ] == 0 } { puts "########################################" puts "$nodeName synced sucessfully" puts "########################################" } else { puts \n$r\n puts "########################################" puts "$nodeName failed to sync" puts "########################################" } } } } ###################################### # Control block" ###################################### if { [ catch { check_args $argc } r ] != 0 } { return -code error $r } set earFile [ lindex $argv 0 ] set appName [ lindex $argv 1 ] set serverName [ lindex $argv 2 ] set userrolesFile [ lindex $argv 3 ] set vhostsFile [ lindex $argv 4 ] set serverFile [ lindex $argv 5 ] set grouprolesFile [ lindex $argv 6 ] set ejbFile [ lindex $argv 7 ] set sessionTimeout [ lindex $argv 8 ] # Assume one cell, one deployment manager node and one application node. set cellId [ lindex [ $AdminConfig list Cell ] 0 ] set nodes [ $AdminConfig list Node ] # delete the manager node from the list. set manIndex [ lsearch -glob $nodes *Manager* ] set nodeId [ lindex [ lreplace $nodes $manIndex $manIndex ] 0 ] # get name attribute for cell and application node set cellName [ $AdminConfig showAttribute $cellId name ] set nodeName [ $AdminConfig showAttribute $nodeId name ] set formatSpec "%-20s %-1s %-1s %s" puts [ format $formatSpec "Cell Name" " " "=" $cellId ] puts [ format $formatSpec "Node Name" " " "=" $nodeId ] puts [ format $formatSpec "Server Name" " " "=" $serverName ] puts [ format $formatSpec "Application" " " "=" $appName ] puts [ format $formatSpec "User Mapping File" " " "=" $userrolesFile ] puts [ format $formatSpec "Ear Mapping File" " " "=" $earFile ] puts [ format $formatSpec "Vhosts Mapping File" " " "=" $vhostsFile ] puts [ format $formatSpec "Server Mapping File" " " "=" $serverFile ] puts [ format $formatSpec "Group Mapping File" " " "=" $grouprolesFile ] puts [ format $formatSpec "Ejb Mapping File" " " "=" $ejbFile ] puts [ format $formatSpec "Session Timeout" " " "=" $sessionTimeout ] puts "" check_file $earFile check_file $userrolesFile check_file $grouprolesFile check_file $vhostsFile check_file $serverFile check_file $ejbFile puts "" set userrolesFile_id [open $userrolesFile r ] set grouprolesFile_id [open $grouprolesFile r ] set vhostsFileid [open $vhostsFile r ] set serverFileid [open $serverFile r ] set ejbFileid [open $ejbFile r ] if { [ catch { get_vhosts $vhostsFileid } r ] != 0 } { return -code error \n$r\n exit 1 } else { set vhostList $r } if { [ catch { get_servers $serverFileid $cellName $nodeName } r ] != 0 } { return -code error \n$r\n exit 1 } else { set serverList $r } if { [ catch { get_grouproles $grouprolesFile_id } r ] != 0 } { return -code error \n$r\n exit 1 } else { set groupRoleList $r } ###################################### # Install Application. ###################################### if { [ catch { installEnterpriseApp $nodeName \ $earFile \ $appName \ $serverName \ $vhostList \ $groupRoleList \ $serverList } r ] != 0 } { return -code error \n$r\n exit 1 } else { $AdminConfig save } ###################################### # Modify Application Attributes. ###################################### if { [ catch { modifyEnterpriseApp $appName $sessionTimeout } r ] != 0 } { return -code error \n$r\n exit 1 } else { $AdminConfig save } ###################################### # Display Application Attributes. ###################################### if { [ catch { displayAttributes $appName } r ] != 0 } { return -code error \n$r\n exit 1 } ###################################### # Sync Node if ND installation. ###################################### if { [ catch { nodeSync $nodeName } r ] != 0 } { return -code error \n$r\n exit 1 } ###################################### # END ######################################