Add VM name field to floating IP CRD of kubevirt
Change-Id: I493199f0e2a5c0b7b5fffc65c513bb4feeb2eb10
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
index 20ab17e..3f5ca15 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
@@ -50,16 +50,17 @@
fips.sort(Comparator.comparing(KubevirtFloatingIp::networkName));
String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
- CLI_IP_ADDRESS_LENGTH, CLI_NAME_LENGTH, CLI_IP_ADDRESS_LENGTH));
+ CLI_IP_ADDRESS_LENGTH, CLI_NAME_LENGTH, CLI_NAME_LENGTH, CLI_IP_ADDRESS_LENGTH));
if (outputJson()) {
print("%s", json(fips));
} else {
- print(format, "Network Name", "Floating IP", "POD Name", "Fixed IP");
+ print(format, "Network Name", "Floating IP", "POD Name", "VM Name", "Fixed IP");
for (KubevirtFloatingIp fip : fips) {
String fixedIp = fip.fixedIp() == null ? "N/A" : fip.fixedIp().toString();
String podName = fip.podName() == null ? "N/A" : fip.podName();
+ String vmName = fip.vmName() == null ? "N/A" : fip.vmName();
print(format, StringUtils.substring(fip.networkName(), 0,
CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
@@ -67,6 +68,8 @@
CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
StringUtils.substring(podName, 0,
CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+ StringUtils.substring(vmName, 0,
+ CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
StringUtils.substring(fixedIp, 0,
CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH)
);
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPodCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPodCommand.java
index 2ad937a..5d3dbb3 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPodCommand.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListPodCommand.java
@@ -33,9 +33,9 @@
import java.util.List;
import static org.onosproject.kubevirtnetworking.api.Constants.CLI_IP_ADDRESS_LENGTH;
+import static org.onosproject.kubevirtnetworking.api.Constants.CLI_LONG_NAME_LENGTH;
import static org.onosproject.kubevirtnetworking.api.Constants.CLI_MARGIN_LENGTH;
import static org.onosproject.kubevirtnetworking.api.Constants.CLI_NAMESPACE_LENGTH;
-import static org.onosproject.kubevirtnetworking.api.Constants.CLI_NAME_LENGTH;
import static org.onosproject.kubevirtnetworking.api.Constants.CLI_STATUS_LENGTH;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.genFormatString;
import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.prettyJson;
@@ -53,7 +53,7 @@
List<Pod> pods = Lists.newArrayList(service.pods());
pods.sort(Comparator.comparing(p -> p.getMetadata().getName()));
- String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
+ String format = genFormatString(ImmutableList.of(CLI_LONG_NAME_LENGTH,
CLI_NAMESPACE_LENGTH, CLI_STATUS_LENGTH, CLI_IP_ADDRESS_LENGTH));
if (outputJson()) {
@@ -69,7 +69,7 @@
print(format,
StringUtils.substring(pod.getMetadata().getName(),
- 0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
+ 0, CLI_LONG_NAME_LENGTH - CLI_MARGIN_LENGTH),
StringUtils.substring(pod.getMetadata().getNamespace(),
0, CLI_NAMESPACE_LENGTH - CLI_MARGIN_LENGTH),
pod.getStatus().getPhase(),
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
index f2a3505..fd530a1 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
@@ -38,6 +38,7 @@
private static final String ID = "id";
private static final String ROUTER_NAME = "routerName";
private static final String POD_NAME = "podName";
+ private static final String VM_NAME = "vmName";
private static final String NETWORK_NAME = "networkName";
private static final String FLOATING_IP = "floatingIp";
private static final String FIXED_IP = "fixedIp";
@@ -58,6 +59,10 @@
result.put(POD_NAME, fip.podName());
}
+ if (fip.vmName() != null) {
+ result.put(VM_NAME, fip.vmName());
+ }
+
if (fip.fixedIp() != null) {
result.put(FIXED_IP, fip.fixedIp().toString());
}
@@ -90,6 +95,11 @@
builder.podName(podName.asText());
}
+ JsonNode vmName = json.get(VM_NAME);
+ if (vmName != null) {
+ builder.vmName(vmName.asText());
+ }
+
JsonNode fixedIp = json.get(FIXED_IP);
if (fixedIp != null) {
builder.fixedIp(IpAddress.valueOf(fixedIp.asText()));
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
index 9248f06..4b982aa 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
@@ -415,6 +415,9 @@
String oldPodName = event.oldValue().value().podName();
String newPodName = event.newValue().value().podName();
+ String oldVmName = event.oldValue().value().vmName();
+ String newVmName = event.newValue().value().vmName();
+
if (Strings.isNullOrEmpty(oldPodName) && !Strings.isNullOrEmpty(newPodName)) {
notifyDelegate(new KubevirtRouterEvent(
KUBEVIRT_FLOATING_IP_ASSOCIATED,
@@ -433,6 +436,24 @@
event.newValue().value().floatingIp(), MSG_DISASSOCIATED, oldPodName));
}
+ if (Strings.isNullOrEmpty(oldVmName) && !Strings.isNullOrEmpty(newVmName)) {
+ notifyDelegate(new KubevirtRouterEvent(
+ KUBEVIRT_FLOATING_IP_ASSOCIATED,
+ router,
+ event.newValue().value(), newVmName));
+ log.info(String.format(MSG_FLOATING_IP,
+ event.newValue().value().floatingIp(), MSG_ASSOCIATED, newVmName));
+ }
+
+ if (!Strings.isNullOrEmpty(oldVmName) && Strings.isNullOrEmpty(newVmName)) {
+ notifyDelegate(new KubevirtRouterEvent(
+ KUBEVIRT_FLOATING_IP_DISASSOCIATED,
+ router,
+ event.oldValue().value(), oldVmName));
+ log.info(String.format(MSG_FLOATING_IP,
+ event.newValue().value().floatingIp(), MSG_DISASSOCIATED, oldVmName));
+ }
+
IpAddress oldFixedIp = event.oldValue().value().fixedIp();
IpAddress newFixedIp = event.newValue().value().fixedIp();
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
index ed086ae..e9ab1fe 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
@@ -158,7 +158,7 @@
KubevirtNode electedGw,
boolean install) {
- KubevirtPort kubevirtPort = getKubevirtPort(floatingIp);
+ KubevirtPort kubevirtPort = getKubevirtPortByFloatingIp(floatingIp);
if (kubevirtPort == null) {
return;
}
@@ -209,10 +209,11 @@
install);
}
- private KubevirtPort getKubevirtPort(KubevirtFloatingIp floatingIp) {
+ private KubevirtPort getKubevirtPortByFloatingIp(KubevirtFloatingIp floatingIp) {
return kubevirtPortService.ports().stream()
.filter(port -> port.ipAddress().equals(floatingIp.fixedIp()))
+ .filter(port -> port.vmName().equals(floatingIp.vmName()))
.findAny().orElse(null);
}
@@ -240,7 +241,6 @@
.matchIPSrc(IpPrefix.valueOf(floatingIp.fixedIp(), 32))
.build();
-
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.setEthDst(peerMacAddress)
.setEthSrc(port.macAddress())
@@ -336,7 +336,7 @@
return;
}
- KubevirtPort kubevirtPort = getKubevirtPort(floatingIp);
+ KubevirtPort kubevirtPort = getKubevirtPortByFloatingIp(floatingIp);
if (kubevirtPort == null) {
return;
}