Add VM name field in kubevirt port object, expose via CLI and REST
Change-Id: I0ac84073fa7692862314fdf8862b4e3a256dd2d8
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPortCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPortCommand.java
index 5752436..1ce747e 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPortCommand.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPortCommand.java
@@ -59,7 +59,7 @@
ports.sort(Comparator.comparing(KubevirtPort::networkId));
String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
- CLI_MAC_ADDRESS_LENGTH, CLI_IP_ADDRESSES_LENGTH));
+ CLI_NAME_LENGTH, CLI_MAC_ADDRESS_LENGTH, CLI_IP_ADDRESSES_LENGTH));
if (!Strings.isNullOrEmpty(networkId)) {
ports.removeIf(port -> !port.networkId().equals(networkId));
@@ -68,9 +68,11 @@
if (outputJson()) {
print("%s", json(ports));
} else {
- print(format, "Network", "MAC Address", "Fixed IPs");
+ print(format, "VM Name", "Network", "MAC Address", "Fixed IPs");
for (KubevirtPort port: ports) {
print(format,
+ StringUtils.substring(port.vmName(), 0,
+ CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
StringUtils.substring(port.networkId(), 0,
CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
StringUtils.substring(port.macAddress().toString(), 0,
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodec.java
index a388227..281855e 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodec.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodec.java
@@ -36,6 +36,7 @@
private final Logger log = getLogger(getClass());
+ private static final String VM_NAME = "vmName";
private static final String NETWORK_ID = "networkId";
private static final String MAC_ADDRESS = "macAddress";
private static final String IP_ADDRESS = "ipAddress";
@@ -50,6 +51,7 @@
checkNotNull(port, "Kubevirt port cannot be null");
ObjectNode result = context.mapper().createObjectNode()
+ .put(VM_NAME, port.vmName())
.put(NETWORK_ID, port.networkId())
.put(MAC_ADDRESS, port.macAddress().toString());
@@ -82,6 +84,9 @@
return null;
}
+ String vmName = nullIsIllegal(json.get(VM_NAME).asText(),
+ VM_NAME + MISSING_MESSAGE);
+
String networkId = nullIsIllegal(json.get(NETWORK_ID).asText(),
NETWORK_ID + MISSING_MESSAGE);
@@ -89,6 +94,7 @@
MAC_ADDRESS + MISSING_MESSAGE);
KubevirtPort.Builder builder = DefaultKubevirtPort.builder()
+ .vmName(vmName)
.networkId(networkId)
.macAddress(MacAddress.valueOf(macAddress));
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtVmWatcher.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtVmWatcher.java
index 8f38c4a..e48bb18 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtVmWatcher.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtVmWatcher.java
@@ -224,8 +224,11 @@
return;
}
+ String vmName = parseVmName(resource);
+
parseMacAddresses(resource).forEach((mac, net) -> {
KubevirtPort port = DefaultKubevirtPort.builder()
+ .vmName(vmName)
.macAddress(mac)
.networkId(net)
.build();
@@ -249,8 +252,11 @@
return;
}
+ String vmName = parseVmName(resource);
+
parseMacAddresses(resource).forEach((mac, net) -> {
KubevirtPort port = DefaultKubevirtPort.builder()
+ .vmName(vmName)
.macAddress(mac)
.networkId(net)
.build();
@@ -288,6 +294,22 @@
return Objects.equals(localNodeId, leadershipService.getLeader(appId.name()));
}
+ private String parseVmName(String resource) {
+ String vmName = null;
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode json = mapper.readTree(resource);
+ JsonNode nameJson = json.get(METADATA).get(NAME);
+ if (nameJson != null) {
+ vmName = nameJson.asText();
+ }
+ } catch (IOException e) {
+ log.error("Failed to parse kubevirt VM name");
+ }
+
+ return vmName;
+ }
+
private Map<String, IpAddress> parseIpAddresses(String resource) {
try {
ObjectMapper mapper = new ObjectMapper();
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
index a60bd0a..b49bbcc 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/util/KubevirtNetworkingUtil.java
@@ -89,9 +89,9 @@
private static final String MAC = "mac";
private static final String IPS = "ips";
private static final String BR_INT = "br-int";
+ private static final String METADATA = "metadata";
private static final String STATUS = "status";
private static final String INTERFACES = "interfaces";
- private static final String IP_ADDRESS = "ipAddress";
private static final String NODE_NAME = "nodeName";
/**
@@ -343,6 +343,7 @@
JsonNode json = mapper.readTree(resource);
JsonNode statusJson = json.get(STATUS);
ArrayNode interfacesJson = (ArrayNode) statusJson.get(INTERFACES);
+ String vmName = parseResourceName(resource);
KubevirtPort.Builder builder = DefaultKubevirtPort.builder();
String nodeName = parseVmiNodeName(resource);
@@ -365,7 +366,8 @@
// FIXME: we do not update IP address, as learning IP address
// requires much more time due to the lag from VM agent
String mac = interfaceJson.get(MAC).asText();
- builder.macAddress(MacAddress.valueOf(mac))
+ builder.vmName(vmName)
+ .macAddress(MacAddress.valueOf(mac))
.networkId(network.networkId());
ports.add(builder.build());
}
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodecTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodecTest.java
index e928b90..5c21a28 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodecTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortCodecTest.java
@@ -72,6 +72,7 @@
@Test
public void testKubevirtPortEncode() {
KubevirtPort port = DefaultKubevirtPort.builder()
+ .vmName("test-vm-1")
.networkId("net-1")
.macAddress(MacAddress.valueOf("11:22:33:44:55:66"))
.ipAddress(IpAddress.valueOf("10.10.10.100"))
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortJsonMatcher.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortJsonMatcher.java
index e9fa500..1fc6207 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortJsonMatcher.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtPortJsonMatcher.java
@@ -30,6 +30,7 @@
private final KubevirtPort port;
+ private static final String VM_NAME = "vmName";
private static final String NETWORK_ID = "networkId";
private static final String MAC_ADDRESS = "macAddress";
private static final String IP_ADDRESS = "ipAddress";
@@ -42,6 +43,14 @@
@Override
protected boolean matchesSafely(JsonNode jsonNode, Description description) {
+ // check VM name
+ String jsonVmName = jsonNode.get(VM_NAME).asText();
+ String vmName = port.vmName();
+ if (!jsonVmName.equals(vmName)) {
+ description.appendText("VM name was " + jsonVmName);
+ return false;
+ }
+
// check network ID
String jsonNetworkId = jsonNode.get(NETWORK_ID).asText();
String networkId = port.networkId();
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtPortManagerTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtPortManagerTest.java
index e6e4219..d9a9f77 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtPortManagerTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtPortManagerTest.java
@@ -57,6 +57,7 @@
private static final String PORT_MAC = "00:11:22:33:44:55";
private static final KubevirtPort PORT = DefaultKubevirtPort.builder()
+ .vmName("test-vm-1")
.networkId(NETWORK_ID)
.deviceId(DeviceId.deviceId("dev-1"))
.ipAddress(IpAddress.valueOf("20.20.20.20"))
@@ -64,6 +65,7 @@
.portNumber(PortNumber.portNumber("1"))
.build();
private static final KubevirtPort PORT_UPDATED = DefaultKubevirtPort.builder()
+ .vmName("test-vm-1")
.networkId(UPDATED_ID)
.deviceId(DeviceId.deviceId("dev-1"))
.ipAddress(IpAddress.valueOf("20.20.20.20"))