@echo off
echo ################################################
echo # Create Enterprise App on %computername%
echo ################################################
::################################################
::# This is a windows shell script which calls the WSCP shell to execute the Tcl script.
::# The Tcl script is designed to be portable across environments hence the parameters are set here and then fed to the script.
:: EARFILE - location of deployable ear file
:: APPNAME - application name
:: DEFAPPSERVER - default app server. Note: if this is used within the Tcl script it overides specific app server mappings.
:: GROUPROLESFILE - roles to user groups mapping file.
:: NETSENDMSG - displayable error message.
:: NETSENDFILE - specifies users who receive net send error message.
:: HOSTFILE - maps web modules to virtual hosts
:: SERVERFILE - maps web/ejb modules to application servers.
::################################################
set EARFILE=c:\Enterprise_Apps\h2.ear
set APPNAME=H2
set DEFAPPSERVER="/Node:%computername%/ApplicationServer:Default Server/" set USERROLESFILE=c:\userrole_mapping.txt
set GROUPROLESFILE=c:\grouprole_mapping.txt
set NETSENDMSG="Create H2 app failed on %computername% at %date% %time%"
set NETSENDFILE=C:\SCRIPTS\DB2\emailfiles\netsend.txt
set HOSTFILE=c:\vhost_mapping.txt
set SERVERFILE=c:\server_mappings.txt
:: "^" is a dos shell continuation character"
call wscp -p c:\scripts\websphere\wscp_properties.txt^
-f c:\SCRIPTS\tcl\create_enterprise_app.tcl^
-- %EARFILE%^
%APPNAME%^
%DEFAPPSERVER%^
%USERROLESFILE%^
%NETSENDMSG%^
%NETSENDFILE%^
%HOSTFILE%^
%SERVERFILE%^
%GROUPROLESFILE%
-----------------------------------------------------------------
create_enterprise_app.tcl script.
###############################################
# Create Websphere Enterprise App.
###############################################
######################################################
# Proc - assign parameters.
######################################################
proc assign_param {argv} {
global earFile
global nodeId
global appName
global defAppServer
global userrolesFile
global grouprolesFile
global netSendMsg
global netSendFile
global vhostsfile
global serverfile
set earFile [lindex $argv 0]
set appName [lindex $argv 1]
set defAppServer [lindex $argv 2]
set userrolesFile [lindex $argv 3]
set netSendMsg [lindex $argv 4]
set netSendFile [lindex $argv 5]
set vhostsfile [lindex $argv 6]
set serverfile [lindex $argv 7]
set grouprolesFile [lindex $argv 8]
set nodeId [Node list]
puts "NodeID = $nodeId"
puts "App Name = $appName"
puts "Default App Server = $defAppServer"
puts "User Roles File = $userrolesFile"
puts "netSendMsg = $netSendMsg"
puts "netSendFile = $netSendFile"
puts "earFile = $earFile"
puts "vhostsfile = $vhostsfile"
puts "serverfile = $serverfile"
puts "Group Roles File = $grouprolesFile"
}
######################################
# Proc - check number of arguments
######################################
proc check_args {argc} {
if {$argc < 0} {
error "Argument Count is Zero. No arguments supplied."
} else {
puts ""
puts "argument count = $argc"
puts ""
}
}
######################################
# Proc - check if dir path exists. If not create the directory.
######################################
proc check_file {file_name netSendMsg} {
if {[file exists $file_name] == 1} {
puts "File location confirmed for: $file_name"
} else {
error "$file_name does not exist. Create $file_name before running this scipt"
netsend $netSendMsg
}
}
######################################################
# Proc - get net send list
######################################################
proc get_netsend {netsendfile_id} {
global netsend_list
while {[gets $netsendfile_id line] >=0} {
lappend netsend_list $line
}
}
######################################################
# Proc - generate net send messages.
######################################################
proc netsend {net_message} {
global netsend_list
foreach name $netsend_list {
puts "exec net send $name $net_message."
exec net send $name $net_message
}
}
########################################################
# 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} {
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
}
# puts "roleslist = $roleslist"
set list_userroleslist [list $roleslist]
# puts "list_userroleslist = $list_userroleslist"
}
########################################################
# Proc - get group roles from input file and process into list
# - note that there can be several group to a role so "list group"
########################################################
proc get_grouproles {grouprolesfileid} {
puts "executing get_grouproles"
global list_grouproleslist
puts "Group roles are ...................."
puts ""
while {[gets $grouprolesfileid line] >=0} {
puts "group role mapping is: $line"
lappend grouproleslist $line
}
set list_grouproleslist [list $grouproleslist]
}
########################################################
# Proc - get virtual host mappings
# - note vhosts can be spread across nodes
########################################################
proc get_vhosts {vhostsfileid} {
puts "executing get_vhosts"
global list_vhostlist
set block [read -nonewline $vhostsfileid]
puts "virtual host mappings are ................"
puts ""
foreach {module vhost} $block {
puts "vhost mapping = $module $vhost"
lappend vhostlist [list $module $vhost]
}
set list_vhostlist $vhostlist
}
########################################################
# Proc - get appserver mappings
# - note webmodules can be spread across appservers
########################################################
proc get_servers {serverfileid} {
puts "executing get_servers"
global list_serverlist
set block [read -nonewline $serverfileid]
puts "appserver mappings are ................"
puts ""
foreach {module server} $block {
puts "server mapping = $module $server"
lappend serverlist [list $module $server]
}
set list_serverlist $serverlist
}
######################################################
# Proc - create enterprose app.
######################################################
proc create_enterprise_app {nodeId earFile appName defAppServer netSendMsg list_userroleslist list_grouproleslist list_vhostlist list_serverlist} {
puts "EnterpriseApp install $nodeId "
puts " $earFile "
# puts " -defAppServer $defAppServer"
puts " -moduleappservers $list_serverlist"
puts " -appname $appName "
puts " -modvirtualhosts $list_vhostlist"
puts " -userroles $list_userroleslist"
puts " -grouproles $list_grouproleslist"
puts "########################################"
puts "Creating $appName Enterprise Application"
puts "########################################"
if {[catch {
EnterpriseApp install $nodeId \
$earFile \
-appname $appName \
-moduleappservers $list_serverlist \
-modvirtualhosts $list_vhostlist \
-userroles $list_userroleslist \
-grouproles $list_grouproleslist \
} result_var] == 0} {
puts $result_var
puts "${defAppServer} deployed sucessfully"
} else {
puts $result_var
puts "########################################"
puts "${defAppServer} failed to deploy"
puts "########################################"
netsend $netSendMsg
}
}
######################################
# Control block"
######################################
check_args $argc
assign_param $argv
puts ""
check_file $netSendFile $netSendMsg
check_file $earFile $netSendMsg
check_file $userrolesFile $netSendMsg
check_file $grouprolesFile $netSendMsg
check_file $vhostsfile $netSendMsg
check_file $serverfile $netSendMsg
puts ""
set netSendFile_id [open $netSendFile r]
set userrolesFile_id [open $userrolesFile r]
set grouprolesFile_id [open $grouprolesFile r]
set vhostsfileid [open $vhostsfile r]
set serverfileid [open $serverfile r]
get_netsend $netSendFile_id
puts ""
get_userroles $userrolesFile_id
puts ""
get_grouproles $grouprolesFile_id
puts ""
get_vhosts $vhostsfileid
get_servers $serverfileid
puts ""
puts "create_enterprise_app"
create_enterprise_app $nodeId $earFile $appName $defAppServer $netSendMsg $list_userroleslist $list_grouproleslist $list_vhostlist $list_serverlist
######################################
# Close files
######################################
close $netSendFile_id
close $userrolesFile_id
close $grouprolesFile_id
close $vhostsfileid
######################################
# END
######################################