Изменение пароля источника данных с помощью 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()

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

С уважением,

Амрут Раут.


person Amrut    schedule 18.07.2014    source источник
comment
Amrut, Вы пробовали тренироваться в интерактивном режиме?   -  person PavanDevarakonda    schedule 20.07.2014


Ответы (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, чтобы проверить, что оно уже существует, тогда вы можете использовать свою логику.

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

person PavanDevarakonda    schedule 20.07.2014