[ create a new paste ] login | about

Link: http://codepad.org/SAoSwWMB    [ raw code | fork ]

simonvc - Python, pasted on Apr 9:
#! /bin/false

# This script must be run with the command: java weblogic.WLST RenameDomain.py
# from the source domain directory.
#
# Author: Simon Vans-Colina
# Client: Citigroup
# Date: 10 July 2006
# Purpose: This script runs in the domain home of a weblogic domain that needs to be
# standardized. It takes the essential config from the domain and builds a new domain
# according to an agreed standard. This new domain is put in the standard location,
# will have standard start and stop scripts etc.

try:
  import weblogic
except:
  print "Weblogic.jar needs to be on your CLASSPATH. Exiting"
  raise SystemExit(1)

import javax.xml
import java.io.FileInputStream as fis
import java.io.FileOutputStream as fos

try:
  import org.apache.tools.ant as ant
except:
  print "Ant.jar needs to be on your classpath"
  raise SystemExit(1)

try:
  import os
  import shutil
except:
  print "Python shutils could not be found, are you running java weblogic.WLST to execute this script?"
  raise SystemExit(1)

import java.io.BufferedReader as BR
import java.lang.System.in <http://java.lang.System.in> as Sin
import java.io.InputStreamReader as isr
import java.lang.System.out.print as jprint

import weblogic.security

es=weblogic.security.internal.SerializedSystemIni.getEncryptionService(".")
ces=weblogic.security.internal.encryption.ClearOrEncryptedService(es)

#Standards are defined here

class ConfigStore:
  def __init__(self, fileLocation):
    factory=javax.xml.parsers.DocumentBuilderFactory.newInstance()
    builder=factory.newDocumentBuilder()
    input=fis(fileLocation)
    self.document=builder.parse(input)
    self.DOM=self.document.getDocumentElement()
  def write(self, newFileLocation):
    xmlFrom=javax.xml.transform.dom.DOMSource(self.document)
    xmlTo=javax.xml.transform.stream.StreamResult(fos(newFileLocation))
    Transformer=javax.xml.transform.TransformerFactory.newInstance().newTransformer()
    Transformer.transform(xmlFrom, xmlTo)


def ask(Question, default=None):
  jprint(Question)
  if default:
    jprint("[%s]" % default)
  return BR(isr(Sin)).readLine() or default

def changeAttributes(node, oldvalue, newvalue):
  if node.getAttributes():
    for i in range(node.getAttributes().getLength()):
      attr=node.getAttributes().item(i)
      if attr.getValue()==oldvalue:
        attr.setValue(newvalue)

def nodeWalk(node, oldvalue, newvalue):
  for n in range(node.getChildNodes().getLength()):
    cn=node.getChildNodes().item(n)
    nodeWalk(cn, oldvalue, newvalue)
  changeAttributes(node, oldvalue, newvalue)



configxml=ConfigStore("./config.xml")

numServers=configxml.DOM.getElementsByTagName("Server").getLength()
domainName=configxml.DOM.getAttribute("Name")

print "The domain found: %s has %s servers." % (domainName, numServers)

## Rename the Domain.
oldName=configxml.DOM.getAttribute("Name")
newName=ask("What do you want to rename this domain to? ", "Domain")
nodeWalk(configxml.DOM, oldName, newName)

## Rename the servers if required.
for i in range(configxml.DOM.getElementsByTagName("Server").getLength()):
  serverNode=configxml.DOM.getElementsByTagName("Server").item(i)
  oldName=serverNode.getAttribute("Name")
  newName= ask("What do you want to rename the %s server to? " % oldName, oldName)
  nodeWalk(configxml.DOM, oldName, newName)

## Decrypt the JDBC passwords
for j in range(configxml.DOM.getElementsByTagName("JDBCConnectionPool").getLength()):
  poolNode=configxml.DOM.getElementsByTagName("JDBCConnectionPool").item(j)
  poolNode.setAttribute("Password",  ces.decrypt(poolNode.getAttribute("PasswordEncrypted")) )
  poolNode.removeAttribute("PasswordEncrypted")


## Decrypt the EmbeddedLDAP
for j in range(configxml.DOM.getElementsByTagName("EmbeddedLDAP").getLength()):
  poolNode=configxml.DOM.getElementsByTagName("EmbeddedLDAP").item(j)
  poolNode.setAttribute("Credential",  ces.decrypt(poolNode.getAttribute("CredentialEncrypted")) )
  poolNode.removeAttribute("CredentialEncrypted")


## Decrypt the Security Configuration
for j in range(configxml.DOM.getElementsByTagName("SecurityConfiguration").getLength()):
  poolNode=configxml.DOM.getElementsByTagName("SecurityConfiguration").item(j)
  poolNode.setAttribute("Credential",  ces.decrypt(poolNode.getAttribute("CredentialEncrypted")) )
  poolNode.removeAttribute("CredentialEncrypted")

## Decrypt the ServerStart
for j in range(configxml.DOM.getElementsByTagName("ServerStart").getLength()):
  poolNode=configxml.DOM.getElementsByTagName("ServerStart").item(j)
  poolNode.setAttribute("Password",  ces.decrypt(poolNode.getAttribute("PasswordEncrypted")) )
  poolNode.removeAttribute("PasswordEncrypted")



## Finally write out the config.xml
configxml.write(ask("What do you want to call the new config.xml? ", "new-config.xml"))


Create a new paste based on this one


Comments: