Refer to external bridge and gateway IP from k8s node store
Change-Id: I7dab97ead59e3746b67e6e3bedc3a2c6fea41bf1
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 6676847..7c7b32b 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,9 @@
private static final String INTEGRATION_BRIDGE = "integrationBridge";
private static final String EXTERNAL_BRIDGE = "externalBridge";
private static final String STATE = "state";
+ private static final String EXTERNAL_INTF = "externalInterface";
+ private static final String EXTERNAL_BRIDGE_IP = "externalBridgeIp";
+ private static final String EXTERNAL_GATEWAY_IP = "externalGatewayIp";
private static final String MISSING_MESSAGE = " is required in K8sNode";
@@ -69,6 +72,18 @@
result.put(DATA_IP, node.dataIp().toString());
}
+ if (node.extIntf() != null) {
+ result.put(EXTERNAL_INTF, node.extIntf());
+ }
+
+ if (node.extBridgeIp() != null) {
+ result.put(EXTERNAL_BRIDGE_IP, node.extBridgeIp().toString());
+ }
+
+ if (node.extGatewayIp() != null) {
+ result.put(EXTERNAL_GATEWAY_IP, node.extGatewayIp().toString());
+ }
+
return result;
}
@@ -105,6 +120,21 @@
nodeBuilder.extBridge(DeviceId.deviceId(extBridgeJson.asText()));
}
+ JsonNode extIntfJson = json.get(EXTERNAL_INTF);
+ if (extIntfJson != null) {
+ nodeBuilder.extIntf(extIntfJson.asText());
+ }
+
+ JsonNode extBridgeIpJson = json.get(EXTERNAL_BRIDGE_IP);
+ if (extBridgeIpJson != null) {
+ nodeBuilder.extBridgeIp(IpAddress.valueOf(extBridgeIpJson.asText()));
+ }
+
+ JsonNode extGatewayIpJson = json.get(EXTERNAL_GATEWAY_IP);
+ if (extGatewayIpJson != null) {
+ nodeBuilder.extGatewayIp(IpAddress.valueOf(extGatewayIpJson.asText()));
+ }
+
log.trace("node is {}", nodeBuilder.build().toString());
return nodeBuilder.build();
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 ab04556..5119500 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
@@ -38,6 +38,7 @@
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.slf4j.Logger;
+import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
@@ -60,6 +61,9 @@
private static final String INTERNAL_IP = "InternalIP";
private static final String K8S_ROLE = "node-role.kubernetes.io";
+ private static final String EXT_BRIDGE_IP = "external.bridge.ip";
+ private static final String EXT_GATEWAY_IP = "external.gateway.ip";
+ private static final String EXT_INTF_NAME = "external.interface.name";
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected CoreService coreService;
@@ -156,12 +160,22 @@
}
}
+ Map<String, String> annots = node.getMetadata().getAnnotations();
+
+ String extIntf = annots.get(EXT_INTF_NAME);
+ String extGatewayIpStr = annots.get(EXT_GATEWAY_IP);
+ String extBridgeIpStr = annots.get(EXT_BRIDGE_IP);
+
return DefaultK8sNode.builder()
.hostname(hostname)
.managementIp(managementIp)
.dataIp(dataIp)
- .type(nodeType) // need to get correct node type
+ .extIntf(extIntf)
+ .type(nodeType)
.state(INIT)
+ .extBridgeIp(IpAddress.valueOf(extBridgeIpStr))
+ .extGatewayIp(IpAddress.valueOf(extGatewayIpStr))
+ .podCidr(node.getSpec().getPodCIDR())
.build();
}
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
index 7f156e8..556e462 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeCodecTest.java
@@ -84,6 +84,9 @@
.managementIp(IpAddress.valueOf("10.10.10.1"))
.dataIp(IpAddress.valueOf("20.20.20.2"))
.intgBridge(DeviceId.deviceId("kbr-int"))
+ .extIntf("eth1")
+ .extBridgeIp(IpAddress.valueOf("10.10.10.5"))
+ .extGatewayIp(IpAddress.valueOf("10.10.10.1"))
.build();
ObjectNode nodeJson = k8sNodeCodec.encode(node, context);
@@ -104,6 +107,9 @@
assertEquals("172.16.130.4", node.managementIp().toString());
assertEquals("172.16.130.4", node.dataIp().toString());
assertEquals("of:00000000000000a1", node.intgBridge().toString());
+ assertEquals("eth1", node.extIntf());
+ assertEquals("172.16.130.5", node.extBridgeIp().toString());
+ assertEquals("172.16.130.1", node.extGatewayIp().toString());
}
private K8sNode getK8sNode(String resourceName) throws IOException {
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
index 58b15d2..b953f54 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/codec/K8sNodeJsonMatcher.java
@@ -18,6 +18,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onlab.packet.IpAddress;
import org.onosproject.k8snode.api.K8sNode;
/**
@@ -33,6 +34,9 @@
private static final String DATA_IP = "dataIp";
private static final String INTEGRATION_BRIDGE = "integrationBridge";
private static final String STATE = "state";
+ private static final String EXTERNAL_INTF = "externalInterface";
+ private static final String EXTERNAL_BRIDGE_IP = "externalBridgeIp";
+ private static final String EXTERNAL_GATEWAY_IP = "externalGatewayIp";
private K8sNodeJsonMatcher(K8sNode node) {
this.node = node;
@@ -93,6 +97,36 @@
}
}
+ // check external interface
+ JsonNode jsonExtIntf = jsonNode.get(EXTERNAL_INTF);
+ if (jsonExtIntf != null) {
+ String extIntf = node.extIntf();
+ if (!jsonExtIntf.asText().equals(extIntf)) {
+ description.appendText("External interface was " + jsonExtIntf.asText());
+ return false;
+ }
+ }
+
+ // check external bridge IP
+ JsonNode jsonExtBridgeIp = jsonNode.get(EXTERNAL_BRIDGE_IP);
+ if (jsonExtBridgeIp != null) {
+ IpAddress extBridgeIp = node.extBridgeIp();
+ if (!jsonExtBridgeIp.asText().equals(extBridgeIp.toString())) {
+ description.appendText("External bridge IP was " + jsonExtBridgeIp.asText());
+ return false;
+ }
+ }
+
+ // check external gateway IP
+ JsonNode jsonExtGatewayIp = jsonNode.get(EXTERNAL_GATEWAY_IP);
+ if (jsonExtGatewayIp != null) {
+ IpAddress extGatewayIp = node.extGatewayIp();
+ if (!jsonExtGatewayIp.asText().equals(extGatewayIp.toString())) {
+ description.appendText("External gateway IP was " + jsonExtGatewayIp.asText());
+ return false;
+ }
+ }
+
return true;
}
diff --git a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
index 9ed649e..2930bfd 100644
--- a/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
+++ b/apps/k8s-node/app/src/test/resources/org/onosproject/k8snode/codec/K8sMinionNode.json
@@ -4,5 +4,8 @@
"managementIp": "172.16.130.4",
"dataIp": "172.16.130.4",
"integrationBridge": "of:00000000000000a1",
- "externalBridge": "of:00000000000000b1"
+ "externalBridge": "of:00000000000000b1",
+ "externalInterface": "eth1",
+ "externalBridgeIp": "172.16.130.5",
+ "externalGatewayIp": "172.16.130.1"
}
\ No newline at end of file