package org.openstack.atlas.api.mgmt.resources; import org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIp; import org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIps; import org.openstack.atlas.docs.loadbalancers.api.v1.IpVersion; import org.openstack.atlas.docs.loadbalancers.api.v1.VipType; import org.openstack.atlas.service.domain.entities.LoadBalancer; import org.openstack.atlas.service.domain.entities.VirtualIpv6; import org.openstack.atlas.service.domain.operations.Operation; import org.openstack.atlas.service.domain.pojos.MessageDataContainer; import org.openstack.atlas.api.faults.HttpResponseBuilder; import org.openstack.atlas.api.helpers.ResponseFactory; import org.openstack.atlas.api.mgmt.repository.ValidatorRepository; import org.openstack.atlas.api.mgmt.resources.providers.ManagementDependencyProvider; import org.openstack.atlas.api.validation.results.ValidatorResult; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.List; import java.util.Set; import static org.openstack.atlas.api.mgmt.validation.contexts.VirtualIpContext.VIPS_POST; public class LoadbalancerVipResource extends ManagementDependencyProvider { private int loadBalancerId; private int id; @POST @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addVirtualIpToLoadBalancer(VirtualIp vip) { if (!isUserInRole("cp,ops,support")) { return ResponseFactory.accessDenied(); } ValidatorResult result = ValidatorRepository.getValidatorFor(VirtualIp.class).validate(vip, VIPS_POST); if (!result.passedValidation()) { return Response.status(400).entity(HttpResponseBuilder.buildBadRequestResponse("Validation fault", result.getValidationErrorMessages())).build(); } try { // TODO: Refactor to use better dozer mappings. org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer apiLb = new org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer(); apiLb.getVirtualIps().add(vip); LoadBalancer domainLb = getDozerMapper().map(apiLb, LoadBalancer.class); domainLb.setId(loadBalancerId); final org.openstack.atlas.service.domain.entities.VirtualIp virtualIpToAdd = domainLb.getLoadBalancerJoinVipSet().iterator().next().getVirtualIp(); final org.openstack.atlas.service.domain.entities.VirtualIp newlyAddedVip = virtualIpService.addVirtualIpToLoadBalancer(virtualIpToAdd, domainLb, virtualIpToAdd.getTicket()); MessageDataContainer dataContainer = new MessageDataContainer(); dataContainer.setLoadBalancerId(loadBalancerId); dataContainer.getNewVipIds().add(newlyAddedVip.getId()); managementAsyncService.callAsyncLoadBalancingOperation(Operation.ADD_VIRTUAL_IP, dataContainer); VirtualIp returnVip = getDozerMapper().map(newlyAddedVip, VirtualIp.class); return Response.status(Response.Status.ACCEPTED).entity(returnVip).build(); } catch (Exception e) { return ResponseFactory.getErrorResponse(e, null, null); } } @GET public Response getVipsbyLoadBalancerId() { if (!isUserInRole("cp,ops")) { return ResponseFactory.accessDenied(); } List<org.openstack.atlas.service.domain.entities.VirtualIp> dvips; org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIps rvips = new VirtualIps(); org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIp rvip; try { dvips = getVipRepository().getVipsByLoadBalancerId(loadBalancerId); for (org.openstack.atlas.service.domain.entities.VirtualIp dvip : dvips) { rvip = getDozerMapper().map(dvip, VirtualIp.class); rvips.getVirtualIps().add(rvip); } Set<VirtualIpv6> ipv6Vips = virtualIpService.getVirtualIpv6ByLoadBalancerId(loadBalancerId); for (org.openstack.atlas.service.domain.entities.VirtualIpv6 ipv6Vip : ipv6Vips) { org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIp apiIpv6Vip; apiIpv6Vip = new org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIp(); apiIpv6Vip.setId(ipv6Vip.getId()); apiIpv6Vip.setType(VipType.PUBLIC); apiIpv6Vip.setIpVersion(IpVersion.IPV6); apiIpv6Vip.setAddress(virtualIpService.getVirtualIpv6String(ipv6Vip)); rvips.getVirtualIps().add(apiIpv6Vip); } return Response.status(200).entity(rvips).build(); } catch (Exception e) { return ResponseFactory.getErrorResponse(e, null, null); } } public void setId(int id) { this.id = id; } public int getId() { return id; } public void setLoadBalancerId(int loadBalancerId) { this.loadBalancerId = loadBalancerId; } public int getLoadBalancerId() { return loadBalancerId; } }