Skip to content

Commit e29db81

Browse files
authored
Merge pull request #587 from oracle/owls-69882
OWLS-69882: Add support for an admin server administration node port …
2 parents 0f73d3d + 27eee2b commit e29db81

File tree

10 files changed

+438
-4
lines changed

10 files changed

+438
-4
lines changed

model/src/main/java/oracle/kubernetes/weblogic/domain/AdminServerConfigurator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package oracle.kubernetes.weblogic.domain;
66

7+
import oracle.kubernetes.weblogic.domain.v2.AdminService;
78
import oracle.kubernetes.weblogic.domain.v2.ExportedNetworkAccessPoint;
89

910
@SuppressWarnings("UnusedReturnValue")
@@ -18,4 +19,6 @@ public interface AdminServerConfigurator extends ServerConfigurator {
1819
AdminServerConfigurator withNodePortLabel(String name, String value);
1920

2021
AdminServerConfigurator withNodePortAnnotation(String name, String value);
22+
23+
AdminService configureAdminService();
2124
}

model/src/main/java/oracle/kubernetes/weblogic/domain/v2/AdminServer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ public class AdminServer extends Server {
2626
@Description("T3 network access points to export")
2727
private Map<String, ExportedNetworkAccessPoint> exportedNetworkAccessPoints = new HashMap<>();
2828

29+
@Description(
30+
"Configures which of the admin server's WebLogic admin channels should be exposed outside"
31+
+ " the Kubernetes cluster via a node port service.")
32+
private AdminService adminService;
33+
2934
/**
3035
* Configures an exported T3 network access point.
3136
*
@@ -54,6 +59,7 @@ public String toString() {
5459
.append("exportedNetworkAccessPoints", exportedNetworkAccessPoints)
5560
.append("nodePortLabels", nodePortLabels)
5661
.append("nodePortAnnotations", nodePortAnnotations)
62+
.append("adminService", adminService)
5763
.toString();
5864
}
5965

@@ -70,6 +76,7 @@ public boolean equals(Object o) {
7076
.append(exportedNetworkAccessPoints, that.exportedNetworkAccessPoints)
7177
.append(nodePortLabels, that.nodePortLabels)
7278
.append(nodePortAnnotations, that.nodePortAnnotations)
79+
.append(adminService, that.adminService)
7380
.isEquals();
7481
}
7582

@@ -80,6 +87,7 @@ public int hashCode() {
8087
.append(exportedNetworkAccessPoints)
8188
.append(nodePortLabels)
8289
.append(nodePortAnnotations)
90+
.append(adminService)
8391
.toHashCode();
8492
}
8593

@@ -94,4 +102,12 @@ void addNodePortLabels(String name, String value) {
94102
void addNodePortAnnotations(String name, String value) {
95103
nodePortAnnotations.put(name, value);
96104
}
105+
106+
public AdminService getAdminService() {
107+
return adminService;
108+
}
109+
110+
public void setAdminService(AdminService adminService) {
111+
this.adminService = adminService;
112+
}
97113
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
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
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.weblogic.domain.v2;
6+
7+
import com.google.gson.annotations.SerializedName;
8+
import java.util.Collections;
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
import org.apache.commons.lang3.builder.EqualsBuilder;
12+
import org.apache.commons.lang3.builder.HashCodeBuilder;
13+
import org.apache.commons.lang3.builder.ToStringBuilder;
14+
15+
public class AdminService {
16+
/** */
17+
@SerializedName("labels")
18+
private Map<String, String> labels = new HashMap<>();
19+
/** */
20+
@SerializedName("annotations")
21+
private Map<String, String> annotations = new HashMap<>();
22+
/** */
23+
@SerializedName("channels")
24+
private Map<String, Channel> channels = new HashMap<>();
25+
26+
public AdminService addLabel(String name, String value) {
27+
labels.put(name, value);
28+
return this;
29+
}
30+
31+
public Map<String, String> getLabels() {
32+
return Collections.unmodifiableMap(labels);
33+
}
34+
35+
public AdminService addAnnotation(String name, String value) {
36+
annotations.put(name, value);
37+
return this;
38+
}
39+
40+
public Map<String, String> getAnnotations() {
41+
return Collections.unmodifiableMap(annotations);
42+
}
43+
44+
public AdminService addChannel(String name, Channel port) {
45+
channels.put(name, port);
46+
return this;
47+
}
48+
49+
public Map<String, Channel> getChannels() {
50+
return channels;
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return new ToStringBuilder(this)
56+
.append("labels", labels)
57+
.append("annotations", annotations)
58+
.append("channles", channels)
59+
.toString();
60+
}
61+
62+
@Override
63+
public int hashCode() {
64+
return new HashCodeBuilder().append(labels).append(annotations).append(channels).toHashCode();
65+
}
66+
67+
@Override
68+
public boolean equals(Object o) {
69+
if (o == null) {
70+
return false;
71+
}
72+
if (!(o instanceof AdminService)) {
73+
return false;
74+
}
75+
AdminService as = (AdminService) o;
76+
return new EqualsBuilder()
77+
.append(labels, as.labels)
78+
.append(annotations, as.annotations)
79+
.append(channels, as.channels)
80+
.isEquals();
81+
}
82+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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
3+
// http://oss.oracle.com/licenses/upl.
4+
5+
package oracle.kubernetes.weblogic.domain.v2;
6+
7+
import com.google.gson.annotations.SerializedName;
8+
import org.apache.commons.lang3.builder.EqualsBuilder;
9+
import org.apache.commons.lang3.builder.HashCodeBuilder;
10+
import org.apache.commons.lang3.builder.ToStringBuilder;
11+
12+
public class Channel {
13+
public Channel() {}
14+
15+
public Channel(int nodePort) {
16+
this.nodePort = nodePort;
17+
}
18+
19+
@SerializedName("nodePort")
20+
private int nodePort;
21+
22+
public int getNodePort() {
23+
return nodePort;
24+
}
25+
26+
public void setNodePort(int nodePort) {
27+
this.nodePort = nodePort;
28+
}
29+
30+
@Override
31+
public String toString() {
32+
return new ToStringBuilder(this).append("nodePort", nodePort).toString();
33+
}
34+
35+
@Override
36+
public int hashCode() {
37+
return new HashCodeBuilder().append(nodePort).toHashCode();
38+
}
39+
40+
@Override
41+
public boolean equals(Object o) {
42+
if (o == null) {
43+
return false;
44+
}
45+
if (!(o instanceof Channel)) {
46+
return false;
47+
}
48+
Channel ch = (Channel) o;
49+
return new EqualsBuilder().append(nodePort, ch.nodePort).isEquals();
50+
}
51+
}

model/src/main/java/oracle/kubernetes/weblogic/domain/v2/DomainSpec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ private boolean hasMaxUnavailable(Cluster cluster) {
559559
return cluster != null && cluster.getMaxUnavailable() != null;
560560
}
561561

562-
private AdminServer getAdminServer() {
562+
public AdminServer getAdminServer() {
563563
return Optional.ofNullable(adminServer).orElse(AdminServer.NULL_ADMIN_SERVER);
564564
}
565565

model/src/main/java/oracle/kubernetes/weblogic/domain/v2/DomainV2Configurator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,14 @@ public AdminServerConfigurator withExportedNetworkAccessPoints(String... names)
154154
public ExportedNetworkAccessPoint configureExportedNetworkAccessPoint(String channelName) {
155155
return adminServer.addExportedNetworkAccessPoint(channelName);
156156
}
157+
158+
@Override
159+
public AdminService configureAdminService() {
160+
if (adminServer.getAdminService() == null) {
161+
adminServer.setAdminService(new AdminService());
162+
}
163+
return adminServer.getAdminService();
164+
}
157165
}
158166

159167
private AdminServer getOrCreateAdminServer() {

operator/src/main/java/oracle/kubernetes/operator/DomainProcessorImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,11 @@ private static Step[] bringAdminServerUpSteps(DomainPresenceInfo info, Step next
989989
List<Step> resources = new ArrayList<>();
990990
resources.add(PodHelper.createAdminPodStep(null));
991991
resources.add(new BeforeAdminServiceStep(null));
992+
993+
if (dom.getSpec().getAdminServer().getAdminService() != null) {
994+
resources.add(ServiceHelper.createForAdminServiceStep(null));
995+
}
996+
992997
resources.add(ServiceHelper.createForServerStep(null));
993998
resources.add(new WatchPodReadyAdminStep(Main.podWatchers, null));
994999
resources.add(new ExternalAdminChannelsStep(next));

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class LegalNames {
1313
private static final String CLUSTER_SERVICE_PATTERN = "%s-cluster-%s";
1414
private static final String NAP_PATTERN = "%s-%s-extchannel-%s";
1515
private static final String DOMAIN_INTROSPECTOR_JOB_PATTERN = "%s-introspect-domain-job";
16+
private static final String ADMIN_SERVICE_PATTERN = "%s-%s-admin";
1617

1718
public static String toServerServiceName(String domainUID, String serverName) {
1819
return toServerName(domainUID, serverName);
@@ -38,6 +39,9 @@ static String toJobIntrospectorName(String domainUID) {
3839
return toDNS1123LegalName(String.format(DOMAIN_INTROSPECTOR_JOB_PATTERN, domainUID));
3940
}
4041

42+
static String toAdminServiceName(String domainUID, String serverName) {
43+
return toDNS1123LegalName(String.format(ADMIN_SERVICE_PATTERN, domainUID, serverName));
44+
}
4145
/**
4246
* Converts value to nearest DNS-1123 legal name, which can be used as a Kubernetes identifier
4347
*

0 commit comments

Comments
 (0)