@@ -104,241 +104,9 @@ data:
104104
105105 export DOMAIN_HOME=${SHARED_PATH}/domain/%DOMAIN_NAME%
106106
107- # Function to create node manager home for a server
108- # $1 - Domain UID
109- # $2 - Server Name
110- # $3 - Admin Server Hostname (only passed for managed servers)
111- function createNodeMgrHome() {
112-
113- # Create startup.properties file
114- datadir=${DOMAIN_HOME}/servers/$2/data/nodemanager
115- startProp=${datadir}/startup.properties
116- createFolder ${datadir}
117- echo "# Server startup properties" > ${startProp}
118- echo "AutoRestart=true" >> ${startProp}
119- if [ -n "$3" ]; then
120- echo "AdminURL=http\://$3\:%ADMIN_PORT%" >> ${startProp}
121- fi
122- echo "RestartMax=2" >> ${startProp}
123- echo "RotateLogOnStartup=false" >> ${startProp}
124- echo "RotationType=bySize" >> ${startProp}
125- echo "RotationTimeStart=00\:00" >> ${startProp}
126- echo "RotatedFileCount=100" >> ${startProp}
127- echo "RestartDelaySeconds=0" >> ${startProp}
128- echo "FileSizeKB=5000" >> ${startProp}
129- echo "FileTimeSpanFactor=3600000" >> ${startProp}
130- echo "RestartInterval=3600" >> ${startProp}
131- echo "NumberOfFilesLimited=true" >> ${startProp}
132- echo "FileTimeSpan=24" >> ${startProp}
133- echo "NMHostName=$1-$2" >> ${startProp}
134-
135- # Create nodemanager home for the server
136- nmdir=${DOMAIN_HOME}/servers/$2/nodemgr_home
137- createFolder ${nmdir}
138- prop=${nmdir}/nodemanager.properties
139- cp ${DOMAIN_HOME}/nodemanager/nodemanager.properties ${nmdir}
140- cp ${DOMAIN_HOME}/nodemanager/nodemanager.domains ${nmdir}
141- cp ${DOMAIN_HOME}/bin/startNodeManager.sh ${nmdir}
142-
143- # Edit the start nodemanager script to use the home for the server
144- sed -i -e "s:/nodemanager:/servers/$2/nodemgr_home:g" ${nmdir}/startNodeManager.sh
145-
146- # Edit the nodemanager properties file to use the home for the server
147- sed -i -e "s:DomainsFile=.*:DomainsFile=${nmdir}/nodemanager.domains:g" ${prop}
148- sed -i -e "s:NodeManagerHome=.*:NodeManagerHome=${nmdir}:g" ${prop}
149- sed -i -e "s:ListenAddress=.*:ListenAddress=$1-$2:g" ${prop}
150- sed -i -e "s:LogFile=.*:LogFile=/shared/logs/nodemanager-$2.log:g" ${prop}
151-
152- }
153-
154- # Function to create script for starting a server
155- # $1 - Domain UID
156- # $2 - Server Name
157- # $3 - Flag (only passed for admin server)
158- function createStartScript() {
159-
160- nmdir=${DOMAIN_HOME}/servers/$2/nodemgr_home
161- stateFile=${DOMAIN_HOME}/servers/$2/data/nodemanager/$2.state
162- scriptFile=${nmdir}/startServer.sh
163- pyFile=${nmdir}/start-server.py
164- argsFile=${nmdir}/set-ms-args.py
165-
166- # Create a script that starts the node manager, then uses wlst to connect
167- # to the nodemanager and start the server.
168- # The script and 'EOF' on the following lines must not be indented!
169- cat << EOF > ${scriptFile}
170- #!/bin/bash
171-
172- # Check for stale state file and remove if found"
173- if [ -f ${stateFile} ]; then
174- echo "Removing stale file ${stateFile}"
175- rm ${stateFile}
176- fi
177-
178- echo "Start the nodemanager"
179- . ${nmdir}/startNodeManager.sh &
180-
181- echo "Allow the nodemanager some time to start before attempting to connect"
182- sleep 15
183- echo "Finished waiting for the nodemanager to start"
184-
185- echo "Update JVM arguments"
186- if [ $# -eq 3 ]
187- then
188- echo "Update JVM arguments for admin server"
189- echo "Arguments=\${USER_MEM_ARGS} -XX\:+UnlockExperimentalVMOptions -XX\:+UseCGroupMemoryLimitForHeap \${JAVA_OPTIONS}" >> ${startProp}
190- else
191- echo "Update JVM arguments for managed server"
192- wlst.sh ${argsFile} $1 $2 ${startProp}
193- fi
194-
195- echo "Start the server"
196- wlst.sh -skipWLSModuleScanning ${pyFile}
197-
198- echo "Wait indefinitely so that the Kubernetes pod does not exit and try to restart"
199- while true; do sleep 60; done
200- EOF
201-
202- checkFileExists ${scriptFile}
203- chmod +x ${scriptFile}
204-
205- # Create a python script to execute the wlst commands.
206- # The script and 'EOF' on the following lines must not be indented!
207- cat /u01/weblogic/read-domain-secret.py > ${pyFile}
208- cat << EOF >> ${pyFile}
209-
210- # Connect to nodemanager and start server
211- nmConnect(admin_username, admin_password, '$1-$2', '5556', '%DOMAIN_NAME%', '${DOMAIN_HOME}', 'plain')
212- nmStart('$2')
213-
214- # Exit WLST
215- nmDisconnect()
216- exit()
217- EOF
218-
219- checkFileExists ${pyFile}
220-
221- # Create a python script to set JVM arguments for managed server.
222- # The script and 'EOF' on the following lines must not be indented!
223- cat << EOF > ${argsFile}
224-
225- import os
226- import sys
227- EOF
228-
229- cat /u01/weblogic/read-domain-secret.py >> ${argsFile}
230- cat << EOF >> ${argsFile}
231-
232- mem_args=os.environ['USER_MEM_ARGS']
233- java_opt=os.environ['JAVA_OPTIONS']
234- admin_server=os.environ['ADMIN_NAME']
235- admin_port=os.environ['ADMIN_PORT']
236-
237- domain_UID=sys.argv[1]
238- server_name=sys.argv[2]
239- startup_file=sys.argv[3]
240-
241- adminUrl='t3://' + domain_UID + '-' + admin_server + ':' + admin_port
242- dirStr='Servers/managed-server1/ServerStart/' + server_name
243-
244- # Connect to admin server to get startup arguments of this server
245- connect(admin_username, admin_password, adminUrl)
246- cd(dirStr)
247- args=get('Arguments')
248- disconnect()
249-
250- f = open(startup_file, 'a')
251- s=str("Arguments="+ mem_args + " -XX\:+UnlockExperimentalVMOptions -XX\:+UseCGroupMemoryLimitForHeap " + java_opt )
252- if not (args is None):
253- s=str(s + " " + args + "\n")
254- else:
255- s=str(s + "\n")
256-
257- f.write(s)
258- f.close()
259- EOF
260-
261- checkFileExists ${argsFile}
262-
263- }
264-
265- # Function to create script for stopping a server
266- # $1 - Domain UID
267- # $2 - Server Name
268- function createStopScript() {
269-
270- nmdir=${DOMAIN_HOME}/servers/$2/nodemgr_home
271- scriptFile=${nmdir}/stopServer.sh
272- pyFile=${nmdir}/stop-server.py
273-
274- # Create a script that stops the server.
275- # The script and 'EOF' on the following lines must not be indented!
276- cat << EOF > ${scriptFile}
277- #!/bin/bash
278-
279- echo "Stop the server"
280- wlst.sh -skipWLSModuleScanning ${pyFile}
281-
282- # Return status of 2 means failed to stop a server through the NodeManager.
283- # Look to see if there is a server process that can be killed.
284- if [ \$? -eq 2 ]; then
285- pid=\$(jps -v | grep '[D]weblogic.Name=$2' | awk '{print \$1}')
286- if [ ! -z \$pid ]; then
287- echo "Killing the server process \$pid"
288- kill -15 \$pid
289- fi
290- fi
291-
292- EOF
293-
294- checkFileExists ${scriptFile}
295- chmod +x ${scriptFile}
296-
297- # Create a python script to execute the wlst commands.
298- # The script and 'EOF' on the following lines must not be indented!
299- cat /u01/weblogic/read-domain-secret.py > ${pyFile}
300- cat << EOF >> ${pyFile}
301-
302- # Connect to nodemanager and stop server
303- try:
304- nmConnect(admin_username, admin_password, '$1-$2', '5556', '%DOMAIN_NAME%', '${DOMAIN_HOME}', 'plain')
305- except:
306- print('Failed to connect to the NodeManager')
307- exit(exitcode=2)
308-
309- # Kill the server
310- try:
311- nmKill('$2')
312- except:
313- print('Connected to the NodeManager, but failed to stop the server')
314- exit(exitcode=2)
315-
316- # Exit WLST
317- nmDisconnect()
318- exit()
319- EOF
320- }
321-
322- checkFileExists ${pyFile}
323-
324107 # Create the domain
325108 wlst.sh -skipWLSModuleScanning /u01/weblogic/create-domain.py
326109
327- # Setup admin server
328- createNodeMgrHome %DOMAIN_UID% %ADMIN_SERVER_NAME%
329- createStartScript %DOMAIN_UID% %ADMIN_SERVER_NAME% 'admin'
330- createStopScript %DOMAIN_UID% %ADMIN_SERVER_NAME%
331-
332- # Create the managed servers
333- index=0
334- while [ $index -lt %CONFIGURED_MANAGED_SERVER_COUNT% ]
335- do
336- ((index++))
337- createNodeMgrHome %DOMAIN_UID% %MANAGED_SERVER_NAME_BASE%${index} %DOMAIN_UID%-%ADMIN_SERVER_NAME%
338- createStartScript %DOMAIN_UID% %MANAGED_SERVER_NAME_BASE%${index}
339- createStopScript %DOMAIN_UID% %MANAGED_SERVER_NAME_BASE%${index}
340- done
341-
342110 echo "Successfully Completed"
343111
344112 create-domain.py : |-
@@ -351,13 +119,15 @@ data:
351119 domain_path = os.environ.get("DOMAIN_HOME")
352120 cluster_name = "%CLUSTER_NAME%"
353121 number_of_ms = %CONFIGURED_MANAGED_SERVER_COUNT%
122+ cluster_type = "%CLUSTER_TYPE%"
354123
355124 print('domain_path : [%s]' % domain_path);
356125 print('domain_name : [%DOMAIN_NAME%]');
357126 print('admin_username : [%s]' % admin_username);
358127 print('admin_port : [%ADMIN_PORT%]');
359128 print('cluster_name : [%s]' % cluster_name);
360129 print('server_port : [%s]' % server_port);
130+ print('cluster_type : [%s]' % cluster_type);
361131
362132 # Open default domain template
363133 # ============================
@@ -416,28 +186,56 @@ data:
416186 set('NodeManagerPasswordEncrypted', admin_password)
417187
418188 # Create a cluster
189+ # ======================
419190 cd('/')
420- create(cluster_name, 'Cluster')
191+ cl=create(cluster_name, 'Cluster')
192+
193+ if cluster_type == "CONFIGURED":
421194
422- # Create managed servers
423- for index in range(0, number_of_ms):
424- cd('/')
195+ # Create managed servers
196+ for index in range(0, number_of_ms):
197+ cd('/')
425198
426- msIndex = index+1
427- name = '%MANAGED_SERVER_NAME_BASE%%s' % msIndex
199+ msIndex = index+1
200+ name = '%MANAGED_SERVER_NAME_BASE%%s' % msIndex
428201
429- create(name, 'Server')
430- cd('/Servers/%s/' % name )
431- print('managed server name is %s' % name);
432- set('ListenAddress', '%DOMAIN_UID%-%s' % name)
433- set('ListenPort', server_port)
434- set('NumOfRetriesBeforeMSIMode', 0)
435- set('RetryIntervalBeforeMSIMode', 1)
436- set('Cluster', cluster_name)
202+ create(name, 'Server')
203+ cd('/Servers/%s/' % name )
204+ print('managed server name is %s' % name);
205+ set('ListenAddress', '%DOMAIN_UID%-%s' % name)
206+ set('ListenPort', server_port)
207+ set('NumOfRetriesBeforeMSIMode', 0)
208+ set('RetryIntervalBeforeMSIMode', 1)
209+ set('Cluster', cluster_name)
437210
438- create(name,'Log')
439- cd('/Servers/%s/Log/%s' % (name, name))
440- set('FileName', '/shared/logs/%s.log' % name)
211+ create(name,'Log')
212+ cd('/Servers/%s/Log/%s' % (name, name))
213+ set('FileName', '/shared/logs/%s.log' % name)
214+ else:
215+ print('Configuring Dynamic Cluster %s' % cluster_name)
216+
217+ templateName = cluster_name + "-template"
218+ print('Creating Server Template: %s' % templateName)
219+ st1=create(templateName, 'ServerTemplate')
220+ print('Done creating Server Template: %s' % templateName)
221+ cd('/ServerTemplates/%s' % templateName)
222+ cmo.setListenPort(server_port)
223+ cmo.setListenAddress('%DOMAIN_UID%-%MANAGED_SERVER_NAME_BASE%${id}')
224+ cmo.setCluster(cl)
225+ print('Done setting attributes for Server Template: %s' % templateName);
226+
227+
228+ cd('/Clusters/%s' % cluster_name)
229+ create(cluster_name, 'DynamicServers')
230+ cd('DynamicServers/%s' % cluster_name)
231+ set('ServerTemplate', st1)
232+ set('ServerNamePrefix', "%MANAGED_SERVER_NAME_BASE%")
233+ set('DynamicClusterSize', number_of_ms)
234+ set('MaxDynamicClusterSize', number_of_ms)
235+ set('CalculatedListenPorts', false)
236+ set('Id', 1)
237+
238+ print('Done setting attributes for Dynamic Cluster: %s' % cluster_name);
441239
442240 # Write Domain
443241 # ============
@@ -452,38 +250,6 @@ data:
452250 updateDomain()
453251 closeDomain()
454252 print 'Domain Updated'
455-
456- # Encrypt the admin username and password
457- adminUsernameEncrypted=encrypt(admin_username, domain_path)
458- adminPasswordEncrypted=encrypt(admin_password, domain_path)
459-
460- print 'Create boot.properties files for admin and managed servers'
461-
462- asbpFile=open('%s/servers/%ADMIN_SERVER_NAME%/security/boot.properties' % domain_path, 'w+')
463- asbpFile.write("username=%s\n" % adminUsernameEncrypted)
464- asbpFile.write("password=%s\n" % adminPasswordEncrypted)
465- asbpFile.close()
466-
467- import os
468-
469- # Create boot.properties file for each managed server
470- for index in range(0, number_of_ms):
471-
472- # Define the folder path
473- secdir='%s/servers/%MANAGED_SERVER_NAME_BASE%%s/security' % (domain_path, index+1)
474-
475- # Create the security folder (if it does not already exist)
476- try:
477- os.makedirs(secdir)
478- except OSError:
479- if not os.path.isdir(secdir):
480- raise
481-
482- bpFile=open('%s/boot.properties' % secdir, 'w+')
483- bpFile.write("username=%s\n" % adminUsernameEncrypted)
484- bpFile.write("password=%s\n" % adminPasswordEncrypted)
485- bpFile.close()
486-
487253 print 'Done'
488254
489255 # Exit WLST
0 commit comments