[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);