WLST выполняет хранимую переменную оператора connect()

Итак, я передаю переменную среды из bash в python;

#!/usr/bin/env python2
import os

#connect("weblogic", "weblogic", url=xxx.xxx.xxx.xxx:xxxx)
os.environ['bash_variable']

через wlst.sh я могу распечатать экспортированную переменную bash, но как мне выполнить сохраненную переменную? По сути, я пытаюсь удалить исходный оператор подключения и передать переменную с указанной информацией. Спасибо


person q5p4k0    schedule 12.03.2014    source источник
comment
Вы хотите использовать bash_variable в качестве параметра url?   -  person Andreas Fester    schedule 12.03.2014
comment
Нет, я хочу заменить connect(weblogic и т. д.) на то, что хранится в bash_variable, что является полным оператором подключения. Вот почему мне нужно выполнить эту сохраненную переменную.   -  person q5p4k0    schedule 12.03.2014
comment
Значит, bash_variable содержит что-то вроде connect("weblogic", "weblogic", url="192.168.1.1:7001")?   -  person Andreas Fester    schedule 12.03.2014
comment
Да, это правильно.   -  person q5p4k0    schedule 12.03.2014
comment
exec должно работать: stackoverflow.com/a/701813/1611055. Однако, когда я делал что-то подобное, я передавал имя пользователя, пароль и URL-адрес в качестве переменных среды и передал их в connect. С помощью exec вы можете выполнить любой код Python, хранящийся в вашей переменной, что может быть проблемой безопасности.   -  person Andreas Fester    schedule 12.03.2014
comment
Спасибо за понимание.   -  person q5p4k0    schedule 12.03.2014


Ответы (1)


Однако вопрос, почему бы вам не вызвать скрипт с переменной в качестве аргумента и не использовать sys.argv[] ?

На примере как-то так.

import os
import sys
import traceback
from java.io import *
from java.lang import *




wlDomain = sys.argv[1]
wlDomPath = sys.argv[2]
wlNMHost = sys.argv[3]
wlNMPort = sys.argv[4]
wlDPath="%s/%s" %(wlDomPath,wlDomain)
wlNMprop="/apps/bea/wls/scripts/.shadow/NM.prop"

try:
    print "Connection to Node Manager"
    print ""
    loadProperties(wlNMprop)
    nmConnect(username=NMuser,password=NMpass,host=wlNMHost,port=wlNMPort,domainName=wlDomain,domainDir=wlDPath,mType='ssl',verbose='true')
except:
    print "Fatal Error : No Connection to Node Manager"
    exit()

print "Connected to Node Manager"

Файл NM.prop представляет собой файл 600 с именем пользователя/паролем для NM.

РЕДАКТИРОВАТЬ :

Насколько я понимаю, вы хотите сделать что-то вроде этого:

URLS = ['t3s://Host1:Port1','t3s://Host2:Port2','t3s://Host3:Port3']
for urls in URLS:
    connect('somebody','password',urls)
    {bunch of commands}
    disconnect()

И значения списка URL-адресов будут определяться средой.

Как я вижу, у вас есть 3 варианта:

  1. Иметь 1 сценарий для каждой среды, более или менее идентичный, за исключением списка URL-адресов.
  2. Иметь 1 скрипт, но с условным ветвлением на sys.argv[1] (среда в качестве параметра) и создать там список.
  3. Имейте 1 сценарий, который использует файл параметров для каждой среды в соответствии со средой. Каждый файл параметров, содержащий рассматриваемый список.

Что-то такое :

propENV = sys.argv[1]
propPath = "/path1/path2"
propFile = "%s/%s" %(propPath,propENV)

loadProperties(propFile)

Я бы, вероятно, сам использовал опцию файла свойств, поскольку она более гибкая с операционной точки зрения... по крайней мере, ИМХО.

person Andre Gelinas    schedule 21.03.2014
comment
Причина, по которой я использовал bash, заключалась в том, что поле URL-адреса было назначено в массиве assoc. Пользовательский ввод будет предоставлять среду, и этот ключ будет предоставлять более одного значения (в зависимости от среды) — это означает, что было несколько URL-адресов, к которым требовалось подключение через WLST. Мне нужно удалить bash из уравнения и использовать python для создания цикла for и запуска набора команд для каждого предоставленного URL-адреса. - person q5p4k0; 22.03.2014
comment
Ну, вы можете загрузить файл свойств на основе среды, предоставленной пользователями, и содержащей список URL-адресов (и другую информацию). - person Andre Gelinas; 24.03.2014
comment
Как именно это будет работать с файлом свойств? Сценарий что-то в этом роде; wlst.sh ./script.py [var] [var] [var] [env] wlst.sh настраивает среду, а script.py напрямую подключается к управляемому серверу и выполняет команды, содержащиеся в script.py. Проблема в том, что [env] содержит несколько MS — до 10 в некоторых средах. Сценарий bash на самом деле не подходит, потому что он будет запускать команду для одного URL-адреса за раз, выходить из WLST и повторно выполнять всю команду, указанную выше, для каждой MS. - person q5p4k0; 25.03.2014