blob: 055b0df1b9d727622bb2001ee1d32e03d06bcd23 [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 Li9e43ec12019-01-21 23:04:23 +090020import org.onosproject.net.DeviceId;
21import org.onosproject.net.PortNumber;
22
23/**
24 * Representation of a node used in k8s-networking service.
25 */
26public interface K8sNode {
27
28 /**
29 * Lists of kubernetes node types.
30 */
31 enum Type {
32 /**
33 * Signifies that this is a kubernetes master node.
34 */
35 MASTER,
36
37 /**
38 * Signifies that this is a kubernetes minion node.
39 */
40 MINION
41 }
42
43 /**
44 * Returns hostname of the node.
45 *
46 * @return hostname
47 */
48 String hostname();
49
50 /**
51 * Returns the type of the node.
52 *
53 * @return node type
54 */
55 Type type();
56
57 /**
58 * Returns the OVSDB device ID of the node.
59 *
60 * @return ovsdb device id
61 */
62 DeviceId ovsdb();
63
64 /**
65 * Returns the device ID of the integration bridge at the node.
66 *
67 * @return device id
68 */
69 DeviceId intgBridge();
70
71 /**
Jian Libf562c22019-04-15 18:07:14 +090072 * Returns the device ID of the external bridge at the node.
73 *
74 * @return device id
75 */
76 DeviceId extBridge();
77
78 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +090079 * Returns the device ID of the local bridge at the node.
80 *
81 * @return device id
82 */
83 DeviceId localBridge();
84
85 /**
Jian Li0c632722019-05-08 15:58:04 +090086 * Returns the external interface name.
87 *
88 * @return external interface name
89 */
90 String extIntf();
91
92 /**
Jian Li1cee9882019-02-13 11:25:25 +090093 * Returns new kubernetes node instance with given integration bridge.
94 *
95 * @param deviceId integration bridge device ID
96 * @return updated kubernetes node
97 */
98 K8sNode updateIntgBridge(DeviceId deviceId);
99
100 /**
Jian Libf562c22019-04-15 18:07:14 +0900101 * Returns new kubernetes node instance with given external bridge.
102 *
103 * @param deviceId external bridge device ID
104 * @return updated kubernetes node
105 */
106 K8sNode updateExtBridge(DeviceId deviceId);
107
108 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900109 * Returns new kubernetes node instance with given local bridge.
110 *
111 * @param deviceId local bridge device ID
112 * @return updated kubernetes node
113 */
114 K8sNode updateLocalBridge(DeviceId deviceId);
115
116 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900117 * Returns the management network IP address of the node.
118 *
119 * @return ip address
120 */
121 IpAddress managementIp();
122
123 /**
124 * Returns the data network IP address used for tunneling.
125 *
126 * @return ip address; null if vxlan mode is not enabled
127 */
128 IpAddress dataIp();
129
130 /**
131 * Returns the initialization state of the node.
132 *
133 * @return node state
134 */
135 K8sNodeState state();
136
137 /**
Jian Li0c632722019-05-08 15:58:04 +0900138 * Returns the POD CIDR of the node.
139 *
140 * @return POD CIDR (e.g., 10.10.0.0/24)
141 */
142 String podCidr();
143
144 /**
Jian Li49109b52019-01-22 00:17:28 +0900145 * Returns new kubernetes node instance with given state.
146 *
147 * @param newState updated state
148 * @return updated kubernetes node
149 */
150 K8sNode updateState(K8sNodeState newState);
151
152 /**
Jian Li1b08d652019-05-02 17:28:09 +0900153 * Returns new kubernetes node instance with given external gateway MAC address.
154 *
155 * @param macAddress updated MAC address
156 * @return updated kubernetes node
157 */
158 K8sNode updateExtGatewayMac(MacAddress macAddress);
159
160 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900161 * Returns the GRE tunnel port number.
162 *
163 * @return GRE port number; null if the GRE tunnel port does not exist
164 */
165 PortNumber grePortNum();
166
167 /**
168 * Returns the VXLAN tunnel port number.
169 *
170 * @return VXLAN port number; null if tunnel port does not exist
171 */
172 PortNumber vxlanPortNum();
173
174 /**
175 * Returns the GENEVE tunnel port number.
176 *
177 * @return GENEVE port number; null if the GRE tunnel port does not exist
178 */
179 PortNumber genevePortNum();
180
181 /**
Jian Li4aa17642019-01-30 00:01:11 +0900182 * Returns the host port number.
183 *
184 * @return host port number; null if the host port does not exist
185 */
Jian Lieb488ea2019-04-16 01:50:02 +0900186 PortNumber intgBridgePortNum();
Jian Li4aa17642019-01-30 00:01:11 +0900187
188 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900189 * Returns the integration to external patch port number.
190 *
191 * @return patch port number
192 */
193 PortNumber intgToExtPatchPortNum();
194
195 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900196 * Returns the integration to local patch port number.
197 *
198 * @return patch port number
199 */
200 PortNumber intgToLocalPatchPortNum();
201
202 /**
203 * Returns the local to integration patch port number.
204 *
205 * @return patch port number
206 */
207 PortNumber localToIntgPatchPortNumber();
208
209 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900210 * Returns the external to integration patch port number.
211 *
212 * @return patch port number
213 */
214 PortNumber extToIntgPatchPortNum();
215
216 /**
217 * Returns the external bridge to router port number.
218 *
219 * @return port number, null if the port does not exist
220 */
221 PortNumber extBridgePortNum();
222
223 /**
Jian Li7d111d72019-04-12 13:58:44 +0900224 * Returns the integration bridge's MAC address.
225 *
226 * @return MAC address; null if the MAC address does not exist
227 */
Jian Lieb488ea2019-04-16 01:50:02 +0900228 MacAddress intgBridgeMac();
229
230 /**
231 * Returns the external bridge's IP address.
232 *
233 * @return IP address; null if the IP address does not exist
234 */
235 IpAddress extBridgeIp();
236
237 /**
238 * Returns the external bridge's MAC address.
239 *
240 * @return MAC address; null if the MAC address does not exist
241 */
242 MacAddress extBridgeMac();
243
244 /**
245 * Returns the external gateway IP address.
246 *
247 * @return IP address; null if the IP address does not exist
248 */
249 IpAddress extGatewayIp();
250
251 /**
252 * Returns the external gateway MAC address.
253 *
254 * @return MAC address; null if the MAC address does not exist
255 */
256 MacAddress extGatewayMac();
257
258 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900259 * Builder of new node entity.
260 */
261 interface Builder {
262
263 /**
264 * Builds an immutable kubernetes node instance.
265 *
266 * @return kubernetes node instance
267 */
268 K8sNode build();
269
270 /**
271 * Returns kubernetes node builder with supplied hostname.
272 *
273 * @param hostname hostname of the node
274 * @return kubernetes node builder
275 */
276 Builder hostname(String hostname);
277
278 /**
279 * Returns kubernetes node builder with supplied type.
280 *
281 * @param type kubernetes node type
282 * @return kubernetes node builder
283 */
284 Builder type(Type type);
285
286 /**
Jian Libf562c22019-04-15 18:07:14 +0900287 * Returns kubernetes node builder with supplied integration bridge name.
Jian Li9e43ec12019-01-21 23:04:23 +0900288 *
289 * @param deviceId integration bridge device ID
290 * @return kubernetes node builder
291 */
292 Builder intgBridge(DeviceId deviceId);
293
294 /**
Jian Libf562c22019-04-15 18:07:14 +0900295 * Returns kubernetes node builder with supplied external bridge name.
296 *
Jian Li1a2eb5d2019-08-27 02:07:05 +0900297 * @param deviceId external bridge device ID
Jian Libf562c22019-04-15 18:07:14 +0900298 * @return kubernetes node builder
299 */
300 Builder extBridge(DeviceId deviceId);
301
302 /**
Jian Li1a2eb5d2019-08-27 02:07:05 +0900303 * Returns kubernetes node builder with supplied local bridge name.
304 *
305 * @param deviceId local bridge device ID
306 * @return kubernetes node builder
307 */
308 Builder localBridge(DeviceId deviceId);
309
310 /**
Jian Li0c632722019-05-08 15:58:04 +0900311 * Returns kubernetes node builder with supplied external interface.
312 *
313 * @param intf external interface
314 * @return kubernetes node builder
315 */
316 Builder extIntf(String intf);
317
318 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900319 * Returns kubernetes node builder with supplied management IP address.
320 *
321 * @param managementIp management IP address
322 * @return kubernetes node builder
323 */
324 Builder managementIp(IpAddress managementIp);
325
326 /**
327 * Returns kubernetes node builder with supplied data IP address.
328 *
329 * @param dataIp data IP address
330 * @return kubernetes node builder
331 */
332 Builder dataIp(IpAddress dataIp);
333
334 /**
335 * Returns kubernetes node builder with supplied node state.
336 *
337 * @param state kubernetes node state
338 * @return kubernetes node builder
339 */
340 Builder state(K8sNodeState state);
Jian Li1b08d652019-05-02 17:28:09 +0900341
342 /**
Jian Li0c632722019-05-08 15:58:04 +0900343 * Returns kubernetes node builder with supplied external bridge IP.
344 *
345 * @param extBridgeIp external bridge IP
346 * @return kubernetes node builder
347 */
348 Builder extBridgeIp(IpAddress extBridgeIp);
349
350 /**
351 * Returns kubernetes node builder with supplied gateway IP.
352 *
353 * @param extGatewayIp external gateway IP
354 * @return kubernetes node builder
355 */
356 Builder extGatewayIp(IpAddress extGatewayIp);
357
358 /**
Jian Li1b08d652019-05-02 17:28:09 +0900359 * Returns kubernetes node builder with supplied external gateway MAC.
360 *
361 * @param extGatewayMac external gateway MAC address
362 * @return kubernetes node builder
363 */
364 Builder extGatewayMac(MacAddress extGatewayMac);
Jian Li0c632722019-05-08 15:58:04 +0900365
366 /**
367 * Returns kubernetes node builder with supplied POD CIDR.
368 *
369 * @param podCidr POD CIDR
370 * @return kubernetes node builder
371 */
372 Builder podCidr(String podCidr);
Jian Li9e43ec12019-01-21 23:04:23 +0900373 }
374}