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/Constants.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
index 09451dd..f4ffd0b 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
@@ -32,5 +32,17 @@
public static final String GRE = "gre";
public static final String GENEVE = "geneve";
+ public static final String INTEGRATION_BRIDGE = "br-int";
+ public static final String TUNNEL_BRIDGE = "br-tun";
+
+ public static final String INTEGRATION_TO_TUNNEL = "int-to-tun";
+ public static final String TUNNEL_TO_INTEGRATION = "tun-to-int";
+
+ public static final String BRIDGE_PREFIX = "br-";
+ public static final String INTEGRATION_TO_PHYSICAL_PREFIX = "int-to-";
+ public static final String PHYSICAL_TO_INTEGRATION_SUFFIX = "-to-int";
+
+ public static final String FLOW_KEY = "flow";
+
public static final String DEFAULT_CLUSTER_NAME = "default";
}
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;
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
index 402d0f9..2cbb471 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
@@ -76,6 +76,13 @@
DeviceId intgBridge();
/**
+ * Returns the device ID of the tunnel bridge at the node.
+ *
+ * @return device id
+ */
+ DeviceId tunBridge();
+
+ /**
* Returns the management network IP address of the node.
*
* @return ip address
@@ -113,6 +120,14 @@
KubevirtNode updateIntgBridge(DeviceId deviceId);
/**
+ * Returns new kubevirt node instance with given tunnel bridge.
+ *
+ * @param deviceId tunnel bridge device ID
+ * @return updated kubevirt node
+ */
+ KubevirtNode updateTunBridge(DeviceId deviceId);
+
+ /**
* Returns a collection of physical interfaces.
*
* @return physical interfaces
@@ -163,6 +178,14 @@
KubevirtNode.Builder intgBridge(DeviceId deviceId);
/**
+ * Returns kubevirt node builder with supplied tunnel bridge name.
+ *
+ * @param deviceId tunnel bridge device ID
+ * @return kubevirt node builder
+ */
+ KubevirtNode.Builder tunBridge(DeviceId deviceId);
+
+ /**
* Returns kubevirt node builder with supplied management IP address.
*
* @param managementIp management IP address
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeHandler.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeHandler.java
index d3833c1..e1b795a 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeHandler.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeHandler.java
@@ -19,4 +19,42 @@
* Service handling KubeVirt node state.
*/
public interface KubevirtNodeHandler {
+
+ /**
+ * Processes the given node for init state.
+ * It creates required bridges on OVS by referring to node type.
+ *
+ * @param node kubevirt node
+ */
+ void processInitState(KubevirtNode node);
+
+ /**
+ * Processes the given node for device created state.
+ * It creates required ports on the bridges based on the node type.
+ *
+ * @param node kubevirt node
+ */
+ void processDeviceCreatedState(KubevirtNode node);
+
+ /**
+ * Processes the given node for complete state.
+ * It performs post-init jobs for the complete node.
+ *
+ * @param node kubevirt node
+ */
+ void processCompleteState(KubevirtNode node);
+
+ /**
+ * Processes the given node for incomplete state.
+ *
+ * @param node kubevirt node
+ */
+ void processIncompleteState(KubevirtNode node);
+
+ /**
+ * Processes the given node for on boarded state.
+ *
+ * @param node kubevirt node
+ */
+ void processOnBoardedState(KubevirtNode node);
}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeService.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeService.java
index e032ba3..480969d 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeService.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeService.java
@@ -82,4 +82,13 @@
* @return kubevirt node
*/
KubevirtNode node(IpAddress mgmtIp);
+
+ /**
+ * Returns the node with the specified tunnel device ID.
+ * The device ID tunnel bridge.
+ *
+ * @param deviceId device id
+ * @return kubevirt node
+ */
+ KubevirtNode nodeByTunBridge(DeviceId deviceId);
}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeState.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeState.java
index 87d921e..5baf3f9 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeState.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNodeState.java
@@ -26,12 +26,11 @@
PRE_ON_BOARD {
@Override
public void process(KubevirtNodeHandler handler, KubevirtNode node) {
-
}
@Override
- public KubevirtNodeState nodeState() {
- return null;
+ public KubevirtNodeState nextState() {
+ return ON_BOARDED;
}
},
/**
@@ -40,12 +39,12 @@
ON_BOARDED {
@Override
public void process(KubevirtNodeHandler handler, KubevirtNode node) {
-
+ handler.processOnBoardedState(node);
}
@Override
- public KubevirtNodeState nodeState() {
- return null;
+ public KubevirtNodeState nextState() {
+ return ON_BOARDED;
}
},
/**
@@ -54,12 +53,12 @@
INIT {
@Override
public void process(KubevirtNodeHandler handler, KubevirtNode node) {
-
+ handler.processInitState(node);
}
@Override
- public KubevirtNodeState nodeState() {
- return null;
+ public KubevirtNodeState nextState() {
+ return DEVICE_CREATED;
}
},
/**
@@ -68,12 +67,12 @@
DEVICE_CREATED {
@Override
public void process(KubevirtNodeHandler handler, KubevirtNode node) {
-
+ handler.processDeviceCreatedState(node);
}
@Override
- public KubevirtNodeState nodeState() {
- return null;
+ public KubevirtNodeState nextState() {
+ return COMPLETE;
}
},
/**
@@ -82,12 +81,12 @@
COMPLETE {
@Override
public void process(KubevirtNodeHandler handler, KubevirtNode node) {
-
+ handler.processCompleteState(node);
}
@Override
- public KubevirtNodeState nodeState() {
- return null;
+ public KubevirtNodeState nextState() {
+ return COMPLETE;
}
},
/**
@@ -96,12 +95,12 @@
INCOMPLETE {
@Override
public void process(KubevirtNodeHandler handler, KubevirtNode node) {
-
+ handler.processIncompleteState(node);
}
@Override
- public KubevirtNodeState nodeState() {
- return null;
+ public KubevirtNodeState nextState() {
+ return INIT;
}
};
@@ -118,5 +117,5 @@
*
* @return the next kubevirt node state
*/
- public abstract KubevirtNodeState nodeState();
+ public abstract KubevirtNodeState nextState();
}
diff --git a/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNodeTest.java b/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNodeTest.java
index 2fa6441..b2537fd 100644
--- a/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNodeTest.java
+++ b/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNodeTest.java
@@ -81,6 +81,7 @@
.managementIp(MANAGEMENT_IP)
.dataIp(DATA_IP)
.intgBridge(DEVICE_1.id())
+ .tunBridge(DEVICE_1.id())
.state(KubevirtNodeState.COMPLETE)
.phyIntfs(PHY_INTFS)
.build();
@@ -135,6 +136,7 @@
DefaultKubevirtNode.builder()
.type(KubevirtNode.Type.WORKER)
.intgBridge(DEVICE_1.id())
+ .tunBridge(DEVICE_1.id())
.managementIp(TEST_IP)
.dataIp(TEST_IP)
.state(KubevirtNodeState.INIT)
@@ -149,6 +151,7 @@
DefaultKubevirtNode.builder()
.hostname(HOSTNAME_1)
.intgBridge(DEVICE_1.id())
+ .tunBridge(DEVICE_1.id())
.managementIp(TEST_IP)
.dataIp(TEST_IP)
.state(KubevirtNodeState.INIT)
@@ -165,6 +168,7 @@
.hostname(HOSTNAME_1)
.type(KubevirtNode.Type.WORKER)
.intgBridge(DEVICE_1.id())
+ .tunBridge(DEVICE_1.id())
.dataIp(TEST_IP)
.state(KubevirtNodeState.INIT)
.build();
diff --git a/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/KubevirtNodeTest.java b/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/KubevirtNodeTest.java
index abb1643..478bafd 100644
--- a/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/KubevirtNodeTest.java
+++ b/apps/kubevirt-node/api/src/test/java/org/onosproject/kubevirtnode/api/KubevirtNodeTest.java
@@ -47,6 +47,7 @@
.hostname(hostname)
.type(type)
.intgBridge(intgBridge.id())
+ .tunBridge(intgBridge.id())
.managementIp(ipAddr)
.dataIp(ipAddr)
.state(state)