Мы пытаемся остановить конкретное приложение без ручного вмешательства с помощью комбинации AdminApp.list()
и regex
.
Конечной целью является : Простота использования . Пользователь должен иметь возможность остановить приложение без входа в консоль WAS или изменения значений имени целевого приложения в сценарии. Они должны войти в Jenkins и выполнить этот сценарий stopapp.py. Это должно быть так просто.
Согласно этому сценарию WAS возвращает список приложений, которые в настоящее время присутствуют в его DMGR. Затем мы добавляем эти элементы в пустой список, а затем запускаем процедуру регулярного выражения (re.match), чтобы определить конкретное имя приложения. Затем мы подставляем извлеченное значение имени приложения в URI приложения, которое мы пытаемся остановить. В случае успеха приложение будет остановлено и состояние будет синхронизироваться между узлами.
Вот мой код :
import re
moduleName = "meap"
ctxRootOld = "/meap_old"
appList = []
appObj = AdminApp.list("WebSphere:cell=myCell,node=myNode,server=myServer")
print("These are the list of apps running in WAS DMGR: ")
print(appObj)
for apps in appObj:
appList.append(apps)
print("Now appending the apps to an empty list...Here are the values")
print(appList)
for app in appList:
appMatch = re.match("^ABC\w+$", app)
print(appMatch)
result = appMatch.group(0)
appStopName = result
print (appStopName)
appStopURI = ""+appStopName+".war,WEB-INF/web.xml"
appmanager = AdminControl.queryNames('cell=myCell,node=myNode,type=ApplicationManager,*')
AdminControl.invoke(appmanager, 'stopApplication', appStopName)
AdminApp.edit(appStopName, ['-CtxRootForWebMod', [[moduleName, appStopURI, ctxRootOld]]])
AdminConfig.save()
AdminNodeManagement.syncActiveNodes()
Выход выглядит следующим образом:
WASX7209I: Connected to process "dmgr" on node CellManager03 using SOAP connector; The type of process is: DeploymentManager
These are the apps running in WAS DMGR:
DefaultApp
ABCPreProd
Now appending the apps to an empty list...Here are the values
['D','e','f','a','u','l','t'.....'P','r','o','d']
None
WASX7017E: Exception received while running file "/app/was_scripts/stopapp.py"; exception information: com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File "<string>", line 11, in ?
AttributeError: 'None' object has no attribute 'group'
Хотя это печать списка (в не очень правильном формате), но он неправильно добавляется в пустой список. Он берет каждое имя приложения, затем разделяет их на отдельные буквы, а затем добавляет в пустой список.
В результате сопоставление с шаблоном регулярного выражения возвращает None
вместо имени приложения.
Пожалуйста, направьте меня, чтобы я мог исправить ошибку и автоматизировать этот процесс. Я чувствую, что метод split вместе с append решит проблему. Но я не знаю, какой разделитель поместить внутри метода split. Это только мое чувство, но каждый волен отправлять свои мысли.
Спасибо и всего наилучшего - KrisT :)