Adds a CLI to show/clear cached openstack states with neutron DB
Change-Id: I270c27affc669d10236ce94ec7a546a4f85aea88
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index 8837a65..615de0e 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -85,11 +85,13 @@
import org.openstack4j.model.ModelEntity;
import org.openstack4j.model.common.Identifier;
import org.openstack4j.model.network.ExternalGateway;
+import org.openstack4j.model.network.IP;
import org.openstack4j.model.network.NetFloatingIP;
import org.openstack4j.model.network.Network;
import org.openstack4j.model.network.Port;
import org.openstack4j.model.network.Router;
import org.openstack4j.model.network.RouterInterface;
+import org.openstack4j.model.network.SecurityGroup;
import org.openstack4j.model.network.Subnet;
import org.openstack4j.openstack.OSFactory;
import org.openstack4j.openstack.networking.domain.NeutronRouterInterface;
@@ -118,12 +120,14 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -133,15 +137,22 @@
import static org.onlab.packet.Ip4Address.valueOf;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
import static org.onosproject.openstacknetworking.api.Constants.DEFAULT_GATEWAY_MAC_STR;
+import static org.onosproject.openstacknetworking.api.Constants.FLOATING_IP_FORMAT;
+import static org.onosproject.openstacknetworking.api.Constants.NETWORK_FORMAT;
import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_REST_PATH;
import static org.onosproject.openstacknetworking.api.Constants.PCISLOT;
import static org.onosproject.openstacknetworking.api.Constants.PCI_VENDOR_INFO;
+import static org.onosproject.openstacknetworking.api.Constants.PORT_FORMAT;
import static org.onosproject.openstacknetworking.api.Constants.PORT_NAME_PREFIX_VM;
import static org.onosproject.openstacknetworking.api.Constants.PORT_NAME_VHOST_USER_PREFIX_VM;
import static org.onosproject.openstacknetworking.api.Constants.REST_PASSWORD;
import static org.onosproject.openstacknetworking.api.Constants.REST_PORT;
import static org.onosproject.openstacknetworking.api.Constants.REST_USER;
import static org.onosproject.openstacknetworking.api.Constants.REST_UTF8;
+import static org.onosproject.openstacknetworking.api.Constants.ROUTER_FORMAT;
+import static org.onosproject.openstacknetworking.api.Constants.ROUTER_INTF_FORMAT;
+import static org.onosproject.openstacknetworking.api.Constants.SECURITY_GROUP_FORMAT;
+import static org.onosproject.openstacknetworking.api.Constants.SUBNET_FORMAT;
import static org.onosproject.openstacknetworking.api.Constants.UNSUPPORTED_VENDOR;
import static org.onosproject.openstacknetworking.api.Constants.portNamePrefixMap;
import static org.openstack4j.core.transport.ObjectMapperSingleton.getContext;
@@ -184,6 +195,11 @@
private static final String COMMA = ",";
private static final String TUN_ID = "tun_id=";
+ private static final String DEVICE_OWNER_GW = "network:router_gateway";
+ private static final String DEVICE_OWNER_IFACE = "network:router_interface";
+
+ private static final String NOT_AVAILABLE = "N/A";
+
private static final long TIMEOUT_MS = 5000;
private static final long WAIT_OUTPUT_STREAM_SECOND = 2;
private static final int SSH_PORT = 22;
@@ -483,6 +499,124 @@
}
/**
+ * Prints openstack security group.
+ *
+ * @param osSg openstack security group
+ */
+ public static void printSecurityGroup(SecurityGroup osSg) {
+ print(SECURITY_GROUP_FORMAT, osSg.getId(), osSg.getName());
+ }
+
+ /**
+ * Prints openstack network.
+ *
+ * @param osNet openstack network
+ */
+ public static void printNetwork(Network osNet) {
+ final String strNet = String.format(NETWORK_FORMAT,
+ osNet.getId(),
+ osNet.getName(),
+ osNet.getProviderSegID(),
+ osNet.getSubnets());
+ print(strNet);
+ }
+
+ /**
+ * Prints openstack subnet.
+ *
+ * @param osSubnet openstack subnet
+ * @param osNetService openstack network service
+ */
+ public static void printSubnet(Subnet osSubnet,
+ OpenstackNetworkService osNetService) {
+ final Network network = osNetService.network(osSubnet.getNetworkId());
+ final String netName = network == null ? NOT_AVAILABLE : network.getName();
+ final String strSubnet = String.format(SUBNET_FORMAT,
+ osSubnet.getId(),
+ netName,
+ osSubnet.getCidr());
+ print(strSubnet);
+ }
+
+ /**
+ * Prints openstack port.
+ *
+ * @param osPort openstack port
+ * @param osNetService openstack network service
+ */
+ public static void printPort(Port osPort,
+ OpenstackNetworkService osNetService) {
+ List<String> fixedIps = osPort.getFixedIps().stream()
+ .map(IP::getIpAddress)
+ .collect(Collectors.toList());
+ final Network network = osNetService.network(osPort.getNetworkId());
+ final String netName = network == null ? NOT_AVAILABLE : network.getName();
+ final String strPort = String.format(PORT_FORMAT,
+ osPort.getId(),
+ netName,
+ osPort.getMacAddress(),
+ fixedIps.isEmpty() ? "" : fixedIps);
+ print(strPort);
+ }
+
+ /**
+ * Prints openstack router.
+ *
+ * @param osRouter openstack router
+ * @param osNetService openstack network service
+ */
+ public static void printRouter(Router osRouter,
+ OpenstackNetworkService osNetService) {
+ List<String> externals = osNetService.ports().stream()
+ .filter(osPort -> Objects.equals(osPort.getDeviceId(), osRouter.getId()) &&
+ Objects.equals(osPort.getDeviceOwner(), DEVICE_OWNER_GW))
+ .flatMap(osPort -> osPort.getFixedIps().stream())
+ .map(IP::getIpAddress)
+ .collect(Collectors.toList());
+
+ List<String> internals = osNetService.ports().stream()
+ .filter(osPort -> Objects.equals(osPort.getDeviceId(), osRouter.getId()) &&
+ Objects.equals(osPort.getDeviceOwner(), DEVICE_OWNER_IFACE))
+ .flatMap(osPort -> osPort.getFixedIps().stream())
+ .map(IP::getIpAddress)
+ .collect(Collectors.toList());
+
+ final String strRouter = String.format(ROUTER_FORMAT,
+ osRouter.getId(),
+ osRouter.getName(),
+ externals.isEmpty() ? "" : externals,
+ internals.isEmpty() ? "" : internals);
+ print(strRouter);
+ }
+
+ /**
+ * Prints openstack router interface.
+ *
+ * @param osRouterIntf openstack router interface
+ */
+ public static void printRouterIntf(RouterInterface osRouterIntf) {
+ final String strRouterIntf = String.format(ROUTER_INTF_FORMAT,
+ osRouterIntf.getId(),
+ osRouterIntf.getTenantId(),
+ osRouterIntf.getSubnetId());
+ print(strRouterIntf);
+ }
+
+ /**
+ * Prints openstack floating IP.
+ *
+ * @param floatingIp floating IP
+ */
+ public static void printFloatingIp(NetFloatingIP floatingIp) {
+ final String strFloating = String.format(FLOATING_IP_FORMAT,
+ floatingIp.getId(),
+ floatingIp.getFloatingIpAddress(),
+ Strings.isNullOrEmpty(floatingIp.getFixedIpAddress()) ?
+ "" : floatingIp.getFixedIpAddress());
+ print(strFloating);
+ }
+
+ /**
* Obtains the property value with specified property key name.
*
* @param properties a collection of properties
@@ -1443,4 +1577,8 @@
}
return gw;
}
+
+ private static void print(String format, Object... args) {
+ System.out.println(String.format(format, args));
+ }
}
\ No newline at end of file