X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnorthbound%2Fnetworkconfiguration%2Fneutron%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetworkconfig%2Fneutron%2Fnorthbound%2FNeutronRoutersNorthbound.java;h=0c02adad8a0d4d4ddf499efca66d39b05aff513c;hp=fc7e0f7efbf429014859c760caf86add6f326518;hb=4f86ec1a7c51b28d066bcd34b7cb47cfed7eff1e;hpb=0b3fe7299bbeccc10f2c1b859f95de07c168ac9f
diff --git a/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronRoutersNorthbound.java b/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronRoutersNorthbound.java
index fc7e0f7efb..0c02adad8a 100644
--- a/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronRoutersNorthbound.java
+++ b/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronRoutersNorthbound.java
@@ -37,13 +37,16 @@ import org.opendaylight.controller.networkconfig.neutron.NeutronRouter;
import org.opendaylight.controller.networkconfig.neutron.NeutronRouter_Interface;
import org.opendaylight.controller.networkconfig.neutron.NeutronSubnet;
import org.opendaylight.controller.northbound.commons.RestMessages;
+import org.opendaylight.controller.northbound.commons.exception.BadRequestException;
+import org.opendaylight.controller.northbound.commons.exception.ResourceConflictException;
+import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException;
import org.opendaylight.controller.northbound.commons.exception.ServiceUnavailableException;
import org.opendaylight.controller.sal.utils.ServiceHelper;
/**
- * Open DOVE Northbound REST APIs.
- * This class provides REST APIs for managing the open DOVE
+ * Neutron Northbound REST APIs.
+ * This class provides REST APIs for managing neutron routers
*
*
*
@@ -141,8 +144,9 @@ public class NeutronRoutersNorthbound {
throw new ServiceUnavailableException("Router CRUD Interface "
+ RestMessages.SERVICEUNAVAILABLE.toString());
}
- if (!routerInterface.routerExists(routerUUID))
- return Response.status(404).build();
+ if (!routerInterface.routerExists(routerUUID)) {
+ throw new ResourceNotFoundException("Router UUID not found");
+ }
if (fields.size() > 0) {
NeutronRouter ans = routerInterface.getRouter(routerUUID);
return Response.status(200).entity(
@@ -184,14 +188,14 @@ public class NeutronRoutersNorthbound {
* exists and has been designated as "router:external"
*/
if (routerInterface.routerExists(singleton.getID()))
- return Response.status(400).build();
+ throw new BadRequestException("router UUID already exists");
if (singleton.getExternalGatewayInfo() != null) {
String externNetworkPtr = singleton.getExternalGatewayInfo().getNetworkID();
if (!networkInterface.networkExists(externNetworkPtr))
- return Response.status(400).build();
+ throw new BadRequestException("External Network Pointer doesn't exist");
NeutronNetwork externNetwork = networkInterface.getNetwork(externNetworkPtr);
if (!externNetwork.isRouterExternal())
- return Response.status(400).build();
+ throw new BadRequestException("External Network Pointer isn't marked as router:external");
}
Object[] instances = ServiceHelper.getGlobalInstances(INeutronRouterAware.class, this, null);
if (instances != null) {
@@ -218,7 +222,7 @@ public class NeutronRoutersNorthbound {
/*
* only singleton router creates supported
*/
- return Response.status(400).build();
+ throw new BadRequestException("Only singleton router creates supported");
}
return Response.status(201).entity(input).build();
}
@@ -256,9 +260,9 @@ public class NeutronRoutersNorthbound {
* router has to exist and only a single delta can be supplied
*/
if (!routerInterface.routerExists(routerUUID))
- return Response.status(404).build();
+ throw new ResourceNotFoundException("Router UUID not found");
if (!input.isSingleton())
- return Response.status(400).build();
+ throw new BadRequestException("Only single router deltas supported");
NeutronRouter singleton = input.getSingleton();
NeutronRouter original = routerInterface.getRouter(routerUUID);
@@ -267,7 +271,7 @@ public class NeutronRoutersNorthbound {
*/
if (singleton.getID() != null || singleton.getTenantID() != null ||
singleton.getStatus() != null)
- return Response.status(400).build();
+ throw new BadRequestException("Request attribute change not allowed");
Object[] instances = ServiceHelper.getGlobalInstances(INeutronRouterAware.class, this, null);
if (instances != null) {
@@ -285,10 +289,10 @@ public class NeutronRoutersNorthbound {
if (singleton.getExternalGatewayInfo() != null) {
String externNetworkPtr = singleton.getExternalGatewayInfo().getNetworkID();
if (!networkInterface.networkExists(externNetworkPtr))
- return Response.status(400).build();
+ throw new BadRequestException("External Network Pointer does not exist");
NeutronNetwork externNetwork = networkInterface.getNetwork(externNetworkPtr);
if (!externNetwork.isRouterExternal())
- return Response.status(400).build();
+ throw new BadRequestException("External Network Pointer isn't marked as router:external");
}
/*
@@ -330,9 +334,9 @@ public class NeutronRoutersNorthbound {
* verify that the router exists and is not in use before removing it
*/
if (!routerInterface.routerExists(routerUUID))
- return Response.status(404).build();
+ throw new ResourceNotFoundException("Router UUID not found");
if (routerInterface.routerInUse(routerUUID))
- return Response.status(409).build();
+ throw new ResourceConflictException("Router UUID in Use");
NeutronRouter singleton = routerInterface.getRouter(routerUUID);
Object[] instances = ServiceHelper.getGlobalInstances(INeutronRouterAware.class, this, null);
if (instances != null) {
@@ -393,33 +397,34 @@ public class NeutronRoutersNorthbound {
* or a port id, but not both, this code assumes that the plugin has filled everything in for us and so both must be present
*/
if (!routerInterface.routerExists(routerUUID))
- return Response.status(400).build();
+ throw new BadRequestException("Router UUID doesn't exist");
NeutronRouter target = routerInterface.getRouter(routerUUID);
if (input.getSubnetUUID() == null ||
input.getPortUUID() == null)
- return Response.status(400).build();
+ throw new BadRequestException("Must specify at subnet id, port id or both");
// check that the port is part of the subnet
NeutronSubnet targetSubnet = subnetInterface.getSubnet(input.getSubnetUUID());
if (targetSubnet == null)
- return Response.status(400).build();
+ throw new BadRequestException("Subnet id doesn't exist");
NeutronPort targetPort = portInterface.getPort(input.getPortUUID());
if (targetPort == null)
- return Response.status(400).build();
+ throw new BadRequestException("Port id doesn't exist");
if (!targetSubnet.getPortsInSubnet().contains(targetPort))
- return Response.status(400).build();
+ throw new BadRequestException("Port id not part of subnet id");
if (targetPort.getFixedIPs().size() != 1)
- return Response.status(400).build();
+ throw new BadRequestException("Port id must have a single fixedIP address");
if (targetPort.getDeviceID() != null ||
targetPort.getDeviceOwner() != null)
- return Response.status(409).build();
-
+ throw new ResourceConflictException("Target Port already allocated");
Object[] instances = ServiceHelper.getGlobalInstances(INeutronRouterAware.class, this, null);
if (instances != null) {
for (Object instance : instances) {
INeutronRouterAware service = (INeutronRouterAware) instance;
- service.canAttachInterface(target, input);
+ int status = service.canAttachInterface(target, input);
+ if (status < 200 || status > 299)
+ return Response.status(status).build();
}
}
@@ -475,7 +480,7 @@ public class NeutronRoutersNorthbound {
// verify the router exists
if (!routerInterface.routerExists(routerUUID))
- return Response.status(400).build();
+ throw new BadRequestException("Router does not exist");
NeutronRouter target = routerInterface.getRouter(routerUUID);
/*
@@ -486,7 +491,7 @@ public class NeutronRoutersNorthbound {
input.getSubnetUUID() != null) {
NeutronPort port = portInterface.getGatewayPort(input.getSubnetUUID());
if (port == null)
- return Response.status(404).build();
+ throw new ResourceNotFoundException("Port UUID not found");
input.setPortUUID(port.getID());
input.setID(target.getID());
input.setTenantID(target.getTenantID());
@@ -495,7 +500,9 @@ public class NeutronRoutersNorthbound {
if (instances != null) {
for (Object instance : instances) {
INeutronRouterAware service = (INeutronRouterAware) instance;
- service.canDetachInterface(target, input);
+ int status = service.canDetachInterface(target, input);
+ if (status < 200 || status > 299)
+ return Response.status(status).build();
}
}
@@ -520,6 +527,9 @@ public class NeutronRoutersNorthbound {
if (input.getPortUUID() != null &&
input.getSubnetUUID() == null) {
NeutronRouter_Interface targetInterface = target.getInterfaces().get(input.getPortUUID());
+ if (targetInterface == null) {
+ throw new ResourceNotFoundException("Router interface not found for given Port UUID");
+ }
input.setSubnetUUID(targetInterface.getSubnetUUID());
input.setID(target.getID());
input.setTenantID(target.getTenantID());
@@ -543,9 +553,18 @@ public class NeutronRoutersNorthbound {
if (input.getPortUUID() != null &&
input.getSubnetUUID() != null) {
NeutronPort port = portInterface.getPort(input.getPortUUID());
+ if (port == null) {
+ throw new ResourceNotFoundException("Port UUID not found");
+ }
+ if (port.getFixedIPs() == null) {
+ throw new ResourceNotFoundException("Port UUID has no fixed IPs");
+ }
NeutronSubnet subnet = subnetInterface.getSubnet(input.getSubnetUUID());
+ if (subnet == null) {
+ throw new ResourceNotFoundException("Subnet UUID not found");
+ }
if (!subnet.isValidIP(port.getFixedIPs().get(0).getIpAddress()))
- return Response.status(409).build();
+ throw new ResourceConflictException("Target Port IP not in Target Subnet");
input.setID(target.getID());
input.setTenantID(target.getTenantID());
Object[] instances = ServiceHelper.getGlobalInstances(INeutronRouterAware.class, this, null);
@@ -566,6 +585,6 @@ public class NeutronRoutersNorthbound {
}
// have to specify either a port ID or a subnet ID
- return Response.status(400).build();
+ throw new BadRequestException("Must specify port id or subnet id or both");
}
}