Skip to content

Commit 838bde2

Browse files
authored
Merge pull request #143 from oracle/startup-control
Add support in domain inputs for startupControl
2 parents 1685d69 + 30b9a20 commit 838bde2

File tree

5 files changed

+78
-24
lines changed

5 files changed

+78
-24
lines changed

kubernetes/create-domain-job-inputs.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ domainName: base_domain
1717
# This id must be lowercase and unique across all domains in a Kubernetes cluster
1818
domainUid: domain1
1919

20+
# Determines which WebLogic Servers the Operator will start up
21+
# Legal values are "NONE", "ALL", "ADMIN", "SPECIFIED", or "AUTO"
22+
startupControl: AUTO
23+
2024
# Cluster name
2125
clusterName: cluster-1
2226

kubernetes/create-domain-job.sh

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,33 @@ function validateImagePullSecret {
171171
failIfValidationErrors
172172
}
173173

174+
#
175+
# Function to validate the server startup control value
176+
#
177+
function validateStartupControl {
178+
STARTUP_CONTROL_NONE="NONE"
179+
STARTUP_CONTROL_ALL="ALL"
180+
STARTUP_CONTROL_ADMIN="ADMIN"
181+
STARTUP_CONTROL_SPECIFIED="SPECIFIED"
182+
STARTUP_CONTROL_AUTO="AUTO"
183+
184+
case ${startupControl} in
185+
${STARTUP_CONTROL_NONE})
186+
;;
187+
${STARTUP_CONTROL_ALL})
188+
;;
189+
${STARTUP_CONTROL_ADMIN})
190+
;;
191+
${STARTUP_CONTROL_SPECIFIED})
192+
;;
193+
${STARTUP_CONTROL_AUTO})
194+
;;
195+
*)
196+
validationError "Invalid valid for startupControl: ${startupControl}. Valid values are 'NONE', 'ALL', 'ADMIN', 'SPECIFIED', and 'AUTO'."
197+
;;
198+
esac
199+
}
200+
174201
#
175202
# Function to setup the environment to run the create domain job
176203
#
@@ -231,7 +258,7 @@ function initialize {
231258
validateInputParamsSpecified adminPort adminServerName createDomainScript domainName domainUid clusterName managedServerCount managedServerStartCount managedServerNameBase
232259
validateInputParamsSpecified managedServerPort persistencePath persistenceSize persistenceVolumeClaimName persistenceVolumeName
233260
validateInputParamsSpecified productionModeEnabled secretName t3ChannelPort exposeAdminT3Channel adminNodePort exposeAdminNodePort
234-
validateInputParamsSpecified namespace loadBalancer loadBalancerWebPort loadBalancerAdminPort loadBalancer javaOptions
261+
validateInputParamsSpecified namespace loadBalancer loadBalancerWebPort loadBalancerAdminPort loadBalancer javaOptions startupControl
235262
validateDomainUid
236263
validateClusterName
237264
validateStorageClass
@@ -240,6 +267,7 @@ function initialize {
240267
validateSecretName
241268
validateImagePullSecretName
242269
validateLoadBalancer
270+
validateStartupControl
243271
failIfValidationErrors
244272
}
245273

@@ -323,6 +351,7 @@ function createYamlFiles {
323351
sed -i -e "s:%EXPOSE_ADMIN_PORT_PREFIX%:${exposeAdminNodePortPrefix}:g" ${dcrOutput}
324352
sed -i -e "s:%ADMIN_NODE_PORT%:${adminNodePort}:g" ${dcrOutput}
325353
sed -i -e "s:%JAVA_OPTIONS%:${javaOptions}:g" ${dcrOutput}
354+
sed -i -e "s:%STARTUP_CONTROL%:${startupControl}:g" ${dcrOutput}
326355

327356
# Traefik deployment file
328357
cp ${traefikDeployInput} ${traefikDeployOutput}
@@ -384,7 +413,7 @@ function createDomain {
384413

385414
echo "Waiting for the job to complete..."
386415
JOB_STATUS="0"
387-
max=10
416+
max=20
388417
count=0
389418
while [ "$JOB_STATUS" != "Completed" -a $count -lt $max ] ; do
390419
sleep 30

kubernetes/internal/domain-custom-resource-template.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ spec:
3030
asName: "%ADMIN_SERVER_NAME%"
3131
# The Admin Server's ListenPort
3232
asPort: %ADMIN_PORT%
33-
# startupControl legal values are "ALL", "ADMIN", "SPECIFIED", or "AUTO"
33+
# startupControl legal values are "NONE", "ALL", "ADMIN", "SPECIFIED", or "AUTO"
3434
# This determines which WebLogic Servers the Operator will start up when it discovers this Domain
3535
# - "ALL" will start up all defined servers
3636
# - "ADMIN" will start up only the AdminServer (no managed servers will be started)
3737
# - "SPECIFIED" will start the AdminServer and then will look at the "serverStartup" and
3838
# "clusterStartup" entries below to work out which servers to start
3939
# - "AUTO" will start the servers as with "SPECIFIED", but then also start servers from
4040
# other clusters up to the replicas count
41-
startupControl: "AUTO"
41+
startupControl: "%STARTUP_CONTROL%"
4242
# serverStartup is used to list the desired behavior for starting servers. The Operator will
4343
# use this field only if startupControl is set to "SPECIFIED" or "AUTO". You may provide a list of
4444
# entries, each entry should contain the keys should below:

src/integration-tests/bash/cleanup.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
# Phase 4: Delete the local test output directory.
4242
#
4343

44-
DOMAINS=(domain1 domain2 domain3 domain4)
45-
DOMAIN_NAMESPACES=(default default test1 test2)
44+
DOMAINS=(domain1 domain2 domain3 domain4 domain5)
45+
DOMAIN_NAMESPACES=(default default test1 test2 default)
4646
DCOUNT=${#DOMAINS[@]}
4747

4848
OPER_NAMESPACES=(weblogic-operator-1 weblogic-operator-2)

src/integration-tests/bash/run.sh

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ function test_second_operator {
635635
declare_test_pass
636636
}
637637

638-
# dom_define DOM_KEY OP_KEY NAMESPACE DOMAIN_UID WL_CLUSTER_NAME MS_BASE_NAME ADMIN_PORT ADMIN_WLST_PORT ADMIN_NODE_PORT MS_PORT LOAD_BALANCER_WEB_PORT LOAD_BALANCER_ADMIN_PORT
638+
# dom_define DOM_KEY OP_KEY NAMESPACE DOMAIN_UID STARTUP_CONTROL WL_CLUSTER_NAME MS_BASE_NAME ADMIN_PORT ADMIN_WLST_PORT ADMIN_NODE_PORT MS_PORT LOAD_BALANCER_WEB_PORT LOAD_BALANCER_ADMIN_PORT
639639
# Sets up a table of domain values: all of the above, plus TMP_DIR which is derived.
640640
#
641641
# dom_get DOM_KEY <value>
@@ -651,21 +651,22 @@ function test_second_operator {
651651
# echo Defined operator $opkey with `dom_echo_all $DOM_KEY`
652652
#
653653
function dom_define {
654-
if [ "$#" != 12 ] ; then
655-
fail "requires 12 parameters: DOM_KEY OP_KEY NAMESPACE DOMAIN_UID WL_CLUSTER_NAME MS_BASE_NAME ADMIN_PORT ADMIN_WLST_PORT ADMIN_NODE_PORT MS_PORT LOAD_BALANCER_WEB_PORT LOAD_BALANCER_ADMIN_PORT"
654+
if [ "$#" != 13 ] ; then
655+
fail "requires 13 parameters: DOM_KEY OP_KEY NAMESPACE DOMAIN_UID STARTUP_CONTROL WL_CLUSTER_NAME MS_BASE_NAME ADMIN_PORT ADMIN_WLST_PORT ADMIN_NODE_PORT MS_PORT LOAD_BALANCER_WEB_PORT LOAD_BALANCER_ADMIN_PORT"
656656
fi
657657
local DOM_KEY="`echo \"${1}\" | sed 's/-/_/g'`"
658658
eval export DOM_${DOM_KEY}_OP_KEY="$2"
659659
eval export DOM_${DOM_KEY}_NAMESPACE="$3"
660660
eval export DOM_${DOM_KEY}_DOMAIN_UID="$4"
661-
eval export DOM_${DOM_KEY}_WL_CLUSTER_NAME="$5"
662-
eval export DOM_${DOM_KEY}_MS_BASE_NAME="$6"
663-
eval export DOM_${DOM_KEY}_ADMIN_PORT="$7"
664-
eval export DOM_${DOM_KEY}_ADMIN_WLST_PORT="$8"
665-
eval export DOM_${DOM_KEY}_ADMIN_NODE_PORT="$9"
666-
eval export DOM_${DOM_KEY}_MS_PORT="${10}"
667-
eval export DOM_${DOM_KEY}_LOAD_BALANCER_WEB_PORT="${11}"
668-
eval export DOM_${DOM_KEY}_LOAD_BALANCER_ADMIN_PORT="${12}"
661+
eval export DOM_${DOM_KEY}_STARTUP_CONTROL="$5"
662+
eval export DOM_${DOM_KEY}_WL_CLUSTER_NAME="$6"
663+
eval export DOM_${DOM_KEY}_MS_BASE_NAME="$7"
664+
eval export DOM_${DOM_KEY}_ADMIN_PORT="$8"
665+
eval export DOM_${DOM_KEY}_ADMIN_WLST_PORT="$9"
666+
eval export DOM_${DOM_KEY}_ADMIN_NODE_PORT="${10}"
667+
eval export DOM_${DOM_KEY}_MS_PORT="${11}"
668+
eval export DOM_${DOM_KEY}_LOAD_BALANCER_WEB_PORT="${12}"
669+
eval export DOM_${DOM_KEY}_LOAD_BALANCER_ADMIN_PORT="${13}"
669670

670671
# derive TMP_DIR $RESULT_DIR/$NAMESPACE-$DOMAIN_UID :
671672
eval export DOM_${DOM_KEY}_TMP_DIR="$RESULT_DIR/$3-$4"
@@ -693,6 +694,7 @@ function run_create_domain_job {
693694

694695
local NAMESPACE="`dom_get $1 NAMESPACE`"
695696
local DOMAIN_UID="`dom_get $1 DOMAIN_UID`"
697+
local STARTUP_CONTROL="`dom_get $1 STARTUP_CONTROL`"
696698
local WL_CLUSTER_NAME="`dom_get $1 WL_CLUSTER_NAME`"
697699
local MS_BASE_NAME="`dom_get $1 MS_BASE_NAME`"
698700
local ADMIN_PORT="`dom_get $1 ADMIN_PORT`"
@@ -767,6 +769,7 @@ function run_create_domain_job {
767769
sed -i -e "s/^loadBalancerWebPort:.*/loadBalancerWebPort: $LOAD_BALANCER_WEB_PORT/" ${tmp_dir}/create-domain-job-inputs.yaml
768770
sed -i -e "s/^loadBalancerAdminPort:.*/loadBalancerAdminPort: $LOAD_BALANCER_ADMIN_PORT/" ${tmp_dir}/create-domain-job-inputs.yaml
769771
sed -i -e "s/^javaOptions:.*/javaOptions: $WLS_JAVA_OPTIONS/" ${tmp_dir}/create-domain-job-inputs.yaml
772+
sed -i -e "s/^startupControl:.*/startupControl: $STARTUP_CONTROL/" ${tmp_dir}/create-domain-job-inputs.yaml
770773

771774
# we will test cluster scale up and down in domain1 and domain4
772775
if [ "$DOMAIN_UID" == "domain1" ] || [ "$DOMAIN_UID" == "domain4" ] ; then
@@ -1890,6 +1893,7 @@ function verify_domain_created {
18901893

18911894
local NAMESPACE="`dom_get $1 NAMESPACE`"
18921895
local DOMAIN_UID="`dom_get $1 DOMAIN_UID`"
1896+
local STARTUP_CONTROL="`dom_get $1 STARTUP_CONTROL`"
18931897
local MS_BASE_NAME="`dom_get $1 MS_BASE_NAME`"
18941898

18951899
trace "verify domain $DOMAIN_UID in $NAMESPACE namespace"
@@ -1909,6 +1913,11 @@ function verify_domain_created {
19091913
trace "verify the service and pod of admin server"
19101914
verify_service_and_pod_created $DOM_KEY 0
19111915

1916+
local verify_as_only=false
1917+
if [ "$STARTUP_CONTROL" = "ADMIN" ] ; then
1918+
verify_as_only=true
1919+
fi
1920+
19121921
local replicas=`get_cluster_replicas $DOM_KEY`
19131922

19141923
trace "verify $replicas number of managed servers for creation"
@@ -1917,15 +1926,22 @@ function verify_domain_created {
19171926
do
19181927
local MS_NAME="$DOMAIN_UID-${MS_BASE_NAME}$i"
19191928
trace "verify service and pod of server $MS_NAME"
1920-
verify_service_and_pod_created $DOM_KEY $i
1929+
if [ "${verify_as_only}" = "true" ]; then
1930+
verify_pod_deleted $DOM_KEY $i
1931+
else
1932+
verify_service_and_pod_created $DOM_KEY $i
1933+
fi
19211934
done
19221935

19231936
# Check if we got exepcted number of managed servers running
19241937
local ms_name_common=${DOMAIN_UID}-${MS_BASE_NAME}
19251938
local pod_count=`kubectl get pods -n $NAMESPACE |grep "^${ms_name_common}" | wc -l `
1926-
if [ ${pod_count:=Error} != $replicas ] ; then
1939+
if [ ${pod_count:=Error} != $replicas ] && [ "${verify_as_only}" != "true" ] ; then
19271940
fail "ERROR: expected $replicas number of managed servers running, but got $pod_count, exiting!"
19281941
fi
1942+
if [ ${pod_count:=Error} != 0 ] && [ "${verify_as_only}" = "true" ] ; then
1943+
fail "ERROR: expected none of managed servers running, but got $pod_count, exiting!"
1944+
fi
19291945
}
19301946

19311947
function verify_pod_deleted {
@@ -2472,11 +2488,12 @@ function test_suite {
24722488
op_define oper1 weblogic-operator-1 "default,test1" 31001
24732489
op_define oper2 weblogic-operator-2 test2 32001
24742490

2475-
# DOM_KEY OP_KEY NAMESPACE DOMAIN_UID WL_CLUSTER_NAME MS_BASE_NAME ADMIN_PORT ADMIN_WLST_PORT ADMIN_NODE_PORT MS_PORT LOAD_BALANCER_WEB_PORT LOAD_BALANCER_ADMIN_PORT
2476-
dom_define domain1 oper1 default domain1 cluster-1 managed-server 7001 30012 30701 8001 30305 30315
2477-
dom_define domain2 oper1 default domain2 cluster-1 managed-server 7011 30031 30702 8021 30306 30316
2478-
dom_define domain3 oper1 test1 domain3 cluster-1 managed-server 7021 30041 30703 8031 30307 30317
2479-
dom_define domain4 oper2 test2 domain4 cluster-1 managed-server 7041 30051 30704 8041 30308 30318
2491+
# DOM_KEY OP_KEY NAMESPACE DOMAIN_UID STARTUP_CONTROL WL_CLUSTER_NAME MS_BASE_NAME ADMIN_PORT ADMIN_WLST_PORT ADMIN_NODE_PORT MS_PORT LOAD_BALANCER_WEB_PORT LOAD_BALANCER_ADMIN_PORT
2492+
dom_define domain1 oper1 default domain1 AUTO cluster-1 managed-server 7001 30012 30701 8001 30305 30315
2493+
dom_define domain2 oper1 default domain2 AUTO cluster-1 managed-server 7011 30031 30702 8021 30306 30316
2494+
dom_define domain3 oper1 test1 domain3 AUTO cluster-1 managed-server 7021 30041 30703 8031 30307 30317
2495+
dom_define domain4 oper2 test2 domain4 AUTO cluster-1 managed-server 7041 30051 30704 8041 30308 30318
2496+
dom_define domain5 oper1 default domain5 ADMIN cluster-1 managed-server 7051 30061 30705 8051 30309 30319
24802497

24812498
# create namespaces for domains (the operator job creates a namespace if needed)
24822499
# TODO have the op_define commands themselves create target namespace if it doesn't already exist, or test if the namespace creation is needed in the first place, and if so, ask MikeG to create them as part of domain create job
@@ -2541,6 +2558,10 @@ function test_suite {
25412558
# cycle domain1 down and back up, plus verify no impact on domain4
25422559
test_domain_lifecycle domain1 domain4
25432560

2561+
# create another domain in the default namespace with startupControl="ADMIN", and verify that only admin server is created
2562+
run_create_domain_job domain5
2563+
verify_domain_created domain5
2564+
25442565
# test managed server 1 pod auto-restart
25452566
test_wls_liveness_probe domain1
25462567

0 commit comments

Comments
 (0)