Support to add/update/remove kubevirt node, and add node watcher
Change-Id: I3cae33625b2dd6deb88f7bca2d0252d65667f2c9
(cherry picked from commit b9eb11d5b7012ea1619f512b27766dc04f657f72)
diff --git a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/KubevirtNodeManager.java b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/KubevirtNodeManager.java
index 99c8244..4e7e39e 100644
--- a/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/KubevirtNodeManager.java
+++ b/apps/kubevirt-node/app/src/main/java/org/onosproject/kubevirtnode/impl/KubevirtNodeManager.java
@@ -57,9 +57,10 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.concurrent.Executors.newSingleThreadExecutor;
import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.kubevirtnode.api.Constants.INTEGRATION_BRIDGE;
+import static org.onosproject.kubevirtnode.api.Constants.TUNNEL_BRIDGE;
import static org.onosproject.kubevirtnode.impl.OsgiPropertyConstants.OVSDB_PORT;
import static org.onosproject.kubevirtnode.impl.OsgiPropertyConstants.OVSDB_PORT_NUM_DEFAULT;
-import static org.onosproject.kubevirtnode.util.KubevirtNodeUtil.genDpid;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -91,6 +92,8 @@
private static final String NOT_DUPLICATED_MSG = "% cannot be duplicated";
+ private static final String OF_PREFIX = "of:";
+
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected KubevirtNodeStore nodeStore;
@@ -167,7 +170,7 @@
KubevirtNode tunNode;
if (node.intgBridge() == null) {
- String deviceIdStr = genDpid(deviceIdCounter.incrementAndGet());
+ String deviceIdStr = genDpidFromName(INTEGRATION_BRIDGE + "-" + node.hostname());
checkNotNull(deviceIdStr, ERR_NULL_DEVICE_ID);
intNode = node.updateIntgBridge(DeviceId.deviceId(deviceIdStr));
checkArgument(!hasIntgBridge(intNode.intgBridge(), intNode.hostname()),
@@ -179,7 +182,7 @@
}
if (node.tunBridge() == null) {
- String deviceIdStr = genDpid(deviceIdCounter.incrementAndGet());
+ String deviceIdStr = genDpidFromName(TUNNEL_BRIDGE + "-" + node.hostname());
checkNotNull(deviceIdStr, ERR_NULL_DEVICE_ID);
tunNode = intNode.updateTunBridge(DeviceId.deviceId(deviceIdStr));
checkArgument(!hasTunBridge(tunNode.tunBridge(), tunNode.hostname()),
@@ -291,6 +294,11 @@
}
@Override
+ public boolean hasNode(String hostname) {
+ return nodeStore.nodes().stream().anyMatch(n -> n.hostname().equals(hostname));
+ }
+
+ @Override
public KubevirtNode nodeByTunBridge(DeviceId deviceId) {
return nodeStore.nodes().stream()
.filter(node -> Objects.equals(node.tunBridge(), deviceId))
@@ -315,6 +323,15 @@
return existNode.isPresent();
}
+ private String genDpidFromName(String name) {
+ if (name != null) {
+ String hexString = Integer.toHexString(name.hashCode());
+ return OF_PREFIX + Strings.padStart(hexString, 16, '0');
+ }
+
+ return null;
+ }
+
private class InternalNodeStoreDelegate implements KubevirtNodeStoreDelegate {
@Override