Listen on k8s port event to create instance port and host
Change-Id: I59ab1f5f422ce2ba8f5432279ceec6d77cd96f06
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
index b6382d7..82b63cb 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/Constants.java
@@ -28,14 +28,14 @@
public static final String LOCAL_BRIDGE = "kbr-local";
public static final String TUNNEL_BRIDGE = "kbr-tun";
public static final String EXTERNAL_ROUTER = "kbr-router";
- public static final String INTEGRATION_TO_EXTERNAL_BRIDGE = "kbr-int-ex";
- public static final String PHYSICAL_EXTERNAL_BRIDGE = "phy-kbr-ex";
- public static final String INTEGRATION_TO_LOCAL_BRIDGE = "kbr-int-local";
- public static final String LOCAL_TO_INTEGRATION_BRIDGE = "kbr-local-int";
- public static final String EXTERNAL_TO_ROUTER = "kbr-ex-router";
- public static final String ROUTER_TO_EXTERNAL = "kbr-router-ex";
- public static final String INTEGRATION_TO_TUN_BRIDGE = "kbr-int-tun";
- public static final String TUN_TO_INTEGRATION_BRIDGE = "kbr-tun-int";
+ public static final String INTEGRATION_TO_EXTERNAL_BRIDGE = "int-ex";
+ public static final String PHYSICAL_EXTERNAL_BRIDGE = "ex-int";
+ public static final String INTEGRATION_TO_LOCAL_BRIDGE = "int-local";
+ public static final String LOCAL_TO_INTEGRATION_BRIDGE = "local-int";
+ public static final String EXTERNAL_TO_ROUTER = "ex-router";
+ public static final String ROUTER_TO_EXTERNAL = "router-ex";
+ public static final String INTEGRATION_TO_TUN_BRIDGE = "int-tun";
+ public static final String TUN_TO_INTEGRATION_BRIDGE = "tun-int";
public static final String VXLAN_TUNNEL = "vxlan";
public static final String GRE_TUNNEL = "gre";
public static final String GENEVE_TUNNEL = "geneve";
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
index 7e4b4bc..6bb2001 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
@@ -190,7 +190,24 @@
@Override
public DeviceId tunBridge() {
- return tunBridge;
+
+ if (mode == PASSTHROUGH) {
+ K8sHostService hostService =
+ DefaultServiceDirectory.getService(K8sHostService.class);
+ DeviceId deviceId = null;
+ for (K8sHost host : hostService.hosts()) {
+ if (host.nodeNames().contains(hostname())) {
+ for (K8sTunnelBridge bridge : host.tunBridges()) {
+ if (bridge.tunnelId() == segmentId()) {
+ deviceId = bridge.deviceId();
+ }
+ }
+ }
+ }
+ return deviceId;
+ } else {
+ return tunBridge;
+ }
}
@Override
@@ -403,7 +420,28 @@
@Override
public PortNumber tunToIntgPortNum() {
- return portNumber(tunBridge, tunToIntgPatchPortName());
+ if (mode() == PASSTHROUGH) {
+ K8sHostService hostService =
+ DefaultServiceDirectory.getService(K8sHostService.class);
+ Port port = null;
+ for (K8sHost host : hostService.hosts()) {
+ if (host.nodeNames().contains(hostname())) {
+ for (K8sTunnelBridge bridge : host.tunBridges()) {
+ if (bridge.tunnelId() == segmentId()) {
+ port = port(bridge.deviceId(), tunToIntgPatchPortName());
+ }
+ }
+ }
+ }
+
+ if (port == null) {
+ return null;
+ } else {
+ return port.number();
+ }
+ } else {
+ return portNumber(tunBridge, tunToIntgPatchPortName());
+ }
}
@Override
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
index 4cc6609..2a938e0 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/codec/K8sNodeCodec.java
@@ -44,6 +44,7 @@
private static final String CLUSTER_NAME = "clusterName";
private static final String HOSTNAME = "hostname";
private static final String TYPE = "type";
+ private static final String MODE = "mode";
private static final String SEGMENT_ID = "segmentId";
private static final String MANAGEMENT_IP = "managementIp";
private static final String DATA_IP = "dataIp";
@@ -67,6 +68,7 @@
.put(CLUSTER_NAME, node.clusterName())
.put(HOSTNAME, node.hostname())
.put(TYPE, node.type().name())
+ .put(MODE, node.mode().name())
.put(SEGMENT_ID, node.segmentId())
.put(STATE, node.state().name())
.put(MANAGEMENT_IP, node.managementIp().toString());
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
index 342787c..cf78b6e 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/impl/DefaultK8sApiConfigHandler.java
@@ -61,6 +61,7 @@
import static org.onosproject.k8snode.api.K8sNode.Type.MASTER;
import static org.onosproject.k8snode.api.K8sNode.Type.MINION;
import static org.onosproject.k8snode.api.K8sNodeService.APP_ID;
+import static org.onosproject.k8snode.api.K8sNodeState.ON_BOARDED;
import static org.onosproject.k8snode.api.K8sNodeState.PRE_ON_BOARD;
import static org.onosproject.k8snode.util.K8sNodeUtil.k8sClient;
import static org.slf4j.LoggerFactory.getLogger;
@@ -82,7 +83,7 @@
private static final String DEFAULT_GATEWAY_IP = "127.0.0.1";
private static final String DEFAULT_BRIDGE_IP = "127.0.0.1";
- private static final long SLEEP_MS = 3000; // we wait 3s
+ private static final long SLEEP_MS = 10000; // we wait 10s
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected CoreService coreService;
@@ -151,9 +152,22 @@
return;
}
- k8sClient.nodes().list().getItems().forEach(n ->
- k8sNodeAdminService.createNode(buildK8sNode(n, config))
- );
+ for (Node node : k8sClient.nodes().list().getItems()) {
+ K8sNode k8sNode = buildK8sNode(node, config);
+ k8sNodeAdminService.createNode(k8sNode);
+
+ while (k8sNodeAdminService.node(k8sNode.hostname()).state() != ON_BOARDED) {
+ try {
+ sleep(SLEEP_MS);
+ } catch (InterruptedException e) {
+ log.error("Exception caused during on-boarding state checking...");
+ }
+
+ if (k8sNodeAdminService.node(k8sNode.hostname()).state() == ON_BOARDED) {
+ break;
+ }
+ }
+ }
}
private void bootstrapK8sHosts(K8sApiConfig config) {
@@ -299,13 +313,9 @@
bootstrapK8sNodes(config);
- try {
- sleep(SLEEP_MS);
- } catch (InterruptedException e) {
- log.error("Exception caused during init state checking...");
+ if (config.infos().size() > 0) {
+ bootstrapK8sHosts(config);
}
-
- bootstrapK8sHosts(config);
}
}
}
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 7e99f47..cec3d2c 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
@@ -354,42 +354,42 @@
// integration bridge -> external bridge
PatchDescription brIntExtPatchDesc =
DefaultPatchDescription.builder()
- .deviceId(k8sNode.intgBridgeName())
- .ifaceName(k8sNode.intgToExtPatchPortName())
- .peer(k8sNode.extToIntgPatchPortName())
- .build();
+ .deviceId(k8sNode.intgBridgeName())
+ .ifaceName(k8sNode.intgToExtPatchPortName())
+ .peer(k8sNode.extToIntgPatchPortName())
+ .build();
// integration bridge -> tunnel bridge
PatchDescription brIntTunPatchDesc =
DefaultPatchDescription.builder()
- .deviceId(k8sNode.intgBridgeName())
- .ifaceName(k8sNode.intgToTunPatchPortName())
- .peer(k8sNode.tunToIntgPatchPortName())
- .build();
+ .deviceId(k8sNode.intgBridgeName())
+ .ifaceName(k8sNode.intgToTunPatchPortName())
+ .peer(k8sNode.tunToIntgPatchPortName())
+ .build();
// external bridge -> integration bridge
PatchDescription brExtIntPatchDesc =
DefaultPatchDescription.builder()
- .deviceId(k8sNode.extBridgeName())
- .ifaceName(k8sNode.extToIntgPatchPortName())
- .peer(k8sNode.intgToExtPatchPortName())
- .build();
+ .deviceId(k8sNode.extBridgeName())
+ .ifaceName(k8sNode.extToIntgPatchPortName())
+ .peer(k8sNode.intgToExtPatchPortName())
+ .build();
// integration bridge -> local bridge
PatchDescription brIntLocalPatchDesc =
DefaultPatchDescription.builder()
- .deviceId(k8sNode.intgBridgeName())
- .ifaceName(k8sNode.intgToLocalPatchPortName())
- .peer(k8sNode.localToIntgPatchPortName())
- .build();
+ .deviceId(k8sNode.intgBridgeName())
+ .ifaceName(k8sNode.intgToLocalPatchPortName())
+ .peer(k8sNode.localToIntgPatchPortName())
+ .build();
// local bridge -> integration bridge
PatchDescription brLocalIntPatchDesc =
DefaultPatchDescription.builder()
- .deviceId(k8sNode.localBridgeName())
- .ifaceName(k8sNode.localToIntgPatchPortName())
- .peer(k8sNode.intgToLocalPatchPortName())
- .build();
+ .deviceId(k8sNode.localBridgeName())
+ .ifaceName(k8sNode.localToIntgPatchPortName())
+ .peer(k8sNode.intgToLocalPatchPortName())
+ .build();
InterfaceConfig ifaceConfig = device.as(InterfaceConfig.class);
ifaceConfig.addPatchMode(k8sNode.intgToExtPatchPortName(), brIntExtPatchDesc);
@@ -402,10 +402,10 @@
// tunnel bridge -> integration bridge
PatchDescription brTunIntPatchDesc =
DefaultPatchDescription.builder()
- .deviceId(k8sNode.tunBridgeName())
- .ifaceName(k8sNode.tunToIntgPatchPortName())
- .peer(k8sNode.intgToTunPatchPortName())
- .build();
+ .deviceId(k8sNode.tunBridgeName())
+ .ifaceName(k8sNode.tunToIntgPatchPortName())
+ .peer(k8sNode.intgToTunPatchPortName())
+ .build();
ifaceConfig.addPatchMode(k8sNode.tunToIntgPatchPortName(), brTunIntPatchDesc);
}