Изменение пароля источника данных с помощью WLST (несколько доменов)

Я очень новичок в сценариях WLST и в настоящее время на начальном уровне. У меня есть скрипт, который запрашивает пароль для каждого источника данных, который он читает. Хотя эта часть работает нормально, проблема, с которой я сталкиваюсь, заключается в том, что в производственной среде, где мы хотим запустить этот сценарий, будет несколько управляемых серверов, имеющих один и тот же источник данных с другим именем, но одинаковый JNDI, как оба источника данных, подключающихся к одной и той же базе данных.

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

Также есть несколько источников данных, как их можно обрабатывать? Является ли это возможным? кроме того, я не знаю, как получить JNDIName для каждого источника данных. Я пытался получить JNDIName следующим образом, который не работает - jndiName = dataSource.getJNDIName()

Это ошибка, которую я получаю в командной строке -

Problem invoking WLST - Traceback (innermost last):
  File "C:\Script\PostDeploy-DataSourcePasswords.py", line 59, in ?
  File "C:\Script\PostDeploy-DataSourcePasswords.py", line 43, in updateJDBCPasswords
AttributeError: getJNDIName

Это сценарий, с которым я работаю -

import sys

#import wlstutility
#wlstutility.initialise(globals())
#from wlstutility import *
#from wlstutility.constructors import *

if len(sys.argv)<1:
    print 'Usage: wlst.sh wibble.py <host:port>' 
    print '   for example: wlst.sh wibble.py prfadmin:14801' 
exit()

hostPort = sys.argv[1]    
print ('host:port = %s' % hostPort )

connectionUrl = ('t3://%s' % hostPort)

WL_USER='weblogic'
commitChanges=True

WL_PWD=raw_input("Enter Weblogic console password: ")

connect(WL_USER, WL_PWD, connectionUrl)

def updateJDBCPasswords():

    PARAMS_TEMPLATE = '/JDBCSystemResources/%s/JDBCResource/%s/JDBCDriverParams/%s'

    domainConfig()

    # Get JDBC DataSources
    cd("JDBCSystemResources")
    dataSources = cmo.getJDBCSystemResources()

    edit()
    # For each DataSource update the password
    for dataSource in dataSources :
        dsName = dataSource.getName()
        print ('DataSource Name : = %s' % dsName)
        password=raw_input("Enter database password for " + dsName +" : ")
        cd(PARAMS_TEMPLATE % (dsName, dsName, dsName) )
        cmo.setPassword(password)

## ===========================================================
# Let's get going

edit()
startEdit()

updateJDBCPasswords()

# dump the changes made so far
print "=== START: The changes that will be applied ==="
showChanges()

if commitChanges :
    # =========================================================
    # commit the changes
    save()
    activate(block="true")
else:
    # =========================================================
    # rollback the changes
    print "=== ROLLBACK - cancelling the changes so that they don't get applied ==="
    cancelEdit('y')

# =========================================================
# all done - bye!
disconnect()
exit()

Любая помощь будет высоко ценится.

С уважением,

Амрут Раут.

1 ответ

Вы пробуете в своих тестовых / предварительных средах простой скрипт WLST, который может извлекать имена JNDI. Вы можете получить имена JNDI из ds ниже:

cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName + '/JDBCDataSourceParams/NO_NAME_0')
jarray_jndi_names=get('JNDINames')
jndi_names=[]
for jname in jarray_jndi_names:
  jndi_names.append(jname)

Измените значения dsName с помощью ввода или того, что вы считаете лучше для вашей среды. Как только вы получили имена JNDI, вам нужно использовать обычное условие if, чтобы проверить, что оно уже существует, тогда вы можете использовать свою логику.

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

Другие вопросы по тегам