blob: 1fa1fd92b94c2bd2bb4ff336b1cd15ef369ad8f9 [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;
41
42 /**
43 * Default constructor for Kubevirt API config.
44 *
45 * @param scheme authentication scheme
46 * @param ipAddress IP address of API server
47 * @param port port number of API server
48 * @param state API server connectivity state
49 * @param token token used for authenticating against API server
50 * @param caCertData CA certificate data
51 * @param clientCertData client certificate data
52 * @param clientKeyData client key data
53 */
54 private DefaultKubevirtApiConfig(Scheme scheme, IpAddress ipAddress,
55 int port, State state,
56 String token, String caCertData,
57 String clientCertData, String clientKeyData) {
58 this.scheme = scheme;
59 this.ipAddress = ipAddress;
60 this.port = port;
61 this.state = state;
62 this.token = token;
63 this.caCertData = caCertData;
64 this.clientCertData = clientCertData;
65 this.clientKeyData = clientKeyData;
66 }
67
68 @Override
69 public Scheme scheme() {
70 return scheme;
71 }
72
73 @Override
74 public IpAddress ipAddress() {
75 return ipAddress;
76 }
77
78 @Override
79 public int port() {
80 return port;
81 }
82
83 @Override
84 public State state() {
85 return state;
86 }
87
88 @Override
89 public KubevirtApiConfig updateState(State newState) {
90 return new Builder()
91 .scheme(scheme)
92 .ipAddress(ipAddress)
93 .port(port)
94 .state(newState)
95 .token(token)
96 .caCertData(caCertData)
97 .clientCertData(clientCertData)
98 .clientKeyData(clientKeyData)
99 .build();
100 }
101
102 @Override
103 public String token() {
104 return token;
105 }
106
107 @Override
108 public String caCertData() {
109 return caCertData;
110 }
111
112 @Override
113 public String clientCertData() {
114 return clientCertData;
115 }
116
117 @Override
118 public String clientKeyData() {
119 return clientKeyData;
120 }
121
122 @Override
123 public boolean equals(Object o) {
124 if (this == o) {
125 return true;
126 }
127 if (o == null || getClass() != o.getClass()) {
128 return false;
129 }
130 DefaultKubevirtApiConfig that = (DefaultKubevirtApiConfig) o;
131 return port == that.port && scheme == that.scheme &&
132 ipAddress.equals(that.ipAddress) && state == that.state &&
133 token.equals(that.token) && caCertData.equals(that.caCertData) &&
134 clientCertData.equals(that.clientCertData) &&
135 clientKeyData.equals(that.clientKeyData);
136 }
137
138 @Override
139 public int hashCode() {
140 return Objects.hash(scheme, ipAddress, port, state, token,
141 caCertData, clientCertData, clientKeyData);
142 }
143
144 @Override
145 public String toString() {
146 return MoreObjects.toStringHelper(this)
147 .add("scheme", scheme)
148 .add("ipAddress", ipAddress)
149 .add("port", port)
150 .add("state", state)
151 .add("token", token)
152 .add("caCertData", caCertData)
153 .add("clientCertData", clientCertData)
154 .add("clientKeyData", clientKeyData)
155 .toString();
156 }
157
158 /**
159 * Returns new builder instance.
160 *
161 * @return KubeVirt API server config builder
162 */
163 public static Builder builder() {
164 return new Builder();
165 }
166
167 public static final class Builder implements KubevirtApiConfig.Builder {
168
169 private Scheme scheme;
170 private IpAddress ipAddress;
171 private int port;
172 private State state;
173 private String token;
174 private String caCertData;
175 private String clientCertData;
176 private String clientKeyData;
177
178 @Override
179 public KubevirtApiConfig build() {
180 checkArgument(scheme != null, NOT_NULL_MSG, "scheme");
181 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
182 checkArgument(state != null, NOT_NULL_MSG, "state");
183
184 if (scheme == HTTPS) {
185 checkArgument(caCertData != null, NOT_NULL_MSG, "caCertData");
186 checkArgument(clientCertData != null, NOT_NULL_MSG, "clientCertData");
187 checkArgument(clientKeyData != null, NOT_NULL_MSG, "clientKeyData");
188 }
189
190 return new DefaultKubevirtApiConfig(scheme, ipAddress, port, state,
191 token, caCertData, clientCertData, clientKeyData);
192 }
193
194 @Override
195 public KubevirtApiConfig.Builder scheme(Scheme scheme) {
196 this.scheme = scheme;
197 return this;
198 }
199
200 @Override
201 public KubevirtApiConfig.Builder ipAddress(IpAddress ipAddress) {
202 this.ipAddress = ipAddress;
203 return this;
204 }
205
206 @Override
207 public KubevirtApiConfig.Builder port(int port) {
208 this.port = port;
209 return this;
210 }
211
212 @Override
213 public KubevirtApiConfig.Builder state(State state) {
214 this.state = state;
215 return this;
216 }
217
218 @Override
219 public KubevirtApiConfig.Builder token(String token) {
220 this.token = token;
221 return this;
222 }
223
224 @Override
225 public KubevirtApiConfig.Builder caCertData(String caCertData) {
226 this.caCertData = caCertData;
227 return this;
228 }
229
230 @Override
231 public KubevirtApiConfig.Builder clientCertData(String clientCertData) {
232 this.clientCertData = clientCertData;
233 return this;
234 }
235
236 @Override
237 public KubevirtApiConfig.Builder clientKeyData(String clientKeyData) {
238 this.clientKeyData = clientKeyData;
239 return this;
240 }
241 }
242}