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/K8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
index 055b0df..8931b45 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
@@ -17,6 +17,7 @@
 
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
+import org.onosproject.k8snode.api.K8sApiConfig.Mode;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 
@@ -37,10 +38,53 @@
         /**
          * Signifies that this is a kubernetes minion node.
          */
-        MINION
+        MINION,
     }
 
     /**
+     * Returns cluster name of the node.
+     *
+     * @return cluster name
+     */
+    String clusterName();
+
+    /**
+     * Returns host short name.
+     *
+     * @return host short name
+     */
+    String hostShortName();
+
+    /**
+     * Returns a unique string with the given length and string.
+     *
+     * @param length target string length
+     * @return a unique string
+     */
+    String uniqueString(int length);
+
+    /**
+     * Returns the segmentation ID.
+     *
+     * @return segmentation ID
+     */
+    int segmentId();
+
+    /**
+     * Returns the key of VXLAN/GRE/GENEVE tunnel.
+     *
+     * @return key of various tunnel
+     */
+    String tunnelKey();
+
+    /**
+     * Returns the CNI running mode.
+     *
+     * @return CNI running mode
+     */
+    Mode mode();
+
+    /**
      * Returns hostname of the node.
      *
      * @return hostname
@@ -83,6 +127,13 @@
     DeviceId localBridge();
 
     /**
+     * Returns the device ID of the tunnel bridge at the node.
+     *
+     * @return device id
+     */
+    DeviceId tunBridge();
+
+    /**
      * Returns the external interface name.
      *
      * @return external interface name
@@ -114,6 +165,14 @@
     K8sNode updateLocalBridge(DeviceId deviceId);
 
     /**
+     * Returns new kubernetes node instance with given tun bridge.
+     *
+     * @param deviceId tunnel bridge device ID
+     * @return updated kubernetes node
+     */
+    K8sNode updateTunBridge(DeviceId deviceId);
+
+    /**
      * Returns the management network IP address of the node.
      *
      * @return ip address
@@ -158,6 +217,118 @@
     K8sNode updateExtGatewayMac(MacAddress macAddress);
 
     /**
+     * Returns GRE port name.
+     *
+     * @return GRE port name
+     */
+    String grePortName();
+
+    /**
+     * Returns VXLAN port name.
+     *
+     * @return VXLAN port name
+     */
+    String vxlanPortName();
+
+    /**
+     * Returns GENEVE port name.
+     *
+     * @return GENEVE port name
+     */
+    String genevePortName();
+
+    /**
+     * Returns integration bridge name.
+     *
+     * @return integration bridge name
+     */
+    String intgBridgeName();
+
+    /**
+     * Returns external bridge name.
+     *
+     * @return external bridge name
+     */
+    String extBridgeName();
+
+    /**
+     * Returns local bridge name.
+     *
+     * @return local bridge name
+     */
+    String localBridgeName();
+
+    /**
+     * Returns tun bridge name.
+     *
+     * @return tun bridge name
+     */
+    String tunBridgeName();
+
+    /**
+     * Returns integration bridge port name.
+     *
+     * @return integration bridge port name
+     */
+    String intgBridgePortName();
+
+    /**
+     * Returns external bridge port name.
+     *
+     * @return external bridge port name
+     */
+    String extBridgePortName();
+
+    /**
+     * Returns local bridge port name.
+     *
+     * @return local bridge port name
+     */
+    String localBridgePortName();
+
+    /**
+     * Returns integration to external patch port name.
+     *
+     * @return integration to external patch port name
+     */
+    String intgToExtPatchPortName();
+
+    /**
+     * Returns integration to tunnel patch port name.
+     *
+     * @return integration to tunnel patch port name
+     */
+    String intgToTunPatchPortName();
+
+    /**
+     * Returns integration to local patch port name.
+     *
+     * @return integration to local patch port name
+     */
+    String intgToLocalPatchPortName();
+
+    /**
+     * Returns local to integration patch port name.
+     *
+     * @return local to integration patch port name
+     */
+    String localToIntgPatchPortName();
+
+    /**
+     * Returns external to integration patch port name.
+     *
+     * @return external to integration patch port name
+     */
+    String extToIntgPatchPortName();
+
+    /**
+     * Returns tunnel to integration patch port name.
+     *
+     * @return tunnel to integration patch port name
+     */
+    String tunToIntgPatchPortName();
+
+    /**
      * Returns the GRE tunnel port number.
      *
      * @return GRE port number; null if the GRE tunnel port does not exist
@@ -204,7 +375,7 @@
      *
      * @return patch port number
      */
-    PortNumber localToIntgPatchPortNumber();
+    PortNumber localToIntgPatchPortNum();
 
     /**
      * Returns the external to integration patch port number.
@@ -268,6 +439,14 @@
         K8sNode build();
 
         /**
+         * Returns kubernetes node builder with supplied cluster name.
+         *
+         * @param clusterName cluster name
+         * @return kubernetes node builder
+         */
+        Builder clusterName(String clusterName);
+
+        /**
          * Returns kubernetes node builder with supplied hostname.
          *
          * @param hostname hostname of the node
@@ -284,6 +463,22 @@
         Builder type(Type type);
 
         /**
+         * Returns kubernetes node builder with supplied segment ID.
+         *
+         * @param segmentId kubernetes node segment ID
+         * @return kubernetes node builder
+         */
+        Builder segmentId(int segmentId);
+
+        /**
+         * Return kubernetes node builder with supplied mode.
+         *
+         * @param mode kubernetes CNI running mode
+         * @return kubernetes node builder
+         */
+        Builder mode(Mode mode);
+
+        /**
          * Returns kubernetes node builder with supplied integration bridge name.
          *
          * @param deviceId integration bridge device ID
@@ -308,6 +503,14 @@
         Builder localBridge(DeviceId deviceId);
 
         /**
+         * Returns kubernetes node builder with supplied tunnel bridge name.
+         *
+         * @param deviceId tunnel bridge device ID
+         * @return kubernetes node builder
+         */
+        Builder tunBridge(DeviceId deviceId);
+
+        /**
          * Returns kubernetes node builder with supplied external interface.
          *
          * @param intf external interface