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 1c68f3d..a64b772 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
@@ -255,6 +255,11 @@
         // do something if needed
     }
 
+    @Override
+    public void processPostOnBoardState(K8sNode k8sNode) {
+        // do something if needed
+    }
+
     /**
      * Extracts properties from the component configuration context.
      *
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java
index 3b1048f..1786f4c 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/web/K8sNodeWebResource.java
@@ -48,6 +48,7 @@
 import static javax.ws.rs.core.Response.created;
 import static org.onlab.util.Tools.nullIsIllegal;
 import static org.onlab.util.Tools.readTreeFromStream;
+import static org.onosproject.k8snode.api.K8sNodeState.POST_ON_BOARD;
 import static org.onosproject.k8snode.util.K8sNodeUtil.endpoint;
 
 /**
@@ -70,6 +71,7 @@
     private static final String INIT = "INIT";
     private static final String NOT_EXIST = "Not exist";
     private static final String STATE = "State";
+    private static final String RESULT = "Result";
 
     private static final String HOST_NAME = "hostname";
     private static final String ENDPOINT = "endpoint";
@@ -248,6 +250,39 @@
         return ok(mapper().createObjectNode()).build();
     }
 
+    /**
+     * Updates a kubernetes nodes' state as post-on-board.
+     *
+     * @param hostname kubernetes node name
+     * @return 200 OK with the updated kubernetes node's config, 400 BAD_REQUEST
+     * if the JSON is malformed, and 304 NOT_MODIFIED without the updated config
+     */
+    @PUT
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("update/postonboard/{hostname}")
+    public Response postOnBoardNode(@PathParam("hostname") String hostname) {
+        nodeAdminService.node(hostname).updateState(POST_ON_BOARD);
+        return Response.ok().build();
+    }
+
+    /**
+     * Indicates whether all kubernetes nodes are in post-on-board state.
+     *
+     * @return 200 OK with True, or 200 OK with False
+     */
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("get/postonboard/all")
+    public Response postOnBoardNodes() {
+        long numOfAllNodes = nodeAdminService.nodes().size();
+        long numOfReadyNodes = nodeAdminService.nodes().stream()
+                .filter(n -> n.state() == POST_ON_BOARD)
+                .count();
+        boolean result = numOfAllNodes == numOfReadyNodes;
+
+        return ok(mapper().createObjectNode().put(RESULT, result)).build();
+    }
+
     private Set<K8sNode> readNodeConfiguration(InputStream input) {
         Set<K8sNode> nodeSet = Sets.newHashSet();
         try {
