TL; DR, Некоторые сведения о том, как настоящий рабочий каталог предшествует местоположению EAR.wsadmin - скрипт Jython, набирающий PWD, когда его не указано
Я пытаюсь запустить сценарий Jython для IBM WebSphere ND, чтобы выполнить пакетную установку некоторых приложений в каталоге. Сценарий принимает два аргумента, путь к EAR, а затем сопоставления модулей. Просматривая этот скрипт, он правильно открывает приложения и выводит правильную команду AdminApp.install(), но когда я запускаю действительную команду, она каким-то образом помещает PWD в каталог EAR.
# This script takes a batch list of EAR names with the extension .ear
# example:
# script.py "/path/to/ear/files" "WebSphere:cell=CELL,stuff=..."
#
import os
import sys
# Gets the Cell Name for the environment
cell_name = AdminControl.getCell()
# Get DMGR Name
dmgr_name = "DMGRDEV" # Needs to not be hardcoded
# The location where the EARs will be stored to be installed.
#ear_location = "/home/wasadmin/ears"
ear_location = sys.argv[0]
# Gets list of files in a directory
dirs = os.listdir(ear_location)
# JVMs and clusters to map the application to.
map_to_modules = sys.argv[1]
for app_name in dirs :
install_app = "'%s/%s', '[ -MapModulesToServers [[ %s ]]]'" % (ear_location, app_name, map_to_modules)
print("Installing " + app_name + ".")
print("AdminApp.install(%s)" % (install_app))
AdminApp.install(install_app)
print("Saving Changes.")
AdminConfig.save()
print("Synching Changes.")
AdminControl.invoke('' + AdminControl.completeObjectName(""+ dmgr_name +",type=DeploymentManager,*") + '', 'multiSync', '[false]', '[java.lang.Boolean]')
# End of for app_name in applicaiton_array
Затем я запускаю этот скрипт, используя эти команды. Я сделал оболочку Run_wsadmin.sh, чтобы замаскировать имя пользователя и пароли среди других параметров, чтобы запустить консоль wsadmin и запустить скрипты.
Run_wsadmin.sh -f installEAR.py "/opt/IBM/WebSphere/AppExports3" "WebSphere:cell=wsibpmpsdev00Cell01,cluster=DEV00_DE_1.AppCluster+WebSphere:cell=wsibpmpsdev00Cell01,node=WPS00,server=DEV00IHS00"
WASX7209I: Connected to process "dmgr" on node DMGRDEV using SOAP connector; The type of process is: DeploymentManager
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[/opt/IBM/WebSphere/AppExports3, WebSphere:cell=wsibpmpsdev00Cell01,cluster=DEV00_DE_1.AppCluster+WebSphere:cell=wsibpmpsdev00Cell01,node=WPS00,server=DEV00IHS00]"
Installing Solution_ChangeApp.ear.
AdminApp.install('/opt/IBM/WebSphere/AppExports3/Solution_ChangeApp.ear', '[ -MapModulesToServers [[ WebSphere:cell=wsibpmpsdev00Cell01,cluster=DEV00_DE_1.AppCluster+WebSphere:cell=wsibpmpsdev00Cell01,node=WPS00,server=DEV00IHS00 ]]]')
WASX7017E: Exception received while running file "installEAR.py"; exception information: com.ibm.ws.scripting.ScriptingException: WASX7115E: Cannot read input file "/home/wasadmin/ContinuousIntegrationScripts/'/opt/IBM/WebSphere/AppExports3/Solution_ChangeApp.ear', '[ -MapModulesToServers [[ WebSphere:cell=wsibpmpsdev00Cell01,cluster=DEV00_DE_1.AppCluster+WebSphere:cell=wsibpmpsdev00Cell01,node=WPS00,server=DEV00IHS00 ]]]'"
Таким образом, я не уверен, где PWD приходит от, но в EAR местоположение, он сохраняет предваряя настоящий рабочий каталог. Откуда это? Это весь день сводит меня с ума, и у меня нет вариантов.