В одной системе, работающей на серверах приложений WebSphere, было несколько кластеров, в одном из которых было 6 серверов, в остальных – по два. Настройки, необходимые для работы приложения, были прописаны на каждом сервере приложений в Custom Properties.
При смене одного из параметров, нужно было заменить его на всех серверах, а для этого в административной консоли WAS нужно прицелиться и ткнуть мышью в несколько мелких надписей – название сервера, Process Definition, Java virtual machine, Custom properties, и отредактировать параметр. И так 32 раза.
После того, как эти действия были проделаны несколько раз, и уже хочется запустить мышью в монитор, самое время приступить к написанию скрипта, который будет менять параметры автоматически.
# Редактирует параметр, заданный переменными:
#
# Пример:
# modifyProps = [ [ 'jcifs.netbios.wins', '10.1.7.9'] ]
modifyProps = [ [ 'system1.admin.url', 'iiop://srv01.test.local:9810'],
[ 'system2.admin.url', 'iiop://srv02.test.local:9810' ] ]
# здесь можно добавить ещё несколько значений - выглядеть всё должно примерно так
# (строку можно переносить):
# [ [ 'параметр', 'значение' ], [ 'параметр', 'значение' ], ... [ 'параметр', 'значение' ] ]
import sys
import java
lineSeparator = java.lang.System.getProperty('line.separator')
servers = AdminConfig.list('Server')
servers = servers.split(lineSeparator)
for server in servers:
serverName = AdminConfig.showAttribute(server,"name")
if (serverName != 'nodeagent') & (serverName != 'dmgr'):
print "==================== " + serverName + " ===================="
jvm = AdminConfig.list('JavaVirtualMachine',server)
props = AdminConfig.showAttribute(jvm,'systemProperties')
props = props.replace('[','')
props = props.replace(']','')
props = props.split(' ')
for prop in props:
propName = AdminConfig.showAttribute(prop,'name')
propValue = AdminConfig.showAttribute(prop,'value')
print propName + " : " + propValue
for modifyPropSet in modifyProps:
if propName == modifyPropSet[0]:
print "****** Modify property " + propName + " : new value is " + modifyPropSet[1]
attrs = [[ 'name', propName ], [ 'value', modifyPropSet[1] ]]
print AdminConfig.modify(prop, attrs)
AdminConfig.save()
Скрипт был протестирован на серверах, которые были у меня в администрировании (WAS 6.0, 6.1 и 7.0). Работа скрипта на других серверах не гарантируется. Если вы не уверены, в целях отладки закомментируйте последнюю строку.