Initial support for multi kubernetes clusters for k8s nodes

Change-Id: I6ca132898f8e157e0583de38a637fdc135f21d6f
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java
index 62d050d..d01f3a2 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sApiConfig.java
@@ -16,6 +16,9 @@
 package org.onosproject.k8snode.api;
 
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+
+import java.util.Set;
 
 /**
  * Representation of configuration used in kubernetes API server.
@@ -52,6 +55,46 @@
         DISCONNECTED,
     }
 
+    enum Mode {
+        /**
+         * Signifies that the CNI is running in normal mode.
+         */
+        NORMAL,
+
+        /**
+         * Signifies that the CNI is running in pass-through mode.
+         */
+        PASSTHROUGH,
+    }
+
+    /**
+     * Returns the cluster name.
+     *
+     * @return cluster name
+     */
+    String clusterName();
+
+    /**
+     * Returns cluster short name.
+     *
+     * @return cluster short name
+     */
+    String clusterShortName();
+
+    /**
+     * Returns the segmentation ID.
+     *
+     * @return segmentation ID
+     */
+    int segmentId();
+
+    /**
+     * Returns the external network CIDR.
+     *
+     * @return external network CIDR
+     */
+    IpPrefix extNetworkCidr();
+
     /**
      * Returns the authentication scheme.
      *
@@ -81,6 +124,13 @@
     State state();
 
     /**
+     * Returns the CNI running mode.
+     *
+     * @return running mode
+     */
+    Mode mode();
+
+    /**
      * Returns new kubernetes API config instance with given state.
      *
      * @param newState updated state
@@ -117,6 +167,13 @@
     String clientKeyData();
 
     /**
+     * Returns the host Nodes info set.
+     *
+     * @return host nodes info set
+     */
+    Set<HostNodesInfo> infos();
+
+    /**
      * Builder of new API config entity.
      */
     interface Builder {
@@ -129,6 +186,30 @@
         K8sApiConfig build();
 
         /**
+         * Returns kubernetes API server config builder with cluster name.
+         *
+         * @param clusterName cluster name
+         * @return kubernetes API config builder
+         */
+        Builder clusterName(String clusterName);
+
+        /**
+         * Returns kubernetes API server config builder with segment ID.
+         *
+         * @param segmentId segment ID
+         * @return kubernetes API config builder
+         */
+        Builder segmentId(int segmentId);
+
+        /**
+         * Returns kubernetes API server config builder with external network CIDR.
+         *
+         * @param extNetworkCidr external network CIDR
+         * @return kubernetes API config builder
+         */
+        Builder extNetworkCidr(IpPrefix extNetworkCidr);
+
+        /**
          * Returns kubernetes API server config builder with supplied scheme.
          *
          * @param scheme scheme of authentication
@@ -161,6 +242,14 @@
         Builder state(State state);
 
         /**
+         * Returns kubernetes API server config builder with supplied mode.
+         *
+         * @param mode CNI running mode
+         * @return kubernetes API config builder
+         */
+        Builder mode(Mode mode);
+
+        /**
          * Returns kubernetes API server config builder with supplied token.
          *
          * @param token token for authentication
@@ -191,5 +280,13 @@
          * @return kubernetes API config builder
          */
         Builder clientKeyData(String clientKeyData);
+
+        /**
+         * Returns kubernetes API server config builder with supplied hostNodesInfo.
+         *
+         * @param infos hostNodesInfo
+         * @return kubernetes API config builder
+         */
+        Builder infos(Set<HostNodesInfo> infos);
     }
 }