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.
No comments:
Post a Comment