blob: 4609f250116d480b807151ecfe075d4373c537d0 [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 /**
Jian Li6d2ffbf2020-11-04 15:58:18 +0900190 * Returns the kubernetes node info.
191 *
192 * @return node info; null if node info not exists
193 */
194 K8sNodeInfo nodeInfo();
195
196 /**
Jian Li4294af72020-10-07 02:12:33 +0900197 * Returns the kubernetes node IP address.
198 *
Jian Li6d2ffbf2020-11-04 15:58:18 +0900199 * @return node IP address; null if the node IP not exists
Jian Li4294af72020-10-07 02:12:33 +0900200 */
201 IpAddress nodeIp();
202
203 /**
Jian Li6d2ffbf2020-11-04 15:58:18 +0900204 * Returns the kubernetes node MAC address.
205 *
206 * @return node MAC address; null if the node MAC not exists
207 */
208 MacAddress nodeMac();
209
210 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900211 * Returns the initialization state of the node.
212 *
213 * @return node state
214 */
215 K8sNodeState state();
216
217 /**
Jian Li0c632722019-05-08 15:58:04 +0900218 * Returns the POD CIDR of the node.
219 *
220 * @return POD CIDR (e.g., 10.10.0.0/24)
221 */
222 String podCidr();
223
224 /**
Jian Li49109b52019-01-22 00:17:28 +0900225 * Returns new kubernetes node instance with given state.
226 *
227 * @param newState updated state
228 * @return updated kubernetes node
229 */
230 K8sNode updateState(K8sNodeState newState);
231
232 /**
Jian Li1b08d652019-05-02 17:28:09 +0900233 * Returns new kubernetes node instance with given external gateway MAC address.
234 *
235 * @param macAddress updated MAC address
236 * @return updated kubernetes node
237 */
238 K8sNode updateExtGatewayMac(MacAddress macAddress);
239
240 /**
Jian Li6d2ffbf2020-11-04 15:58:18 +0900241 * Returns new kubernetes node instance with given node info.
242 *
243 * @param nodeInfo updated node info
244 * @return updated kubernetes node
245 */
246 K8sNode updateNodeInfo(K8sNodeInfo nodeInfo);
247
248 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900249 * Returns GRE port name.
250 *
251 * @return GRE port name
252 */
253 String grePortName();
254
255 /**
256 * Returns VXLAN port name.
257 *
258 * @return VXLAN port name
259 */
260 String vxlanPortName();
261
262 /**
263 * Returns GENEVE port name.
264 *
265 * @return GENEVE port name
266 */
267 String genevePortName();
268
269 /**
270 * Returns integration bridge name.
271 *
272 * @return integration bridge name
273 */
274 String intgBridgeName();
275
276 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900277 * Returns the entry port name of integration bridge.
278 *
279 * @return entry port name
280 */
281 String intgEntryPortName();
282
283 /**
Jian Li4b5048a2020-10-08 02:57:45 +0900284 * Returns the entry port MAC address.
285 *
286 * @return entry port MAC address
287 */
288 MacAddress intgEntryPortMac();
289
290 /**
291 * Returns the port MAC address with the given patch port name.
292 *
Jian Li6d2ffbf2020-11-04 15:58:18 +0900293 * @param deviceId device identifier
Jian Li4b5048a2020-10-08 02:57:45 +0900294 * @param portName patch port name
295 * @return port MAC address
296 */
Jian Li6d2ffbf2020-11-04 15:58:18 +0900297 MacAddress portMacByName(DeviceId deviceId, String portName);
Jian Li4b5048a2020-10-08 02:57:45 +0900298
299 /**
300 * Returns the port number with the given patch port name.
301 *
Jian Li6d2ffbf2020-11-04 15:58:18 +0900302 * @param deviceId device identifier
Jian Li4b5048a2020-10-08 02:57:45 +0900303 * @param portName patch port name
304 * @return port number
305 */
Jian Li6d2ffbf2020-11-04 15:58:18 +0900306 PortNumber portNumByName(DeviceId deviceId, String portName);
Jian Li4b5048a2020-10-08 02:57:45 +0900307
308 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900309 * Return the port number of integration bridge's entry port.
310 *
311 * @return port number
312 */
313 PortNumber intgEntryPortNum();
314
315 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900316 * Returns external bridge name.
317 *
318 * @return external bridge name
319 */
320 String extBridgeName();
321
322 /**
323 * Returns local bridge name.
324 *
325 * @return local bridge name
326 */
327 String localBridgeName();
328
329 /**
330 * Returns tun bridge name.
331 *
332 * @return tun bridge name
333 */
334 String tunBridgeName();
335
336 /**
337 * Returns integration bridge port name.
338 *
339 * @return integration bridge port name
340 */
341 String intgBridgePortName();
342
343 /**
344 * Returns external bridge port name.
345 *
346 * @return external bridge port name
347 */
348 String extBridgePortName();
349
350 /**
351 * Returns local bridge port name.
352 *
353 * @return local bridge port name
354 */
355 String localBridgePortName();
356
357 /**
Jian Li619fa282020-09-02 14:45:35 +0900358 * Returns tunnel bridge port name.
359 *
360 * @return tunnel bridge port name
361 */
362 String tunBridgePortName();
363
364 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900365 * Returns integration to external patch port name.
366 *
367 * @return integration to external patch port name
368 */
369 String intgToExtPatchPortName();
370
371 /**
372 * Returns integration to tunnel patch port name.
373 *
374 * @return integration to tunnel patch port name
375 */
376 String intgToTunPatchPortName();
377
378 /**
379 * Returns integration to local patch port name.
380 *
381 * @return integration to local patch port name
382 */
383 String intgToLocalPatchPortName();
384
385 /**
386 * Returns local to integration patch port name.
387 *
388 * @return local to integration patch port name
389 */
390 String localToIntgPatchPortName();
391
392 /**
393 * Returns external to integration patch port name.
394 *
395 * @return external to integration patch port name
396 */
397 String extToIntgPatchPortName();
398
399 /**
400 * Returns tunnel to integration patch port name.
401 *
402 * @return tunnel to integration patch port name
403 */
404 String tunToIntgPatchPortName();
405
406 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900407 * Returns kubernetes to openstack integration patch port name.
408 *
409 * @return kubernetes to openstack integration patch port name
410 */
Jian Lia4d8fba2020-09-10 23:16:50 +0900411 String k8sIntgToOsPatchPortName();
412
413 /**
414 * Returns kubernetes external to openstack patch port name.
415 *
416 * @return kubernetes external to openstack patch port name
417 */
418 String k8sExtToOsPatchPortName();
Jian Li019ce6a2020-09-09 10:23:21 +0900419
420 /**
421 * Returns openstack to kubernetes integration patch port name.
422 *
423 * @return openstack to kubernetes integration patch port name
424 */
425 String osToK8sIntgPatchPortName();
426
427 /**
Jian Lia4d8fba2020-09-10 23:16:50 +0900428 * Returns openstack to kubernetes external patch port name.
429 *
430 * @return openstack to kubernetes external patch port name
431 */
432 String osToK8sExtPatchPortName();
433
434 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900435 * Returns router to external bridge patch port name.
436 *
437 * @return router to external bridge patch port name
438 */
439 String routerToExtPatchPortName();
440
441 /**
442 * Returns external to router bridge patch port name.
443 *
444 * @return external to router bridge patch port name
445 */
446 String extToRouterPatchPortName();
447
448 /**
449 * Returns router part name.
450 *
451 * @return router port name
452 */
453 String routerPortName();
454
455 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900456 * Returns the GRE tunnel port number.
457 *
458 * @return GRE port number; null if the GRE tunnel port does not exist
459 */
460 PortNumber grePortNum();
461
462 /**
463 * Returns the VXLAN tunnel port number.
464 *
465 * @return VXLAN port number; null if tunnel port does not exist
466 */
467 PortNumber vxlanPortNum();
468
469 /**
470 * Returns the GENEVE tunnel port number.
471 *
472 * @return GENEVE port number; null if the GRE tunnel port does not exist
473 */
474 PortNumber genevePortNum();
475
476 /**
Jian Li4aa17642019-01-30 00:01:11 +0900477 * Returns the host port number.
478 *
479 * @return host port number; null if the host port does not exist
480 */
Jian Lieb488ea2019-04-16 01:50:02 +0900481 PortNumber intgBridgePortNum();
Jian Li4aa17642019-01-30 00:01:11 +0900482
483 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900484 * Returns the integration to external patch port number.
485 *
486 * @return patch port number
487 */
488 PortNumber intgToExtPatchPortNum();
489
490 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900491 * Returns the integration to local patch port number.
492 *
493 * @return patch port number
494 */
495 PortNumber intgToLocalPatchPortNum();
496
497 /**
498 * Returns the local to integration patch port number.
499 *
500 * @return patch port number
501 */
Jian Lie2a04ce2020-07-01 19:07:02 +0900502 PortNumber localToIntgPatchPortNum();
Jian Li1a2eb5d2019-08-27 02:07:05 +0900503
504 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900505 * Returns the external to integration patch port number.
506 *
507 * @return patch port number
508 */
509 PortNumber extToIntgPatchPortNum();
510
511 /**
Jian Li619fa282020-09-02 14:45:35 +0900512 * Returns the integration to tunnel patch port number.
513 *
514 * @return patch port number
515 */
516 PortNumber intgToTunPortNum();
517
518 /**
519 * Returns the tunnel to integration patch port number.
520 *
521 * @return patch port number
522 */
523 PortNumber tunToIntgPortNum();
524
525 /**
Jian Li019ce6a2020-09-09 10:23:21 +0900526 * Returns the router to external bridge patch port number.
527 *
528 * @return patch port number
529 */
530 PortNumber routerToExtPortNum();
531
532 /**
533 * Returns the external to router bridge patch port number.
534 *
535 * @return patch port number
536 */
537 PortNumber extToRouterPortNum();
538
539 /**
540 * Returns the router port number.
541 *
542 * @return router port number
543 */
544 PortNumber routerPortNum();
545
546 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900547 * Returns the external bridge to router port number.
548 *
549 * @return port number, null if the port does not exist
550 */
551 PortNumber extBridgePortNum();
552
553 /**
Jian Lic2242bd2020-09-03 13:12:14 +0900554 * Returns the external interface (attached to external bridge) port number.
555 *
556 * @return port number, null if the port does ont exist
557 */
558 PortNumber extIntfPortNum();
559
560 /**
Jian Li7d111d72019-04-12 13:58:44 +0900561 * Returns the integration bridge's MAC address.
562 *
563 * @return MAC address; null if the MAC address does not exist
564 */
Jian Lieb488ea2019-04-16 01:50:02 +0900565 MacAddress intgBridgeMac();
566
567 /**
568 * Returns the external bridge's IP address.
569 *
570 * @return IP address; null if the IP address does not exist
571 */
572 IpAddress extBridgeIp();
573
574 /**
575 * Returns the external bridge's MAC address.
576 *
577 * @return MAC address; null if the MAC address does not exist
578 */
579 MacAddress extBridgeMac();
580
581 /**
582 * Returns the external gateway IP address.
583 *
584 * @return IP address; null if the IP address does not exist
585 */
586 IpAddress extGatewayIp();
587
588 /**
589 * Returns the external gateway MAC address.
590 *
591 * @return MAC address; null if the MAC address does not exist
592 */
593 MacAddress extGatewayMac();
594
595 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900596 * Builder of new node entity.
597 */
598 interface Builder {
599
600 /**
601 * Builds an immutable kubernetes node instance.
602 *
603 * @return kubernetes node instance
604 */
605 K8sNode build();
606
607 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900608 * Returns kubernetes node builder with supplied cluster name.
609 *
610 * @param clusterName cluster name
611 * @return kubernetes node builder
612 */
613 Builder clusterName(String clusterName);
614
615 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900616 * Returns kubernetes node builder with supplied hostname.
617 *
618 * @param hostname hostname of the node
619 * @return kubernetes node builder
620 */
621 Builder hostname(String hostname);
622
623 /**
624 * Returns kubernetes node builder with supplied type.
625 *
626 * @param type kubernetes node type
627 * @return kubernetes node builder
628 */
629 Builder type(Type type);
630
631 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900632 * Returns kubernetes node builder with supplied segment ID.
633 *
634 * @param segmentId kubernetes node segment ID
635 * @return kubernetes node builder
636 */
637 Builder segmentId(int segmentId);
638
639 /**
640 * Return kubernetes node builder with supplied mode.
641 *
642 * @param mode kubernetes CNI running mode
643 * @return kubernetes node builder
644 */
645 Builder mode(Mode mode);
646
647 /**
Jian Libf562c22019-04-15 18:07:14 +0900648 * Returns kubernetes node builder with supplied integration bridge name.
Jian Li9e43ec12019-01-21 23:04:23 +0900649 *
650 * @param deviceId integration bridge device ID
651 * @return kubernetes node builder
652 */
653 Builder intgBridge(DeviceId deviceId);
654
655 /**
Jian Libf562c22019-04-15 18:07:14 +0900656 * Returns kubernetes node builder with supplied external bridge name.
657 *
Jian Li1a2eb5d2019-08-27 02:07:05 +0900658 * @param deviceId external bridge device ID
Jian Libf562c22019-04-15 18:07:14 +0900659 * @return kubernetes node builder
660 */
661 Builder extBridge(DeviceId deviceId);
662
663 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900664 * Returns kubernetes node builder with supplied local bridge name.
665 *
666 * @param deviceId local bridge device ID
667 * @return kubernetes node builder
668 */
669 Builder localBridge(DeviceId deviceId);
670
671 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900672 * Returns kubernetes node builder with supplied tunnel bridge name.
673 *
674 * @param deviceId tunnel bridge device ID
675 * @return kubernetes node builder
676 */
677 Builder tunBridge(DeviceId deviceId);
678
679 /**
Jian Li0c632722019-05-08 15:58:04 +0900680 * Returns kubernetes node builder with supplied external interface.
681 *
682 * @param intf external interface
683 * @return kubernetes node builder
684 */
685 Builder extIntf(String intf);
686
687 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900688 * Returns kubernetes node builder with supplied management IP address.
689 *
690 * @param managementIp management IP address
691 * @return kubernetes node builder
692 */
693 Builder managementIp(IpAddress managementIp);
694
695 /**
696 * Returns kubernetes node builder with supplied data IP address.
697 *
698 * @param dataIp data IP address
699 * @return kubernetes node builder
700 */
701 Builder dataIp(IpAddress dataIp);
702
703 /**
Jian Li6d2ffbf2020-11-04 15:58:18 +0900704 * Returns the kubernetes node builder with supplied node info.
Jian Li4294af72020-10-07 02:12:33 +0900705 *
Jian Li6d2ffbf2020-11-04 15:58:18 +0900706 * @param nodeInfo node info
Jian Li4294af72020-10-07 02:12:33 +0900707 * @return kubernetes node builder
708 */
Jian Li6d2ffbf2020-11-04 15:58:18 +0900709 Builder nodeInfo(K8sNodeInfo nodeInfo);
Jian Li4294af72020-10-07 02:12:33 +0900710
711 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900712 * Returns kubernetes node builder with supplied node state.
713 *
714 * @param state kubernetes node state
715 * @return kubernetes node builder
716 */
717 Builder state(K8sNodeState state);
Jian Li1b08d652019-05-02 17:28:09 +0900718
719 /**
Jian Li0c632722019-05-08 15:58:04 +0900720 * Returns kubernetes node builder with supplied external bridge IP.
721 *
722 * @param extBridgeIp external bridge IP
723 * @return kubernetes node builder
724 */
725 Builder extBridgeIp(IpAddress extBridgeIp);
726
727 /**
728 * Returns kubernetes node builder with supplied gateway IP.
729 *
730 * @param extGatewayIp external gateway IP
731 * @return kubernetes node builder
732 */
733 Builder extGatewayIp(IpAddress extGatewayIp);
734
735 /**
Jian Li1b08d652019-05-02 17:28:09 +0900736 * Returns kubernetes node builder with supplied external gateway MAC.
737 *
738 * @param extGatewayMac external gateway MAC address
739 * @return kubernetes node builder
740 */
741 Builder extGatewayMac(MacAddress extGatewayMac);
Jian Li0c632722019-05-08 15:58:04 +0900742
743 /**
744 * Returns kubernetes node builder with supplied POD CIDR.
745 *
746 * @param podCidr POD CIDR
747 * @return kubernetes node builder
748 */
749 Builder podCidr(String podCidr);
Jian Li9e43ec12019-01-21 23:04:23 +0900750 }
751}