Notify kubevirt router internal and external network related events
1. Add networkName attribute into FloatingIp class.
Change-Id: I4aeb8031ef4c86d7ae9a6423276b024c05fe0649
(cherry picked from commit 4acd4543cf7e6d48883ed0f7d9813b69f0d2c414)
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
index 6dc98e2..213fa4e 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
@@ -32,6 +32,7 @@
private final String id;
private final String routerName;
private final String podName;
+ private final String networkName;
private final IpAddress floatingIp;
private final IpAddress fixedIp;
@@ -41,14 +42,16 @@
* @param id floating IP identifier
* @param routerName router name
* @param podName POD name
+ * @param networkName network name
* @param floatingIp floating IP address
* @param fixedIp fixed IP address
*/
public DefaultKubevirtFloatingIp(String id, String routerName, String podName,
- IpAddress floatingIp, IpAddress fixedIp) {
+ String networkName, IpAddress floatingIp, IpAddress fixedIp) {
this.id = id;
this.routerName = routerName;
this.podName = podName;
+ this.networkName = networkName;
this.floatingIp = floatingIp;
this.fixedIp = fixedIp;
}
@@ -64,6 +67,11 @@
}
@Override
+ public String networkName() {
+ return networkName;
+ }
+
+ @Override
public IpAddress floatingIp() {
return floatingIp;
}
@@ -82,6 +90,7 @@
public KubevirtFloatingIp updateFixedIp(IpAddress ip) {
return DefaultKubevirtFloatingIp.builder()
.id(id)
+ .networkName(networkName)
.routerName(routerName)
.floatingIp(floatingIp)
.fixedIp(ip)
@@ -93,6 +102,7 @@
public KubevirtFloatingIp updatePodName(String name) {
return DefaultKubevirtFloatingIp.builder()
.id(id)
+ .networkName(networkName)
.routerName(routerName)
.floatingIp(floatingIp)
.fixedIp(fixedIp)
@@ -111,6 +121,7 @@
DefaultKubevirtFloatingIp that = (DefaultKubevirtFloatingIp) o;
return id.equals(that.id) && routerName.equals(that.routerName) &&
Objects.equals(podName, that.podName) &&
+ networkName.equals(that.networkName) &&
floatingIp.equals(that.floatingIp) &&
Objects.equals(fixedIp, that.fixedIp);
}
@@ -126,6 +137,7 @@
.add("id", id)
.add("routerName", routerName)
.add("podName", podName)
+ .add("networkName", networkName)
.add("floatingIp", floatingIp)
.add("fixedIp", fixedIp)
.toString();
@@ -145,16 +157,18 @@
private String id;
private String routerName;
private String podName;
+ private String networkName;
private IpAddress floatingIp;
private IpAddress fixedIp;
@Override
public KubevirtFloatingIp build() {
checkArgument(id != null, NOT_NULL_MSG, "id");
+ checkArgument(networkName != null, NOT_NULL_MSG, "networkName");
checkArgument(routerName != null, NOT_NULL_MSG, "routerName");
checkArgument(floatingIp != null, NOT_NULL_MSG, "floatingIp");
- return new DefaultKubevirtFloatingIp(id, routerName, podName, floatingIp, fixedIp);
+ return new DefaultKubevirtFloatingIp(id, routerName, podName, networkName, floatingIp, fixedIp);
}
@Override
@@ -170,6 +184,12 @@
}
@Override
+ public Builder networkName(String name) {
+ this.networkName = name;
+ return this;
+ }
+
+ @Override
public Builder floatingIp(IpAddress ip) {
this.floatingIp = ip;
return this;
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
index 4bf04a2..98653d9 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
@@ -80,12 +80,20 @@
@Override
public Set<String> internal() {
- return ImmutableSet.copyOf(internal);
+ if (internal == null) {
+ return ImmutableSet.of();
+ } else {
+ return ImmutableSet.copyOf(internal);
+ }
}
@Override
public Map<String, String> external() {
- return ImmutableMap.copyOf(external);
+ if (external == null) {
+ return ImmutableMap.of();
+ } else {
+ return ImmutableMap.copyOf(external);
+ }
}
@Override
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
index f879d2b..27019b8 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
@@ -37,6 +37,13 @@
String routerName();
/**
+ * Returns the name of network where the floating IPs are belong to.
+ *
+ * @return name of network
+ */
+ String networkName();
+
+ /**
* Returns the floating IP address.
*
* @return floating IP address
@@ -98,6 +105,14 @@
Builder routerName(String name);
/**
+ * Returns kubevirt floating IP builder with supplied network name.
+ *
+ * @param name network name
+ * @return floating IP builder
+ */
+ Builder networkName(String name);
+
+ /**
* Returns kubevirt floating IP builder with supplied floating IP address.
*
* @param ip floating IP address
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
index c9e1f16..7fd8958 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
@@ -17,6 +17,8 @@
import org.onosproject.event.AbstractEvent;
+import java.util.Set;
+
import static com.google.common.base.MoreObjects.toStringHelper;
/**
@@ -26,6 +28,10 @@
private final KubevirtFloatingIp floatingIp;
private final String podName;
+ private final Set<String> internal;
+ private final String externalIp;
+ private final String externalNet;
+ private final String peerRouterIp;
/**
* Creates an event of a given type for the specified kubevirt router.
@@ -37,6 +43,10 @@
super(type, subject);
this.floatingIp = null;
this.podName = null;
+ this.internal = null;
+ this.externalIp = null;
+ this.externalNet = null;
+ this.peerRouterIp = null;
}
/**
@@ -50,6 +60,10 @@
super(type, subject);
this.floatingIp = floatingIp;
this.podName = null;
+ this.internal = null;
+ this.externalIp = null;
+ this.externalNet = null;
+ this.peerRouterIp = null;
}
/**
@@ -64,6 +78,48 @@
super(type, subject);
this.floatingIp = floatingIp;
this.podName = podName;
+ this.internal = null;
+ this.externalIp = null;
+ this.externalNet = null;
+ this.peerRouterIp = null;
+ }
+
+ /**
+ * Creates an event of a given type for the specified kubevirt router.
+ *
+ * @param type kubevirt router event type
+ * @param subject kubevirt router
+ * @param internal internal networks attached to the router
+ */
+ public KubevirtRouterEvent(Type type, KubevirtRouter subject, Set<String> internal) {
+ super(type, subject);
+ this.internal = internal;
+ this.podName = null;
+ this.floatingIp = null;
+ this.externalIp = null;
+ this.externalNet = null;
+ this.peerRouterIp = null;
+ }
+
+ /**
+ * Creates an event of a given type for the specified kubevirt router.
+ *
+ * @param type kubevirt router event type
+ * @param subject kubevirt router
+ * @param externalIp virtual router's IP address included in external network
+ * @param externalNet external network name
+ * @param peerRouterIp external peer router IP address
+ */
+ public KubevirtRouterEvent(Type type, KubevirtRouter subject,
+ String externalIp, String externalNet,
+ String peerRouterIp) {
+ super(type, subject);
+ this.internal = null;
+ this.podName = null;
+ this.floatingIp = null;
+ this.externalIp = externalIp;
+ this.externalNet = externalNet;
+ this.peerRouterIp = peerRouterIp;
}
public enum Type {
@@ -83,6 +139,26 @@
KUBEVIRT_ROUTER_REMOVED,
/**
+ * Signifies that a new external network is added to the router.
+ */
+ KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
+
+ /**
+ * Signifies that the existing external network is removed from the router.
+ */
+ KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
+
+ /**
+ * Signifies that a new internal network is added to the router.
+ */
+ KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
+
+ /**
+ * Signifies that the existing internal network is removed from the router.
+ */
+ KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
+
+ /**
* Signifies that a new kubevirt floating IP is created.
*/
KUBEVIRT_FLOATING_IP_CREATED,
@@ -136,6 +212,10 @@
.add("router", subject())
.add("floatingIp", floatingIp)
.add("podName", podName)
+ .add("internal", internal)
+ .add("externalIp", externalIp)
+ .add("externalNet", externalNet)
+ .add("peerRouterIp", peerRouterIp)
.toString();
}
}
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java
index f5f400e..b63cf00 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java
@@ -32,6 +32,8 @@
private static final String ID_2 = "fip_id_2";
private static final String ROUTER_NAME_1 = "router-1";
private static final String ROUTER_NAME_2 = "router-2";
+ private static final String NETWORK_NAME_1 = "flat-1";
+ private static final String NETWORK_NAME_2 = "flat-2";
private static final IpAddress FLOATING_IP_1 = IpAddress.valueOf("10.10.10.10");
private static final IpAddress FLOATING_IP_2 = IpAddress.valueOf("20.20.20.20");
private static final String POD_NAME_1 = "pod-1";
@@ -59,6 +61,7 @@
fip1 = DefaultKubevirtFloatingIp.builder()
.id(ID_1)
.routerName(ROUTER_NAME_1)
+ .networkName(NETWORK_NAME_1)
.floatingIp(FLOATING_IP_1)
.podName(POD_NAME_1)
.fixedIp(FIXED_IP_1)
@@ -67,6 +70,7 @@
sameAsFip1 = DefaultKubevirtFloatingIp.builder()
.id(ID_1)
.routerName(ROUTER_NAME_1)
+ .networkName(NETWORK_NAME_1)
.floatingIp(FLOATING_IP_1)
.podName(POD_NAME_1)
.fixedIp(FIXED_IP_1)
@@ -75,6 +79,7 @@
fip2 = DefaultKubevirtFloatingIp.builder()
.id(ID_2)
.routerName(ROUTER_NAME_2)
+ .networkName(NETWORK_NAME_2)
.floatingIp(FLOATING_IP_2)
.podName(POD_NAME_2)
.fixedIp(FIXED_IP_2)
@@ -100,6 +105,7 @@
assertEquals(ID_1, fip.id());
assertEquals(ROUTER_NAME_1, fip.routerName());
+ assertEquals(NETWORK_NAME_1, fip.networkName());
assertEquals(FLOATING_IP_1, fip.floatingIp());
assertEquals(POD_NAME_1, fip.podName());
assertEquals(FIXED_IP_1, fip.fixedIp());