blob: af280fb1b45c4ff2535753ba297c0117c1e86f38 [file] [log] [blame]
Jian Lia1ebbf42020-12-24 02:43:21 +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 com.google.common.base.MoreObjects;
19import org.onlab.packet.IpAddress;
20
21import java.util.Objects;
22
23import static com.google.common.base.Preconditions.checkArgument;
24import static org.onosproject.kubevirtnode.api.KubevirtApiConfig.Scheme.HTTPS;
25
26/**
27 * Default implementation of KubeVirt API configuration.
28 */
29public final class DefaultKubevirtApiConfig implements KubevirtApiConfig {
30
31 private static final String NOT_NULL_MSG = "API Config % cannot be null";
32
33 private final Scheme scheme;
34 private final IpAddress ipAddress;
35 private final int port;
36 private final State state;
37 private final String token;
38 private final String caCertData;
39 private final String clientCertData;
40 private final String clientKeyData;
Jian Li94b6d162021-04-15 17:09:11 +090041 private final String serviceFqdn;
Jian Li3c3b1632021-04-28 17:24:56 +090042 private final String apiServerFqdn;
Jian Lia1ebbf42020-12-24 02:43:21 +090043
44 /**
45 * Default constructor for Kubevirt API config.
46 *
47 * @param scheme authentication scheme
48 * @param ipAddress IP address of API server
49 * @param port port number of API server
50 * @param state API server connectivity state
51 * @param token token used for authenticating against API server
52 * @param caCertData CA certificate data
53 * @param clientCertData client certificate data
54 * @param clientKeyData client key data
Jian Li94b6d162021-04-15 17:09:11 +090055 * @param serviceFqdn service FQDN
Jian Li3c3b1632021-04-28 17:24:56 +090056 * @param apiServerFqdn API server FQDN
Jian Lia1ebbf42020-12-24 02:43:21 +090057 */
58 private DefaultKubevirtApiConfig(Scheme scheme, IpAddress ipAddress,
59 int port, State state,
60 String token, String caCertData,
Jian Li94b6d162021-04-15 17:09:11 +090061 String clientCertData, String clientKeyData,
Jian Li3c3b1632021-04-28 17:24:56 +090062 String serviceFqdn, String apiServerFqdn) {
Jian Lia1ebbf42020-12-24 02:43:21 +090063 this.scheme = scheme;
64 this.ipAddress = ipAddress;
65 this.port = port;
66 this.state = state;
67 this.token = token;
68 this.caCertData = caCertData;
69 this.clientCertData = clientCertData;
70 this.clientKeyData = clientKeyData;
Jian Li94b6d162021-04-15 17:09:11 +090071 this.serviceFqdn = serviceFqdn;
Jian Li3c3b1632021-04-28 17:24:56 +090072 this.apiServerFqdn = apiServerFqdn;
Jian Lia1ebbf42020-12-24 02:43:21 +090073 }
74
75 @Override
76 public Scheme scheme() {
77 return scheme;
78 }
79
80 @Override
81 public IpAddress ipAddress() {
82 return ipAddress;
83 }
84
85 @Override
86 public int port() {
87 return port;
88 }
89
90 @Override
91 public State state() {
92 return state;
93 }
94
95 @Override
96 public KubevirtApiConfig updateState(State newState) {
97 return new Builder()
98 .scheme(scheme)
99 .ipAddress(ipAddress)
100 .port(port)
101 .state(newState)
102 .token(token)
103 .caCertData(caCertData)
104 .clientCertData(clientCertData)
105 .clientKeyData(clientKeyData)
Jian Li94b6d162021-04-15 17:09:11 +0900106 .serviceFqdn(serviceFqdn)
Jian Li3c3b1632021-04-28 17:24:56 +0900107 .apiServerFqdn(apiServerFqdn)
108 .build();
109 }
110
111 @Override
112 public KubevirtApiConfig updateIpAddress(IpAddress newIpAddress) {
113 return new Builder()
114 .scheme(scheme)
115 .ipAddress(newIpAddress)
116 .port(port)
117 .state(state)
118 .token(token)
119 .caCertData(caCertData)
120 .clientCertData(clientCertData)
121 .clientKeyData(clientKeyData)
122 .serviceFqdn(serviceFqdn)
123 .apiServerFqdn(apiServerFqdn)
124 .build();
125 }
126
127 @Override
128 public KubevirtApiConfig updatePort(int newPort) {
129 return new Builder()
130 .scheme(scheme)
131 .ipAddress(ipAddress)
132 .port(newPort)
133 .state(state)
134 .token(token)
135 .caCertData(caCertData)
136 .clientCertData(clientCertData)
137 .clientKeyData(clientKeyData)
138 .serviceFqdn(serviceFqdn)
139 .apiServerFqdn(apiServerFqdn)
Jian Lia1ebbf42020-12-24 02:43:21 +0900140 .build();
141 }
142
143 @Override
144 public String token() {
145 return token;
146 }
147
148 @Override
149 public String caCertData() {
150 return caCertData;
151 }
152
153 @Override
154 public String clientCertData() {
155 return clientCertData;
156 }
157
158 @Override
159 public String clientKeyData() {
160 return clientKeyData;
161 }
162
163 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900164 public String serviceFqdn() {
165 return serviceFqdn;
166 }
167
168 @Override
Jian Li3c3b1632021-04-28 17:24:56 +0900169 public String apiServerFqdn() {
170 return apiServerFqdn;
171 }
172
173 @Override
Jian Lia1ebbf42020-12-24 02:43:21 +0900174 public boolean equals(Object o) {
175 if (this == o) {
176 return true;
177 }
178 if (o == null || getClass() != o.getClass()) {
179 return false;
180 }
181 DefaultKubevirtApiConfig that = (DefaultKubevirtApiConfig) o;
182 return port == that.port && scheme == that.scheme &&
183 ipAddress.equals(that.ipAddress) && state == that.state &&
184 token.equals(that.token) && caCertData.equals(that.caCertData) &&
185 clientCertData.equals(that.clientCertData) &&
Jian Li94b6d162021-04-15 17:09:11 +0900186 clientKeyData.equals(that.clientKeyData) &&
Jian Li3c3b1632021-04-28 17:24:56 +0900187 Objects.equals(serviceFqdn, that.serviceFqdn) &&
188 Objects.equals(apiServerFqdn, that.apiServerFqdn);
Jian Lia1ebbf42020-12-24 02:43:21 +0900189 }
190
191 @Override
192 public int hashCode() {
193 return Objects.hash(scheme, ipAddress, port, state, token,
Jian Li3c3b1632021-04-28 17:24:56 +0900194 caCertData, clientCertData, clientKeyData, serviceFqdn, apiServerFqdn);
Jian Lia1ebbf42020-12-24 02:43:21 +0900195 }
196
197 @Override
198 public String toString() {
199 return MoreObjects.toStringHelper(this)
200 .add("scheme", scheme)
201 .add("ipAddress", ipAddress)
202 .add("port", port)
203 .add("state", state)
204 .add("token", token)
205 .add("caCertData", caCertData)
206 .add("clientCertData", clientCertData)
207 .add("clientKeyData", clientKeyData)
Jian Li94b6d162021-04-15 17:09:11 +0900208 .add("serviceFqdn", serviceFqdn)
Jian Li3c3b1632021-04-28 17:24:56 +0900209 .add("apiServerFqdn", apiServerFqdn)
Jian Lia1ebbf42020-12-24 02:43:21 +0900210 .toString();
211 }
212
213 /**
214 * Returns new builder instance.
215 *
216 * @return KubeVirt API server config builder
217 */
218 public static Builder builder() {
219 return new Builder();
220 }
221
222 public static final class Builder implements KubevirtApiConfig.Builder {
223
224 private Scheme scheme;
225 private IpAddress ipAddress;
226 private int port;
227 private State state;
228 private String token;
229 private String caCertData;
230 private String clientCertData;
231 private String clientKeyData;
Jian Li94b6d162021-04-15 17:09:11 +0900232 private String serviceFqdn;
Jian Li3c3b1632021-04-28 17:24:56 +0900233 private String apiServerFqdn;
Jian Lia1ebbf42020-12-24 02:43:21 +0900234
235 @Override
236 public KubevirtApiConfig build() {
237 checkArgument(scheme != null, NOT_NULL_MSG, "scheme");
238 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
239 checkArgument(state != null, NOT_NULL_MSG, "state");
240
241 if (scheme == HTTPS) {
242 checkArgument(caCertData != null, NOT_NULL_MSG, "caCertData");
243 checkArgument(clientCertData != null, NOT_NULL_MSG, "clientCertData");
244 checkArgument(clientKeyData != null, NOT_NULL_MSG, "clientKeyData");
245 }
246
247 return new DefaultKubevirtApiConfig(scheme, ipAddress, port, state,
Jian Li3c3b1632021-04-28 17:24:56 +0900248 token, caCertData, clientCertData, clientKeyData, serviceFqdn, apiServerFqdn);
Jian Lia1ebbf42020-12-24 02:43:21 +0900249 }
250
251 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900252 public Builder scheme(Scheme scheme) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900253 this.scheme = scheme;
254 return this;
255 }
256
257 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900258 public Builder ipAddress(IpAddress ipAddress) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900259 this.ipAddress = ipAddress;
260 return this;
261 }
262
263 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900264 public Builder port(int port) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900265 this.port = port;
266 return this;
267 }
268
269 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900270 public Builder state(State state) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900271 this.state = state;
272 return this;
273 }
274
275 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900276 public Builder token(String token) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900277 this.token = token;
278 return this;
279 }
280
281 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900282 public Builder caCertData(String caCertData) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900283 this.caCertData = caCertData;
284 return this;
285 }
286
287 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900288 public Builder clientCertData(String clientCertData) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900289 this.clientCertData = clientCertData;
290 return this;
291 }
292
293 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900294 public Builder clientKeyData(String clientKeyData) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900295 this.clientKeyData = clientKeyData;
296 return this;
297 }
Jian Li94b6d162021-04-15 17:09:11 +0900298
299 @Override
300 public Builder serviceFqdn(String serviceFqdn) {
301 this.serviceFqdn = serviceFqdn;
302 return this;
303 }
Jian Li3c3b1632021-04-28 17:24:56 +0900304
305 @Override
306 public Builder apiServerFqdn(String apiServerFqdn) {
307 this.apiServerFqdn = apiServerFqdn;
308 return this;
309 }
Jian Lia1ebbf42020-12-24 02:43:21 +0900310 }
311}