Implement kubevirt floating IP's class, codec, watcher and APIs
Change-Id: I2111902e86083add8a00af62557fac1e98b7e7fc
(cherry picked from commit e48a617ccaf19d0d29ccc3211f6254be5e26826e)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManager.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManager.java
index bae3ff9..e9c06da 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManager.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManager.java
@@ -21,6 +21,7 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.event.ListenerRegistry;
+import org.onosproject.kubevirtnetworking.api.KubevirtFloatingIp;
import org.onosproject.kubevirtnetworking.api.KubevirtPeerRouter;
import org.onosproject.kubevirtnetworking.api.KubevirtRouter;
import org.onosproject.kubevirtnetworking.api.KubevirtRouterAdminService;
@@ -37,6 +38,7 @@
import org.slf4j.Logger;
import java.util.Set;
+import java.util.stream.Collectors;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -57,12 +59,16 @@
protected final Logger log = getLogger(getClass());
private static final String MSG_ROUTER = "Kubevirt router %s %s";
+ private static final String MSG_FLOATING_IP = "Kubevirt floating IP %s %s";
private static final String MSG_CREATED = "created";
private static final String MSG_UPDATED = "updated";
private static final String MSG_REMOVED = "removed";
private static final String ERR_NULL_ROUTER = "Kubevirt router cannot be null";
private static final String ERR_NULL_ROUTER_NAME = "Kubevirt router name cannot be null";
+ private static final String ERR_NULL_FLOATING_IP = "Kubevirt floating IP cannot be null";
+ private static final String ERR_NULL_FLOATING_IP_ID = "Kubevirt floating IP ID cannot be null";
+ private static final String ERR_NULL_POD_NAME = "Kubevirt POD name cannot be null";
private static final String ERR_IN_USE = " still in use";
@Reference(cardinality = ReferenceCardinality.MANDATORY)
@@ -142,6 +148,39 @@
}
@Override
+ public void createFloatingIp(KubevirtFloatingIp floatingIp) {
+ checkNotNull(floatingIp, ERR_NULL_FLOATING_IP);
+ checkArgument(!Strings.isNullOrEmpty(floatingIp.id()), ERR_NULL_FLOATING_IP_ID);
+
+ kubevirtRouterStore.createFloatingIp(floatingIp);
+
+ log.info(String.format(MSG_FLOATING_IP, floatingIp.floatingIp(), MSG_CREATED));
+ }
+
+ @Override
+ public void updateFloatingIp(KubevirtFloatingIp floatingIp) {
+ checkNotNull(floatingIp, ERR_NULL_FLOATING_IP);
+ checkArgument(!Strings.isNullOrEmpty(floatingIp.id()), ERR_NULL_FLOATING_IP_ID);
+
+ kubevirtRouterStore.updateFloatingIp(floatingIp);
+
+ log.info(String.format(MSG_FLOATING_IP, floatingIp.floatingIp(), MSG_UPDATED));
+ }
+
+ @Override
+ public void removeFloatingIp(String id) {
+ checkArgument(!Strings.isNullOrEmpty(id), ERR_NULL_FLOATING_IP_ID);
+
+ synchronized (this) {
+ KubevirtFloatingIp floatingIp = kubevirtRouterStore.removeFloatingIp(id);
+
+ if (floatingIp != null) {
+ log.info(String.format(MSG_FLOATING_IP, floatingIp.floatingIp(), MSG_REMOVED));
+ }
+ }
+ }
+
+ @Override
public void clear() {
kubevirtRouterStore.clear();
}
@@ -157,8 +196,35 @@
return ImmutableSet.copyOf(kubevirtRouterStore.routers());
}
+ @Override
+ public KubevirtFloatingIp floatingIp(String id) {
+ checkArgument(!Strings.isNullOrEmpty(id), ERR_NULL_FLOATING_IP_ID);
+ return kubevirtRouterStore.floatingIp(id);
+ }
+
+ @Override
+ public KubevirtFloatingIp floatingIpByPodName(String podName) {
+ checkArgument(!Strings.isNullOrEmpty(podName), ERR_NULL_POD_NAME);
+ return kubevirtRouterStore.floatingIps().stream()
+ .filter(ips -> podName.equals(ips.podName()))
+ .findAny().orElse(null);
+ }
+
+ @Override
+ public Set<KubevirtFloatingIp> floatingIpsByRouter(String routerName) {
+ checkArgument(!Strings.isNullOrEmpty(routerName), ERR_NULL_ROUTER_NAME);
+ return kubevirtRouterStore.floatingIps().stream()
+ .filter(ips -> routerName.equals(ips.routerName()))
+ .collect(Collectors.toSet());
+ }
+
+ @Override
+ public Set<KubevirtFloatingIp> floatingIps() {
+ return ImmutableSet.copyOf(kubevirtRouterStore.floatingIps());
+ }
+
private boolean isRouterInUse(String name) {
- return false;
+ return floatingIpsByRouter(name).size() > 0;
}
private class InternalRouterStorageDelegate implements KubevirtRouterStoreDelegate {