[ONOS-7757] Support onos-local and embedded cluster configurations
- Refactor cluster.json to support internal/external nodes ('controller' and 'storage')
- Bootstrap embedded partitions when 'storage' nodes not present
- Update onos-gen-config script to generate cluster.json based on environment variables
- Update setup scenario to ignore missing $OCC# environment variables
Change-Id: Ia93b64e13d7a7c35ed712da4c681425e3ccf9fe9
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
index 347c812..7dbf139 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/ClusterMetadataManager.java
@@ -98,7 +98,8 @@
public ControllerNode getLocalNode() {
checkPermission(CLUSTER_READ);
if (localNode == null) {
- ControllerNode localNode = getProvider().getClusterMetadata().value().getLocalNode();
+ ClusterMetadata metadata = getProvider().getClusterMetadata().value();
+ ControllerNode localNode = metadata.getLocalNode();
try {
if (localNode != null) {
this.localNode = new DefaultControllerNode(
@@ -107,7 +108,15 @@
localNode.tcpPort());
} else {
IpAddress ip = findLocalIp();
- this.localNode = new DefaultControllerNode(NodeId.nodeId(ip.toString()), ip);
+ localNode = metadata.getControllerNodes().stream()
+ .filter(node -> node.ip().equals(ip))
+ .findFirst()
+ .orElse(null);
+ if (localNode != null) {
+ this.localNode = localNode;
+ } else {
+ this.localNode = new DefaultControllerNode(NodeId.nodeId(ip.toString()), ip);
+ }
}
} catch (SocketException e) {
throw new IllegalStateException(e);