blob: 900290c0f08cd8b6aca22fa7bb091f6dd6a4fa05 [file] [log] [blame]
Jian Li3defa842019-02-12 00:31:35 +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 Lie2a04ce2020-07-01 19:07:02 +090019import org.onlab.packet.IpPrefix;
20
21import java.util.Set;
Jian Li3defa842019-02-12 00:31:35 +090022
23/**
24 * Representation of configuration used in kubernetes API server.
25 */
26public interface K8sApiConfig {
27
28 /**
29 * Lists of authentication schemes.
30 */
31 enum Scheme {
32 /**
33 * Signifies that this is a HTTP authentication scheme.
34 */
35 HTTP,
36
37 /**
38 * Signifies that this is a HTTPS authentication scheme.
39 */
40 HTTPS,
41 }
42
43 /**
Jian Li1cee9882019-02-13 11:25:25 +090044 * Lists of API server connectivity states.
45 */
46 enum State {
47 /**
48 * Signifies that client is connected to k8s API server.
49 */
50 CONNECTED,
51
52 /**
53 * Signifies that client is dis-connected from k8s API server.
54 */
55 DISCONNECTED,
56 }
57
Jian Lie2a04ce2020-07-01 19:07:02 +090058 enum Mode {
59 /**
60 * Signifies that the CNI is running in normal mode.
61 */
62 NORMAL,
63
64 /**
65 * Signifies that the CNI is running in pass-through mode.
66 */
67 PASSTHROUGH,
68 }
69
70 /**
71 * Returns the cluster name.
72 *
73 * @return cluster name
74 */
75 String clusterName();
76
77 /**
78 * Returns cluster short name.
79 *
80 * @return cluster short name
81 */
82 String clusterShortName();
83
84 /**
85 * Returns the segmentation ID.
86 *
87 * @return segmentation ID
88 */
89 int segmentId();
90
91 /**
92 * Returns the external network CIDR.
93 *
94 * @return external network CIDR
95 */
96 IpPrefix extNetworkCidr();
97
Jian Li1cee9882019-02-13 11:25:25 +090098 /**
Jian Li3defa842019-02-12 00:31:35 +090099 * Returns the authentication scheme.
100 *
101 * @return authentication scheme
102 */
103 Scheme scheme();
104
105 /**
106 * Returns the IP address of kubernetes API server.
107 *
108 * @return IP address of kubernetes API server
109 */
110 IpAddress ipAddress();
111
112 /**
113 * Returns the port number of kubernetes API server.
114 *
115 * @return port number of kubernetes API server
116 */
117 int port();
118
119 /**
Jian Li1cee9882019-02-13 11:25:25 +0900120 * Returns the connectivity state to kubernetes API server.
121 *
122 * @return connectivity state to kubernetes API server
123 */
124 State state();
125
126 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900127 * Returns the CNI running mode.
128 *
129 * @return running mode
130 */
131 Mode mode();
132
133 /**
Jian Li1cee9882019-02-13 11:25:25 +0900134 * Returns new kubernetes API config instance with given state.
135 *
136 * @param newState updated state
137 * @return updated kubernetes API config
138 */
139 K8sApiConfig updateState(State newState);
140
141 /**
Jian Li3defa842019-02-12 00:31:35 +0900142 * Returns the token used for authenticating to API server.
143 *
144 * @return token value
145 */
146 String token();
147
148 /**
149 * Returns the CA certificate data.
150 *
151 * @return CA certificate data
152 */
153 String caCertData();
154
155 /**
156 * Returns the client certificate data.
157 *
158 * @return client certificate data
159 */
160 String clientCertData();
161
162 /**
163 * Returns the client key data.
164 *
165 * @return client key data
166 */
167 String clientKeyData();
168
169 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900170 * Returns the host Nodes info set.
171 *
172 * @return host nodes info set
173 */
174 Set<HostNodesInfo> infos();
175
176 /**
Jian Lic2242bd2020-09-03 13:12:14 +0900177 * Returns the distributed virtual router flag value.
178 *
179 * @return true if it supports DVR, false otherwise
180 */
181 boolean dvr();
182
183 /**
Jian Li3defa842019-02-12 00:31:35 +0900184 * Builder of new API config entity.
185 */
186 interface Builder {
187
188 /**
189 * Builds an immutable kubernetes API config instance.
190 *
191 * @return kubernetes API config instance
192 */
193 K8sApiConfig build();
194
195 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900196 * Returns kubernetes API server config builder with cluster name.
197 *
198 * @param clusterName cluster name
199 * @return kubernetes API config builder
200 */
201 Builder clusterName(String clusterName);
202
203 /**
204 * Returns kubernetes API server config builder with segment ID.
205 *
206 * @param segmentId segment ID
207 * @return kubernetes API config builder
208 */
209 Builder segmentId(int segmentId);
210
211 /**
212 * Returns kubernetes API server config builder with external network CIDR.
213 *
214 * @param extNetworkCidr external network CIDR
215 * @return kubernetes API config builder
216 */
217 Builder extNetworkCidr(IpPrefix extNetworkCidr);
218
219 /**
Jian Li3defa842019-02-12 00:31:35 +0900220 * Returns kubernetes API server config builder with supplied scheme.
221 *
222 * @param scheme scheme of authentication
223 * @return kubernetes API config builder
224 */
225 Builder scheme(Scheme scheme);
226
227 /**
228 * Returns kubernetes API server config builder with supplied IP address.
229 *
230 * @param ipAddress IP address of kubernetes API server
231 * @return kubernetes API config builder
232 */
233 Builder ipAddress(IpAddress ipAddress);
234
235 /**
236 * Returns kubernetes API server config builder with supplied port number.
237 *
238 * @param port port number of kubernetes API server
239 * @return kubernetes API config builder
240 */
241 Builder port(int port);
242
243 /**
Jian Li1cee9882019-02-13 11:25:25 +0900244 * Returns kubernetes API server config builder with supplied state.
245 *
246 * @param state connectivity state
247 * @return kubernetes API config builder
248 */
249 Builder state(State state);
250
251 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900252 * Returns kubernetes API server config builder with supplied mode.
253 *
254 * @param mode CNI running mode
255 * @return kubernetes API config builder
256 */
257 Builder mode(Mode mode);
258
259 /**
Jian Li3defa842019-02-12 00:31:35 +0900260 * Returns kubernetes API server config builder with supplied token.
261 *
262 * @param token token for authentication
263 * @return kubernetes API config builder
264 */
265 Builder token(String token);
266
267 /**
268 * Returns kubernetes API server config builder with supplied CA certificate data.
269 *
270 * @param caCertData CA certificate data
271 * @return kubernetes API config builder
272 */
273 Builder caCertData(String caCertData);
274
275 /**
276 * Returns kubernetes API server config builder with supplied client certificate data.
277 *
278 * @param clientCertData client certificate data
279 * @return kubernetes API config builder
280 */
281 Builder clientCertData(String clientCertData);
282
283 /**
284 * Returns kubernetes API server config builder with supplied client key data.
285 *
286 * @param clientKeyData client key data
287 * @return kubernetes API config builder
288 */
289 Builder clientKeyData(String clientKeyData);
Jian Lie2a04ce2020-07-01 19:07:02 +0900290
291 /**
292 * Returns kubernetes API server config builder with supplied hostNodesInfo.
293 *
294 * @param infos hostNodesInfo
295 * @return kubernetes API config builder
296 */
297 Builder infos(Set<HostNodesInfo> infos);
Jian Lic2242bd2020-09-03 13:12:14 +0900298
299 /**
300 * Returns kubernetes API server config builder with supplied DVR flag.
301 *
302 * @param dvr distributed virtual router flag
303 * @return kubernetes API config builder
304 */
305 Builder dvr(boolean dvr);
Jian Li3defa842019-02-12 00:31:35 +0900306 }
307}