Skip to content

Commit d9076a0

Browse files
anpanigrANTARYAMI.PANIGRAHI@ORACLE.COM
andauthored
Backport (release/3.4) resolution to intermittent WlsSample tests failures due to NGINX download issue (#3181)
* Resolution to intermittent WlsSample tests failures due to NGINX download issue Co-authored-by: ANTARYAMI.PANIGRAHI@ORACLE.COM <anpanigr@anpanigr-2.subnet1ad3phx.devweblogicphx.oraclevcn.com>
1 parent e8fbcb3 commit d9076a0

File tree

4 files changed

+81
-32
lines changed

4 files changed

+81
-32
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItWlsSamples.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import java.nio.file.Paths;
1111
import java.nio.file.StandardOpenOption;
1212
import java.util.Arrays;
13+
import java.util.HashMap;
1314
import java.util.List;
15+
import java.util.Map;
1416
import java.util.stream.Stream;
1517

1618
import oracle.weblogic.kubernetes.actions.impl.primitive.Command;
@@ -38,11 +40,16 @@
3840
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_VERSION;
3941
import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST;
4042
import static oracle.weblogic.kubernetes.TestConstants.KIND_REPO;
43+
import static oracle.weblogic.kubernetes.TestConstants.NGINX_INGRESS_IMAGE_DIGEST;
44+
import static oracle.weblogic.kubernetes.TestConstants.OCIR_NGINX_IMAGE_NAME;
45+
import static oracle.weblogic.kubernetes.TestConstants.OCIR_REGISTRY;
46+
import static oracle.weblogic.kubernetes.TestConstants.OCIR_SECRET_NAME;
4147
import static oracle.weblogic.kubernetes.TestConstants.OCIR_WEBLOGIC_IMAGE_TAG;
4248
import static oracle.weblogic.kubernetes.TestConstants.PV_ROOT;
4349
import static oracle.weblogic.kubernetes.TestConstants.WEBLOGIC_IMAGE_TO_USE_IN_SPEC;
4450
import static oracle.weblogic.kubernetes.actions.ActionConstants.ITTESTS_DIR;
4551
import static oracle.weblogic.kubernetes.actions.ActionConstants.MODEL_DIR;
52+
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
4653
import static oracle.weblogic.kubernetes.actions.ActionConstants.WORK_DIR;
4754
import static oracle.weblogic.kubernetes.assertions.TestAssertions.domainDoesNotExist;
4855
import static oracle.weblogic.kubernetes.assertions.TestAssertions.domainExists;
@@ -53,6 +60,7 @@
5360
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
5461
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getDateAndTimeStamp;
5562
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
63+
import static oracle.weblogic.kubernetes.utils.FileUtils.generateFileFromTemplate;
5664
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
5765
import static oracle.weblogic.kubernetes.utils.ImageUtils.createOcirRepoSecret;
5866
import static oracle.weblogic.kubernetes.utils.ImageUtils.createSecretForBaseImages;
@@ -140,6 +148,7 @@ public static void initAll(@Namespaces(4) List<String> namespaces) {
140148
logger.info("Assign a unique namespace for Nginx controller");
141149
assertNotNull(namespaces.get(3), "Namespace is null");
142150
nginxNamespace = namespaces.get(3);
151+
createOcirRepoSecret(nginxNamespace);
143152

144153
// create pull secrets for WebLogic image when running in non Kind Kubernetes cluster
145154
// this secret is used only for non-kind cluster
@@ -376,9 +385,19 @@ void testTraefikIngressController() {
376385
@DisplayName("Manage Nginx Ingress Controller with setupLoadBalancer")
377386
void testNginxIngressController() {
378387
setupSample();
388+
Map<String, String> templateMap = new HashMap<>();
389+
templateMap.put("TEST_IMAGES_REPO", OCIR_REGISTRY);
390+
templateMap.put("TEST_NGINX_IMAGE_NAME ", OCIR_NGINX_IMAGE_NAME);
391+
templateMap.put("NGINX_INGRESS_IMAGE_DIGEST",NGINX_INGRESS_IMAGE_DIGEST);
392+
templateMap.put("TEST_IMAGES_REPO_SECRET_NAME", OCIR_SECRET_NAME);
393+
Path srcPropFile = Paths.get(RESOURCE_DIR, "nginx.template.properties");
394+
Path targetPropFile = assertDoesNotThrow(
395+
() -> generateFileFromTemplate(srcPropFile.toString(), "nginx.properties", templateMap));
396+
logger.info("Generated nginx.properties file path is {0}", targetPropFile);
379397
Path scriptBase = Paths.get(tempSamplePath.toString(), "charts/util");
380-
setupLoadBalancer(scriptBase, "nginx", " -c -n " + nginxNamespace);
381-
setupLoadBalancer(scriptBase, "nginx", " -d -n " + nginxNamespace);
398+
setupLoadBalancer(scriptBase, "nginx", " -c -n " + nginxNamespace
399+
+ " -p " + targetPropFile.toString());
400+
setupLoadBalancer(scriptBase, "nginx", " -d -s -n " + nginxNamespace);
382401
}
383402

384403
// Function to execute domain lifecyle scripts

integration-tests/src/test/resources/bash-scripts/images.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,7 @@ k8s.gcr.io/ingress-nginx/controller:v1.2.0;weblogick8s/test-images/ingress-nginx
5858

5959
# Oracle DB Operator Image
6060
container-registry.oracle.com/database/operator:0.1.0;weblogick8s/test-images/database/operator:0.1.0
61+
62+
# ElasticSearch Image
63+
elasticsearch:7.8.1;weblogick8s/test-images/docker/elasticsearch:7.8.1
64+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--set controller.image.registry=TEST_IMAGES_REPO --set controller.image.image=TEST_NGINX_IMAGE_NAME --set controller.image.digest=NGINX_INGRESS_IMAGE_DIGEST --set imagePullSecrets[0].name=TEST_IMAGES_REPO_SECRET_NAME

kubernetes/samples/charts/util/setupLoadBalancer.sh

Lines changed: 55 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
# Copyright (c) 2018, 2022, Oracle and/or its affiliates.
33
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
44

5-
# This script create or delete an Ingress controller.
5+
# This script create or delete an Ingress controller.
66
# The script supports ingress controllers: Traefik and Nginx.
77

88
set -eu
99
set -o pipefail
1010

1111
UTILDIR="$(dirname "$(readlink -f "$0")")"
1212

13-
#Kubernetes command line interface.
14-
#Default is 'kubectl' if KUBERNETES_CLI env variable is not set.
13+
#Kubernetes command line interface.
14+
#Default is 'kubectl' if KUBERNETES_CLI env variable is not set.
1515
kubernetesCli=${KUBERNETES_CLI:-kubectl}
1616

1717
# https://github.com/containous/traefik/releases
@@ -28,6 +28,8 @@ namespace=""
2828
release=""
2929
repository=""
3030
chart=""
31+
ingressPropFile="ingress.properties"
32+
skipDeleteNamespace="false"
3133

3234
# timestamp
3335
# purpose: echo timestamp in the form yyyy-mm-ddThh:mm:ss.nnnnnnZ
@@ -60,6 +62,8 @@ usage() {
6062
-t <ingress type> : ingress type traefik or nginx [required]
6163
-v <ingress version> : ingress release version
6264
-n <namespace> : ingress namespace
65+
-p <ingress-prop> : extra ingress helm properties
66+
-s : skip deleting ingress namespace
6367
-m <kubernetes_cli> : Kubernetes command line interface. Default is 'kubectl' if KUBERNETES_CLI env variable is not set. Otherwise default is the value of KUBERNETES_CLI env variable.
6468
-h : print help
6569
EOF
@@ -68,26 +72,37 @@ exit $1
6872

6973
action_chosen=false
7074

71-
while getopts "cdt:n:r:v:h" opt; do
75+
while getopts "scdt:p:n:r:v:h" opt; do
7276
case $opt in
7377
c) action="create"
7478
if [ $action_chosen = "true" ]; then
7579
printError " Both -c (create) and -d (delete) option can not be specified for ingress controller."
7680
usage 1
77-
fi
81+
fi
7882
action_chosen=true
7983
;;
8084
d) action="delete"
8185
if [ $action_chosen = "true" ]; then
8286
printError " Both -c (create) and -d (delete) option can not be specified for ingress controller."
8387
usage 1
84-
fi
88+
fi
8589
action_chosen=true
8690
;;
91+
s) skipDeleteNamespace="true"
92+
printInfo "Will Skip the Namespace Deletion"
93+
;;
8794
n) namespace="${OPTARG}"
8895
;;
8996
t) ingressType="${OPTARG}"
9097
;;
98+
p) ingressPropFile="${OPTARG}"
99+
if [ ${action} == "create" ]; then
100+
if [ ! -f ${ingressPropFile} ]; then
101+
printError "[create] action is choosen but the custom ingress property file [${ingressPropFile}] is missing."
102+
usage 1
103+
fi
104+
fi
105+
;;
91106
v) release="${OPTARG}"
92107
;;
93108
m) kubernetesCli="${OPTARG}"
@@ -100,23 +115,23 @@ while getopts "cdt:n:r:v:h" opt; do
100115
done
101116

102117
if [ "x${action}" == "x" ]; then
103-
printError "You must specify either -c (create) or -d (delete) ingress controller"
118+
printError "You must specify either -c (create) or -d (delete) ingress controller"
104119
usage 1
105120
fi
106121

107122
if [ "x${ingressType}" == "x" ]; then
108123
printError "You must specify ingress type (traefik or nginx) thru -t option"
109124
usage 1
110-
fi
125+
fi
111126

112-
case ${ingressType} in
113-
"traefik")
127+
case ${ingressType} in
128+
"traefik")
114129
[[ -z "${release}" ]] && release="${DefaultTraefikVersion}"
115130
[[ -z "${namespace}" ]] && namespace="${ingressType}"
116131
repository="traefik"
117132
chart="traefik-release"
118133
;;
119-
"nginx")
134+
"nginx")
120135
[[ -z "${release}" ]] && release="${DefaultNginxVersion}"
121136
[[ -z "${namespace}" ]] && namespace="${ingressType}"
122137
repository="ingress-nginx"
@@ -163,12 +178,12 @@ waitForIngressPod() {
163178
if [ $? != 0 ]; then
164179
printError "${type} ingress controller pod not READY in state in 5 min"
165180
exit -1;
166-
else
181+
else
167182
ipod=$(${kubernetesCli} get pod -n ${ns} -l app.kubernetes.io/instance=${type}-release -o jsonpath="{.items[0].metadata.name}")
168183
${kubernetesCli} get po/${ipod} -n ${ns}
169184
helm list -n ${ns}
170-
fi
171-
}
185+
fi
186+
}
172187

173188
createTraefik() {
174189
ns=${1}
@@ -184,13 +199,15 @@ createTraefik() {
184199
printInfo "Traefik chart repository is already added."
185200
fi
186201

202+
# load the extra set of helm values if provided thru file using -p option
187203
if [ "$(helm list -q -n ${ns} | grep $chart | wc -l)" = 0 ]; then
188204
printInfo "Installing Traefik controller on namespace ${ns}"
189205
purgeDefaultResources || true
190206
helm install $chart traefik/traefik --namespace ${ns} \
207+
$(cat ${ingressPropFile} 2>&- || false ) \
191208
--set image.tag=${rel} \
192-
--values ${UTILDIR}/../traefik/values.yaml
193-
if [ $? != 0 ]; then
209+
--values ${UTILDIR}/../traefik/values.yaml
210+
if [ $? != 0 ]; then
194211
printError "Helm installation of the Traefik ingress controller failed."
195212
exit -1;
196213
fi
@@ -202,46 +219,49 @@ createTraefik() {
202219
tpod=$(${kubernetesCli} -o name get po -n ${ns})
203220
traefik_image=$(${kubernetesCli} get ${tpod} -n ${ns} -o jsonpath='{.spec.containers[0].image}')
204221
printInfo "Traefik image chosen [${traefik_image}]"
222+
helm get values $chart --namespace ${ns}
205223
}
206224

207225
# Remove ingress related resources from default Namespace ( if any )
208226
purgeDefaultResources() {
209227
printInfo "Remove ingress related resources from default Namespace (if any)"
210228
croles=$(${kubernetesCli} get ClusterRole | grep ${chart} | awk '{print $1}')
211-
for crole in ${croles}; do
229+
for crole in ${croles}; do
212230
printInfo "Deleting ClusterRole ${crole} from default Namespace"
213-
${kubernetesCli} delete ClusterRole ${crole}
231+
${kubernetesCli} delete ClusterRole ${crole}
214232
done
215233

216234
crbs=$(${kubernetesCli} get ClusterRoleBinding | grep ${chart} | awk '{print $1}')
217-
for crb in ${crbs}; do
235+
for crb in ${crbs}; do
218236
printInfo "Deleting ClusterRoleBinding ${crb} from default Namespace"
219-
${kubernetesCli} delete ClusterRoleBinding ${crb}
237+
${kubernetesCli} delete ClusterRoleBinding ${crb}
220238
done
221239

222240
vwcs=$(${kubernetesCli} get ValidatingWebhookConfiguration | grep ${chart} | awk '{print $1}')
223-
for vwc in ${vwcs}; do
241+
for vwc in ${vwcs}; do
224242
printInfo "Deleting ValidatingWebhookConfiguration ${vwc} from default Namespace"
225-
${kubernetesCli} delete ValidatingWebhookConfiguration ${vwc}
243+
${kubernetesCli} delete ValidatingWebhookConfiguration ${vwc}
226244
done
227245
}
228246

229247
deleteIngress() {
230248
type=${1}
231249
ns=${2}
232250
if [ "$(helm list --namespace $ns | grep $chart | wc -l)" = 1 ]; then
233-
printInfo "Deleting ${type} controller from namespace $ns"
251+
printInfo "Deleting ${type} controller from namespace $ns"
234252
helm uninstall --namespace $ns $chart
235253
${kubernetesCli} wait --namespace ${ns} \
236254
--for=delete pod \
237255
--selector=app.kubernetes.io/instance=${type}-release \
238256
--timeout=120s
239-
${kubernetesCli} delete ns ${ns}
240-
${kubernetesCli} wait --for=delete namespace ${ns} --timeout=60s || true
257+
if [ ${skipDeleteNamespace} == "false" ]; then
258+
${kubernetesCli} delete ns ${ns}
259+
${kubernetesCli} wait --for=delete namespace ${ns} --timeout=60s || true
260+
fi
241261
printInfo "Remove ${type} chart repository [${repository}] "
242262
helm repo remove ${repository}
243263
else
244-
printInfo "${type} controller has already been deleted from namespace [${ns}] or not installed in the namespace [${ns}]."
264+
printInfo "${type} controller has already been deleted from namespace [${ns}] or not installed in the namespace [${ns}]."
245265
fi
246266

247267
if [ "${ingressType}" = traefik ]; then
@@ -256,7 +276,7 @@ createNginx() {
256276
release=${2}
257277
chart="nginx-release"
258278
createNameSpace $ns || true
259-
printInfo "Creating Nginx controller on namespace ${ns}"
279+
printInfo "Creating Nginx controller on namespace ${ns}"
260280

261281
if [ "$(helm search repo ingress-nginx | grep nginx | wc -l)" = 0 ]; then
262282
printInfo "Add Nginx chart repository"
@@ -265,11 +285,15 @@ createNginx() {
265285
printInfo "Nginx chart repository is already added."
266286
fi
267287

288+
# load the extra set of helm values if provided thru file using -p option
268289
if [ "$(helm list --namespace ${ns} | grep $chart | wc -l)" = 0 ]; then
269290
purgeDefaultResources || true
270291
helm install $chart ingress-nginx/ingress-nginx \
271-
--set "controller.admissionWebhooks.enabled=false" \
272-
--namespace ${ns} --version ${release}
292+
$(cat ${ingressPropFile} 2>&- || false ) \
293+
--set "controller.admissionWebhooks.enabled=false" \
294+
--namespace ${ns} --version ${release} \
295+
--set "controller.image.pullPolicy=IfNotPresent" \
296+
--set "controller.image.tag=v1.2.0"
273297
if [ $? != 0 ]; then
274298
printError "Helm installation of the Nginx ingress controller failed."
275299
exit -1;
@@ -282,6 +306,7 @@ createNginx() {
282306
waitForIngressPod nginx ${ns}
283307
tpod=$(${kubernetesCli} -o name get po -n ${ns})
284308
${kubernetesCli} describe ${tpod} -n ${ns}
309+
helm get values $chart -n ${ns}
285310
}
286311

287312
main() {
@@ -303,4 +328,4 @@ main() {
303328
fi
304329
}
305330

306-
main "$@"
331+
main "$@"

0 commit comments

Comments
 (0)