Скрипт Jython для редактирования Java Virtual Machine Custom properties

В одной системе, работающей на серверах приложений WebSphere, было несколько кластеров, в одном из которых было 6 серверов, в остальных – по два. Настройки, необходимые для работы приложения, были прописаны на каждом сервере приложений в Custom Properties.

При смене одного из параметров, нужно было заменить его на всех серверах, а для этого в административной консоли WAS нужно прицелиться и ткнуть мышью в несколько мелких надписей – название сервера, Process Definition, Java virtual machine, Custom properties, и отредактировать параметр. И так 32 раза.

После того, как эти действия были проделаны несколько раз, и уже хочется запустить мышью в монитор, самое время приступить к написанию скрипта, который будет менять параметры автоматически.

# Выдает список всех Java Virtual Machine custom properties на всех серверах в ячейке.
# Редактирует параметр, заданный переменными:
#
# Пример:
# 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). Работа скрипта на других серверах не гарантируется. Если вы не уверены, в целях отладки закомментируйте последнюю строку.

Добавить комментарий