package org.openstack.atlas.api.mgmt.resources;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancers;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Port;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Ports;
import org.openstack.atlas.service.domain.entities.VirtualIp;
import org.openstack.atlas.api.helpers.ResponseFactory;
import org.openstack.atlas.api.mgmt.resources.providers.ManagementDependencyProvider;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import java.util.List;
import java.util.Map;
public class VirtualIpResource extends ManagementDependencyProvider {
private int id;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
@GET
@Path("loadbalancers")
public Response getLoadBalancersByVipId() {
if (!isUserInRole("cp,ops")) {
return ResponseFactory.accessDenied();
}
LoadBalancers rlbs = new LoadBalancers();
List<org.openstack.atlas.service.domain.entities.LoadBalancer> dlbs;
LoadBalancer rlb;
try {
dlbs = getVipRepository().getLoadBalancersByVipId(id);
for (org.openstack.atlas.service.domain.entities.LoadBalancer dlb : dlbs) {
rlb = getDozerMapper().map(dlb, LoadBalancer.class);
rlbs.getLoadBalancers().add(rlb);
}
return Response.status(200).entity(rlbs).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
@GET
@Path("loadbalancerports")
public Response getLoadBalancerPorts() {
if (!isUserInRole("cp,ops")) {
return ResponseFactory.accessDenied();
}
Ports rPorts = new Ports();
Port rPort;
Map<Integer, List<org.openstack.atlas.service.domain.entities.LoadBalancer>> portMap;
List<org.openstack.atlas.service.domain.entities.LoadBalancer> lbList;
org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancer rLb;
try {
portMap = getVipRepository().getPorts(id);
for (Integer key : portMap.keySet()) {
lbList = portMap.get(key);
rPort = new Port();
rPort.setValue(key);
for (org.openstack.atlas.service.domain.entities.LoadBalancer dLb : lbList) {
rLb = getDozerMapper().map(dLb, LoadBalancer.class);
rPort.getLoadBalancers().add(rLb);
}
rPorts.getPorts().add(rPort);
}
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
return Response.status(200).entity(rPorts).build();
}
@DELETE
public Response deleteVirtualIp() {
try {
if (!isUserInRole("cp,ops")) {
return ResponseFactory.accessDenied();
}
VirtualIp domainVip = new VirtualIp();
domainVip.setId(id);
virtualIpService.removeVipFromCluster(domainVip);
return Response.status(Response.Status.OK).build();
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
}