blob: 382c662e2a09da01e8b7dd6e169eecde6bbb0b18 [file] [log] [blame]
Jian Li43dc9ca2020-12-19 04:01:49 +09001/*
2 * Copyright 2020-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.kubevirtnode.api;
17
18import org.onlab.packet.IpAddress;
19import org.onosproject.net.DeviceId;
Jian Li543fe852021-02-04 17:25:01 +090020import org.onosproject.net.PortNumber;
Jian Li43dc9ca2020-12-19 04:01:49 +090021
22import java.util.Collection;
23
24/**
25 * Representation of a KubeVirt node used in kubevirt networking service.
26 */
27public interface KubevirtNode {
28
29 /**
30 * Lists of kubernetes node types.
31 */
32 enum Type {
33 /**
34 * Signifies that this is a kubevirt master node.
35 */
36 MASTER,
37
38 /**
39 * Signifies that this is a kubevirt worker node.
40 */
41 WORKER,
42 }
43
44 /**
45 * Returns cluster name of the node.
46 *
47 * @return cluster name
48 */
49 String clusterName();
50
51 /**
52 * Returns hostname of the node.
53 *
54 * @return hostname
55 */
56 String hostname();
57
58 /**
59 * Returns the type of the node.
60 *
61 * @return node type
62 */
63 KubevirtNode.Type type();
64
65 /**
66 * Returns the OVSDB device ID of the node.
67 *
68 * @return ovsdb device id
69 */
70 DeviceId ovsdb();
71
72 /**
73 * Returns the device ID of the integration bridge at the node.
74 *
75 * @return device id
76 */
77 DeviceId intgBridge();
78
79 /**
Jian Li138f51f2021-01-06 03:29:58 +090080 * Returns the device ID of the tunnel bridge at the node.
81 *
82 * @return device id
83 */
84 DeviceId tunBridge();
85
86 /**
Jian Li43dc9ca2020-12-19 04:01:49 +090087 * Returns the management network IP address of the node.
88 *
89 * @return ip address
90 */
91 IpAddress managementIp();
92
93 /**
94 * Returns the data network IP address used for tunneling.
95 *
96 * @return ip address; null if tunnel mode is not enabled
97 */
98 IpAddress dataIp();
99
100 /**
101 * Returns the initialization state of the node.
102 *
103 * @return node state
104 */
105 KubevirtNodeState state();
106
107 /**
108 * Returns new kubevirt node instance with given state.
109 *
110 * @param newState updated state
Jian Li7c4a8822020-12-21 11:25:12 +0900111 * @return updated kubevirt node
Jian Li43dc9ca2020-12-19 04:01:49 +0900112 */
113 KubevirtNode updateState(KubevirtNodeState newState);
114
115 /**
Jian Li7c4a8822020-12-21 11:25:12 +0900116 * Returns new kubevirt node instance with given integration bridge.
117 *
118 * @param deviceId integration bridge device ID
119 * @return updated kubevirt node
120 */
121 KubevirtNode updateIntgBridge(DeviceId deviceId);
122
123 /**
Jian Li138f51f2021-01-06 03:29:58 +0900124 * Returns new kubevirt node instance with given tunnel bridge.
125 *
126 * @param deviceId tunnel bridge device ID
127 * @return updated kubevirt node
128 */
129 KubevirtNode updateTunBridge(DeviceId deviceId);
130
131 /**
Jian Li43dc9ca2020-12-19 04:01:49 +0900132 * Returns a collection of physical interfaces.
133 *
134 * @return physical interfaces
135 */
136 Collection<KubevirtPhyInterface> phyIntfs();
137
138 /**
Jian Li543fe852021-02-04 17:25:01 +0900139 * Returns the VXLAN tunnel port.
140 *
141 * @return VXLAN port number; null if tunnel port does not exist
142 */
143 PortNumber vxlanPort();
144
145 /**
146 * Returns the GRE tunnel port.
147 *
148 * @return GRE port number; null if the GRE tunnel port does not exist
149 */
150 PortNumber grePort();
151
152 /**
153 * Returns the GENEVE tunnel port number.
154 *
155 * @return GENEVE port number; null if the GRE tunnel port does not exist
156 */
157 PortNumber genevePort();
158
159 /**
Jian Li43dc9ca2020-12-19 04:01:49 +0900160 * Builder of new node entity.
161 */
162 interface Builder {
163 /**
164 * Builds an immutable kubevirt node instance.
165 *
166 * @return kubevirt node instance
167 */
168 KubevirtNode build();
169
170 /**
171 * Returns kubevirt node builder with supplied cluster name.
172 *
173 * @param clusterName cluster name
174 * @return kubevirt node builder
175 */
176 KubevirtNode.Builder clusterName(String clusterName);
177
178 /**
179 * Returns kubevirt node builder with supplied hostname.
180 *
181 * @param hostname hostname of the node
182 * @return kubevirt node builder
183 */
184 KubevirtNode.Builder hostname(String hostname);
185
186 /**
187 * Returns kubevirt node builder with supplied type.
188 *
189 * @param type kubevirt node type
190 * @return kubevirt node builder
191 */
192 KubevirtNode.Builder type(KubevirtNode.Type type);
193
194 /**
195 * Returns kubevirt node builder with supplied integration bridge name.
196 *
197 * @param deviceId integration bridge device ID
198 * @return kubevirt node builder
199 */
200 KubevirtNode.Builder intgBridge(DeviceId deviceId);
201
202 /**
Jian Li138f51f2021-01-06 03:29:58 +0900203 * Returns kubevirt node builder with supplied tunnel bridge name.
204 *
205 * @param deviceId tunnel bridge device ID
206 * @return kubevirt node builder
207 */
208 KubevirtNode.Builder tunBridge(DeviceId deviceId);
209
210 /**
Jian Li43dc9ca2020-12-19 04:01:49 +0900211 * Returns kubevirt node builder with supplied management IP address.
212 *
213 * @param managementIp management IP address
214 * @return kubevirt node builder
215 */
216 KubevirtNode.Builder managementIp(IpAddress managementIp);
217
218 /**
219 * Returns kubevirt node builder with supplied data IP address.
220 *
221 * @param dataIp data IP address
222 * @return kubevirt node builder
223 */
224 KubevirtNode.Builder dataIp(IpAddress dataIp);
225
226 /**
227 * Returns kubevirt node builder with supplied physical interfaces.
228 *
229 * @param phyIntfs a collection of physical interfaces
230 * @return kubevirt node builder
231 */
232 KubevirtNode.Builder phyIntfs(Collection<KubevirtPhyInterface> phyIntfs);
233
234 /**
235 * Returns kubevirt node builder with supplied node state.
236 *
237 * @param state kubevirt node state
238 * @return kubevirt node builder
239 */
240 KubevirtNode.Builder state(KubevirtNodeState state);
241 }
242}