In 2016 I did several posts on automatic installs of Fusion MiddleWare,
including domain creation using wlst.
With weblogic 12c you automatically get a pre-configured per-domain nodemanager. But you might find the configuration not completely suiting your whishes.
It would be nice to update the
nodemanager.properties file to with your properties in the same script.
Today I started with upgrading our Weblogic Tuning and Troubleshooting training to 12c, and one of the steps is to adapt the domain creation script. In the old script, the AdminServer is started right way, to add the managed server to the domain. In my before mentioned script, I do that offline. But since I like to be able to update the
nodemanager.properties file I figured that out.
Earlier, I created a function to just write a new property file:
#
# Create a NodeManager properties file.
def createNodeManagerPropertiesFile(javaHome, nodeMgrHome, nodeMgrType, nodeMgrListenAddress, nodeMgrListenPort):
print ('Create Nodemanager Properties File for home: '+nodeMgrHome)
print (lineSeperator)
nmProps=nodeMgrHome+'/nodemanager.properties'
fileNew=open(nmProps, 'w')
fileNew.write('#Node manager properties\n')
fileNew.write('#%s\n' % str(datetime.now()))
fileNew.write('DomainsFile=%s/%s\n' % (nodeMgrHome,'nodemanager.domains'))
fileNew.write('LogLimit=0\n')
fileNew.write('PropertiesVersion=12.2.1\n')
fileNew.write('AuthenticationEnabled=true\n')
fileNew.write('NodeManagerHome=%s\n' % nodeMgrHome)
fileNew.write('JavaHome=%s\n' % javaHome)
fileNew.write('LogLevel=INFO\n')
fileNew.write('DomainsFileEnabled=true\n')
fileNew.write('ListenAddress=%s\n' % nodeMgrListenAddress)
fileNew.write('NativeVersionEnabled=true\n')
fileNew.write('ListenPort=%s\n' % nodeMgrListenPort)
fileNew.write('LogToStderr=true\n')
fileNew.write('weblogic.StartScriptName=startWebLogic.sh\n')
if nodeMgrType == 'ssl':
fileNew.write('SecureListener=true\n')
else:
fileNew.write('SecureListener=false\n')
fileNew.write('LogCount=1\n')
fileNew.write('QuitEnabled=true\n')
fileNew.write('LogAppend=true\n')
fileNew.write('weblogic.StopScriptEnabled=true\n')
fileNew.write('StateCheckInterval=500\n')
fileNew.write('CrashRecoveryEnabled=false\n')
fileNew.write('weblogic.StartScriptEnabled=true\n')
fileNew.write('LogFile=%s/%s\n' % (nodeMgrHome,'nodemanager.log'))
fileNew.write('LogFormatter=weblogic.nodemanager.server.LogFormatter\n')
fileNew.write('ListenBacklog=50\n')
fileNew.flush()
fileNew.close()
But this one just rewrites the file, and so I need to determine the values for properties like
DomainsFile,
JavaHome, etc., which are already set correctly in the original file. I only want to update the
ListenAddress, and
ListenPort, and possibly the
SecureListener property based on the nodemanager type. Besides that, I want to backup the original file as well.
So, I adapted this function to:
#
# Update the Nodemanager Properties
def updateNMProps(nmPropertyFile, nodeMgrListenAddress, nodeMgrListenPort, nodeMgrType):
nmProps = ''
print ('Read Nodemanager properties file%s: ' % nmPropertyFile)
f = open(nmPropertyFile)
for line in f.readlines():
if line.strip().startswith('ListenPort'):
line = 'ListenPort=%s\n' % nodeMgrListenPort
elif line.strip().startswith('ListenAddress'):
line = 'ListenAddress=%s\n' % nodeMgrListenAddress
elif line.strip().startswith('SecureListener'):
if nodeMgrType == 'ssl':
line = 'SecureListener=true\n'
else:
line = 'SecureListener=false\n'
# making sure these properties are set to true:
elif line.strip().startswith('QuitEnabled'):
line = 'QuitEnabled=%s\n' % 'true'
elif line.strip().startswith('CrashRecoveryEnabled'):
line = 'CrashRecoveryEnabled=%s\n' % 'true'
elif line.strip().startswith('weblogic.StartScriptEnabled'):
line = 'weblogic.StartScriptEnabled=%s\n' % 'true'
elif line.strip().startswith('weblogic.StopScriptEnabled'):
line = 'weblogic.StopScriptEnabled=%s\n' % 'true'
nmProps = nmProps + line
# Backup file
print nmProps
nmPropertyFileOrg=nmPropertyFile+'.org'
print ('Rename File %s to %s ' % (nmPropertyFile, nmPropertyFileOrg))
os.rename(nmPropertyFile, nmPropertyFileOrg)
# Save New File
print ('\nNow save the changed property file to %s' % nmPropertyFile)
fileNew=open(nmPropertyFile, 'w')
fileNew.write(nmProps)
fileNew.flush()
fileNew.close()
It first reads the property file, denoted with
nmPropertyFile line by line.
If a line starts with a particular property that I want to set specifically, then the line is replaced. Each line is then added to the
nmProps variable. For completeness and validation I print the resulting variable.
Then I rename the original file to
nmPropertyFile+'.org' using
os.rename(). And lastly, I write the contents of the
nmProps to the original file in one go.
This brings me again one step further to a completely scripted domain.