blob: d01f3a20c1f56efc63dbb30660c78689e0eb9cd1 [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 Li3defa842019-02-12 00:31:35 +0900177 * Builder of new API config entity.
178 */
179 interface Builder {
180
181 /**
182 * Builds an immutable kubernetes API config instance.
183 *
184 * @return kubernetes API config instance
185 */
186 K8sApiConfig build();
187
188 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900189 * Returns kubernetes API server config builder with cluster name.
190 *
191 * @param clusterName cluster name
192 * @return kubernetes API config builder
193 */
194 Builder clusterName(String clusterName);
195
196 /**
197 * Returns kubernetes API server config builder with segment ID.
198 *
199 * @param segmentId segment ID
200 * @return kubernetes API config builder
201 */
202 Builder segmentId(int segmentId);
203
204 /**
205 * Returns kubernetes API server config builder with external network CIDR.
206 *
207 * @param extNetworkCidr external network CIDR
208 * @return kubernetes API config builder
209 */
210 Builder extNetworkCidr(IpPrefix extNetworkCidr);
211
212 /**
Jian Li3defa842019-02-12 00:31:35 +0900213 * Returns kubernetes API server config builder with supplied scheme.
214 *
215 * @param scheme scheme of authentication
216 * @return kubernetes API config builder
217 */
218 Builder scheme(Scheme scheme);
219
220 /**
221 * Returns kubernetes API server config builder with supplied IP address.
222 *
223 * @param ipAddress IP address of kubernetes API server
224 * @return kubernetes API config builder
225 */
226 Builder ipAddress(IpAddress ipAddress);
227
228 /**
229 * Returns kubernetes API server config builder with supplied port number.
230 *
231 * @param port port number of kubernetes API server
232 * @return kubernetes API config builder
233 */
234 Builder port(int port);
235
236 /**
Jian Li1cee9882019-02-13 11:25:25 +0900237 * Returns kubernetes API server config builder with supplied state.
238 *
239 * @param state connectivity state
240 * @return kubernetes API config builder
241 */
242 Builder state(State state);
243
244 /**
Jian Lie2a04ce2020-07-01 19:07:02 +0900245 * Returns kubernetes API server config builder with supplied mode.
246 *
247 * @param mode CNI running mode
248 * @return kubernetes API config builder
249 */
250 Builder mode(Mode mode);
251
252 /**
Jian Li3defa842019-02-12 00:31:35 +0900253 * Returns kubernetes API server config builder with supplied token.
254 *
255 * @param token token for authentication
256 * @return kubernetes API config builder
257 */
258 Builder token(String token);
259
260 /**
261 * Returns kubernetes API server config builder with supplied CA certificate data.
262 *
263 * @param caCertData CA certificate data
264 * @return kubernetes API config builder
265 */
266 Builder caCertData(String caCertData);
267
268 /**
269 * Returns kubernetes API server config builder with supplied client certificate data.
270 *
271 * @param clientCertData client certificate data
272 * @return kubernetes API config builder
273 */
274 Builder clientCertData(String clientCertData);
275
276 /**
277 * Returns kubernetes API server config builder with supplied client key data.
278 *
279 * @param clientKeyData client key data
280 * @return kubernetes API config builder
281 */
282 Builder clientKeyData(String clientKeyData);
Jian Lie2a04ce2020-07-01 19:07:02 +0900283
284 /**
285 * Returns kubernetes API server config builder with supplied hostNodesInfo.
286 *
287 * @param infos hostNodesInfo
288 * @return kubernetes API config builder
289 */
290 Builder infos(Set<HostNodesInfo> infos);
Jian Li3defa842019-02-12 00:31:35 +0900291 }
292}