Как клонировать сервер weblogic в WLST (офлайн-режим)? - PullRequest
2 голосов
/ 21 февраля 2011

У нас есть собственный шаблон weblogic, в котором есть сервер администратора (очевидно) и кластер с двумя управляемыми серверами, развернутыми на одной машине. Мы используем этот шаблон для наших сред разработки. Но теперь, когда мы переходим к средам тестирования производительности, нам нужно представить больше машин.

Создать новый компьютер в WLST легко (в автономном или онлайн-режиме). Но как мне клонировать сервер (так как все настройки, кроме weblogic.Name и целевой машины одинаковы) в WLST?

Кажется, это возможно в Консоли администрирования WebLogic, но нам нужно автоматизировать это.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

В итоге я определил следующие функции:

def createServer(wls, name):
  wls.cd("/")
  wls.create(name, 'Server')    


######################################################################
# Checks if given bean exists
######################################################################
def beanExists(wls, path, name):
  print "Checking if bean: '" + name + "' exists in path: '" + path + "'"
  wls.cd(path)
  wls.setShowLSResult(0)  
  beans = wls.ls('c', 'false', 'c')
  wls.setShowLSResult(1)  
  if (beans.find(name) != -1):
    print "Exists"  
    return 1
  else:
    print "Doesn't exist"  
    return 0


######################################################################
# Copy bean properties in offline mode.
######################################################################
def copyProperties(wls, originalBeanName, originalBeanPath, newBeanName, newBeanPath, ignoredProperties):

  wls.getCommandExceptionHandler().setMode(1)
  wls.getRuntimeEnv().set('exitonerror', 'true')

  srcPath = originalBeanPath + "/" + originalBeanName
  targetPath =  newBeanPath + "/" + newBeanName

  print "Coping properties from '" + srcPath + "' to '" + targetPath + "'"  
  wls.cd(srcPath)

  wls.setShowLSResult(0)
  attributes = wls.ls('a', 'true', 'a')
  children = wls.ls('c', 'true', 'c')
  wls.setShowLSResult(1)

  # Copy attributes.
  wls.cd(targetPath)
  for entry in attributes.entrySet(): 
    k = entry.key
    v = entry.value  
    if not(k in ignoredProperties) and not(v is None) and not(v == ''):
      print "Setting property '" + str(k) + "' = '" + str(v) + "' on '" + targetPath + "'"
      if isinstance(v, StringType):
        wls.set(k, v.replace(originalBeanName, newBeanName))
      else:
        wls.set(k, v)

  # Copy child bean values.
  for k in children:
    if not(k in ignoredProperties):
      srcBN = srcPath + "/" + k    
      targetBN = targetPath + "/" + k
      print "Coping bean '" + srcBN + "/" + originalBeanName + "'"
      print "Detected bean type as '" + k + "'"
      if beanExists(wls, srcBN, "NO_NAME_0"):      
        print "Changing to NO_NAME_0"
        originalBeanName = "NO_NAME_0"
        newBeanName = "NO_NAME_0"        
      wls.cd(targetPath)        
      wls.create(newBeanName, k)  
      copyProperties(wls, originalBeanName, srcBN, newBeanName, targetBN, ignoredProperties)

После этого просто позвоните:

createServer(WLS, 'ServiceServer3')
copyProperties(WLS, 'ServiceServer1', '/Servers', 'ServiceServer3', '/Servers', ['SSL'])

ОБНОВЛЕНИЕ : я написал об этом больше в моемблог: http://blog.aestasit.com/cloning-objects-in-wlst-offline/. Также скрипт был протестирован на WebLogic 11g.

1 голос
/ 22 февраля 2011

Я не уверен насчет самой новой версии WLST, но в более старых выпусках нет единой команды для этого, поскольку clone находится на стороне консоли - это не функциональность, которая может быть вызвана на MBean.

Вы можете написать скрипт, который принимает имя_сервера в качестве параметра, перебирает все ресурсы и затем создает ваш новый сервер. В качестве альтернативы можно использовать OEM производителя Oracle. Надеюсь, это поможет.

...