Remove bridges and associated flow rules when removing k8s nodes
Change-Id: Iab54503a4bb75874f69e8e1623bb11c66cad9eee
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 46f56a6..e5c8b00 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
@@ -86,6 +86,7 @@
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
import static org.slf4j.LoggerFactory.getLogger;
+
/**
* Service bootstraps kubernetes node based on its type.
*/
@@ -261,6 +262,11 @@
// do something if needed
}
+ @Override
+ public void processOffBoardedState(K8sNode k8sNode) {
+ // do something if needed
+ }
+
/**
* Extracts properties from the component configuration context.
*
@@ -630,6 +636,18 @@
return;
}
+ if (k8sNode.mode() == NORMAL) {
+ // delete tunnel bridge from the node
+ client.dropBridge(k8sNode.tunBridgeName());
+ } else {
+ // remove the patch ports direct to the integration bridge from tunnel bridge
+ removeTunnelPatchPort(k8sNode);
+ // remove the patch ports direct to the external bridge from the router bridge
+ removeRouterPatchPort(k8sNode);
+ // remove the patch ports directs to the openstack's br-int bridge from the int and ext bridges
+ removeOpenstackPatchPorts(k8sNode);
+ }
+
// delete integration bridge from the node
client.dropBridge(k8sNode.intgBridgeName());
@@ -639,13 +657,42 @@
// delete local bridge from the node
client.dropBridge(k8sNode.localBridgeName());
- if (k8sNode.mode() == NORMAL) {
- // delete tunnel bridge from the node
- client.dropBridge(k8sNode.tunBridgeName());
+ // disconnect ovsdb
+ // client.disconnect();
+ }
+
+ private void removeTunnelPatchPort(K8sNode k8sNode) {
+ OvsdbClientService client = getOvsdbClient(k8sNode, ovsdbPortNum, ovsdbController);
+ if (client == null) {
+ log.info("Failed to get ovsdb client");
+ return;
}
- // disconnect ovsdb
- client.disconnect();
+ client.dropInterface(k8sNode.tunToIntgPatchPortName());
+ }
+
+ private void removeRouterPatchPort(K8sNode k8sNode) {
+ OvsdbClientService client = getOvsdbClient(k8sNode, ovsdbPortNum, ovsdbController);
+ if (client == null) {
+ log.info("Failed to get ovsdb client");
+ return;
+ }
+
+ client.dropInterface(k8sNode.routerToExtPatchPortName());
+ }
+
+ private void removeOpenstackPatchPorts(K8sNode k8sNode) {
+ OvsdbClientService client = getOvsdbClient(k8sNode, ovsdbPortNum, ovsdbController);
+ if (client == null) {
+ log.info("Failed to get ovsdb client");
+ return;
+ }
+
+ // remove patch port attached at br-int peers with the k8s integration bridge
+ client.dropInterface(k8sNode.osToK8sIntgPatchPortName());
+
+ // remove patch port attached at br-int peers with the k8s external bridge
+ client.dropInterface(k8sNode.osToK8sExtPatchPortName());
}
/**
@@ -831,21 +878,17 @@
case K8S_NODE_CREATED:
case K8S_NODE_UPDATED:
eventExecutor.execute(() -> {
-
if (!isRelevantHelper()) {
return;
}
-
bootstrapNode(event.subject());
});
break;
case K8S_NODE_REMOVED:
eventExecutor.execute(() -> {
-
if (!isRelevantHelper()) {
return;
}
-
processK8sNodeRemoved(event.subject());
});
break;