blob: c4e2bb889f295711a670442ea6dfe800ca255859 [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 Lia1ebbf42020-12-24 02:43:21 +090042
43 /**
44 * Default constructor for Kubevirt API config.
45 *
46 * @param scheme authentication scheme
47 * @param ipAddress IP address of API server
48 * @param port port number of API server
49 * @param state API server connectivity state
50 * @param token token used for authenticating against API server
51 * @param caCertData CA certificate data
52 * @param clientCertData client certificate data
53 * @param clientKeyData client key data
Jian Li94b6d162021-04-15 17:09:11 +090054 * @param serviceFqdn service FQDN
Jian Lia1ebbf42020-12-24 02:43:21 +090055 */
56 private DefaultKubevirtApiConfig(Scheme scheme, IpAddress ipAddress,
57 int port, State state,
58 String token, String caCertData,
Jian Li94b6d162021-04-15 17:09:11 +090059 String clientCertData, String clientKeyData,
60 String serviceFqdn) {
Jian Lia1ebbf42020-12-24 02:43:21 +090061 this.scheme = scheme;
62 this.ipAddress = ipAddress;
63 this.port = port;
64 this.state = state;
65 this.token = token;
66 this.caCertData = caCertData;
67 this.clientCertData = clientCertData;
68 this.clientKeyData = clientKeyData;
Jian Li94b6d162021-04-15 17:09:11 +090069 this.serviceFqdn = serviceFqdn;
Jian Lia1ebbf42020-12-24 02:43:21 +090070 }
71
72 @Override
73 public Scheme scheme() {
74 return scheme;
75 }
76
77 @Override
78 public IpAddress ipAddress() {
79 return ipAddress;
80 }
81
82 @Override
83 public int port() {
84 return port;
85 }
86
87 @Override
88 public State state() {
89 return state;
90 }
91
92 @Override
93 public KubevirtApiConfig updateState(State newState) {
94 return new Builder()
95 .scheme(scheme)
96 .ipAddress(ipAddress)
97 .port(port)
98 .state(newState)
99 .token(token)
100 .caCertData(caCertData)
101 .clientCertData(clientCertData)
102 .clientKeyData(clientKeyData)
Jian Li94b6d162021-04-15 17:09:11 +0900103 .serviceFqdn(serviceFqdn)
Jian Lia1ebbf42020-12-24 02:43:21 +0900104 .build();
105 }
106
107 @Override
108 public String token() {
109 return token;
110 }
111
112 @Override
113 public String caCertData() {
114 return caCertData;
115 }
116
117 @Override
118 public String clientCertData() {
119 return clientCertData;
120 }
121
122 @Override
123 public String clientKeyData() {
124 return clientKeyData;
125 }
126
127 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900128 public String serviceFqdn() {
129 return serviceFqdn;
130 }
131
132 @Override
Jian Lia1ebbf42020-12-24 02:43:21 +0900133 public boolean equals(Object o) {
134 if (this == o) {
135 return true;
136 }
137 if (o == null || getClass() != o.getClass()) {
138 return false;
139 }
140 DefaultKubevirtApiConfig that = (DefaultKubevirtApiConfig) o;
141 return port == that.port && scheme == that.scheme &&
142 ipAddress.equals(that.ipAddress) && state == that.state &&
143 token.equals(that.token) && caCertData.equals(that.caCertData) &&
144 clientCertData.equals(that.clientCertData) &&
Jian Li94b6d162021-04-15 17:09:11 +0900145 clientKeyData.equals(that.clientKeyData) &&
146 Objects.equals(serviceFqdn, that.serviceFqdn);
Jian Lia1ebbf42020-12-24 02:43:21 +0900147 }
148
149 @Override
150 public int hashCode() {
151 return Objects.hash(scheme, ipAddress, port, state, token,
Jian Li94b6d162021-04-15 17:09:11 +0900152 caCertData, clientCertData, clientKeyData, serviceFqdn);
Jian Lia1ebbf42020-12-24 02:43:21 +0900153 }
154
155 @Override
156 public String toString() {
157 return MoreObjects.toStringHelper(this)
158 .add("scheme", scheme)
159 .add("ipAddress", ipAddress)
160 .add("port", port)
161 .add("state", state)
162 .add("token", token)
163 .add("caCertData", caCertData)
164 .add("clientCertData", clientCertData)
165 .add("clientKeyData", clientKeyData)
Jian Li94b6d162021-04-15 17:09:11 +0900166 .add("serviceFqdn", serviceFqdn)
Jian Lia1ebbf42020-12-24 02:43:21 +0900167 .toString();
168 }
169
170 /**
171 * Returns new builder instance.
172 *
173 * @return KubeVirt API server config builder
174 */
175 public static Builder builder() {
176 return new Builder();
177 }
178
179 public static final class Builder implements KubevirtApiConfig.Builder {
180
181 private Scheme scheme;
182 private IpAddress ipAddress;
183 private int port;
184 private State state;
185 private String token;
186 private String caCertData;
187 private String clientCertData;
188 private String clientKeyData;
Jian Li94b6d162021-04-15 17:09:11 +0900189 private String serviceFqdn;
Jian Lia1ebbf42020-12-24 02:43:21 +0900190
191 @Override
192 public KubevirtApiConfig build() {
193 checkArgument(scheme != null, NOT_NULL_MSG, "scheme");
194 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
195 checkArgument(state != null, NOT_NULL_MSG, "state");
196
197 if (scheme == HTTPS) {
198 checkArgument(caCertData != null, NOT_NULL_MSG, "caCertData");
199 checkArgument(clientCertData != null, NOT_NULL_MSG, "clientCertData");
200 checkArgument(clientKeyData != null, NOT_NULL_MSG, "clientKeyData");
201 }
202
203 return new DefaultKubevirtApiConfig(scheme, ipAddress, port, state,
Jian Li94b6d162021-04-15 17:09:11 +0900204 token, caCertData, clientCertData, clientKeyData, serviceFqdn);
Jian Lia1ebbf42020-12-24 02:43:21 +0900205 }
206
207 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900208 public Builder scheme(Scheme scheme) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900209 this.scheme = scheme;
210 return this;
211 }
212
213 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900214 public Builder ipAddress(IpAddress ipAddress) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900215 this.ipAddress = ipAddress;
216 return this;
217 }
218
219 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900220 public Builder port(int port) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900221 this.port = port;
222 return this;
223 }
224
225 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900226 public Builder state(State state) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900227 this.state = state;
228 return this;
229 }
230
231 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900232 public Builder token(String token) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900233 this.token = token;
234 return this;
235 }
236
237 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900238 public Builder caCertData(String caCertData) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900239 this.caCertData = caCertData;
240 return this;
241 }
242
243 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900244 public Builder clientCertData(String clientCertData) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900245 this.clientCertData = clientCertData;
246 return this;
247 }
248
249 @Override
Jian Li94b6d162021-04-15 17:09:11 +0900250 public Builder clientKeyData(String clientKeyData) {
Jian Lia1ebbf42020-12-24 02:43:21 +0900251 this.clientKeyData = clientKeyData;
252 return this;
253 }
Jian Li94b6d162021-04-15 17:09:11 +0900254
255 @Override
256 public Builder serviceFqdn(String serviceFqdn) {
257 this.serviceFqdn = serviceFqdn;
258 return this;
259 }
Jian Lia1ebbf42020-12-24 02:43:21 +0900260 }
261}