Skip to content

Commit 0be2640

Browse files
initial traefik ingress-per-domain integ test
1 parent b0cdc0c commit 0be2640

File tree

8 files changed

+264
-2
lines changed

8 files changed

+264
-2
lines changed

integration-tests/src/test/java/oracle/kubernetes/operator/ITOperator.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class ITOperator extends BaseTest {
5151
private static String domain10YamlFile = "domain10.yaml";
5252
private static String domain11YamlFile = "domain11.yaml";
5353
private static String domain12YamlFile = "domain12.yaml";
54+
private static String domainTraefikIngressYamlFile = "domainTraefikIngress.yaml";
5455

5556
// property file used to configure constants for integration tests
5657
private static String appPropsFile = "OperatorIT.properties";
@@ -655,6 +656,39 @@ public void testCustomSitConfigOverrides() throws Exception {
655656
logger.info("SUCCESS - testCustomSitConfigOverrides");
656657
}
657658

659+
/**
660+
* Create operator and create domain with TRAEFIK Ingress-per-domain load balancer and verify
661+
* domain is started. Verify web app load balancing by accessing the webapp using
662+
* loadBalancerWebPort. Shutdwn domain by deleting domain CRD using yaml
663+
*
664+
* @throws Exception
665+
*/
666+
@Test
667+
public void testTraefikIngressPerDomainInDefaultNS() throws Exception {
668+
Assume.assumeFalse(QUICKTEST);
669+
670+
logTestBegin("testTraefikIngressPerDomainInDefaultNS");
671+
logger.info("Creating Domain domainTraefikIngress & verifing the domain creation");
672+
Domain domainTraefikIngress = null;
673+
boolean testCompletedSuccessfully = false;
674+
if (operator1 == null) {
675+
operator1 = TestUtils.createOperator(op1YamlFile);
676+
}
677+
try {
678+
// create domainTraefikIngress
679+
domainTraefikIngress = testDomainCreation(domainTraefikIngressYamlFile);
680+
domainTraefikIngress.verifyDomainCreated();
681+
testBasicUseCases(domainTraefikIngress);
682+
testCompletedSuccessfully = true;
683+
} finally {
684+
if (domainTraefikIngress != null && (JENKINS || testCompletedSuccessfully)) {
685+
logger.info("Destroy domainTraefikIngress");
686+
domainTraefikIngress.destroy();
687+
}
688+
}
689+
logger.info("SUCCESS - testTraefikIngressPerDomainInDefaultNS");
690+
}
691+
658692
private Domain testAdvancedUseCasesForADomain(Operator operator, Domain domain) throws Exception {
659693
if (!SMOKETEST) {
660694
testClusterScaling(operator, domain);

integration-tests/src/test/java/oracle/kubernetes/operator/utils/Domain.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public class Domain {
5555
private int loadBalancerWebPort = 30305;
5656
private String userProjectsDir = "";
5757
private String projectRoot = "";
58+
private boolean ingressPerDomain;
5859

5960
private String createDomainScript = "";
6061
private String inputTemplateFile = "";
@@ -811,15 +812,25 @@ private void callCreateDomainScript(String outputDir) throws Exception {
811812

812813
private void createLoadBalancer() throws Exception {
813814
Map<String, Object> lbMap = new HashMap<String, Object>();
814-
lbMap.put("name", "traefik-hostrouting-" + domainUid);
815+
// lbMap.put("name", "traefik-hostrouting-" + domainUid);
815816
lbMap.put("domainUID", domainUid);
816817
lbMap.put("namespace", domainNS);
817818
lbMap.put("host", domainUid + ".org");
818819
lbMap.put("serviceName", domainUid + "-cluster-" + domainMap.get("clusterName"));
819820
lbMap.put("loadBalancer", domainMap.getOrDefault("loadBalancer", loadBalancer));
821+
lbMap.put("ingressPerDomain", ingressPerDomain);
822+
lbMap.put("clusterName", domainMap.get("clusterName"));
820823

821824
loadBalancer = (String) lbMap.get("loadBalancer");
822825

826+
if (loadBalancer.equals("TRAEFIK") && !ingressPerDomain) {
827+
lbMap.put("name", "traefik-hostrouting-" + domainUid);
828+
}
829+
830+
if (loadBalancer.equals("TRAEFIK") && ingressPerDomain) {
831+
lbMap.put("name", "traefik-ingress-" + domainUid);
832+
}
833+
823834
if (domainUid.equals("domain7") && loadBalancer.equals("APACHE")) {
824835
/* lbMap.put("loadBalancerAppPrepath", "/weblogic");
825836
lbMap.put("loadBalancerExposeAdminPort", new Boolean(true)); */
@@ -983,6 +994,11 @@ private void initialize(String inputYaml) throws Exception {
983994
clusterName = (String) domainMap.get("clusterName");
984995
clusterType = (String) domainMap.get("clusterType");
985996
serverStartPolicy = (String) domainMap.get("serverStartPolicy");
997+
if (domainMap.containsKey("ingressPerDomain")) {
998+
ingressPerDomain = ((Boolean) domainMap.get("ingressPerDomain")).booleanValue();
999+
}
1000+
1001+
logger.info("ingressPerDomain for this domain is: " + ingressPerDomain);
9861002

9871003
if (exposeAdminT3Channel) {
9881004
domainMap.put("t3PublicAddress", TestUtils.getHostName());

integration-tests/src/test/java/oracle/kubernetes/operator/utils/LoadBalancer.java

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,21 @@ public LoadBalancer(Map lbMap) throws Exception {
3333
if (result.exitValue() != 0) {
3434
createTraefikLoadBalancer();
3535
}
36-
createTraefikHostRouting();
36+
37+
if (lbMap.get("ingressPerDomain") == null
38+
|| !((Boolean) lbMap.get("ingressPerDomain")).booleanValue()) {
39+
if (lbMap.get("loadBalancer").equals("TRAEFIK")) {
40+
logger.info("Is going to createTraefikHostRouting");
41+
createTraefikHostRouting();
42+
}
43+
}
44+
45+
if (lbMap.get("ingressPerDomain") != null
46+
&& ((Boolean) lbMap.get("ingressPerDomain")).booleanValue())
47+
if (lbMap.get("loadBalancer").equals("TRAEFIK")) {
48+
logger.info("Is going to createTraefikIngressPerDomain");
49+
createTraefikIngressPerDomain();
50+
}
3751
}
3852
}
3953

@@ -84,6 +98,80 @@ public void createTraefikHostRouting() throws Exception {
8498
}
8599
}
86100

101+
private void createTraefikIngressPerDomain() throws Exception {
102+
upgradeTraefikNamespace();
103+
createTraefikIngress();
104+
}
105+
106+
private void upgradeTraefikNamespace() throws Exception {
107+
108+
String chartDir = BaseTest.getProjectRoot() + "/integration-tests/src/test/resources/charts";
109+
110+
// StringBuffer cmd = new StringBuffer("cd ");
111+
// cmd.append(chartDir).append(" && helm upgrade ");
112+
StringBuffer cmd = new StringBuffer("helm upgrade ");
113+
cmd.append("--reuse-values ")
114+
.append("--set ")
115+
.append("\"")
116+
.append("kubernetes.namespaces={traefik,")
117+
.append(lbMap.get("namespace"))
118+
.append("}")
119+
.append("\"")
120+
.append(" traefik-operator")
121+
.append(" stable/traefik ");
122+
123+
logger.info(" upgradeTraefikNamespace() Running " + cmd.toString());
124+
ExecResult result = ExecCommand.exec(cmd.toString());
125+
if (result.exitValue() != 0) {
126+
reportHelmInstallFailure(cmd.toString(), result);
127+
}
128+
String outputStr = result.stdout().trim();
129+
logger.info("Command returned " + outputStr);
130+
}
131+
132+
private void createTraefikIngress() throws Exception {
133+
134+
String chartDir = BaseTest.getProjectRoot() + "/integration-tests/src/test/resources/charts";
135+
136+
StringBuffer cmd = new StringBuffer("cd ");
137+
cmd.append(chartDir).append(" && helm install ingress-per-domain ");
138+
cmd.append(" --name ")
139+
.append(lbMap.get("name"))
140+
.append(" --namespace ")
141+
.append(lbMap.get("namespace"))
142+
.append(" --set ")
143+
.append("wlsDomain.domainUID=")
144+
.append(lbMap.get("domainUID"))
145+
.append(" --set ")
146+
.append("wlsDomain.clusterName=")
147+
.append(lbMap.get("clusterName"))
148+
.append(" --set ")
149+
.append("traefik.hostname=")
150+
.append(lbMap.get("domainUID"))
151+
.append(".org");
152+
153+
logger.info("createTraefikIngress() Running " + cmd.toString());
154+
ExecResult result = ExecCommand.exec(cmd.toString());
155+
if (result.exitValue() != 0) {
156+
reportHelmInstallFailure(cmd.toString(), result);
157+
}
158+
String outputStr = result.stdout().trim();
159+
logger.info("Command returned " + outputStr);
160+
}
161+
162+
private void reportHelmInstallFailure(String cmd, ExecResult result) throws Exception {
163+
throw new RuntimeException(getExecFailure(cmd, result));
164+
}
165+
166+
private String getExecFailure(String cmd, ExecResult result) throws Exception {
167+
return "FAILURE: command "
168+
+ cmd
169+
+ " failed, stdout:\n"
170+
+ result.stdout()
171+
+ "stderr:\n"
172+
+ result.stderr();
173+
}
174+
87175
public Map<String, Object> getLBMap() {
88176
return lbMap;
89177
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
4+
apiVersion: v1
5+
appVersion: "1.0"
6+
description: A Helm chart to create an Ingress for a WLS domain.
7+
name: ingress-per-domain
8+
version: 0.1.0
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Copyright 2018, 2019, Oracle Corporation and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
4+
{{- if eq .Values.type "TRAEFIK" }}
5+
---
6+
apiVersion: extensions/v1beta1
7+
kind: Ingress
8+
metadata:
9+
name: {{ .Values.wlsDomain.domainUID }}-traefik
10+
namespace: {{ .Release.Namespace }}
11+
labels:
12+
weblogic.resourceVersion: domain-v2
13+
spec:
14+
annotations:
15+
kubernetes.io/ingress.class: traefik
16+
rules:
17+
- host: '{{ .Values.traefik.hostname }}'
18+
http:
19+
paths:
20+
- path:
21+
backend:
22+
serviceName: '{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.clusterName | lower | replace "_" "-" }}'
23+
servicePort: {{ .Values.wlsDomain.managedServerPort }}
24+
{{- end }}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Copyright 2018, 2019, Oracle Corporation and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
4+
{{- if eq .Values.type "VOYAGER" }}
5+
---
6+
apiVersion: voyager.appscode.com/v1beta1
7+
kind: Ingress
8+
metadata:
9+
name: {{ .Values.wlsDomain.domainUID }}-voyager
10+
namespace: {{ .Release.Namespace }}
11+
labels:
12+
weblogic.resourceVersion: domain-v2
13+
annotations:
14+
ingress.appscode.com/type: 'NodePort'
15+
ingress.appscode.com/stats: 'true'
16+
ingress.appscode.com/affinity: 'cookie'
17+
spec:
18+
rules:
19+
- host: '*'
20+
http:
21+
nodePort: '{{ .Values.voyager.webPort }}'
22+
paths:
23+
- backend:
24+
serviceName: '{{ .Values.wlsDomain.domainUID }}-cluster-{{ .Values.wlsDomain.clusterName | lower | replace "_" "-" }}'
25+
servicePort: '{{ .Values.wlsDomain.managedServerPort }}'
26+
27+
---
28+
apiVersion: v1
29+
kind: Service
30+
metadata:
31+
name: {{ .Values.wlsDomain.domainUID }}-voyager-stats
32+
namespace: {{ .Release.Namespace }}
33+
labels:
34+
weblogic.resourceVersion: domain-v2
35+
spec:
36+
type: NodePort
37+
ports:
38+
- name: client
39+
protocol: TCP
40+
port: 56789
41+
targetPort: 56789
42+
nodePort: {{ .Values.voyager.statsPort }}
43+
selector:
44+
origin: voyager
45+
origin-name: {{ .Values.wlsDomain.domainUID }}-voyager
46+
{{- end }}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Copyright 2018, 2019, Oracle Corporation and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
4+
# Default values for ingress-per-domain.
5+
# This is a YAML-formatted file.
6+
# Declare variables to be passed into your templates.
7+
8+
# Load balancer type. Supported values are: TRAEFIK, VOYAGER
9+
type: TRAEFIK
10+
11+
# WLS domain as backend to the load balancer
12+
wlsDomain:
13+
domainUID: domain1
14+
clusterName: cluster-1
15+
managedServerPort: 8001
16+
17+
# Traefik specific values
18+
traefik:
19+
# hostname used by host-routing
20+
hostname: domain1.org
21+
22+
# Voyager specific values
23+
voyager:
24+
# web port
25+
webPort: 30305
26+
# stats port
27+
statsPort: 30315
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
4+
adminServerName: admin-server
5+
domainUID: domaintraefikingress
6+
clusterName: cluster-1
7+
configuredManagedServerCount: 4
8+
initialManagedServerReplicas: 2
9+
managedServerNameBase: managed-server
10+
#weblogicDomainStoragePath will be ignored, PV dir will be created at /<baseDir>/<USER>/acceptance_test_pv
11+
#weblogicDomainStoragePath: /scratch/external-domain-home/pv001/
12+
exposeAdminT3Channel: true
13+
t3ChannelPort: 30112
14+
exposeAdminNodePort: true
15+
adminNodePort: 30720
16+
namespace: default
17+
loadBalancer: TRAEFIK
18+
ingressPerDomain: true
19+

0 commit comments

Comments
 (0)