Fix: allow to invoke service IP from local k8s node
Change-Id: I8c39703f35319bb51bbd175e7ff717d5e6ec5250
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java
index 122a27b..5b3f353 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/K8sNodeManager.java
@@ -158,6 +158,7 @@
K8sNode intNode;
K8sNode extNode;
+ K8sNode localNode;
if (node.intgBridge() == null) {
String deviceIdStr = genDpid(deviceIdCounter.incrementAndGet());
@@ -183,7 +184,19 @@
NOT_DUPLICATED_MSG, extNode.extBridge());
}
- nodeStore.createNode(extNode);
+ if (node.localBridge() == null) {
+ String deviceIdStr = genDpid(deviceIdCounter.incrementAndGet());
+ checkNotNull(deviceIdStr, ERR_NULL_DEVICE_ID);
+ localNode = extNode.updateLocalBridge(DeviceId.deviceId(deviceIdStr));
+ checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+ NOT_DUPLICATED_MSG, localNode.localBridge());
+ } else {
+ localNode = extNode;
+ checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+ NOT_DUPLICATED_MSG, localNode.localBridge());
+ }
+
+ nodeStore.createNode(localNode);
log.info(String.format(MSG_NODE, extNode.hostname(), MSG_CREATED));
}
@@ -193,6 +206,7 @@
K8sNode intNode;
K8sNode extNode;
+ K8sNode localNode;
K8sNode existingNode = nodeStore.node(node.hostname());
checkNotNull(existingNode, ERR_NULL_NODE);
@@ -221,7 +235,19 @@
NOT_DUPLICATED_MSG, extNode.extBridge());
}
- nodeStore.updateNode(extNode);
+ DeviceId existLocalBridge = nodeStore.node(node.hostname()).localBridge();
+
+ if (extNode.localBridge() == null) {
+ localNode = extNode.updateLocalBridge(existLocalBridge);
+ checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+ NOT_DUPLICATED_MSG, localNode.localBridge());
+ } else {
+ localNode = extNode;
+ checkArgument(!hasLocalBridge(localNode.localBridge(), localNode.hostname()),
+ NOT_DUPLICATED_MSG, localNode.localBridge());
+ }
+
+ nodeStore.updateNode(localNode);
log.info(String.format(MSG_NODE, extNode.hostname(), MSG_UPDATED));
}
@@ -295,6 +321,15 @@
return existNode.isPresent();
}
+ private boolean hasLocalBridge(DeviceId deviceId, String hostname) {
+ Optional<K8sNode> existNode = nodeStore.nodes().stream()
+ .filter(n -> !n.hostname().equals(hostname))
+ .filter(n -> deviceId.equals(n.localBridge()))
+ .findFirst();
+
+ return existNode.isPresent();
+ }
+
private class InternalNodeStoreDelegate implements K8sNodeStoreDelegate {
@Override