[ONOS-7905] Add manager and store for k8s network and ports with unit tests
Change-Id: Idd7a8762edbc4bc6d14fd7b22d2218897e7ea0c0
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
new file mode 100644
index 0000000..aefc940
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2016-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.k8snetworking.api;
+
+/**
+ * Provides constants used in OpenStackSwitching.
+ */
+public final class Constants {
+
+ private Constants() {
+ }
+
+ public static final String K8S_NETWORKING_APP_ID = "org.onosproject.k8snetworking";
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
index 3ac1230..fef1b1c 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
@@ -29,6 +29,7 @@
private static final int DEFAULT_MTU = 1500;
private final String networkId;
+ private final String name;
private final Type type;
private final Integer mtu;
private final String segmentId;
@@ -38,9 +39,10 @@
private static final String NOT_NULL_MSG = "Network % cannot be null";
// private constructor not intended for external invocation
- private DefaultK8sNetwork(String networkId, Type type, Integer mtu,
+ private DefaultK8sNetwork(String networkId, String name, Type type, Integer mtu,
String segmentId, IpAddress gatewayIp, String cidr) {
this.networkId = networkId;
+ this.name = name;
this.type = type;
this.mtu = mtu;
this.segmentId = segmentId;
@@ -59,6 +61,11 @@
}
@Override
+ public String name() {
+ return name;
+ }
+
+ @Override
public Integer mtu() {
return mtu;
}
@@ -88,6 +95,7 @@
}
DefaultK8sNetwork that = (DefaultK8sNetwork) o;
return Objects.equal(networkId, that.networkId) &&
+ Objects.equal(name, that.name) &&
type == that.type &&
Objects.equal(mtu, that.mtu) &&
Objects.equal(segmentId, that.segmentId) &&
@@ -97,13 +105,14 @@
@Override
public int hashCode() {
- return Objects.hashCode(networkId, type, mtu, segmentId, gatewayIp, cidr);
+ return Objects.hashCode(networkId, name, type, mtu, segmentId, gatewayIp, cidr);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("networkId", networkId)
+ .add("name", name)
.add("type", type)
.add("mtu", mtu)
.add("segmentId", segmentId)
@@ -127,6 +136,7 @@
public static final class Builder implements K8sNetwork.Builder {
private String networkId;
+ private String name;
private Type type;
private Integer mtu;
private String segmentId;
@@ -136,6 +146,7 @@
@Override
public K8sNetwork build() {
checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
+ checkArgument(name != null, NOT_NULL_MSG, "name");
checkArgument(type != null, NOT_NULL_MSG, "type");
checkArgument(segmentId != null, NOT_NULL_MSG, "segmentId");
checkArgument(gatewayIp != null, NOT_NULL_MSG, "gatewayIp");
@@ -145,7 +156,7 @@
mtu = DEFAULT_MTU;
}
- return new DefaultK8sNetwork(networkId, type, mtu, segmentId, gatewayIp, cidr);
+ return new DefaultK8sNetwork(networkId, name, type, mtu, segmentId, gatewayIp, cidr);
}
@Override
@@ -155,6 +166,12 @@
}
@Override
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ @Override
public Builder type(Type type) {
this.type = type;
return this;
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
index f971cb9..0ab833e 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
@@ -58,6 +58,13 @@
Type type();
/**
+ * Returns kubernetes network name.
+ *
+ * @return kubernetes network name
+ */
+ String name();
+
+ /**
* Returns maximum transmission unit (MTU) value to address fragmentation.
*
* @return maximum transmission unit (MTU) value to address fragmentation
@@ -106,6 +113,14 @@
Builder networkId(String networkId);
/**
+ * Returns network builder with supplied network name.
+ *
+ * @param name network name
+ * @return network builder
+ */
+ Builder name(String name);
+
+ /**
* Returns network builder with supplied network type.
*
* @param type network type
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
index e7f5c18..efa8b6f 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
@@ -38,9 +38,8 @@
* Removes the network.
*
* @param networkId network identifier
- * @return removed network; null if the network does not exist
*/
- K8sNetwork removeNetwork(String networkId);
+ void removeNetwork(String networkId);
/**
* Creates a kubernetes port with the given information.
@@ -60,7 +59,11 @@
* Removes the port.
*
* @param portId port identifier
- * @return removed port; null if the port does not exist
*/
- K8sPort removePort(String portId);
+ void removePort(String portId);
+
+ /**
+ * Clears the existing network and port states.
+ */
+ void clear();
}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
index ea097bc..a39beca 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
@@ -15,22 +15,17 @@
*/
package org.onosproject.k8snetworking.api;
+import org.onlab.util.Tools;
import org.onosproject.event.AbstractEvent;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
/**
* Describes kubernetes network service event.
*/
public class K8sNetworkEvent extends AbstractEvent<K8sNetworkEvent.Type, K8sNetwork> {
- /**
- * Creates an event of a given type for the specified network.
- *
- * @param type kubernetes network event type
- * @param subject kubernetes network
- */
- protected K8sNetworkEvent(Type type, K8sNetwork subject) {
- super(type, subject);
- }
+ private final K8sPort port;
/**
* Kubernetes network events.
@@ -51,5 +46,64 @@
* Signifies that the kubernetes network is removed.
*/
K8S_NETWORK_REMOVED,
+
+ /**
+ * Signifies that a new kubernetes port is created.
+ */
+ K8S_PORT_CREATED,
+
+ /**
+ * Signifies that the kubernetes port is updated.
+ */
+ K8S_PORT_UPDATED,
+
+ /**
+ * Signifies that the kubernetes port is removed.
+ */
+ K8S_PORT_REMOVED,
+ }
+
+ /**
+ * Creates an event of a given type for the specified network.
+ *
+ * @param type kubernetes network event type
+ * @param network kubernetes network
+ */
+ public K8sNetworkEvent(Type type, K8sNetwork network) {
+ super(type, network);
+ this.port = null;
+ }
+
+ /**
+ * Creates an event of a given type for the specified network and port.
+ *
+ * @param type kubernetes network event type
+ * @param network kubernetes network
+ * @param port kubernetes port
+ */
+ public K8sNetworkEvent(Type type, K8sNetwork network, K8sPort port) {
+ super(type, network);
+ this.port = port;
+ }
+
+ /**
+ * Returns the kubernetes port of the network event.
+ *
+ * @return kubernetes port; null if the event is not port specific
+ */
+ public K8sPort port() {
+ return port;
+ }
+
+ @Override
+ public String toString() {
+ if (port == null) {
+ return super.toString();
+ }
+ return toStringHelper(this)
+ .add("time", Tools.defaultOffsetDataTime(time()))
+ .add("port", port)
+ .add("network", subject())
+ .toString();
}
}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
index a5255ff..e4c5ee3 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
@@ -62,7 +62,44 @@
Set<K8sNetwork> networks();
/**
- * Removes all kubernetes networks.
+ * Creates a new kubernetes port.
+ *
+ * @param port kubernetes port
+ */
+ void createPort(K8sPort port);
+
+ /**
+ * Update the kubernetes port.
+ *
+ * @param port kubernetes port
+ */
+ void updatePort(K8sPort port);
+
+ /**
+ * Removes the kubernetes port with the given port identifier.
+ *
+ * @param portId port identifier
+ * @return port; null if not found
+ */
+ K8sPort removePort(String portId);
+
+ /**
+ * Returns all kubernetes ports.
+ *
+ * @return set of kubernetes ports
+ */
+ Set<K8sPort> ports();
+
+ /**
+ * Return the kubernetes port with the given port identifier.
+ *
+ * @param portId port identifier
+ * @return kubernetes port
+ */
+ K8sPort port(String portId);
+
+ /**
+ * Removes all kubernetes networks and ports.
*/
void clear();
}