blob: 6a18194f4fb9f921238f013422cedb7d04ec3e75 [file] [log] [blame]
Jian Li49109b52019-01-22 00:17:28 +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;
19import org.onlab.osgi.DefaultServiceDirectory;
20import org.onlab.packet.IpAddress;
Jian Li7d111d72019-04-12 13:58:44 +090021import org.onlab.packet.MacAddress;
Jian Li2778ffa2019-05-07 13:21:52 +090022import org.onosproject.net.Annotations;
Jian Li49109b52019-01-22 00:17:28 +090023import org.onosproject.net.DeviceId;
24import org.onosproject.net.Port;
25import org.onosproject.net.PortNumber;
26import org.onosproject.net.device.DeviceService;
27
28import java.util.Objects;
29
30import static com.google.common.base.Preconditions.checkArgument;
Jian Lieb488ea2019-04-16 01:50:02 +090031import static org.onosproject.k8snode.api.Constants.EXTERNAL_BRIDGE;
Jian Li49109b52019-01-22 00:17:28 +090032import static org.onosproject.k8snode.api.Constants.GENEVE_TUNNEL;
33import static org.onosproject.k8snode.api.Constants.GRE_TUNNEL;
Jian Li4aa17642019-01-30 00:01:11 +090034import static org.onosproject.k8snode.api.Constants.INTEGRATION_BRIDGE;
Jian Lieb488ea2019-04-16 01:50:02 +090035import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_EXTERNAL_BRIDGE;
Jian Li1a2eb5d2019-08-27 02:07:05 +090036import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_LOCAL_BRIDGE;
37import static org.onosproject.k8snode.api.Constants.LOCAL_TO_INTEGRATION_BRIDGE;
Jian Lieb488ea2019-04-16 01:50:02 +090038import static org.onosproject.k8snode.api.Constants.PHYSICAL_EXTERNAL_BRIDGE;
Jian Li49109b52019-01-22 00:17:28 +090039import static org.onosproject.k8snode.api.Constants.VXLAN_TUNNEL;
40import static org.onosproject.net.AnnotationKeys.PORT_NAME;
41
42/**
43 * Representation of a kubernetes node.
44 */
45public class DefaultK8sNode implements K8sNode {
46
Jian Li2778ffa2019-05-07 13:21:52 +090047 private static final String PORT_MAC = "portMac";
Jian Li7d111d72019-04-12 13:58:44 +090048
Jian Li49109b52019-01-22 00:17:28 +090049 private final String hostname;
50 private final Type type;
51 private final DeviceId intgBridge;
Jian Libf562c22019-04-15 18:07:14 +090052 private final DeviceId extBridge;
Jian Li1a2eb5d2019-08-27 02:07:05 +090053 private final DeviceId localBridge;
Jian Li49109b52019-01-22 00:17:28 +090054 private final IpAddress managementIp;
55 private final IpAddress dataIp;
56 private final K8sNodeState state;
Jian Li0c632722019-05-08 15:58:04 +090057 private final String extIntf;
58 private final IpAddress extBridgeIp;
59 private final IpAddress extGatewayIp;
Jian Li1b08d652019-05-02 17:28:09 +090060 private final MacAddress extGatewayMac;
Jian Li0c632722019-05-08 15:58:04 +090061 private final String podCidr;
Jian Li49109b52019-01-22 00:17:28 +090062
63 private static final String NOT_NULL_MSG = "Node % cannot be null";
64
65 private static final String OVSDB = "ovsdb:";
66
67 /**
68 * A default constructor of kubernetes Node.
69 *
70 * @param hostname hostname
71 * @param type node type
72 * @param intgBridge integration bridge
Jian Libf562c22019-04-15 18:07:14 +090073 * @param extBridge external bridge
Jian Li1a2eb5d2019-08-27 02:07:05 +090074 * @param localBridge local bridge
Jian Li0c632722019-05-08 15:58:04 +090075 * @param extIntf external interface
Jian Li49109b52019-01-22 00:17:28 +090076 * @param managementIp management IP address
77 * @param dataIp data IP address
78 * @param state node state
Jian Li0c632722019-05-08 15:58:04 +090079 * @param extBridgeIp external bridge IP address
80 * @param extGatewayIp external gateway IP address
Jian Li1b08d652019-05-02 17:28:09 +090081 * @param extGatewayMac external gateway MAC address
Jian Li0c632722019-05-08 15:58:04 +090082 * @param podCidr POD CIDR
Jian Li49109b52019-01-22 00:17:28 +090083 */
84 protected DefaultK8sNode(String hostname, Type type, DeviceId intgBridge,
Jian Li1a2eb5d2019-08-27 02:07:05 +090085 DeviceId extBridge, DeviceId localBridge,
86 String extIntf, IpAddress managementIp,
87 IpAddress dataIp, K8sNodeState state,
88 IpAddress extBridgeIp, IpAddress extGatewayIp,
89 MacAddress extGatewayMac, String podCidr) {
Jian Li49109b52019-01-22 00:17:28 +090090 this.hostname = hostname;
91 this.type = type;
92 this.intgBridge = intgBridge;
Jian Libf562c22019-04-15 18:07:14 +090093 this.extBridge = extBridge;
Jian Li1a2eb5d2019-08-27 02:07:05 +090094 this.localBridge = localBridge;
Jian Li0c632722019-05-08 15:58:04 +090095 this.extIntf = extIntf;
Jian Li49109b52019-01-22 00:17:28 +090096 this.managementIp = managementIp;
97 this.dataIp = dataIp;
98 this.state = state;
Jian Li0c632722019-05-08 15:58:04 +090099 this.extBridgeIp = extBridgeIp;
100 this.extGatewayIp = extGatewayIp;
Jian Li1b08d652019-05-02 17:28:09 +0900101 this.extGatewayMac = extGatewayMac;
Jian Li0c632722019-05-08 15:58:04 +0900102 this.podCidr = podCidr;
Jian Li49109b52019-01-22 00:17:28 +0900103 }
104
105 @Override
106 public String hostname() {
107 return hostname;
108 }
109
110 @Override
111 public Type type() {
112 return type;
113 }
114
115 @Override
116 public DeviceId ovsdb() {
117 return DeviceId.deviceId(OVSDB + managementIp().toString());
118 }
119
120 @Override
121 public DeviceId intgBridge() {
122 return intgBridge;
123 }
124
125 @Override
Jian Libf562c22019-04-15 18:07:14 +0900126 public DeviceId extBridge() {
127 return extBridge;
128 }
129
130 @Override
Jian Li1a2eb5d2019-08-27 02:07:05 +0900131 public DeviceId localBridge() {
132 return localBridge;
133 }
134
135 @Override
Jian Li0c632722019-05-08 15:58:04 +0900136 public String extIntf() {
137 return extIntf;
138 }
139
140 @Override
Jian Li1cee9882019-02-13 11:25:25 +0900141 public K8sNode updateIntgBridge(DeviceId deviceId) {
142 return new Builder()
143 .hostname(hostname)
144 .type(type)
145 .intgBridge(deviceId)
Jian Libf562c22019-04-15 18:07:14 +0900146 .extBridge(extBridge)
Jian Li1a2eb5d2019-08-27 02:07:05 +0900147 .localBridge(localBridge)
Jian Li0c632722019-05-08 15:58:04 +0900148 .extIntf(extIntf)
Jian Libf562c22019-04-15 18:07:14 +0900149 .managementIp(managementIp)
150 .dataIp(dataIp)
151 .state(state)
Jian Li0c632722019-05-08 15:58:04 +0900152 .extBridgeIp(extBridgeIp)
153 .extGatewayIp(extGatewayIp)
Jian Li1b08d652019-05-02 17:28:09 +0900154 .extGatewayMac(extGatewayMac)
Jian Li0c632722019-05-08 15:58:04 +0900155 .podCidr(podCidr)
Jian Libf562c22019-04-15 18:07:14 +0900156 .build();
157 }
158
159 @Override
160 public K8sNode updateExtBridge(DeviceId deviceId) {
161 return new Builder()
162 .hostname(hostname)
163 .type(type)
164 .intgBridge(intgBridge)
165 .extBridge(deviceId)
Jian Li1a2eb5d2019-08-27 02:07:05 +0900166 .localBridge(localBridge)
167 .extIntf(extIntf)
168 .managementIp(managementIp)
169 .dataIp(dataIp)
170 .state(state)
171 .extBridgeIp(extBridgeIp)
172 .extGatewayIp(extGatewayIp)
173 .extGatewayMac(extGatewayMac)
174 .podCidr(podCidr)
175 .build();
176 }
177
178 @Override
179 public K8sNode updateLocalBridge(DeviceId deviceId) {
180 return new Builder()
181 .hostname(hostname)
182 .type(type)
183 .intgBridge(intgBridge)
184 .extBridge(extBridge)
185 .localBridge(deviceId)
Jian Li0c632722019-05-08 15:58:04 +0900186 .extIntf(extIntf)
Jian Li1cee9882019-02-13 11:25:25 +0900187 .managementIp(managementIp)
188 .dataIp(dataIp)
189 .state(state)
Jian Li0c632722019-05-08 15:58:04 +0900190 .extBridgeIp(extBridgeIp)
191 .extGatewayIp(extGatewayIp)
Jian Li1b08d652019-05-02 17:28:09 +0900192 .extGatewayMac(extGatewayMac)
Jian Li0c632722019-05-08 15:58:04 +0900193 .podCidr(podCidr)
Jian Li1cee9882019-02-13 11:25:25 +0900194 .build();
195 }
196
197 @Override
Jian Li49109b52019-01-22 00:17:28 +0900198 public IpAddress managementIp() {
199 return managementIp;
200 }
201
202 @Override
203 public IpAddress dataIp() {
204 return dataIp;
205 }
206
207 @Override
208 public K8sNodeState state() {
209 return state;
210 }
211
212 @Override
Jian Li0c632722019-05-08 15:58:04 +0900213 public String podCidr() {
214 return podCidr;
215 }
216
217 @Override
Jian Li49109b52019-01-22 00:17:28 +0900218 public K8sNode updateState(K8sNodeState newState) {
219 return new Builder()
220 .hostname(hostname)
221 .type(type)
222 .intgBridge(intgBridge)
Jian Li0c632722019-05-08 15:58:04 +0900223 .extBridge(extBridge)
Jian Li1a2eb5d2019-08-27 02:07:05 +0900224 .localBridge(localBridge)
Jian Li0c632722019-05-08 15:58:04 +0900225 .extIntf(extIntf)
Jian Li49109b52019-01-22 00:17:28 +0900226 .managementIp(managementIp)
227 .dataIp(dataIp)
228 .state(newState)
Jian Li0c632722019-05-08 15:58:04 +0900229 .extBridgeIp(extBridgeIp)
230 .extGatewayIp(extGatewayIp)
Jian Li1b08d652019-05-02 17:28:09 +0900231 .extGatewayMac(extGatewayMac)
Jian Li0c632722019-05-08 15:58:04 +0900232 .podCidr(podCidr)
Jian Li49109b52019-01-22 00:17:28 +0900233 .build();
234 }
235
236 @Override
Jian Li1b08d652019-05-02 17:28:09 +0900237 public K8sNode updateExtGatewayMac(MacAddress newMac) {
238 return new Builder()
239 .hostname(hostname)
240 .type(type)
241 .intgBridge(intgBridge)
Jian Li0c632722019-05-08 15:58:04 +0900242 .extBridge(extBridge)
Jian Li1a2eb5d2019-08-27 02:07:05 +0900243 .localBridge(localBridge)
Jian Li0c632722019-05-08 15:58:04 +0900244 .extIntf(extIntf)
Jian Li1b08d652019-05-02 17:28:09 +0900245 .managementIp(managementIp)
246 .dataIp(dataIp)
247 .state(state)
Jian Li0c632722019-05-08 15:58:04 +0900248 .extBridgeIp(extBridgeIp)
249 .extGatewayIp(extGatewayIp)
Jian Li1b08d652019-05-02 17:28:09 +0900250 .extGatewayMac(newMac)
Jian Li0c632722019-05-08 15:58:04 +0900251 .podCidr(podCidr)
Jian Li1b08d652019-05-02 17:28:09 +0900252 .build();
Jian Li1b08d652019-05-02 17:28:09 +0900253 }
254
255 @Override
Jian Li49109b52019-01-22 00:17:28 +0900256 public PortNumber grePortNum() {
257 return tunnelPortNum(GRE_TUNNEL);
258 }
259
260 @Override
261 public PortNumber vxlanPortNum() {
262 return tunnelPortNum(VXLAN_TUNNEL);
263 }
264
265 @Override
266 public PortNumber genevePortNum() {
267 return tunnelPortNum(GENEVE_TUNNEL);
268 }
269
270 @Override
Jian Lieb488ea2019-04-16 01:50:02 +0900271 public PortNumber intgBridgePortNum() {
Jian Li2778ffa2019-05-07 13:21:52 +0900272 return portNumber(intgBridge, INTEGRATION_BRIDGE);
Jian Lieb488ea2019-04-16 01:50:02 +0900273 }
274
275 @Override
276 public PortNumber intgToExtPatchPortNum() {
277 return portNumber(intgBridge, INTEGRATION_TO_EXTERNAL_BRIDGE);
278 }
279
280 @Override
Jian Li1a2eb5d2019-08-27 02:07:05 +0900281 public PortNumber intgToLocalPatchPortNum() {
282 return portNumber(intgBridge, INTEGRATION_TO_LOCAL_BRIDGE);
283 }
284
285 @Override
286 public PortNumber localToIntgPatchPortNumber() {
287 return portNumber(localBridge, LOCAL_TO_INTEGRATION_BRIDGE);
288 }
289
290 @Override
Jian Lieb488ea2019-04-16 01:50:02 +0900291 public PortNumber extToIntgPatchPortNum() {
292 return portNumber(extBridge, PHYSICAL_EXTERNAL_BRIDGE);
293 }
294
295 @Override
296 public PortNumber extBridgePortNum() {
Jian Li0c632722019-05-08 15:58:04 +0900297 if (this.extIntf == null) {
Jian Lieb488ea2019-04-16 01:50:02 +0900298 return null;
299 }
300
Jian Li0c632722019-05-08 15:58:04 +0900301 return portNumber(extBridge, this.extIntf);
Jian Lieb488ea2019-04-16 01:50:02 +0900302 }
303
304 @Override
Jian Li2778ffa2019-05-07 13:21:52 +0900305 public MacAddress intgBridgeMac() {
306 return macAddress(intgBridge, INTEGRATION_BRIDGE);
307 }
308
309 @Override
310 public IpAddress extBridgeIp() {
Jian Li0c632722019-05-08 15:58:04 +0900311 return extBridgeIp;
Jian Li2778ffa2019-05-07 13:21:52 +0900312 }
313
314 @Override
315 public MacAddress extBridgeMac() {
316 return macAddress(extBridge, EXTERNAL_BRIDGE);
317 }
318
319 @Override
320 public IpAddress extGatewayIp() {
Jian Li0c632722019-05-08 15:58:04 +0900321 return extGatewayIp;
Jian Li2778ffa2019-05-07 13:21:52 +0900322 }
323
324 @Override
325 public MacAddress extGatewayMac() {
326 return extGatewayMac;
327 }
328
329 @Override
Jian Li49109b52019-01-22 00:17:28 +0900330 public boolean equals(Object obj) {
331 if (this == obj) {
332 return true;
333 }
334
335 if (obj instanceof DefaultK8sNode) {
336 DefaultK8sNode that = (DefaultK8sNode) obj;
337
338 return hostname.equals(that.hostname) &&
339 type == that.type &&
340 intgBridge.equals(that.intgBridge) &&
Jian Libf562c22019-04-15 18:07:14 +0900341 extBridge.equals(that.extBridge) &&
Jian Li1a2eb5d2019-08-27 02:07:05 +0900342 localBridge.equals(that.localBridge) &&
Jian Li0c632722019-05-08 15:58:04 +0900343 extIntf.equals(that.extIntf) &&
Jian Li49109b52019-01-22 00:17:28 +0900344 managementIp.equals(that.managementIp) &&
345 dataIp.equals(that.dataIp) &&
Jian Li0c632722019-05-08 15:58:04 +0900346 extBridgeIp.equals(that.extBridgeIp) &&
347 extGatewayIp.equals(that.extGatewayIp) &&
348 podCidr.equals(that.podCidr) &&
Jian Li49109b52019-01-22 00:17:28 +0900349 state == that.state;
350 }
351
352 return false;
353 }
354
355 @Override
356 public int hashCode() {
Jian Li1a2eb5d2019-08-27 02:07:05 +0900357 return Objects.hash(hostname, type, intgBridge, extBridge, localBridge,
358 extIntf, managementIp, dataIp, state, extBridgeIp,
Jian Li0c632722019-05-08 15:58:04 +0900359 extGatewayIp, extGatewayMac, podCidr);
Jian Li49109b52019-01-22 00:17:28 +0900360 }
361
362 @Override
363 public String toString() {
364 return MoreObjects.toStringHelper(this)
365 .add("hostname", hostname)
366 .add("type", type)
367 .add("intgBridge", intgBridge)
Jian Libf562c22019-04-15 18:07:14 +0900368 .add("extBridge", extBridge)
Jian Li1a2eb5d2019-08-27 02:07:05 +0900369 .add("localBridge", localBridge)
Jian Li0c632722019-05-08 15:58:04 +0900370 .add("extIntf", extIntf)
Jian Li49109b52019-01-22 00:17:28 +0900371 .add("managementIp", managementIp)
372 .add("dataIp", dataIp)
373 .add("state", state)
Jian Li0c632722019-05-08 15:58:04 +0900374 .add("extBridgeIp", extBridgeIp)
375 .add("extGatewayIp", extGatewayIp)
Jian Li1b08d652019-05-02 17:28:09 +0900376 .add("extGatewayMac", extGatewayMac)
Jian Li0c632722019-05-08 15:58:04 +0900377 .add("podCidr", podCidr)
Jian Li49109b52019-01-22 00:17:28 +0900378 .toString();
379 }
380
381 private PortNumber tunnelPortNum(String tunnelType) {
382 if (dataIp == null) {
383 return null;
384 }
Jian Lieb488ea2019-04-16 01:50:02 +0900385
386 return portNumber(intgBridge, tunnelType);
387 }
388
Jian Li2778ffa2019-05-07 13:21:52 +0900389 private MacAddress macAddress(DeviceId deviceId, String portName) {
390 Port port = port(deviceId, portName);
391 Annotations annots = port.annotations();
392 return annots != null ? MacAddress.valueOf(annots.value(PORT_MAC)) : null;
393 }
394
Jian Lieb488ea2019-04-16 01:50:02 +0900395 private PortNumber portNumber(DeviceId deviceId, String portName) {
Jian Li2778ffa2019-05-07 13:21:52 +0900396 Port port = port(deviceId, portName);
397 return port != null ? port.number() : null;
398 }
399
400 private Port port(DeviceId deviceId, String portName) {
Jian Li49109b52019-01-22 00:17:28 +0900401 DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
Jian Li2778ffa2019-05-07 13:21:52 +0900402 return deviceService.getPorts(deviceId).stream()
Jian Li49109b52019-01-22 00:17:28 +0900403 .filter(p -> p.isEnabled() &&
Jian Lieb488ea2019-04-16 01:50:02 +0900404 Objects.equals(p.annotations().value(PORT_NAME), portName))
Jian Li49109b52019-01-22 00:17:28 +0900405 .findAny().orElse(null);
Jian Li49109b52019-01-22 00:17:28 +0900406 }
407
408 /**
409 * Returns new builder instance.
410 *
411 * @return kubernetes node builder
412 */
413 public static Builder builder() {
414 return new Builder();
415 }
416
417 /**
418 * Returns new builder instance with the given node as a default value.
419 *
420 * @param node kubernetes node
421 * @return kubernetes node builder
422 */
423 public static Builder from(K8sNode node) {
424 return new Builder()
425 .hostname(node.hostname())
426 .type(node.type())
427 .intgBridge(node.intgBridge())
Jian Libf562c22019-04-15 18:07:14 +0900428 .extBridge(node.extBridge())
Jian Li1a2eb5d2019-08-27 02:07:05 +0900429 .localBridge(node.localBridge())
Jian Li0c632722019-05-08 15:58:04 +0900430 .extIntf(node.extIntf())
Jian Li49109b52019-01-22 00:17:28 +0900431 .managementIp(node.managementIp())
432 .dataIp(node.dataIp())
Jian Li1b08d652019-05-02 17:28:09 +0900433 .state(node.state())
Jian Li0c632722019-05-08 15:58:04 +0900434 .extBridgeIp(node.extBridgeIp())
435 .extGatewayIp(node.extGatewayIp())
436 .extGatewayMac(node.extGatewayMac())
437 .podCidr(node.podCidr());
Jian Li49109b52019-01-22 00:17:28 +0900438 }
439
440 public static final class Builder implements K8sNode.Builder {
441
442 private String hostname;
443 private Type type;
444 private DeviceId intgBridge;
Jian Libf562c22019-04-15 18:07:14 +0900445 private DeviceId extBridge;
Jian Li1a2eb5d2019-08-27 02:07:05 +0900446 private DeviceId localBridge;
Jian Li49109b52019-01-22 00:17:28 +0900447 private IpAddress managementIp;
448 private IpAddress dataIp;
449 private K8sNodeState state;
Jian Li3defa842019-02-12 00:31:35 +0900450 private K8sApiConfig apiConfig;
Jian Li0c632722019-05-08 15:58:04 +0900451 private String extIntf;
452 private IpAddress extBridgeIp;
453 private IpAddress extGatewayIp;
Jian Li1b08d652019-05-02 17:28:09 +0900454 private MacAddress extGatewayMac;
Jian Li0c632722019-05-08 15:58:04 +0900455 private String podCidr;
Jian Li49109b52019-01-22 00:17:28 +0900456
457 // private constructor not intended to use from external
458 private Builder() {
459 }
460
461 @Override
462 public K8sNode build() {
463 checkArgument(hostname != null, NOT_NULL_MSG, "hostname");
464 checkArgument(type != null, NOT_NULL_MSG, "type");
465 checkArgument(state != null, NOT_NULL_MSG, "state");
466 checkArgument(managementIp != null, NOT_NULL_MSG, "management IP");
467
468 return new DefaultK8sNode(hostname,
469 type,
470 intgBridge,
Jian Libf562c22019-04-15 18:07:14 +0900471 extBridge,
Jian Li1a2eb5d2019-08-27 02:07:05 +0900472 localBridge,
Jian Li0c632722019-05-08 15:58:04 +0900473 extIntf,
Jian Li49109b52019-01-22 00:17:28 +0900474 managementIp,
475 dataIp,
Jian Li1b08d652019-05-02 17:28:09 +0900476 state,
Jian Li0c632722019-05-08 15:58:04 +0900477 extBridgeIp,
478 extGatewayIp,
479 extGatewayMac,
480 podCidr);
Jian Li49109b52019-01-22 00:17:28 +0900481 }
482
483 @Override
484 public Builder hostname(String hostname) {
485 this.hostname = hostname;
486 return this;
487 }
488
489 @Override
490 public Builder type(Type type) {
491 this.type = type;
492 return this;
493 }
494
495 @Override
496 public Builder intgBridge(DeviceId deviceId) {
497 this.intgBridge = deviceId;
498 return this;
499 }
500
501 @Override
Jian Libf562c22019-04-15 18:07:14 +0900502 public Builder extBridge(DeviceId deviceId) {
503 this.extBridge = deviceId;
504 return this;
505 }
506
507 @Override
Jian Li1a2eb5d2019-08-27 02:07:05 +0900508 public Builder localBridge(DeviceId deviceId) {
509 this.localBridge = deviceId;
510 return this;
511 }
512
513 @Override
Jian Li0c632722019-05-08 15:58:04 +0900514 public Builder extIntf(String intf) {
515 this.extIntf = intf;
516 return this;
517 }
518
519 @Override
Jian Li49109b52019-01-22 00:17:28 +0900520 public Builder managementIp(IpAddress managementIp) {
521 this.managementIp = managementIp;
522 return this;
523 }
524
525 @Override
526 public Builder dataIp(IpAddress dataIp) {
527 this.dataIp = dataIp;
528 return this;
529 }
530
531 @Override
532 public Builder state(K8sNodeState state) {
533 this.state = state;
534 return this;
535 }
Jian Li1b08d652019-05-02 17:28:09 +0900536
537 @Override
Jian Li0c632722019-05-08 15:58:04 +0900538 public Builder extBridgeIp(IpAddress extBridgeIp) {
539 this.extBridgeIp = extBridgeIp;
540 return this;
541 }
542
543 @Override
544 public Builder extGatewayIp(IpAddress extGatewayIp) {
545 this.extGatewayIp = extGatewayIp;
546 return this;
547 }
548
549 @Override
Jian Li1b08d652019-05-02 17:28:09 +0900550 public Builder extGatewayMac(MacAddress extGatewayMac) {
551 this.extGatewayMac = extGatewayMac;
552 return this;
553 }
Jian Li0c632722019-05-08 15:58:04 +0900554
555 @Override
556 public Builder podCidr(String podCidr) {
557 this.podCidr = podCidr;
558 return this;
559 }
Jian Li49109b52019-01-22 00:17:28 +0900560 }
561}