blob: 9c372b1807f03997927fd92e972ae90b6454770a [file] [log] [blame]
Jian Li3defa842019-02-12 00:31:35 +09001/*
2 * Copyright 2019-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.k8snode.api;
17
18import com.google.common.base.MoreObjects;
Jian Lie2a04ce2020-07-01 19:07:02 +090019import com.google.common.collect.ImmutableSet;
20import org.apache.commons.lang.StringUtils;
Jian Li3defa842019-02-12 00:31:35 +090021import org.onlab.packet.IpAddress;
Jian Lie2a04ce2020-07-01 19:07:02 +090022import org.onlab.packet.IpPrefix;
Jian Li3defa842019-02-12 00:31:35 +090023
24import java.util.Objects;
Jian Lie2a04ce2020-07-01 19:07:02 +090025import java.util.Set;
Jian Li3defa842019-02-12 00:31:35 +090026
27import static com.google.common.base.Preconditions.checkArgument;
Jian Lie2a04ce2020-07-01 19:07:02 +090028import static org.onosproject.k8snode.api.Constants.DEFAULT_CLUSTER_NAME;
29import static org.onosproject.k8snode.api.K8sApiConfig.Mode.NORMAL;
Jian Li3defa842019-02-12 00:31:35 +090030import static org.onosproject.k8snode.api.K8sApiConfig.Scheme.HTTPS;
31
32/**
33 * Default implementation of kubernetes API configuration.
34 */
35public final class DefaultK8sApiConfig implements K8sApiConfig {
36
37 private static final String NOT_NULL_MSG = "API Config % cannot be null";
38
Jian Lie2a04ce2020-07-01 19:07:02 +090039 private static final int SHORT_NAME_LENGTH = 10;
40
41 private final String clusterName;
42 private final int segmentId;
43 private final IpPrefix extNetworkCidr;
Jian Li3defa842019-02-12 00:31:35 +090044 private final Scheme scheme;
Jian Lie2a04ce2020-07-01 19:07:02 +090045 private final Mode mode;
Jian Li3defa842019-02-12 00:31:35 +090046 private final IpAddress ipAddress;
47 private final int port;
Jian Li1cee9882019-02-13 11:25:25 +090048 private final State state;
Jian Li3defa842019-02-12 00:31:35 +090049 private final String token;
50 private final String caCertData;
51 private final String clientCertData;
52 private final String clientKeyData;
Jian Lie2a04ce2020-07-01 19:07:02 +090053 private final Set<HostNodesInfo> infos;
Jian Lic2242bd2020-09-03 13:12:14 +090054 private final boolean dvr;
Jian Li3defa842019-02-12 00:31:35 +090055
Jian Lie2a04ce2020-07-01 19:07:02 +090056 private DefaultK8sApiConfig(String clusterName, int segmentId, IpPrefix extNetworkCidr,
57 Scheme scheme, IpAddress ipAddress, int port,
58 Mode mode, State state, String token, String caCertData,
Jian Lic2242bd2020-09-03 13:12:14 +090059 String clientCertData, String clientKeyData,
60 Set<HostNodesInfo> infos, boolean dvr) {
Jian Lie2a04ce2020-07-01 19:07:02 +090061 this.clusterName = clusterName;
62 this.segmentId = segmentId;
63 this.extNetworkCidr = extNetworkCidr;
Jian Li3defa842019-02-12 00:31:35 +090064 this.scheme = scheme;
65 this.ipAddress = ipAddress;
66 this.port = port;
Jian Lie2a04ce2020-07-01 19:07:02 +090067 this.mode = mode;
Jian Li1cee9882019-02-13 11:25:25 +090068 this.state = state;
Jian Li3defa842019-02-12 00:31:35 +090069 this.token = token;
70 this.caCertData = caCertData;
71 this.clientCertData = clientCertData;
72 this.clientKeyData = clientKeyData;
Jian Lie2a04ce2020-07-01 19:07:02 +090073 this.infos = infos;
Jian Lic2242bd2020-09-03 13:12:14 +090074 this.dvr = dvr;
Jian Lie2a04ce2020-07-01 19:07:02 +090075 }
76
77 @Override
78 public String clusterName() {
79 return clusterName;
80 }
81
82 @Override
83 public String clusterShortName() {
84 return StringUtils.substring(clusterName, 0, SHORT_NAME_LENGTH);
85 }
86
87 @Override
88 public int segmentId() {
89 return segmentId;
90 }
91
92 @Override
93 public IpPrefix extNetworkCidr() {
94 return extNetworkCidr;
Jian Li3defa842019-02-12 00:31:35 +090095 }
96
97 @Override
98 public Scheme scheme() {
99 return scheme;
100 }
101
102 @Override
103 public IpAddress ipAddress() {
104 return ipAddress;
105 }
106
107 @Override
108 public int port() {
109 return port;
110 }
111
112 @Override
Jian Li1cee9882019-02-13 11:25:25 +0900113 public State state() {
114 return state;
115 }
116
117 @Override
Jian Lie2a04ce2020-07-01 19:07:02 +0900118 public Mode mode() {
119 return mode;
120 }
121
122 @Override
Jian Li1cee9882019-02-13 11:25:25 +0900123 public K8sApiConfig updateState(State newState) {
124 return new Builder()
Jian Lie2a04ce2020-07-01 19:07:02 +0900125 .clusterName(clusterName)
126 .segmentId(segmentId)
127 .extNetworkCidr(extNetworkCidr)
Jian Li1cee9882019-02-13 11:25:25 +0900128 .scheme(scheme)
129 .ipAddress(ipAddress)
130 .port(port)
131 .state(newState)
Jian Lie2a04ce2020-07-01 19:07:02 +0900132 .mode(mode)
Jian Li1cee9882019-02-13 11:25:25 +0900133 .token(token)
134 .caCertData(caCertData)
135 .clientCertData(clientCertData)
136 .clientKeyData(clientKeyData)
Jian Lie2a04ce2020-07-01 19:07:02 +0900137 .infos(infos)
Jian Lic2242bd2020-09-03 13:12:14 +0900138 .dvr(dvr)
Jian Li1cee9882019-02-13 11:25:25 +0900139 .build();
140 }
141
142 @Override
Jian Li3defa842019-02-12 00:31:35 +0900143 public String token() {
144 return token;
145 }
146
147 @Override
148 public String caCertData() {
149 return caCertData;
150 }
151
152 @Override
153 public String clientCertData() {
154 return clientCertData;
155 }
156
157 @Override
158 public String clientKeyData() {
159 return clientKeyData;
160 }
161
162 @Override
Jian Lie2a04ce2020-07-01 19:07:02 +0900163 public Set<HostNodesInfo> infos() {
164 return ImmutableSet.copyOf(infos);
165 }
166
167 @Override
Jian Lic2242bd2020-09-03 13:12:14 +0900168 public boolean dvr() {
169 return dvr;
170 }
171
172 @Override
Jian Li3defa842019-02-12 00:31:35 +0900173 public boolean equals(Object o) {
174 if (this == o) {
175 return true;
176 }
177 if (o == null || getClass() != o.getClass()) {
178 return false;
179 }
180 DefaultK8sApiConfig that = (DefaultK8sApiConfig) o;
181 return port == that.port &&
182 scheme == that.scheme &&
Jian Lie2a04ce2020-07-01 19:07:02 +0900183 clusterName.equals(that.clusterName) &&
184 segmentId == that.segmentId &&
185 extNetworkCidr == that.extNetworkCidr &&
Jian Li3defa842019-02-12 00:31:35 +0900186 ipAddress.equals(that.ipAddress) &&
Jian Lie2a04ce2020-07-01 19:07:02 +0900187 mode == that.mode &&
Jian Li1cee9882019-02-13 11:25:25 +0900188 state == that.state &&
Jian Li3defa842019-02-12 00:31:35 +0900189 token.equals(that.token) &&
190 caCertData.equals(that.caCertData) &&
191 clientCertData.equals(that.clientCertData) &&
Jian Lie2a04ce2020-07-01 19:07:02 +0900192 clientKeyData.equals(that.clientKeyData) &&
Jian Lic2242bd2020-09-03 13:12:14 +0900193 infos.equals(that.infos) &&
194 dvr == that.dvr;
Jian Li3defa842019-02-12 00:31:35 +0900195 }
196
197 @Override
198 public int hashCode() {
Jian Lic2242bd2020-09-03 13:12:14 +0900199 return Objects.hash(clusterName, segmentId, extNetworkCidr, scheme, ipAddress, port,
200 mode, state, token, caCertData, clientCertData, clientKeyData, infos, dvr);
Jian Li3defa842019-02-12 00:31:35 +0900201 }
202
203 @Override
204 public String toString() {
205 return MoreObjects.toStringHelper(this)
Jian Lie2a04ce2020-07-01 19:07:02 +0900206 .add("clusterName", clusterName)
207 .add("segmentID", segmentId)
208 .add("extNetworkCIDR", extNetworkCidr)
Jian Li3defa842019-02-12 00:31:35 +0900209 .add("scheme", scheme)
210 .add("ipAddress", ipAddress)
211 .add("port", port)
Jian Lie2a04ce2020-07-01 19:07:02 +0900212 .add("mode", mode)
Jian Li1cee9882019-02-13 11:25:25 +0900213 .add("state", state)
Jian Li3defa842019-02-12 00:31:35 +0900214 .add("token", token)
215 .add("caCertData", caCertData)
216 .add("clientCertData", clientCertData)
217 .add("clientKeyData", clientKeyData)
Jian Lie2a04ce2020-07-01 19:07:02 +0900218 .add("infos", infos)
Jian Lic2242bd2020-09-03 13:12:14 +0900219 .add("dvr", dvr)
Jian Li3defa842019-02-12 00:31:35 +0900220 .toString();
221 }
222
223 /**
224 * Returns new builder instance.
225 *
226 * @return kubernetes API server config builder
227 */
228 public static Builder builder() {
229 return new Builder();
230 }
231
232 public static final class Builder implements K8sApiConfig.Builder {
233
Jian Lie2a04ce2020-07-01 19:07:02 +0900234 private String clusterName;
235 private int segmentId;
236 private IpPrefix extNetworkCidr;
Jian Li3defa842019-02-12 00:31:35 +0900237 private Scheme scheme;
Jian Lie2a04ce2020-07-01 19:07:02 +0900238 private Mode mode;
Jian Li3defa842019-02-12 00:31:35 +0900239 private IpAddress ipAddress;
240 private int port;
Jian Li1cee9882019-02-13 11:25:25 +0900241 private State state;
Jian Li3defa842019-02-12 00:31:35 +0900242 private String token;
243 private String caCertData;
244 private String clientCertData;
245 private String clientKeyData;
Jian Lie2a04ce2020-07-01 19:07:02 +0900246 private Set<HostNodesInfo> infos;
Jian Lic2242bd2020-09-03 13:12:14 +0900247 private boolean dvr;
Jian Li3defa842019-02-12 00:31:35 +0900248
249 @Override
250 public K8sApiConfig build() {
251 checkArgument(scheme != null, NOT_NULL_MSG, "scheme");
252 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
Jian Li1cee9882019-02-13 11:25:25 +0900253 checkArgument(state != null, NOT_NULL_MSG, "state");
Jian Li3defa842019-02-12 00:31:35 +0900254
255 if (scheme == HTTPS) {
Jian Li3defa842019-02-12 00:31:35 +0900256 checkArgument(caCertData != null, NOT_NULL_MSG, "caCertData");
257 checkArgument(clientCertData != null, NOT_NULL_MSG, "clientCertData");
258 checkArgument(clientKeyData != null, NOT_NULL_MSG, "clientKeyData");
259 }
260
Jian Lie2a04ce2020-07-01 19:07:02 +0900261 if (StringUtils.isEmpty(clusterName)) {
262 clusterName = DEFAULT_CLUSTER_NAME;
263 }
264
265 if (mode == null) {
266 mode = NORMAL;
267 }
268
269 if (infos == null) {
270 infos = ImmutableSet.of();
271 }
272
273 return new DefaultK8sApiConfig(clusterName, segmentId, extNetworkCidr, scheme, ipAddress,
Jian Lic2242bd2020-09-03 13:12:14 +0900274 port, mode, state, token, caCertData, clientCertData, clientKeyData, infos, dvr);
Jian Lie2a04ce2020-07-01 19:07:02 +0900275 }
276
277 @Override
278 public Builder clusterName(String clusterName) {
279 this.clusterName = clusterName;
280 return this;
281 }
282
283 @Override
284 public Builder segmentId(int segmentId) {
285 this.segmentId = segmentId;
286 return this;
287 }
288
289 @Override
290 public K8sApiConfig.Builder extNetworkCidr(IpPrefix extNetworkCidr) {
291 this.extNetworkCidr = extNetworkCidr;
292 return this;
Jian Li3defa842019-02-12 00:31:35 +0900293 }
294
295 @Override
296 public Builder scheme(Scheme scheme) {
297 this.scheme = scheme;
298 return this;
299 }
300
301 @Override
302 public Builder ipAddress(IpAddress ipAddress) {
303 this.ipAddress = ipAddress;
304 return this;
305 }
306
307 @Override
308 public Builder port(int port) {
309 this.port = port;
310 return this;
311 }
312
313 @Override
Jian Li1cee9882019-02-13 11:25:25 +0900314 public Builder state(State state) {
315 this.state = state;
316 return this;
317 }
318
319 @Override
Jian Lie2a04ce2020-07-01 19:07:02 +0900320 public K8sApiConfig.Builder mode(Mode mode) {
321 this.mode = mode;
322 return this;
323 }
324
325 @Override
Jian Li3defa842019-02-12 00:31:35 +0900326 public Builder token(String token) {
327 this.token = token;
328 return this;
329 }
330
331 @Override
332 public Builder caCertData(String caCertData) {
333 this.caCertData = caCertData;
334 return this;
335 }
336
337 @Override
338 public Builder clientCertData(String clientCertData) {
339 this.clientCertData = clientCertData;
340 return this;
341 }
342
343 @Override
344 public Builder clientKeyData(String clientKeyData) {
345 this.clientKeyData = clientKeyData;
346 return this;
347 }
Jian Lie2a04ce2020-07-01 19:07:02 +0900348
349 @Override
350 public K8sApiConfig.Builder infos(Set<HostNodesInfo> infos) {
351 this.infos = infos;
352 return this;
353 }
Jian Lic2242bd2020-09-03 13:12:14 +0900354
355 @Override
356 public K8sApiConfig.Builder dvr(boolean dvr) {
357 this.dvr = dvr;
358 return this;
359 }
Jian Li3defa842019-02-12 00:31:35 +0900360 }
361}