Support onboard kubernetes nodes through K8S API configuration

Change-Id: I060a443f45ef9c974d030415a30e9376fc82d124
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
index f31301f..1c68f3d 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sNodeHandler.java
@@ -244,6 +244,17 @@
         // do something if needed
     }
 
+    @Override
+    public void processPreOnBoardState(K8sNode k8sNode) {
+        processInitState(k8sNode);
+        processDeviceCreatedState(k8sNode);
+    }
+
+    @Override
+    public void processOnBoardedState(K8sNode k8sNode) {
+        // do something if needed
+    }
+
     /**
      * Extracts properties from the component configuration context.
      *
@@ -455,32 +466,14 @@
     private boolean isCurrentStateDone(K8sNode k8sNode) {
         switch (k8sNode.state()) {
             case INIT:
-                if (!isOvsdbConnected(k8sNode, ovsdbPortNum,
-                        ovsdbController, deviceService)) {
-                    return false;
-                }
-
-                return k8sNode.intgBridge() != null && k8sNode.extBridge() != null &&
-                        deviceService.isAvailable(k8sNode.intgBridge()) &&
-                        deviceService.isAvailable(k8sNode.extBridge()) &&
-                        deviceService.isAvailable(k8sNode.localBridge());
+                return isInitStateDone(k8sNode);
             case DEVICE_CREATED:
-                if (k8sNode.dataIp() != null &&
-                        !isIntfEnabled(k8sNode, VXLAN_TUNNEL)) {
-                    return false;
-                }
-                if (k8sNode.dataIp() != null &&
-                        !isIntfEnabled(k8sNode, GRE_TUNNEL)) {
-                    return false;
-                }
-                if (k8sNode.dataIp() != null &&
-                        !isIntfEnabled(k8sNode, GENEVE_TUNNEL)) {
-                    return false;
-                }
-
-                return true;
+                return isDeviceCreatedStateDone(k8sNode);
+            case PRE_ON_BOARD:
+                return isInitStateDone(k8sNode) && isDeviceCreatedStateDone(k8sNode);
             case COMPLETE:
             case INCOMPLETE:
+            case ON_BOARDED:
                 // always return false
                 // run init CLI to re-trigger node bootstrap
                 return false;
@@ -489,6 +482,35 @@
         }
     }
 
+    private boolean isInitStateDone(K8sNode k8sNode) {
+        if (!isOvsdbConnected(k8sNode, ovsdbPortNum,
+                ovsdbController, deviceService)) {
+            return false;
+        }
+
+        return k8sNode.intgBridge() != null && k8sNode.extBridge() != null &&
+                deviceService.isAvailable(k8sNode.intgBridge()) &&
+                deviceService.isAvailable(k8sNode.extBridge()) &&
+                deviceService.isAvailable(k8sNode.localBridge());
+    }
+
+    private boolean isDeviceCreatedStateDone(K8sNode k8sNode) {
+        if (k8sNode.dataIp() != null &&
+                !isIntfEnabled(k8sNode, VXLAN_TUNNEL)) {
+            return false;
+        }
+        if (k8sNode.dataIp() != null &&
+                !isIntfEnabled(k8sNode, GRE_TUNNEL)) {
+            return false;
+        }
+        if (k8sNode.dataIp() != null &&
+                !isIntfEnabled(k8sNode, GENEVE_TUNNEL)) {
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * Configures the kubernetes node with new state.
      *