передача аргумента в jython, используемая в wsadmin.sh динамически

Мне нужна помощь в написании сценариев wsadmin.sh вместе с jython. Я создаю сценарий для предоставления доступа к консоли пользователям через wsadmin.sh. Я могу заставить его работать, если я жестко запрограммирую данные имени пользователя в файле consoleacces.py, но мое требование - предоставить данные имени пользователя во время выполнения. так что я могу использовать скрипт несколько раз для разных пользователей.

Работает:

wsadmin.sh -lang jython  -f /tmp/consoleaccess.py

содержимое consoleaccess.py

AdminTask.mapUsersToAdminRole('[-accessids [user:defaultWIMFileBasedRealm/employeenumber=123,ou=people,ou=country,o=office] -roleName administrator -userids user1]')
AdminConfig.save()
agBean=AdminControl.queryNames('type=AuthorizationGroupManager,process=dmgr,*');null=AdminControl.invoke(agBean, 'refreshAll')

Не работает

wsadmin.sh -lang jython -f /tmp/consoleaccess.py 123 user1 administrator

содержимое consoleaccess.py

 import sys
    AdminTask.mapUsersToAdminRole('[-accessids [user:defaultWIMFileBasedRealm/employeenumber=sys.argv[1],ou=people,ou=americas,o=SIAM_ED] -roleName sys.argv[3] -userids sys.argv[2]]')
    AdminConfig.save()
    agBean=AdminControl.queryNames('type=AuthorizationGroupManager,process=dmgr,*');null=AdminControl.invoke(agBean, 'refreshAll')

Ошибка:

WASX7209I: Connected to process "dmgr" on node host1 using SOAP connector;  The type of process is: DeploymentManager
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[123, user1, administrator]"
WASX7017E: Exception received while running file "/tmp/consoleaccess.py"; exception information: com.ibm.ws.scripting.ScriptingException: WASX8009E: Invalid parameter: [-accessids [user:defaultWIMFileBasedRealm/employeenumber=sys.argv[1],ou=people,ou=americas,o=SIAM_ED] -roleName sys.argv[3] -userids sys.argv[2]]

person Abdur rasheed S    schedule 21.03.2019    source источник


Ответы (2)


Обновите скрипт, как показано ниже.

Примечание. В wsadmin Jython имя программы или сценария не является частью sys.argv. Итак, ваш первый аргумент — sys.argv[0], а не sys.argv[1].

import sys

userEmpNo=sys.argv[0]
userName=sys.argv[1]
userRole=sys.argv[2]

AdminTask.mapUsersToAdminRole('[-accessids [user:defaultWIMFileBasedRealm/employeenumber=' +userEmpNo+ ',ou=people,ou=americas,o=SIAM_ED] -roleName ' +userRole+ ' -userids ' +userName+ ']')
AdminConfig.save()
agBean=AdminControl.queryNames('type=AuthorizationGroupManager,process=dmgr,*');null=AdminControl.invoke(agBean, 'refreshAll')

и запустите скрипт как

wsadmin.sh -lang jython -f /tmp/consoleaccess.py 123 user1 administrator
person M I P    schedule 22.03.2019
comment
Спасибо, что сообщили мне о wsadmin jython и вашем обновленном скрипте. Это сделало трюк, и теперь он работает нормально :) - person Abdur rasheed S; 22.03.2019

Как насчет --, чтобы отделить флаги от аргументов?

wsadmin.sh -lang jython -f /tmp/consoleaccess.py --  123 user1 administrator

и перемещение sys.argv из строки:

'...employeenumber=' + sys.argv[1] + ',ou=people,ou=americas,o=SIAM_ED] -roleName ' + sys.argv[3] + ' -userids ' + sys.argv[2]])
person covener    schedule 21.03.2019
comment
О, я вижу, теперь вы пытаетесь использовать sys.argv в параметре, указанном в кавычках, он не будет разрешен там. - person covener; 21.03.2019
comment
Спасибо за отредактированный ответ. Похоже, нам нужно переместить sys.argv из строки, чтобы он заработал. - person Abdur rasheed S; 22.03.2019