Add the logic of generating ovs bridges on bootstrap kubevirt node

Change-Id: Id691738ee31b509a143143103152111dfb47a606
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
index 3815ff3..246d6c4 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
@@ -39,6 +39,7 @@
     private final String hostname;
     private final Type type;
     private final DeviceId intgBridge;
+    private final DeviceId tunBridge;
     private final IpAddress managementIp;
     private final IpAddress dataIp;
     private final KubevirtNodeState state;
@@ -51,19 +52,22 @@
      * @param hostname          hostname
      * @param type              node type
      * @param intgBridge        integration bridge
+     * @param tunBridge         tunnel bridge
      * @param managementIp      management IP address
      * @param dataIp            data IP address
      * @param state             node state
      * @param phyIntfs          physical interfaces
      */
     protected DefaultKubevirtNode(String clusterName, String hostname, Type type,
-                                  DeviceId intgBridge, IpAddress managementIp,
-                                  IpAddress dataIp, KubevirtNodeState state,
+                                  DeviceId intgBridge, DeviceId tunBridge,
+                                  IpAddress managementIp, IpAddress dataIp,
+                                  KubevirtNodeState state,
                                   Collection<KubevirtPhyInterface> phyIntfs) {
         this.clusterName = clusterName;
         this.hostname = hostname;
         this.type = type;
         this.intgBridge = intgBridge;
+        this.tunBridge = tunBridge;
         this.managementIp = managementIp;
         this.dataIp = dataIp;
         this.state = state;
@@ -96,6 +100,11 @@
     }
 
     @Override
+    public DeviceId tunBridge() {
+        return tunBridge;
+    }
+
+    @Override
     public IpAddress managementIp() {
         return managementIp;
     }
@@ -117,6 +126,7 @@
                 .clusterName(clusterName)
                 .type(type)
                 .intgBridge(intgBridge)
+                .tunBridge(tunBridge)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
                 .state(newState)
@@ -131,6 +141,22 @@
                 .clusterName(clusterName)
                 .type(type)
                 .intgBridge(deviceId)
+                .tunBridge(tunBridge)
+                .managementIp(managementIp)
+                .dataIp(dataIp)
+                .state(state)
+                .phyIntfs(phyIntfs)
+                .build();
+    }
+
+    @Override
+    public KubevirtNode updateTunBridge(DeviceId deviceId) {
+        return new Builder()
+                .hostname(hostname)
+                .clusterName(clusterName)
+                .type(type)
+                .intgBridge(intgBridge)
+                .tunBridge(deviceId)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
                 .state(state)
@@ -168,9 +194,11 @@
                 .clusterName(node.clusterName())
                 .type(node.type())
                 .intgBridge(node.intgBridge())
+                .tunBridge(node.tunBridge())
                 .managementIp(node.managementIp())
                 .dataIp(node.dataIp())
-                .state(node.state());
+                .state(node.state())
+                .phyIntfs(node.phyIntfs());
     }
 
     @Override
@@ -186,13 +214,14 @@
                 hostname.equals(that.hostname) &&
                 type == that.type &&
                 intgBridge.equals(that.intgBridge) &&
+                tunBridge.equals(that.tunBridge) &&
                 managementIp.equals(that.managementIp) &&
                 dataIp.equals(that.dataIp);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(clusterName, hostname, type, intgBridge,
+        return Objects.hash(clusterName, hostname, type, intgBridge, tunBridge,
                 managementIp, dataIp);
     }
 
@@ -203,9 +232,11 @@
                 .add("hostname", hostname)
                 .add("type", type)
                 .add("intgBridge", intgBridge)
+                .add("tunBridge", tunBridge)
                 .add("managementIp", managementIp)
                 .add("dataIp", dataIp)
                 .add("state", state)
+                .add("phyIntfs", phyIntfs)
                 .toString();
     }
 
@@ -215,6 +246,7 @@
         private String hostname;
         private Type type;
         private DeviceId intgBridge;
+        private DeviceId tunBridge;
         private IpAddress managementIp;
         private IpAddress dataIp;
         private KubevirtNodeState state;
@@ -240,6 +272,7 @@
                     hostname,
                     type,
                     intgBridge,
+                    tunBridge,
                     managementIp,
                     dataIp,
                     state,
@@ -272,6 +305,12 @@
         }
 
         @Override
+        public Builder tunBridge(DeviceId deviceId) {
+            this.tunBridge = deviceId;
+            return this;
+        }
+
+        @Override
         public Builder managementIp(IpAddress managementIp) {
             this.managementIp = managementIp;
             return this;