blob: 48f6b137a7235909d0cc0b1fe4fa9c36aae86f6b [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 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.k8snode.api.K8sApiConfig.Scheme.HTTPS;
25
26/**
27 * Default implementation of kubernetes API configuration.
28 */
29public final class DefaultK8sApiConfig implements K8sApiConfig {
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;
Jian Li1cee9882019-02-13 11:25:25 +090036 private final State state;
Jian Li3defa842019-02-12 00:31:35 +090037 private final String token;
38 private final String caCertData;
39 private final String clientCertData;
40 private final String clientKeyData;
41
42 private DefaultK8sApiConfig(Scheme scheme, IpAddress ipAddress, int port,
Jian Li1cee9882019-02-13 11:25:25 +090043 State state, String token, String caCertData,
Jian Li3defa842019-02-12 00:31:35 +090044 String clientCertData, String clientKeyData) {
45 this.scheme = scheme;
46 this.ipAddress = ipAddress;
47 this.port = port;
Jian Li1cee9882019-02-13 11:25:25 +090048 this.state = state;
Jian Li3defa842019-02-12 00:31:35 +090049 this.token = token;
50 this.caCertData = caCertData;
51 this.clientCertData = clientCertData;
52 this.clientKeyData = clientKeyData;
53 }
54
55 @Override
56 public Scheme scheme() {
57 return scheme;
58 }
59
60 @Override
61 public IpAddress ipAddress() {
62 return ipAddress;
63 }
64
65 @Override
66 public int port() {
67 return port;
68 }
69
70 @Override
Jian Li1cee9882019-02-13 11:25:25 +090071 public State state() {
72 return state;
73 }
74
75 @Override
76 public K8sApiConfig updateState(State newState) {
77 return new Builder()
78 .scheme(scheme)
79 .ipAddress(ipAddress)
80 .port(port)
81 .state(newState)
82 .token(token)
83 .caCertData(caCertData)
84 .clientCertData(clientCertData)
85 .clientKeyData(clientKeyData)
86 .build();
87 }
88
89 @Override
Jian Li3defa842019-02-12 00:31:35 +090090 public String token() {
91 return token;
92 }
93
94 @Override
95 public String caCertData() {
96 return caCertData;
97 }
98
99 @Override
100 public String clientCertData() {
101 return clientCertData;
102 }
103
104 @Override
105 public String clientKeyData() {
106 return clientKeyData;
107 }
108
109 @Override
110 public boolean equals(Object o) {
111 if (this == o) {
112 return true;
113 }
114 if (o == null || getClass() != o.getClass()) {
115 return false;
116 }
117 DefaultK8sApiConfig that = (DefaultK8sApiConfig) o;
118 return port == that.port &&
119 scheme == that.scheme &&
120 ipAddress.equals(that.ipAddress) &&
Jian Li1cee9882019-02-13 11:25:25 +0900121 state == that.state &&
Jian Li3defa842019-02-12 00:31:35 +0900122 token.equals(that.token) &&
123 caCertData.equals(that.caCertData) &&
124 clientCertData.equals(that.clientCertData) &&
125 clientKeyData.equals(that.clientKeyData);
126 }
127
128 @Override
129 public int hashCode() {
Jian Li1cee9882019-02-13 11:25:25 +0900130 return Objects.hash(scheme, ipAddress, port, state, token, caCertData,
Jian Li3defa842019-02-12 00:31:35 +0900131 clientCertData, clientKeyData);
132 }
133
134 @Override
135 public String toString() {
136 return MoreObjects.toStringHelper(this)
137 .add("scheme", scheme)
138 .add("ipAddress", ipAddress)
139 .add("port", port)
Jian Li1cee9882019-02-13 11:25:25 +0900140 .add("state", state)
Jian Li3defa842019-02-12 00:31:35 +0900141 .add("token", token)
142 .add("caCertData", caCertData)
143 .add("clientCertData", clientCertData)
144 .add("clientKeyData", clientKeyData)
145 .toString();
146 }
147
148 /**
149 * Returns new builder instance.
150 *
151 * @return kubernetes API server config builder
152 */
153 public static Builder builder() {
154 return new Builder();
155 }
156
157 public static final class Builder implements K8sApiConfig.Builder {
158
159 private Scheme scheme;
160 private IpAddress ipAddress;
161 private int port;
Jian Li1cee9882019-02-13 11:25:25 +0900162 private State state;
Jian Li3defa842019-02-12 00:31:35 +0900163 private String token;
164 private String caCertData;
165 private String clientCertData;
166 private String clientKeyData;
167
168 @Override
169 public K8sApiConfig build() {
170 checkArgument(scheme != null, NOT_NULL_MSG, "scheme");
171 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
Jian Li1cee9882019-02-13 11:25:25 +0900172 checkArgument(state != null, NOT_NULL_MSG, "state");
Jian Li3defa842019-02-12 00:31:35 +0900173
174 if (scheme == HTTPS) {
175 checkArgument(token != null, NOT_NULL_MSG, "token");
176 checkArgument(caCertData != null, NOT_NULL_MSG, "caCertData");
177 checkArgument(clientCertData != null, NOT_NULL_MSG, "clientCertData");
178 checkArgument(clientKeyData != null, NOT_NULL_MSG, "clientKeyData");
179 }
180
Jian Li1cee9882019-02-13 11:25:25 +0900181 return new DefaultK8sApiConfig(scheme, ipAddress, port, state, token,
Jian Li3defa842019-02-12 00:31:35 +0900182 caCertData, clientCertData, clientKeyData);
183 }
184
185 @Override
186 public Builder scheme(Scheme scheme) {
187 this.scheme = scheme;
188 return this;
189 }
190
191 @Override
192 public Builder ipAddress(IpAddress ipAddress) {
193 this.ipAddress = ipAddress;
194 return this;
195 }
196
197 @Override
198 public Builder port(int port) {
199 this.port = port;
200 return this;
201 }
202
203 @Override
Jian Li1cee9882019-02-13 11:25:25 +0900204 public Builder state(State state) {
205 this.state = state;
206 return this;
207 }
208
209 @Override
Jian Li3defa842019-02-12 00:31:35 +0900210 public Builder token(String token) {
211 this.token = token;
212 return this;
213 }
214
215 @Override
216 public Builder caCertData(String caCertData) {
217 this.caCertData = caCertData;
218 return this;
219 }
220
221 @Override
222 public Builder clientCertData(String clientCertData) {
223 this.clientCertData = clientCertData;
224 return this;
225 }
226
227 @Override
228 public Builder clientKeyData(String clientKeyData) {
229 this.clientKeyData = clientKeyData;
230 return this;
231 }
232 }
233}