package eu.betaas.taas.taasvmmanager.test.api; import java.util.HashMap; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.apache.log4j.Logger; import com.google.gson.Gson; import eu.betaas.taas.taasvmmanager.api.datamodel.Availability; import eu.betaas.taas.taasvmmanager.api.datamodel.Flavor; import eu.betaas.taas.taasvmmanager.api.datamodel.InstanceType; import eu.betaas.taas.taasvmmanager.api.datamodel.VMRequest; import eu.betaas.taas.taasvmmanager.test.client.TaaSVMManagerClient; @Path("v1") public class TaaSVMManagerRESTImpl { private Logger logger = Logger.getLogger("betaas.taas"); public void startService(){ logger.info("[TaaSVMManagerRESTImpl] External Starting REST api for VMManger"); logger.info("[TaaSVMManagerRESTImpl] External REST api for VMManger started"); } public void closeService() { logger.info("[TaaSVMManagerRESTImpl] External REST api for VMManger stopped"); } @GET @Path("/flavors") @Produces(MediaType.APPLICATION_JSON) public Response getFlavors() { TaaSVMManagerClient client = TaaSVMManagerClient.getInstance(); List<Flavor> flavors = client.getFlavors(); //List<String> flavors = client.getFlavors(); return Response.ok(new Gson().toJson(flavors)).build(); } @POST @Path("/machines") @Consumes(MediaType.APPLICATION_JSON) public Response createVM(String request) { TaaSVMManagerClient client = TaaSVMManagerClient.getInstance(); Gson gson = new Gson(); VMRequest req = gson.fromJson(request, VMRequest.class); try { String res = client.createVM(req); return Response.status(201).entity(res).build(); } catch (Exception e) { return Response.serverError().entity(e.getMessage()).build(); } } @POST @Path("/extmachines") @Consumes(MediaType.APPLICATION_JSON) public Response createExtVM(String request) { TaaSVMManagerClient client = TaaSVMManagerClient.getInstance(); Gson gson = new Gson(); VMRequest req = gson.fromJson(request, VMRequest.class); String res = client.createExtVM(req); return Response.ok(res).build(); } @DELETE @Path("/machines/{idVM}") public Response deleteVM(@PathParam("idVM") String idVM) { TaaSVMManagerClient client = TaaSVMManagerClient.getInstance(); boolean res = client.deleteVM(idVM); if (res) { return Response.status(204).build(); } else { return Response.serverError().build(); } } @GET @Path("/availability") @Produces(MediaType.APPLICATION_JSON) public Response getAvailability(@QueryParam("orderBy")String field) { TaaSVMManagerClient client = TaaSVMManagerClient.getInstance(); List<Availability> res; if (field == null || field.equals("")) { res = client.getAvailability(); } else if (field.equals("cpu")) { res = client.getAvailability(true); } else { //bad request return Response.status(400).build(); } return Response.ok(new Gson().toJson(res)).build(); } @PUT @Path("/migration") public Response sendVMs(String migrationInfo) { TaaSVMManagerClient client = TaaSVMManagerClient.getInstance(); boolean ret; Gson gson = new Gson(); MigrationInfo info; info = gson.fromJson(migrationInfo, MigrationInfo.class); if (info.getVmIds() == null) { //bad request return Response.status(400).build(); } if (info.getTarget() == null || info.getTarget().equals("")) { //bad request return Response.status(400).build(); } if (info.getVmIds().size() == 0) { //bad request return Response.status(400).build(); } if (info.getVmIds().size() == 1) { ret = client.migrateVM( info.getVmIds().get(0), info.getTarget()); } else { ret = client.sendVMs(info.getVmIds(), info.getTarget()); } if (ret) { return Response.status(204).build(); } else { return Response.serverError().build(); } } private class MigrationInfo { List<String> vmIds; String target; public MigrationInfo() {} public List<String> getVmIds() { return vmIds; } public void setVmIds(List<String> vmIds) { this.vmIds = vmIds; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } } }