Add node IP attribute in k8s node class with minor code refactoring

Change-Id: I4c1c86c95acfeb38569b91c1677e4ce8af90460f
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
index 2a938e0..4f4e6bf 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
@@ -48,6 +48,7 @@
     private static final String SEGMENT_ID = "segmentId";
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
+    private static final String NODE_IP = "nodeIp";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String EXTERNAL_BRIDGE = "externalBridge";
     private static final String LOCAL_BRIDGE = "localBridge";
@@ -71,7 +72,8 @@
                 .put(MODE, node.mode().name())
                 .put(SEGMENT_ID, node.segmentId())
                 .put(STATE, node.state().name())
-                .put(MANAGEMENT_IP, node.managementIp().toString());
+                .put(MANAGEMENT_IP, node.managementIp().toString())
+                .put(NODE_IP, node.nodeIp().toString());
 
         if (node.intgBridge() != null) {
             result.put(INTEGRATION_BRIDGE, node.intgBridge().toString());
@@ -130,13 +132,16 @@
                 TYPE + MISSING_MESSAGE);
         String mIp = nullIsIllegal(json.get(MANAGEMENT_IP).asText(),
                 MANAGEMENT_IP + MISSING_MESSAGE);
+        String nIp = nullIsIllegal(json.get(NODE_IP).asText(),
+                NODE_IP + MISSING_MESSAGE);
 
         DefaultK8sNode.Builder nodeBuilder = DefaultK8sNode.builder()
                 .clusterName(clusterName)
                 .hostname(hostname)
                 .type(K8sNode.Type.valueOf(type))
                 .state(K8sNodeState.INIT)
-                .managementIp(IpAddress.valueOf(mIp));
+                .managementIp(IpAddress.valueOf(mIp))
+                .nodeIp(IpAddress.valueOf(nIp));
 
         if (json.get(DATA_IP) != null) {
             nodeBuilder.dataIp(IpAddress.valueOf(json.get(DATA_IP).asText()));
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
index bf81f85a..30606f0 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
@@ -203,6 +203,7 @@
         String hostname = node.getMetadata().getName();
         IpAddress managementIp = null;
         IpAddress dataIp = null;
+        IpAddress nodeIp = null;
 
         // pass-through mode: we use host IP as the management and data IP
         // normal mode: we use K8S node's internal IP as the management and data IP
@@ -215,11 +216,17 @@
                 managementIp = info.hostIp();
                 dataIp = info.hostIp();
             }
+            for (NodeAddress nodeAddress:node.getStatus().getAddresses()) {
+                if (nodeAddress.getType().equals(INTERNAL_IP)) {
+                    nodeIp = IpAddress.valueOf(nodeAddress.getAddress());
+                }
+            }
         } else {
             for (NodeAddress nodeAddress:node.getStatus().getAddresses()) {
                 if (nodeAddress.getType().equals(INTERNAL_IP)) {
                     managementIp = IpAddress.valueOf(nodeAddress.getAddress());
                     dataIp = IpAddress.valueOf(nodeAddress.getAddress());
+                    nodeIp = IpAddress.valueOf(nodeAddress.getAddress());
                 }
             }
         }
@@ -267,6 +274,7 @@
                 .hostname(hostname)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
+                .nodeIp(nodeIp)
                 .extIntf(extIntf)
                 .type(nodeType)
                 .segmentId(config.segmentId())
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
index 6b2689d..ae31130 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
@@ -86,6 +86,7 @@
                 .state(K8sNodeState.INIT)
                 .managementIp(IpAddress.valueOf("10.10.10.1"))
                 .dataIp(IpAddress.valueOf("20.20.20.2"))
+                .nodeIp(IpAddress.valueOf("30.30.30.3"))
                 .intgBridge(DeviceId.deviceId("kbr-int"))
                 .extIntf("eth1")
                 .extBridgeIp(IpAddress.valueOf("10.10.10.5"))
@@ -112,6 +113,7 @@
         assertEquals(100, node.segmentId());
         assertEquals("172.16.130.4", node.managementIp().toString());
         assertEquals("172.16.130.4", node.dataIp().toString());
+        assertEquals("172.16.130.5", node.nodeIp().toString());
         assertEquals("of:00000000000000a1", node.intgBridge().toString());
         assertEquals("eth1", node.extIntf());
         assertEquals("172.16.130.5", node.extBridgeIp().toString());
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
index 71c5ca9..d0d97a8 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
@@ -35,6 +35,7 @@
     private static final String SEGMENT_ID = "segmentId";
     private static final String MANAGEMENT_IP = "managementIp";
     private static final String DATA_IP = "dataIp";
+    private static final String NODE_IP = "nodeIp";
     private static final String INTEGRATION_BRIDGE = "integrationBridge";
     private static final String STATE = "state";
     private static final String EXTERNAL_INTF = "externalInterface";
@@ -91,6 +92,14 @@
             return false;
         }
 
+        // check node IP
+        String jsonNodeIp = jsonNode.get(NODE_IP).asText();
+        String nodeIp = node.nodeIp().toString();
+        if (!jsonNodeIp.equals(nodeIp)) {
+            description.appendText("node IP was " + jsonNodeIp);
+            return false;
+        }
+
         // check integration bridge
         JsonNode jsonIntgBridge = jsonNode.get(INTEGRATION_BRIDGE);
         if (jsonIntgBridge != null) {
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
index 0bb0258..e336164 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/impl/K8sNodeManagerTest.java
@@ -360,6 +360,7 @@
                 .tunBridge(tunBridge.id())
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
+                .nodeIp(ipAddr)
                 .state(state)
                 .build();
     }
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
index 1005ab2..9908e99 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
@@ -97,6 +97,7 @@
                 .type(K8sNode.Type.MINION)
                 .dataIp(IpAddress.valueOf("10.134.34.222"))
                 .managementIp(IpAddress.valueOf("10.134.231.30"))
+                .nodeIp(IpAddress.valueOf("30.30.30.3"))
                 .intgBridge(DeviceId.deviceId("of:00000000000000a1"))
                 .extBridge(DeviceId.deviceId("of:00000000000000b1"))
                 .state(K8sNodeState.INIT)
diff --git a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
index fb01b77..ca78a90 100644
--- a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
+++ b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
@@ -5,6 +5,7 @@
   "segmentId": 100,
   "managementIp": "172.16.130.4",
   "dataIp": "172.16.130.4",
+  "nodeIp": "172.16.130.5",
   "integrationBridge": "of:00000000000000a1",
   "externalBridge": "of:00000000000000b1",
   "externalInterface": "eth1",
diff --git a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json
index 1e7d4a4..08aa1b1 100644
--- a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json
+++ b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/web/k8s-node-minion-config.json
@@ -6,6 +6,7 @@
       "type" : "MINION",
       "managementIp" : "10.134.231.32",
       "dataIp" : "10.134.34.224",
+      "nodeIp" : "30.30.30.3",
       "integrationBridge" : "of:00000000000000a2",
       "externalBridge" : "of:00000000000000b2"
     }