Skip to content

Commit 189f6d0

Browse files
simon-meng-cnrjeberhard
authored andcommitted
simplify operator script maintenance
1 parent 2a6694c commit 189f6d0

File tree

10 files changed

+365
-356
lines changed

10 files changed

+365
-356
lines changed

operator/src/main/java/oracle/kubernetes/operator/helpers/ConfigMapHelper.java

Lines changed: 51 additions & 356 deletions
Large diffs are not rendered by default.

operator/src/main/java/oracle/kubernetes/operator/logging/MessageKeys.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,5 @@ private MessageKeys() {}
141141
public static final String WLS_UPDATE_CLUSTER_SIZE_INVALID_CLUSTER = "WLSKO-0131";
142142
public static final String WLS_CLUSTER_SIZE_UPDATED = "WLSKO-0132";
143143
public static final String WLS_SERVER_TEMPLATE_NOT_FOUND = "WLSKO-0133";
144+
public static final String SCRIPT_LOADED = "WLSKO-0134";
144145
}

operator/src/main/resources/Operator.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,4 @@ WLSKO-0130=Failed to update WebLogic dynamic cluster size for cluster {0} within
132132
WLSKO-0131=Failed to update WebLogic dynamic cluster size for cluster {0}. Cluster is not a dynamic cluster
133133
WLSKO-0132=Updated cluster size for WebLogic dynamic cluster {0} to {1}. Time taken {2} ms
134134
WLSKO-0133=Cannot find WebLogic server template with name {0} which is referenced by WebLogic cluster {1}
135+
WLSKO-0134=Loading scripts into domain control config map for namespace: {0}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/bash
2+
# Kubernetes periodically calls this liveness probe script to determine whether
3+
# the pod should be restarted. The script checks a WebLogic Server state file which
4+
# is updated by the node manager.
5+
DN=${DOMAIN_NAME:-$1}
6+
SN=${SERVER_NAME:-$2}
7+
STATEFILE=/shared/domain/${DN}/servers/${SN}/data/nodemanager/${SN}.state
8+
if [ `jps -l | grep -c " weblogic.NodeManager"` -eq 0 ]; then
9+
echo "Error: WebLogic NodeManager process not found."
10+
exit 1
11+
fi
12+
if [ -f ${STATEFILE} ] && [ `grep -c "FAILED_NOT_RESTARTABLE" ${STATEFILE}` -eq 1 ]; then
13+
echo "Error: WebLogic Server state is FAILED_NOT_RESTARTABLE."
14+
exit 1
15+
fi
16+
exit 0
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
# Reads the current state of a server. The script checks a WebLogic Server state
4+
# file which is updated by the node manager.
5+
6+
DN=${DOMAIN_NAME:-$1}
7+
SN=${SERVER_NAME:-$2}
8+
STATEFILE=/shared/domain/${DN}/servers/${SN}/data/nodemanager/${SN}.state
9+
10+
if [ `jps -l | grep -c " weblogic.NodeManager"` -eq 0 ]; then
11+
echo "Error: WebLogic NodeManager process not found."
12+
exit 1
13+
fi
14+
15+
if [ ! -f ${STATEFILE} ]; then
16+
echo "Error: WebLogic Server state file not found."
17+
exit 2
18+
fi
19+
20+
cat ${STATEFILE} | cut -f 1 -d ':'
21+
exit 0
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/bash
2+
3+
# Kubernetes periodically calls this readiness probe script to determine whether
4+
# the pod should be included in load balancing. The script checks a WebLogic Server state
5+
# file which is updated by the node manager.
6+
7+
DN=${DOMAIN_NAME:-$1}
8+
SN=${SERVER_NAME:-$2}
9+
STATEFILE=/shared/domain/${DN}/servers/${SN}/data/nodemanager/${SN}.state
10+
11+
if [ `jps -l | grep -c " weblogic.NodeManager"` -eq 0 ]; then
12+
echo "Error: WebLogic NodeManager process not found."
13+
exit 1
14+
fi
15+
16+
if [ ! -f ${STATEFILE} ]; then
17+
echo "Error: WebLogic Server state file not found."
18+
exit 2
19+
fi
20+
21+
state=$(cat ${STATEFILE} | cut -f 1 -d ':')
22+
if [ "$state" != "RUNNING" ]; then
23+
echo "Not ready: WebLogic Server state: ${state}"
24+
exit 3
25+
fi
26+
exit 0
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import sys;
2+
#
3+
# +++ Start of common code for reading domain secrets
4+
5+
# Read username secret
6+
file = open('/weblogic-operator/secrets/username', 'r')
7+
admin_username = file.read()
8+
file.close()
9+
10+
# Read password secret
11+
file = open('/weblogic-operator/secrets/password', 'r')
12+
admin_password = file.read()
13+
file.close()
14+
15+
# +++ End of common code for reading domain secrets
16+
#
17+
domain_uid = sys.argv[1]
18+
server_name = sys.argv[2]
19+
domain_name = sys.argv[3]
20+
if (len(sys.argv) == 5):
21+
admin_server_url = sys.argv[4]
22+
else:
23+
admin_server_url = None
24+
25+
domain_path='/shared/domain/%s' % domain_name
26+
27+
print 'admin username is %s' % admin_username
28+
print 'domain path is %s' % domain_path
29+
print 'server name is %s' % server_name
30+
print 'admin server url is %s' % admin_server_url
31+
32+
# Encrypt the admin username and password
33+
adminUsernameEncrypted=encrypt(admin_username, domain_path)
34+
adminPasswordEncrypted=encrypt(admin_password, domain_path)
35+
36+
print 'Create boot.properties files for this server'
37+
38+
# Define the folder path
39+
secdir='%s/servers/%s/security' % (domain_path, server_name)
40+
41+
# Create the security folder (if it does not already exist)
42+
try:
43+
os.makedirs(secdir)
44+
except OSError:
45+
if not os.path.isdir(secdir):
46+
raise
47+
48+
print 'writing boot.properties to %s/servers/%s/security/boot.properties' % (domain_path, server_name)
49+
50+
bpFile=open('%s/servers/%s/security/boot.properties' % (domain_path, server_name), 'w+')
51+
bpFile.write("username=%s\n" % adminUsernameEncrypted)
52+
bpFile.write("password=%s\n" % adminPasswordEncrypted)
53+
bpFile.close()
54+
55+
service_name = domain_uid + "-" + server_name
56+
57+
# Connect to nodemanager and start server
58+
try:
59+
nmConnect(admin_username, admin_password, service_name, '5556', domain_name, domain_path, 'plain')
60+
nmStart(server_name)
61+
nmDisconnect()
62+
except WLSTException, e:
63+
nmDisconnect()
64+
print e
65+
66+
# Exit WLST
67+
exit()
68+
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#!/bin/bash
2+
3+
domain_uid=$1
4+
server_name=$2
5+
domain_name=$3
6+
as_name=$4
7+
as_port=$5
8+
as_hostname=$1-$4
9+
10+
echo "debug arguments are $1 $2 $3 $4 $5"
11+
12+
nmProp="/u01/nodemanager/nodemanager.properties"
13+
14+
# TODO: parameterize shared home and domain name
15+
export DOMAIN_HOME=/shared/domain/$domain_name
16+
17+
#
18+
# Create a folder
19+
# $1 - path of folder to create
20+
function createFolder {
21+
mkdir -m 777 -p $1
22+
if [ ! -d $1 ]; then
23+
fail "Unable to create folder $1"
24+
fi
25+
}
26+
27+
# Function to create server specific scripts and properties (e.g startup.properties, etc)
28+
# $1 - Domain UID
29+
# $2 - Server Name
30+
# $3 - Domain Name
31+
# $4 - Admin Server Hostname (only passed for managed servers)
32+
# $5 - Admin Server port (only passed for managed servers)
33+
function createServerScriptsProperties() {
34+
35+
# Create nodemanager home for the server
36+
srvr_nmdir=/u01/nodemanager
37+
createFolder ${srvr_nmdir}
38+
cp /shared/domain/$3/nodemanager/nodemanager.domains ${srvr_nmdir}
39+
cp /shared/domain/$3/bin/startNodeManager.sh ${srvr_nmdir}
40+
41+
# Edit the start nodemanager script to use the home for the server
42+
sed -i -e "s:/shared/domain/$3/nodemanager:/u01/nodemanager:g" ${srvr_nmdir}/startNodeManager.sh
43+
44+
# Create startup.properties file
45+
datadir=${DOMAIN_HOME}/servers/$2/data/nodemanager
46+
nmdir=${DOMAIN_HOME}/nodemgr_home
47+
stateFile=${datadir}/$2.state
48+
startProp=${datadir}/startup.properties
49+
if [ -f "$startProp" ]; then
50+
echo "startup.properties already exists"
51+
return 0
52+
fi
53+
54+
createFolder ${datadir}
55+
echo "# Server startup properties" > ${startProp}
56+
echo "AutoRestart=true" >> ${startProp}
57+
if [ -n "$4" ]; then
58+
echo "AdminURL=http\://$4\:$5" >> ${startProp}
59+
fi
60+
echo "RestartMax=2" >> ${startProp}
61+
echo "RotateLogOnStartup=false" >> ${startProp}
62+
echo "RotationType=bySize" >> ${startProp}
63+
echo "RotationTimeStart=00\:00" >> ${startProp}
64+
echo "RotatedFileCount=100" >> ${startProp}
65+
echo "RestartDelaySeconds=0" >> ${startProp}
66+
echo "FileSizeKB=5000" >> ${startProp}
67+
echo "FileTimeSpanFactor=3600000" >> ${startProp}
68+
echo "RestartInterval=3600" >> ${startProp}
69+
echo "NumberOfFilesLimited=true" >> ${startProp}
70+
echo "FileTimeSpan=24" >> ${startProp}
71+
echo "NMHostName=$1-$2" >> ${startProp}
72+
}
73+
74+
# Check for stale state file and remove if found"
75+
if [ -f "$stateFile" ]; then
76+
echo "Removing stale file $stateFile"
77+
rm ${stateFile}
78+
fi
79+
80+
# Create nodemanager home directory that is local to the k8s node
81+
mkdir -p /u01/nodemanager
82+
cp ${DOMAIN_HOME}/nodemanager/* /u01/nodemanager/
83+
84+
# Edit the nodemanager properties file to use the home for the server
85+
sed -i -e "s:DomainsFile=.*:DomainsFile=/u01/nodemanager/nodemanager.domains:g" /u01/nodemanager/nodemanager.properties
86+
sed -i -e "s:NodeManagerHome=.*:NodeManagerHome=/u01/nodemanager:g" /u01/nodemanager/nodemanager.properties
87+
sed -i -e "s:ListenAddress=.*:ListenAddress=$1-$2:g" /u01/nodemanager/nodemanager.properties
88+
sed -i -e "s:LogFile=.*:LogFile=/shared/logs/nodemanager-$2.log:g" /u01/nodemanager/nodemanager.properties
89+
90+
export JAVA_PROPERTIES="-DLogFile=/shared/logs/nodemanager-$server_name.log -DNodeManagerHome=/u01/nodemanager"
91+
export NODEMGR_HOME="/u01/nodemanager"
92+
93+
94+
# Create startup.properties
95+
echo "Create startup.properties"
96+
if [ -n "$4" ]; then
97+
echo "this is managed server"
98+
createServerScriptsProperties $domain_uid $server_name $domain_name $as_hostname $as_port
99+
else
100+
echo "this is admin server"
101+
createServerScriptsProperties $domain_uid $server_name $domain_name
102+
fi
103+
104+
echo "Start the nodemanager"
105+
. ${NODEMGR_HOME}/startNodeManager.sh &
106+
107+
echo "Allow the nodemanager some time to start before attempting to connect"
108+
sleep 15
109+
echo "Finished waiting for the nodemanager to start"
110+
111+
echo "Update JVM arguments"
112+
echo "Arguments=${USER_MEM_ARGS} -XX\:+UnlockExperimentalVMOptions -XX\:+UseCGroupMemoryLimitForHeap ${JAVA_OPTIONS}" >> ${startProp}
113+
114+
admin_server_t3_url=
115+
if [ -n "$4" ]; then
116+
admin_server_t3_url=t3://$domain_uid-$as_name:$as_port
117+
fi
118+
119+
echo "Start the server"
120+
wlst.sh -skipWLSModuleScanning /weblogic-operator/scripts/start-server.py $domain_uid $server_name $domain_name $admin_server_t3_url
121+
122+
echo "Wait indefinitely so that the Kubernetes pod does not exit and try to restart"
123+
while true; do sleep 60; done
124+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#
2+
# +++ Start of common code for reading domain secrets
3+
4+
# Read username secret
5+
file = open('/weblogic-operator/secrets/username', 'r')
6+
admin_username = file.read()
7+
file.close()
8+
9+
# Read password secret
10+
file = open('/weblogic-operator/secrets/password', 'r')
11+
admin_password = file.read()
12+
file.close()
13+
14+
# +++ End of common code for reading domain secrets
15+
#
16+
domain_uid = sys.argv[1]
17+
server_name = sys.argv[2]
18+
domain_name = sys.argv[3]
19+
20+
service_name = domain_uid + "-" + server_name
21+
domain_path='/shared/domain/%s' % domain_name
22+
23+
# Connect to nodemanager and stop server
24+
try:
25+
nmConnect(admin_username, admin_password, service_name, '5556', domain_name, domain_path, 'plain')
26+
except:
27+
print('Failed to connect to the NodeManager')
28+
exit(exitcode=2)
29+
30+
# Kill the server
31+
try:
32+
nmKill(server_name)
33+
except:
34+
print('Connected to the NodeManager, but failed to stop the server')
35+
exit(exitcode=2)
36+
37+
# Exit WLST
38+
nmDisconnect()
39+
exit()
40+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/bash
2+
3+
echo "Stop the server"
4+
5+
wlst.sh -skipWLSModuleScanning /weblogic-operator/scripts/stop-server.py $1 $2 $3
6+
7+
# Return status of 2 means failed to stop a server through the NodeManager.
8+
# Look to see if there is a server process that can be killed.
9+
if [ $? -eq 2 ]; then
10+
pid=$(jps -v | grep '[D]weblogic.Name=$2' | awk '{print $1}')
11+
if [ ! -z $pid ]; then
12+
echo "Killing the server process $pid"
13+
kill -15 $pid
14+
fi
15+
fi
16+
17+

0 commit comments

Comments
 (0)