blob: 6631e55691e44157f56659b9ce97062fae9445ac [file] [log] [blame]
Jian Li9e43ec12019-01-21 23:04:23 +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 org.onlab.packet.IpAddress;
Jian Li7d111d72019-04-12 13:58:44 +090019import org.onlab.packet.MacAddress;
Jian Lie2a04ce2020-07-01 19:07:02 +090020import org.onosproject.k8snode.api.K8sApiConfig.Mode;
Jian Li9e43ec12019-01-21 23:04:23 +090021import org.onosproject.net.DeviceId;
22import org.onosproject.net.PortNumber;
23
24/**
25 * Representation of a node used in k8s-networking service.
26 */
27public interface K8sNode {
28
29 /**
30 * Lists of kubernetes node types.
31 */
32 enum Type {
33 /**
34 * Signifies that this is a kubernetes master node.
35 */
36 MASTER,
37
38 /**
39 * Signifies that this is a kubernetes minion node.
40 */
Jian Lie2a04ce2020-07-01 19:07:02 +090041 MINION,
Jian Li9e43ec12019-01-21 23:04:23 +090042 }
43
44 /**
Jian Lie2a04ce2020-07-01 19:07:02 +090045 * Returns cluster name of the node.
46 *
47 * @return cluster name
48 */
49 String clusterName();
50
51 /**
52 * Returns host short name.
53 *
54 * @return host short name
55 */
56 String hostShortName();
57
58 /**
59 * Returns a unique string with the given length and string.
60 *
61 * @param length target string length
62 * @return a unique string
63 */
64 String uniqueString(int length);
65
66 /**
67 * Returns the segmentation ID.
68 *
69 * @return segmentation ID
70 */
71 int segmentId();
72
73 /**
74 * Returns the key of VXLAN/GRE/GENEVE tunnel.
75 *
76 * @return key of various tunnel
77 */
78 String tunnelKey();
79
80 /**
81 * Returns the CNI running mode.
82 *
83 * @return CNI running mode
84 */
85 Mode mode();
86
87 /**
Jian Li9e43ec12019-01-21 23:04:23 +090088 * Returns hostname of the node.
89 *
90 * @return hostname
91 */
92 String hostname();
93
94 /**
95 * Returns the type of the node.
96 *
97 * @return node type
98 */
99 Type type();
100
101 /**
102 * Returns the OVSDB device ID of the node.
103 *
104 * @return ovsdb device id
105 */
106 DeviceId ovsdb();
107
108 /**
109 * Returns the device ID of the integration bridge at the node.
110 *
111 * @return device id
112 */
113 DeviceId intgBridge();
114
115 /**
Jian Libf562c22019-04-15 18:07:14 +0900116 * Returns the device ID of the external bridge at the node.
117 *
118 * @return device id
119 */
120 DeviceId extBridge();
121
122 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900123 * Returns the device ID of the local bridge at the node.
124 *
125 * @return device id
126 */
127 DeviceId localBridge();
128
129 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900130 * Returns the device ID of the tunnel bridge at the node.
131 *
132 * @return device id
133 */
134 DeviceId tunBridge();
135
136 /**
Jian Li0c632722019-05-08 15:58:04 +0900137 * Returns the external interface name.
138 *
139 * @return external interface name
140 */
141 String extIntf();
142
143 /**
Jian Li1cee9882019-02-13 11:25:25 +0900144 * Returns new kubernetes node instance with given integration bridge.
145 *
146 * @param deviceId integration bridge device ID
147 * @return updated kubernetes node
148 */
149 K8sNode updateIntgBridge(DeviceId deviceId);
150
151 /**
Jian Libf562c22019-04-15 18:07:14 +0900152 * Returns new kubernetes node instance with given external bridge.
153 *
154 * @param deviceId external bridge device ID
155 * @return updated kubernetes node
156 */
157 K8sNode updateExtBridge(DeviceId deviceId);
158
159 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900160 * Returns new kubernetes node instance with given local bridge.
161 *
162 * @param deviceId local bridge device ID
163 * @return updated kubernetes node
164 */
165 K8sNode updateLocalBridge(DeviceId deviceId);
166
167 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900168 * Returns new kubernetes node instance with given tun bridge.
169 *
170 * @param deviceId tunnel bridge device ID
171 * @return updated kubernetes node
172 */
173 K8sNode updateTunBridge(DeviceId deviceId);
174
175 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900176 * Returns the management network IP address of the node.
177 *
178 * @return ip address
179 */
180 IpAddress managementIp();
181
182 /**
183 * Returns the data network IP address used for tunneling.
184 *
185 * @return ip address; null if vxlan mode is not enabled
186 */
187 IpAddress dataIp();
188
189 /**
190 * Returns the initialization state of the node.
191 *
192 * @return node state
193 */
194 K8sNodeState state();
195
196 /**
Jian Li0c632722019-05-08 15:58:04 +0900197 * Returns the POD CIDR of the node.
198 *
199 * @return POD CIDR (e.g., 10.10.0.0/24)
200 */
201 String podCidr();
202
203 /**
Jian Li49109b52019-01-22 00:17:28 +0900204 * Returns new kubernetes node instance with given state.
205 *
206 * @param newState updated state
207 * @return updated kubernetes node
208 */
209 K8sNode updateState(K8sNodeState newState);
210
211 /**
Jian Li1b08d652019-05-02 17:28:09 +0900212 * Returns new kubernetes node instance with given external gateway MAC address.
213 *
214 * @param macAddress updated MAC address
215 * @return updated kubernetes node
216 */
217 K8sNode updateExtGatewayMac(MacAddress macAddress);
218
219 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900220 * Returns GRE port name.
221 *
222 * @return GRE port name
223 */
224 String grePortName();
225
226 /**
227 * Returns VXLAN port name.
228 *
229 * @return VXLAN port name
230 */
231 String vxlanPortName();
232
233 /**
234 * Returns GENEVE port name.
235 *
236 * @return GENEVE port name
237 */
238 String genevePortName();
239
240 /**
241 * Returns integration bridge name.
242 *
243 * @return integration bridge name
244 */
245 String intgBridgeName();
246
247 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900248 * Returns the entry port name of integration bridge.
249 *
250 * @return entry port name
251 */
252 String intgEntryPortName();
253
254 /**
255 * Return the port number of integration bridge's entry port.
256 *
257 * @return port number
258 */
259 PortNumber intgEntryPortNum();
260
261 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900262 * Returns external bridge name.
263 *
264 * @return external bridge name
265 */
266 String extBridgeName();
267
268 /**
269 * Returns local bridge name.
270 *
271 * @return local bridge name
272 */
273 String localBridgeName();
274
275 /**
276 * Returns tun bridge name.
277 *
278 * @return tun bridge name
279 */
280 String tunBridgeName();
281
282 /**
283 * Returns integration bridge port name.
284 *
285 * @return integration bridge port name
286 */
287 String intgBridgePortName();
288
289 /**
290 * Returns external bridge port name.
291 *
292 * @return external bridge port name
293 */
294 String extBridgePortName();
295
296 /**
297 * Returns local bridge port name.
298 *
299 * @return local bridge port name
300 */
301 String localBridgePortName();
302
303 /**
Jian Li619fa282020-09-02 14:45:35 +0900304 * Returns tunnel bridge port name.
305 *
306 * @return tunnel bridge port name
307 */
308 String tunBridgePortName();
309
310 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900311 * Returns integration to external patch port name.
312 *
313 * @return integration to external patch port name
314 */
315 String intgToExtPatchPortName();
316
317 /**
318 * Returns integration to tunnel patch port name.
319 *
320 * @return integration to tunnel patch port name
321 */
322 String intgToTunPatchPortName();
323
324 /**
325 * Returns integration to local patch port name.
326 *
327 * @return integration to local patch port name
328 */
329 String intgToLocalPatchPortName();
330
331 /**
332 * Returns local to integration patch port name.
333 *
334 * @return local to integration patch port name
335 */
336 String localToIntgPatchPortName();
337
338 /**
339 * Returns external to integration patch port name.
340 *
341 * @return external to integration patch port name
342 */
343 String extToIntgPatchPortName();
344
345 /**
346 * Returns tunnel to integration patch port name.
347 *
348 * @return tunnel to integration patch port name
349 */
350 String tunToIntgPatchPortName();
351
352 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900353 * Returns kubernetes to openstack integration patch port name.
354 *
355 * @return kubernetes to openstack integration patch port name
356 */
Jian Lia4d8fba2020-09-10 23:16:50 +0900357 String k8sIntgToOsPatchPortName();
358
359 /**
360 * Returns kubernetes external to openstack patch port name.
361 *
362 * @return kubernetes external to openstack patch port name
363 */
364 String k8sExtToOsPatchPortName();
Jian Li019ce6a2020-09-09 10:23:21 +0900365
366 /**
367 * Returns openstack to kubernetes integration patch port name.
368 *
369 * @return openstack to kubernetes integration patch port name
370 */
371 String osToK8sIntgPatchPortName();
372
373 /**
Jian Lia4d8fba2020-09-10 23:16:50 +0900374 * Returns openstack to kubernetes external patch port name.
375 *
376 * @return openstack to kubernetes external patch port name
377 */
378 String osToK8sExtPatchPortName();
379
380 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900381 * Returns router to external bridge patch port name.
382 *
383 * @return router to external bridge patch port name
384 */
385 String routerToExtPatchPortName();
386
387 /**
388 * Returns external to router bridge patch port name.
389 *
390 * @return external to router bridge patch port name
391 */
392 String extToRouterPatchPortName();
393
394 /**
395 * Returns router part name.
396 *
397 * @return router port name
398 */
399 String routerPortName();
400
401 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900402 * Returns the GRE tunnel port number.
403 *
404 * @return GRE port number; null if the GRE tunnel port does not exist
405 */
406 PortNumber grePortNum();
407
408 /**
409 * Returns the VXLAN tunnel port number.
410 *
411 * @return VXLAN port number; null if tunnel port does not exist
412 */
413 PortNumber vxlanPortNum();
414
415 /**
416 * Returns the GENEVE tunnel port number.
417 *
418 * @return GENEVE port number; null if the GRE tunnel port does not exist
419 */
420 PortNumber genevePortNum();
421
422 /**
Jian Li4aa17642019-01-30 00:01:11 +0900423 * Returns the host port number.
424 *
425 * @return host port number; null if the host port does not exist
426 */
Jian Lieb488ea2019-04-16 01:50:02 +0900427 PortNumber intgBridgePortNum();
Jian Li4aa17642019-01-30 00:01:11 +0900428
429 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900430 * Returns the integration to external patch port number.
431 *
432 * @return patch port number
433 */
434 PortNumber intgToExtPatchPortNum();
435
436 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900437 * Returns the integration to local patch port number.
438 *
439 * @return patch port number
440 */
441 PortNumber intgToLocalPatchPortNum();
442
443 /**
444 * Returns the local to integration patch port number.
445 *
446 * @return patch port number
447 */
Jian Lie2a04ce2020-07-01 19:07:02 +0900448 PortNumber localToIntgPatchPortNum();
Jian Li1a2eb5d2019-08-27 02:07:05 +0900449
450 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900451 * Returns the external to integration patch port number.
452 *
453 * @return patch port number
454 */
455 PortNumber extToIntgPatchPortNum();
456
457 /**
Jian Li619fa282020-09-02 14:45:35 +0900458 * Returns the integration to tunnel patch port number.
459 *
460 * @return patch port number
461 */
462 PortNumber intgToTunPortNum();
463
464 /**
465 * Returns the tunnel to integration patch port number.
466 *
467 * @return patch port number
468 */
469 PortNumber tunToIntgPortNum();
470
471 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900472 * Returns the router to external bridge patch port number.
473 *
474 * @return patch port number
475 */
476 PortNumber routerToExtPortNum();
477
478 /**
479 * Returns the external to router bridge patch port number.
480 *
481 * @return patch port number
482 */
483 PortNumber extToRouterPortNum();
484
485 /**
486 * Returns the router port number.
487 *
488 * @return router port number
489 */
490 PortNumber routerPortNum();
491
492 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900493 * Returns the external bridge to router port number.
494 *
495 * @return port number, null if the port does not exist
496 */
497 PortNumber extBridgePortNum();
498
499 /**
Jian Lic2242bd2020-09-03 13:12:14 +0900500 * Returns the external interface (attached to external bridge) port number.
501 *
502 * @return port number, null if the port does ont exist
503 */
504 PortNumber extIntfPortNum();
505
506 /**
Jian Li7d111d72019-04-12 13:58:44 +0900507 * Returns the integration bridge's MAC address.
508 *
509 * @return MAC address; null if the MAC address does not exist
510 */
Jian Lieb488ea2019-04-16 01:50:02 +0900511 MacAddress intgBridgeMac();
512
513 /**
514 * Returns the external bridge's IP address.
515 *
516 * @return IP address; null if the IP address does not exist
517 */
518 IpAddress extBridgeIp();
519
520 /**
521 * Returns the external bridge's MAC address.
522 *
523 * @return MAC address; null if the MAC address does not exist
524 */
525 MacAddress extBridgeMac();
526
527 /**
528 * Returns the external gateway IP address.
529 *
530 * @return IP address; null if the IP address does not exist
531 */
532 IpAddress extGatewayIp();
533
534 /**
535 * Returns the external gateway MAC address.
536 *
537 * @return MAC address; null if the MAC address does not exist
538 */
539 MacAddress extGatewayMac();
540
541 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900542 * Builder of new node entity.
543 */
544 interface Builder {
545
546 /**
547 * Builds an immutable kubernetes node instance.
548 *
549 * @return kubernetes node instance
550 */
551 K8sNode build();
552
553 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900554 * Returns kubernetes node builder with supplied cluster name.
555 *
556 * @param clusterName cluster name
557 * @return kubernetes node builder
558 */
559 Builder clusterName(String clusterName);
560
561 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900562 * Returns kubernetes node builder with supplied hostname.
563 *
564 * @param hostname hostname of the node
565 * @return kubernetes node builder
566 */
567 Builder hostname(String hostname);
568
569 /**
570 * Returns kubernetes node builder with supplied type.
571 *
572 * @param type kubernetes node type
573 * @return kubernetes node builder
574 */
575 Builder type(Type type);
576
577 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900578 * Returns kubernetes node builder with supplied segment ID.
579 *
580 * @param segmentId kubernetes node segment ID
581 * @return kubernetes node builder
582 */
583 Builder segmentId(int segmentId);
584
585 /**
586 * Return kubernetes node builder with supplied mode.
587 *
588 * @param mode kubernetes CNI running mode
589 * @return kubernetes node builder
590 */
591 Builder mode(Mode mode);
592
593 /**
Jian Libf562c22019-04-15 18:07:14 +0900594 * Returns kubernetes node builder with supplied integration bridge name.
Jian Li9e43ec12019-01-21 23:04:23 +0900595 *
596 * @param deviceId integration bridge device ID
597 * @return kubernetes node builder
598 */
599 Builder intgBridge(DeviceId deviceId);
600
601 /**
Jian Libf562c22019-04-15 18:07:14 +0900602 * Returns kubernetes node builder with supplied external bridge name.
603 *
Jian Li1a2eb5d2019-08-27 02:07:05 +0900604 * @param deviceId external bridge device ID
Jian Libf562c22019-04-15 18:07:14 +0900605 * @return kubernetes node builder
606 */
607 Builder extBridge(DeviceId deviceId);
608
609 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900610 * Returns kubernetes node builder with supplied local bridge name.
611 *
612 * @param deviceId local bridge device ID
613 * @return kubernetes node builder
614 */
615 Builder localBridge(DeviceId deviceId);
616
617 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900618 * Returns kubernetes node builder with supplied tunnel bridge name.
619 *
620 * @param deviceId tunnel bridge device ID
621 * @return kubernetes node builder
622 */
623 Builder tunBridge(DeviceId deviceId);
624
625 /**
Jian Li0c632722019-05-08 15:58:04 +0900626 * Returns kubernetes node builder with supplied external interface.
627 *
628 * @param intf external interface
629 * @return kubernetes node builder
630 */
631 Builder extIntf(String intf);
632
633 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900634 * Returns kubernetes node builder with supplied management IP address.
635 *
636 * @param managementIp management IP address
637 * @return kubernetes node builder
638 */
639 Builder managementIp(IpAddress managementIp);
640
641 /**
642 * Returns kubernetes node builder with supplied data IP address.
643 *
644 * @param dataIp data IP address
645 * @return kubernetes node builder
646 */
647 Builder dataIp(IpAddress dataIp);
648
649 /**
650 * Returns kubernetes node builder with supplied node state.
651 *
652 * @param state kubernetes node state
653 * @return kubernetes node builder
654 */
655 Builder state(K8sNodeState state);
Jian Li1b08d652019-05-02 17:28:09 +0900656
657 /**
Jian Li0c632722019-05-08 15:58:04 +0900658 * Returns kubernetes node builder with supplied external bridge IP.
659 *
660 * @param extBridgeIp external bridge IP
661 * @return kubernetes node builder
662 */
663 Builder extBridgeIp(IpAddress extBridgeIp);
664
665 /**
666 * Returns kubernetes node builder with supplied gateway IP.
667 *
668 * @param extGatewayIp external gateway IP
669 * @return kubernetes node builder
670 */
671 Builder extGatewayIp(IpAddress extGatewayIp);
672
673 /**
Jian Li1b08d652019-05-02 17:28:09 +0900674 * Returns kubernetes node builder with supplied external gateway MAC.
675 *
676 * @param extGatewayMac external gateway MAC address
677 * @return kubernetes node builder
678 */
679 Builder extGatewayMac(MacAddress extGatewayMac);
Jian Li0c632722019-05-08 15:58:04 +0900680
681 /**
682 * Returns kubernetes node builder with supplied POD CIDR.
683 *
684 * @param podCidr POD CIDR
685 * @return kubernetes node builder
686 */
687 Builder podCidr(String podCidr);
Jian Li9e43ec12019-01-21 23:04:23 +0900688 }
689}