Initial implementation of SNAT functionality.
Change-Id: I9094755c6d25a62e527976b9bf275d7c1e2a3f86
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterWatcher.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterWatcher.java
index 501099f..c346c58 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterWatcher.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterWatcher.java
@@ -30,6 +30,7 @@
import org.onosproject.kubevirtnetworking.api.AbstractWatcher;
import org.onosproject.kubevirtnetworking.api.KubevirtRouter;
import org.onosproject.kubevirtnetworking.api.KubevirtRouterAdminService;
+import org.onosproject.kubevirtnetworking.api.KubevirtRouterService;
import org.onosproject.kubevirtnode.api.KubevirtApiConfigEvent;
import org.onosproject.kubevirtnode.api.KubevirtApiConfigListener;
import org.onosproject.kubevirtnode.api.KubevirtApiConfigService;
@@ -78,6 +79,9 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected KubevirtApiConfigService configService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected KubevirtRouterService routerService;
+
private final ExecutorService eventExecutor = newSingleThreadExecutor(
groupedThreads(this.getClass().getSimpleName(), "event-handler"));
@@ -133,7 +137,14 @@
ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(resource);
ObjectNode spec = (ObjectNode) json.get("spec");
- return codec(KubevirtRouter.class).decode(spec, this);
+ KubevirtRouter router = codec(KubevirtRouter.class).decode(spec, this);
+ KubevirtRouter existing = routerService.router(router.name());
+
+ if (existing == null) {
+ return router;
+ } else {
+ return router.updatedElectedGateway(existing.electedGateway());
+ }
} catch (IOException e) {
log.error("Failed to parse kubevirt router object");
}