#! /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"))