blob: cbc62e659287490cdbb98955e5054699ed70cc41 [file] [log] [blame]
/*
* Copyright 2019-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.k8snode.api;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import org.apache.commons.lang.StringUtils;
import org.onlab.packet.IpAddress;
import org.onlab.packet.IpPrefix;
import java.util.Objects;
import java.util.Set;
import static com.google.common.base.Preconditions.checkArgument;
import static org.onosproject.k8snode.api.Constants.DEFAULT_CLUSTER_NAME;
import static org.onosproject.k8snode.api.K8sApiConfig.Mode.NORMAL;
import static org.onosproject.k8snode.api.K8sApiConfig.Scheme.HTTPS;
/**
* Default implementation of kubernetes API configuration.
*/
public final class DefaultK8sApiConfig implements K8sApiConfig {
private static final String NOT_NULL_MSG = "API Config % cannot be null";
private static final int SHORT_NAME_LENGTH = 10;
private final String clusterName;
private final int segmentId;
private final IpPrefix extNetworkCidr;
private final Scheme scheme;
private final Mode mode;
private final IpAddress ipAddress;
private final int port;
private final State state;
private final String token;
private final String caCertData;
private final String clientCertData;
private final String clientKeyData;
private final Set<HostNodesInfo> infos;
private DefaultK8sApiConfig(String clusterName, int segmentId, IpPrefix extNetworkCidr,
Scheme scheme, IpAddress ipAddress, int port,
Mode mode, State state, String token, String caCertData,
String clientCertData, String clientKeyData, Set<HostNodesInfo> infos) {
this.clusterName = clusterName;
this.segmentId = segmentId;
this.extNetworkCidr = extNetworkCidr;
this.scheme = scheme;
this.ipAddress = ipAddress;
this.port = port;
this.mode = mode;
this.state = state;
this.token = token;
this.caCertData = caCertData;
this.clientCertData = clientCertData;
this.clientKeyData = clientKeyData;
this.infos = infos;
}
@Override
public String clusterName() {
return clusterName;
}
@Override
public String clusterShortName() {
return StringUtils.substring(clusterName, 0, SHORT_NAME_LENGTH);
}
@Override
public int segmentId() {
return segmentId;
}
@Override
public IpPrefix extNetworkCidr() {
return extNetworkCidr;
}
@Override
public Scheme scheme() {
return scheme;
}
@Override
public IpAddress ipAddress() {
return ipAddress;
}
@Override
public int port() {
return port;
}
@Override
public State state() {
return state;
}
@Override
public Mode mode() {
return mode;
}
@Override
public K8sApiConfig updateState(State newState) {
return new Builder()
.clusterName(clusterName)
.segmentId(segmentId)
.extNetworkCidr(extNetworkCidr)
.scheme(scheme)
.ipAddress(ipAddress)
.port(port)
.state(newState)
.mode(mode)
.token(token)
.caCertData(caCertData)
.clientCertData(clientCertData)
.clientKeyData(clientKeyData)
.infos(infos)
.build();
}
@Override
public String token() {
return token;
}
@Override
public String caCertData() {
return caCertData;
}
@Override
public String clientCertData() {
return clientCertData;
}
@Override
public String clientKeyData() {
return clientKeyData;
}
@Override
public Set<HostNodesInfo> infos() {
return ImmutableSet.copyOf(infos);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DefaultK8sApiConfig that = (DefaultK8sApiConfig) o;
return port == that.port &&
scheme == that.scheme &&
clusterName.equals(that.clusterName) &&
segmentId == that.segmentId &&
extNetworkCidr == that.extNetworkCidr &&
ipAddress.equals(that.ipAddress) &&
mode == that.mode &&
state == that.state &&
token.equals(that.token) &&
caCertData.equals(that.caCertData) &&
clientCertData.equals(that.clientCertData) &&
clientKeyData.equals(that.clientKeyData) &&
infos.equals(that.infos);
}
@Override
public int hashCode() {
return Objects.hash(clusterName, segmentId, extNetworkCidr, scheme, ipAddress,
port, mode, state, token, caCertData, clientCertData, clientKeyData, infos);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("clusterName", clusterName)
.add("segmentID", segmentId)
.add("extNetworkCIDR", extNetworkCidr)
.add("scheme", scheme)
.add("ipAddress", ipAddress)
.add("port", port)
.add("mode", mode)
.add("state", state)
.add("token", token)
.add("caCertData", caCertData)
.add("clientCertData", clientCertData)
.add("clientKeyData", clientKeyData)
.add("infos", infos)
.toString();
}
/**
* Returns new builder instance.
*
* @return kubernetes API server config builder
*/
public static Builder builder() {
return new Builder();
}
public static final class Builder implements K8sApiConfig.Builder {
private String clusterName;
private int segmentId;
private IpPrefix extNetworkCidr;
private Scheme scheme;
private Mode mode;
private IpAddress ipAddress;
private int port;
private State state;
private String token;
private String caCertData;
private String clientCertData;
private String clientKeyData;
private Set<HostNodesInfo> infos;
@Override
public K8sApiConfig build() {
checkArgument(scheme != null, NOT_NULL_MSG, "scheme");
checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
checkArgument(state != null, NOT_NULL_MSG, "state");
if (scheme == HTTPS) {
checkArgument(caCertData != null, NOT_NULL_MSG, "caCertData");
checkArgument(clientCertData != null, NOT_NULL_MSG, "clientCertData");
checkArgument(clientKeyData != null, NOT_NULL_MSG, "clientKeyData");
}
if (StringUtils.isEmpty(clusterName)) {
clusterName = DEFAULT_CLUSTER_NAME;
}
if (mode == null) {
mode = NORMAL;
}
if (infos == null) {
infos = ImmutableSet.of();
}
return new DefaultK8sApiConfig(clusterName, segmentId, extNetworkCidr, scheme, ipAddress,
port, mode, state, token, caCertData, clientCertData, clientKeyData, infos);
}
@Override
public Builder clusterName(String clusterName) {
this.clusterName = clusterName;
return this;
}
@Override
public Builder segmentId(int segmentId) {
this.segmentId = segmentId;
return this;
}
@Override
public K8sApiConfig.Builder extNetworkCidr(IpPrefix extNetworkCidr) {
this.extNetworkCidr = extNetworkCidr;
return this;
}
@Override
public Builder scheme(Scheme scheme) {
this.scheme = scheme;
return this;
}
@Override
public Builder ipAddress(IpAddress ipAddress) {
this.ipAddress = ipAddress;
return this;
}
@Override
public Builder port(int port) {
this.port = port;
return this;
}
@Override
public Builder state(State state) {
this.state = state;
return this;
}
@Override
public K8sApiConfig.Builder mode(Mode mode) {
this.mode = mode;
return this;
}
@Override
public Builder token(String token) {
this.token = token;
return this;
}
@Override
public Builder caCertData(String caCertData) {
this.caCertData = caCertData;
return this;
}
@Override
public Builder clientCertData(String clientCertData) {
this.clientCertData = clientCertData;
return this;
}
@Override
public Builder clientKeyData(String clientKeyData) {
this.clientKeyData = clientKeyData;
return this;
}
@Override
public K8sApiConfig.Builder infos(Set<HostNodesInfo> infos) {
this.infos = infos;
return this;
}
}
}