X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=northbound-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fneutron%2Fnorthbound%2Fapi%2FNeutronLoadBalancerPoolNorthbound.java;h=0ae021214576d1a95b6951b6639478f8354ce795;hb=refs%2Fchanges%2F73%2F43873%2F3;hp=a7a272d83f362e4be908dc091197913f15764e8a;hpb=90e1ce649f4bdbec4e5de3fcc14760011a3c6c33;p=neutron.git diff --git a/northbound-api/src/main/java/org/opendaylight/neutron/northbound/api/NeutronLoadBalancerPoolNorthbound.java b/northbound-api/src/main/java/org/opendaylight/neutron/northbound/api/NeutronLoadBalancerPoolNorthbound.java index a7a272d83..0ae021214 100644 --- a/northbound-api/src/main/java/org/opendaylight/neutron/northbound/api/NeutronLoadBalancerPoolNorthbound.java +++ b/northbound-api/src/main/java/org/opendaylight/neutron/northbound/api/NeutronLoadBalancerPoolNorthbound.java @@ -1,21 +1,17 @@ /* - * Copyright (C) 2014 SDN Hub, LLC. + * Copyright (c) 2014, 2015 SDN Hub, LLC. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Authors : Srini Seetharaman */ package org.opendaylight.neutron.northbound.api; - +import java.net.HttpURLConnection; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.List; - import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -27,10 +23,8 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import org.codehaus.enunciate.jaxrs.ResponseCode; import org.codehaus.enunciate.jaxrs.StatusCodes; -import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolAware; import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD; import org.opendaylight.neutron.spi.NeutronCRUDInterfaces; import org.opendaylight.neutron.spi.NeutronLoadBalancerPool; @@ -60,22 +54,46 @@ import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember; */ @Path("/lbaas/pools") -public class NeutronLoadBalancerPoolNorthbound { +public class NeutronLoadBalancerPoolNorthbound + extends AbstractNeutronNorthbound { + + private static final String RESOURCE_NAME = "LoadBalancerPool"; - private NeutronLoadBalancerPool extractFields(NeutronLoadBalancerPool o, List fields) { + @Override + protected String getResourceName() { + return RESOURCE_NAME; + } + + @Override + protected NeutronLoadBalancerPool extractFields(NeutronLoadBalancerPool o, List fields) { return o.extractFields(fields); } + @Override + protected NeutronLoadBalancerPoolRequest newNeutronRequest(NeutronLoadBalancerPool o) { + return new NeutronLoadBalancerPoolRequest(o); + } + + @Override + protected INeutronLoadBalancerPoolCRUD getNeutronCRUD() { + NeutronCRUDInterfaces answer = new NeutronCRUDInterfaces(). + fetchINeutronLoadBalancerPoolCRUD(this); + if (answer.getLoadBalancerPoolInterface() == null) { + throw new ServiceUnavailableException(serviceUnavailable()); + } + return answer.getLoadBalancerPoolInterface(); + } + /** * Returns a list of all LoadBalancerPool * */ @GET @Produces({ MediaType.APPLICATION_JSON }) @StatusCodes({ - @ResponseCode(code = 200, condition = "Operation successful"), - @ResponseCode(code = 401, condition = "Unauthorized"), - @ResponseCode(code = 501, condition = "Not Implemented"), - @ResponseCode(code = 503, condition = "No providers available") }) + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAUTHORIZED, condition = "Unauthorized"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_IMPLEMENTED, condition = "Not Implemented"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) public Response listGroups( // return fields @@ -84,11 +102,10 @@ public class NeutronLoadBalancerPoolNorthbound { @QueryParam("id") String queryLoadBalancerPoolID, @QueryParam("tenant_id") String queryLoadBalancerPoolTenantID, @QueryParam("name") String queryLoadBalancerPoolName, - @QueryParam("description") String queryLoadBalancerDescription, @QueryParam("protocol") String queryLoadBalancerProtocol, @QueryParam("lb_algorithm") String queryLoadBalancerPoolLbAlgorithm, @QueryParam("healthmonitor_id") String queryLoadBalancerPoolHealthMonitorID, - @QueryParam("admin_state_up") String queryLoadBalancerIsAdminStateUp, + @QueryParam("admin_state_up") Boolean queryLoadBalancerIsAdminStateUp, @QueryParam("members") List queryLoadBalancerPoolMembers, // pagination @QueryParam("limit") String limit, @@ -96,24 +113,18 @@ public class NeutronLoadBalancerPoolNorthbound { @QueryParam("page_reverse") String pageReverse // sorting not supported ) { - INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = NeutronCRUDInterfaces.getINeutronLoadBalancerPoolCRUD(this); - if (loadBalancerPoolInterface == null) { - throw new ServiceUnavailableException("LoadBalancerPool CRUD Interface " - + RestMessages.SERVICEUNAVAILABLE.toString()); - } - List allLoadBalancerPools = loadBalancerPoolInterface.getAllNeutronLoadBalancerPools(); + INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronCRUD(); + List allLoadBalancerPools = loadBalancerPoolInterface.getAll(); List ans = new ArrayList(); Iterator i = allLoadBalancerPools.iterator(); while (i.hasNext()) { NeutronLoadBalancerPool nsg = i.next(); if ((queryLoadBalancerPoolID == null || - queryLoadBalancerPoolID.equals(nsg.getLoadBalancerPoolID())) && + queryLoadBalancerPoolID.equals(nsg.getID())) && (queryLoadBalancerPoolTenantID == null || - queryLoadBalancerPoolTenantID.equals(nsg.getLoadBalancerPoolTenantID())) && + queryLoadBalancerPoolTenantID.equals(nsg.getTenantID())) && (queryLoadBalancerPoolName == null || queryLoadBalancerPoolName.equals(nsg.getLoadBalancerPoolName())) && - (queryLoadBalancerDescription == null || - queryLoadBalancerDescription.equals(nsg.getLoadBalancerPoolDescription())) && (queryLoadBalancerPoolLbAlgorithm == null || queryLoadBalancerPoolLbAlgorithm.equals(nsg.getLoadBalancerPoolLbAlgorithm())) && (queryLoadBalancerPoolHealthMonitorID == null || @@ -129,7 +140,7 @@ public class NeutronLoadBalancerPoolNorthbound { } } } - return Response.status(200).entity( + return Response.status(HttpURLConnection.HTTP_OK).entity( new NeutronLoadBalancerPoolRequest(ans)).build(); } @@ -140,29 +151,15 @@ public class NeutronLoadBalancerPoolNorthbound { @GET @Produces({ MediaType.APPLICATION_JSON }) @StatusCodes({ - @ResponseCode(code = 200, condition = "Operation successful"), - @ResponseCode(code = 401, condition = "Unauthorized"), - @ResponseCode(code = 404, condition = "Not Found"), - @ResponseCode(code = 501, condition = "Not Implemented"), - @ResponseCode(code = 503, condition = "No providers available") }) + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAUTHORIZED, condition = "Unauthorized"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_FOUND, condition = "Not Found"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_IMPLEMENTED, condition = "Not Implemented"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) public Response showLoadBalancerPool(@PathParam("loadBalancerPoolID") String loadBalancerPoolID, // return fields @QueryParam("fields") List fields) { - INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = NeutronCRUDInterfaces.getINeutronLoadBalancerPoolCRUD(this); - if (loadBalancerPoolInterface == null) { - throw new ServiceUnavailableException("LoadBalancerPool CRUD Interface " - + RestMessages.SERVICEUNAVAILABLE.toString()); - } - if (!loadBalancerPoolInterface.neutronLoadBalancerPoolExists(loadBalancerPoolID)) { - throw new ResourceNotFoundException("LoadBalancerPool UUID does not exist."); - } - if (fields.size() > 0) { - NeutronLoadBalancerPool ans = loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolID); - return Response.status(200).entity( - new NeutronLoadBalancerPoolRequest(extractFields(ans, fields))).build(); - } else { - return Response.status(200).entity(new NeutronLoadBalancerPoolRequest(loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolID))).build(); - } + return show(loadBalancerPoolID, fields); } /** @@ -172,103 +169,10 @@ public class NeutronLoadBalancerPoolNorthbound { @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON }) @StatusCodes({ - @ResponseCode(code = 201, condition = "Created"), - @ResponseCode(code = 400, condition = "Bad Request"), - @ResponseCode(code = 401, condition = "Unauthorized"), - @ResponseCode(code = 403, condition = "Forbidden"), - @ResponseCode(code = 404, condition = "Not Found"), - @ResponseCode(code = 409, condition = "Conflict"), - @ResponseCode(code = 501, condition = "Not Implemented"), - @ResponseCode(code = 503, condition = "No providers available") }) + @ResponseCode(code = HttpURLConnection.HTTP_CREATED, condition = "Created"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) public Response createLoadBalancerPools(final NeutronLoadBalancerPoolRequest input) { - INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = NeutronCRUDInterfaces.getINeutronLoadBalancerPoolCRUD(this); - if (loadBalancerPoolInterface == null) { - throw new ServiceUnavailableException("LoadBalancerPool CRUD Interface " - + RestMessages.SERVICEUNAVAILABLE.toString()); - } - if (input.isSingleton()) { - NeutronLoadBalancerPool singleton = input.getSingleton(); - - /* - * Verify that the LoadBalancerPool doesn't already exist. - */ - if (loadBalancerPoolInterface.neutronLoadBalancerPoolExists(singleton.getLoadBalancerPoolID())) { - throw new BadRequestException("LoadBalancerPool UUID already exists"); - } - - Object[] instances = NeutronUtil.getInstances(INeutronLoadBalancerPoolAware.class, this); - if (instances != null) { - if (instances.length > 0) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - int status = service.canCreateNeutronLoadBalancerPool(singleton); - if (status < 200 || status > 299) { - return Response.status(status).build(); - } - } - } else { - throw new ServiceUnavailableException("No providers registered. Please try again later"); - } - } else { - throw new ServiceUnavailableException("Couldn't get providers list. Please try again later"); - } - loadBalancerPoolInterface.addNeutronLoadBalancerPool(singleton); - if (instances != null) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - service.neutronLoadBalancerPoolCreated(singleton); - } - } - } else { - List bulk = input.getBulk(); - Iterator i = bulk.iterator(); - HashMap testMap = new HashMap(); - Object[] instances = NeutronUtil.getInstances(INeutronLoadBalancerPoolAware.class, this); - while (i.hasNext()) { - NeutronLoadBalancerPool test = i.next(); - - /* - * Verify that the loadBalancerPool doesn't already exist - */ - - if (loadBalancerPoolInterface.neutronLoadBalancerPoolExists(test.getLoadBalancerPoolID())) { - throw new BadRequestException("Load Balancer Pool UUID already is already created"); - } - if (testMap.containsKey(test.getLoadBalancerPoolID())) { - throw new BadRequestException("Load Balancer Pool UUID already exists"); - } - if (instances != null) { - if (instances.length > 0) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - int status = service.canCreateNeutronLoadBalancerPool(test); - if (status < 200 || status > 299) { - return Response.status(status).build(); - } - } - } else { - throw new ServiceUnavailableException("No providers registered. Please try again later"); - } - } else { - throw new ServiceUnavailableException("Couldn't get providers list. Please try again later"); - } - } - /* - * now, each element of the bulk request can be added to the cache - */ - i = bulk.iterator(); - while (i.hasNext()) { - NeutronLoadBalancerPool test = i.next(); - loadBalancerPoolInterface.addNeutronLoadBalancerPool(test); - if (instances != null) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - service.neutronLoadBalancerPoolCreated(test); - } - } - } - } - return Response.status(201).entity(input).build(); + return create(input); } /** @@ -279,137 +183,238 @@ public class NeutronLoadBalancerPoolNorthbound { @Produces({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON }) @StatusCodes({ - @ResponseCode(code = 200, condition = "Operation successful"), - @ResponseCode(code = 400, condition = "Bad Request"), - @ResponseCode(code = 401, condition = "Unauthorized"), - @ResponseCode(code = 403, condition = "Forbidden"), - @ResponseCode(code = 404, condition = "Not Found"), - @ResponseCode(code = 501, condition = "Not Implemented"), - @ResponseCode(code = 503, condition = "No providers available") }) + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_FOUND, condition = "Not Found"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) public Response updateLoadBalancerPool( @PathParam("loadBalancerPoolID") String loadBalancerPoolID, final NeutronLoadBalancerPoolRequest input) { - INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = NeutronCRUDInterfaces.getINeutronLoadBalancerPoolCRUD(this); - if (loadBalancerPoolInterface == null) { - throw new ServiceUnavailableException("LoadBalancerPool CRUD Interface " - + RestMessages.SERVICEUNAVAILABLE.toString()); - } + return update(loadBalancerPoolID, input); + } - /* - * verify the LoadBalancerPool exists and there is only one delta provided - */ - if (!loadBalancerPoolInterface.neutronLoadBalancerPoolExists(loadBalancerPoolID)) { - throw new ResourceNotFoundException("LoadBalancerPool UUID does not exist."); + /** + * Deletes a LoadBalancerPool + */ + + @Path("{loadBalancerPoolUUID}") + @DELETE + @StatusCodes({ + @ResponseCode(code = HttpURLConnection.HTTP_NO_CONTENT, condition = "No Content"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_FOUND, condition = "Not Found"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) + public Response deleteLoadBalancerPool( + @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID) { + return delete(loadBalancerPoolUUID); + } + + protected NeutronLoadBalancerPoolMember extractFields(NeutronLoadBalancerPoolMember o, List fields) { + return o.extractFields(fields); + } + + /** + * Returns a list of all LoadBalancerPoolMembers in specified pool + */ + @Path("{loadBalancerPoolUUID}/members") + @GET + @Produces({MediaType.APPLICATION_JSON}) + @StatusCodes({ + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAUTHORIZED, condition = "Unauthorized"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) + public Response listMembers( + //Path param + @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID, + + // return fields + @QueryParam("fields") List fields, + + // OpenStack LoadBalancerPool attributes + @QueryParam("id") String queryLoadBalancerPoolMemberID, + @QueryParam("tenant_id") String queryLoadBalancerPoolMemberTenantID, + @QueryParam("address") String queryLoadBalancerPoolMemberAddress, + @QueryParam("protocol_port") String queryLoadBalancerPoolMemberProtoPort, + @QueryParam("admin_state_up") Boolean queryLoadBalancerPoolMemberAdminStateUp, + @QueryParam("weight") Integer queryLoadBalancerPoolMemberWeight, + @QueryParam("subnet_id") String queryLoadBalancerPoolMemberSubnetID, + + // pagination + @QueryParam("limit") String limit, + @QueryParam("marker") String marker, + @QueryParam("page_reverse") String pageReverse + // sorting not supported + ) { + INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronCRUD(); + if (!loadBalancerPoolInterface.exists(loadBalancerPoolUUID)) { + throw new ResourceNotFoundException(uuidNoExist()); } - if (!input.isSingleton()) { - throw new BadRequestException("Only singleton edit supported"); + List members = + loadBalancerPoolInterface.get(loadBalancerPoolUUID).getLoadBalancerPoolMembers(); + List ans = new ArrayList(); + Iterator i = members.iterator(); + while (i.hasNext()) { + NeutronLoadBalancerPoolMember nsg = i.next(); + if ((queryLoadBalancerPoolMemberID == null || + queryLoadBalancerPoolMemberID.equals(nsg.getID())) && + loadBalancerPoolUUID.equals(nsg.getPoolID()) && + (queryLoadBalancerPoolMemberTenantID == null || + queryLoadBalancerPoolMemberTenantID.equals(nsg.getTenantID())) && + (queryLoadBalancerPoolMemberAddress == null || + queryLoadBalancerPoolMemberAddress.equals(nsg.getPoolMemberAddress())) && + (queryLoadBalancerPoolMemberAdminStateUp == null || + queryLoadBalancerPoolMemberAdminStateUp.equals(nsg.getPoolMemberAdminStateIsUp())) && + (queryLoadBalancerPoolMemberWeight == null || + queryLoadBalancerPoolMemberWeight.equals(nsg.getPoolMemberWeight())) && + (queryLoadBalancerPoolMemberSubnetID == null || + queryLoadBalancerPoolMemberSubnetID.equals(nsg.getPoolMemberSubnetID()))) { + if (fields.size() > 0) { + ans.add(extractFields(nsg, fields)); + } else { + ans.add(nsg); + } + } } - NeutronLoadBalancerPool delta = input.getSingleton(); - NeutronLoadBalancerPool original = loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolID); + return Response.status(HttpURLConnection.HTTP_OK).entity( + new NeutronLoadBalancerPoolMemberRequest(ans)).build(); + } - /* - * updates restricted by Neutron - */ - if (delta.getLoadBalancerPoolID() != null || - delta.getLoadBalancerPoolTenantID() != null || - delta.getLoadBalancerPoolName() != null || - delta.getLoadBalancerPoolDescription() != null || - delta.getLoadBalancerPoolProtocol() != null || - delta.getLoadBalancerPoolLbAlgorithm() != null || - delta.getNeutronLoadBalancerPoolHealthMonitorID() != null || - delta.getLoadBalancerPoolAdminIsStateIsUp() != null || - delta.getLoadBalancerPoolMembers() != null) { - throw new BadRequestException("Attribute edit blocked by Neutron"); + /** + * Returns a specific LoadBalancerPoolMember + */ + @Path("{loadBalancerPoolUUID}/members/{loadBalancerPoolMemberUUID}") + @GET + @Produces({ MediaType.APPLICATION_JSON }) + //@TypeHint(OpenStackLoadBalancerPoolMembers.class) + @StatusCodes({ + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAUTHORIZED, condition = "Unauthorized"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_FOUND, condition = "Not Found"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) + public Response showLoadBalancerPoolMember( + @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID, + @PathParam("loadBalancerPoolMemberUUID") String loadBalancerPoolMemberUUID, + // return fields + @QueryParam("fields") List fields ) { + + INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronCRUD(); + if (!loadBalancerPoolInterface.exists(loadBalancerPoolUUID)) { + throw new ResourceNotFoundException(uuidNoExist()); } + List members = + loadBalancerPoolInterface.get(loadBalancerPoolUUID).getLoadBalancerPoolMembers(); + for (NeutronLoadBalancerPoolMember ans: members) { + if (!ans.getID().equals(loadBalancerPoolMemberUUID)) { + continue; + } - Object[] instances = NeutronUtil.getInstances(INeutronLoadBalancerPoolAware.class, this); - if (instances != null) { - if (instances.length > 0) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - int status = service.canUpdateNeutronLoadBalancerPool(delta, original); - if (status < 200 || status > 299) { - return Response.status(status).build(); - } - } + if (fields.size() > 0) { + return Response.status(HttpURLConnection.HTTP_OK).entity( + new NeutronLoadBalancerPoolMemberRequest(extractFields(ans, fields))).build(); } else { - throw new ServiceUnavailableException("No providers registered. Please try again later"); + return Response.status(HttpURLConnection.HTTP_OK).entity( + new NeutronLoadBalancerPoolMemberRequest(ans)).build(); } - } else { - throw new ServiceUnavailableException("Couldn't get providers list. Please try again later"); } + throw new ResourceNotFoundException(uuidNoExist()); + } - /* - * update the object and return it - */ - loadBalancerPoolInterface.updateNeutronLoadBalancerPool(loadBalancerPoolID, delta); - NeutronLoadBalancerPool updatedLoadBalancerPool = loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolID); - if (instances != null) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - service.neutronLoadBalancerPoolUpdated(updatedLoadBalancerPool); + /** + * Adds a Member to an LBaaS Pool member + */ + @Path("{loadBalancerPoolUUID}/members") + @POST + @Produces({MediaType.APPLICATION_JSON}) + @Consumes({MediaType.APPLICATION_JSON}) + @StatusCodes({ + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) + public Response createLoadBalancerPoolMember( + @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID, + final NeutronLoadBalancerPoolMemberRequest input) { + + INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronCRUD(); + NeutronLoadBalancerPool singletonPool = loadBalancerPoolInterface.get(loadBalancerPoolUUID); + + if (input.isSingleton()) { + NeutronLoadBalancerPoolMember singleton = input.getSingleton(); + singleton.setPoolID(loadBalancerPoolUUID); + /** + * Add the member from the neutron load balancer pool as well + */ + + loadBalancerPoolInterface.addNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, singleton); + } else { + /* + * now, each element of the bulk request can be added to the cache + */ + for (NeutronLoadBalancerPoolMember test : input.getBulk()) { + loadBalancerPoolInterface.addNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, test); } } - return Response.status(200).entity(new NeutronLoadBalancerPoolRequest(loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolID))).build(); + return Response.status(HttpURLConnection.HTTP_CREATED).entity(input).build(); } /** - * Deletes a LoadBalancerPool + * Updates a LB member pool */ - @Path("{loadBalancerPoolUUID}") - @DELETE + @Path("{loadBalancerPoolUUID}/members/{loadBalancerPoolMemberUUID}") + @PUT + @Produces({ MediaType.APPLICATION_JSON }) + @Consumes({ MediaType.APPLICATION_JSON }) @StatusCodes({ - @ResponseCode(code = 204, condition = "No Content"), - @ResponseCode(code = 401, condition = "Unauthorized"), - @ResponseCode(code = 404, condition = "Not Found"), - @ResponseCode(code = 409, condition = "Conflict"), - @ResponseCode(code = 501, condition = "Not Implemented"), - @ResponseCode(code = 503, condition = "No providers available") }) - public Response deleteLoadBalancerPool( - @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID) { - INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = NeutronCRUDInterfaces.getINeutronLoadBalancerPoolCRUD(this); - if (loadBalancerPoolInterface == null) { - throw new ServiceUnavailableException("LoadBalancerPool CRUD Interface " - + RestMessages.SERVICEUNAVAILABLE.toString()); - } + @ResponseCode(code = HttpURLConnection.HTTP_OK, condition = "Operation successful"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_FOUND, condition = "Not Found") }) + public Response updateLoadBalancerPoolMember( + @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID, + @PathParam("loadBalancerPoolMemberUUID") String loadBalancerPoolMemberUUID, + final NeutronLoadBalancerPoolMemberRequest input) { + INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronCRUD(); + NeutronLoadBalancerPool singletonPool = loadBalancerPoolInterface.get(loadBalancerPoolUUID); + NeutronLoadBalancerPoolMember singleton = input.getSingleton(); + singleton.setPoolID(loadBalancerPoolUUID); - /* - * verify the LoadBalancerPool exists and it isn't currently in use - */ - if (!loadBalancerPoolInterface.neutronLoadBalancerPoolExists(loadBalancerPoolUUID)) { - throw new ResourceNotFoundException("LoadBalancerPool UUID does not exist."); - } - if (loadBalancerPoolInterface.neutronLoadBalancerPoolInUse(loadBalancerPoolUUID)) { - return Response.status(409).build(); + if (singletonPool == null) { + throw new ResourceNotFoundException("Pool doesn't Exist"); } - NeutronLoadBalancerPool singleton = loadBalancerPoolInterface.getNeutronLoadBalancerPool(loadBalancerPoolUUID); - Object[] instances = NeutronUtil.getInstances(INeutronLoadBalancerPoolAware.class, this); - if (instances != null) { - if (instances.length > 0) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - int status = service.canDeleteNeutronLoadBalancerPool(singleton); - if (status < 200 || status > 299) { - return Response.status(status).build(); - } - } - } else { - throw new ServiceUnavailableException("No providers registered. Please try again later"); + NeutronLoadBalancerPoolMember original = singletonPool.getNeutronLoadBalancerPoolMember(loadBalancerPoolMemberUUID); + + loadBalancerPoolInterface.updateNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, loadBalancerPoolMemberUUID, singleton); + return Response.status(HttpURLConnection.HTTP_OK).entity(input).build(); + } + + /** + * Deletes a LoadBalancerPoolMember + */ + + @Path("{loadBalancerPoolUUID}/members/{loadBalancerPoolMemberUUID}") + @DELETE + @StatusCodes({ + @ResponseCode(code = HttpURLConnection.HTTP_NO_CONTENT, condition = "No Content"), + @ResponseCode(code = HttpURLConnection.HTTP_NOT_FOUND, condition = "Not Found"), + @ResponseCode(code = HttpURLConnection.HTTP_UNAVAILABLE, condition = "No providers available") }) + public Response deleteLoadBalancerPoolMember( + @PathParam("loadBalancerPoolUUID") String loadBalancerPoolUUID, + @PathParam("loadBalancerPoolMemberUUID") String loadBalancerPoolMemberUUID) { + INeutronLoadBalancerPoolCRUD loadBalancerPoolInterface = getNeutronCRUD(); + + //Verify that the LB pool member exists + NeutronLoadBalancerPoolMember singleton = null; + List members = + loadBalancerPoolInterface.get(loadBalancerPoolUUID).getLoadBalancerPoolMembers(); + for (NeutronLoadBalancerPoolMember member: members) { + if (member.getID().equals(loadBalancerPoolMemberUUID)) { + singleton = member; + break; } - } else { - throw new ServiceUnavailableException("Couldn't get providers list. Please try again later"); + } + if (singleton == null) { + throw new BadRequestException("LoadBalancerPoolMember UUID does not exist."); } - /* - * remove it and return 204 status + /** + * Remove the member from the neutron load balancer pool */ - loadBalancerPoolInterface.removeNeutronLoadBalancerPool(loadBalancerPoolUUID); - if (instances != null) { - for (Object instance : instances) { - INeutronLoadBalancerPoolAware service = (INeutronLoadBalancerPoolAware) instance; - service.neutronLoadBalancerPoolDeleted(singleton); - } - } - return Response.status(204).build(); + loadBalancerPoolInterface.removeNeutronLoadBalancerPoolMember(loadBalancerPoolUUID, loadBalancerPoolMemberUUID); + + return Response.status(HttpURLConnection.HTTP_NO_CONTENT).build(); } }