Skip to content

Commit

Permalink
Merge pull request #10 from msimonin/euca2ools-support
Browse files Browse the repository at this point in the history
Add support for euca2ools.
  • Loading branch information
msimonin committed Dec 18, 2013
2 parents 6c1a993 + 0858d9f commit ac00983
Show file tree
Hide file tree
Showing 5 changed files with 199 additions and 3 deletions.
3 changes: 3 additions & 0 deletions configs/euca2oolsrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export EC2_ACCESS_KEY="snooze"
export EC2_SECRET_KEY="snooze"
export EC2_URL=http://localhost:4001
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
*/
package org.inria.myriads.snoozeec2.communication.rest;

import org.inria.myriads.snoozecommon.communication.NetworkAddress;
import org.inria.myriads.snoozeec2.communication.rest.api.SnoozeEC2API;
import org.inria.myriads.snoozeec2.communication.rest.api.impl.RESTletSnoozeEC2Communicator;




/**
Expand All @@ -33,4 +38,16 @@ private CommunicatorFactory()
{
throw new UnsupportedOperationException();
}


/**
* Creates a new bootstrap communicator instance.
*
* @param bootstrapAddress The bootstrap address
* @return The bootstrap communicator instance
*/
public static SnoozeEC2API newSnoozeEC2Communicator(NetworkAddress snoozeEC2Address)
{
return new RESTletSnoozeEC2Communicator(snoozeEC2Address);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.inria.myriads.snoozeec2.communication.rest.api;

import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.Post;

/**
* @author msimonin
*
*/
public interface SnoozeEC2API
{


/**
*
* handle a get request on the api.
*
* @return representation of the result.
*/
@Get
Representation handleGet();


/**
*
* handle a post request.
*
* @param body The body representation.
* @return representation of the result.
*/
@Post
Representation handlePost(Representation body);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package org.inria.myriads.snoozeec2.communication.rest.api.impl;

import org.inria.myriads.snoozecommon.communication.NetworkAddress;
import org.inria.myriads.snoozecommon.virtualmachineimage.VirtualMachineImageList;
import org.inria.myriads.snoozeec2.communication.rest.api.SnoozeEC2API;
import org.inria.myriads.snoozeimages.communication.rest.api.ImagesRepositoryAPI;
import org.inria.myriads.snoozeimages.communication.rest.api.impl.RESTletImagesRepositoryCommunicator;
import org.restlet.representation.Representation;
import org.restlet.resource.ClientResource;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RESTletSnoozeEC2Communicator implements SnoozeEC2API
{
/** Define the logger. */
private static final Logger log_ = LoggerFactory.getLogger(RESTletSnoozeEC2Communicator.class);

/** Address.*/
private NetworkAddress address_;

/**
* Constructor.
*
* @param address The image repository address.
*/
public RESTletSnoozeEC2Communicator(NetworkAddress address)
{
log_.debug("Initializing REST image repository communicator");
address_ = address;
}

/**
* Creates a client resource.
*
* @return The client resource
*/
private ClientResource createClientResource(String queryParams)
{
log_.debug("Creating client resource with queryparams : " + queryParams);
String address = address_.getAddress();
String port = String.valueOf(address_.getPort());
ClientResource clientResource = new ClientResource("http://" + address + ":" + port + "/?" + queryParams);

return clientResource;
}
/**
* Creates a client resource.
*
* @return The client resource
*/
private ClientResource createClientResource()
{
log_.debug("Creating client resource");
String address = address_.getAddress();
String port = String.valueOf(address_.getPort());
ClientResource clientResource = new ClientResource("http://" + address + ":" + port);
return clientResource;
}


public Representation handleGet()
{
log_.debug("handle a get request");
ClientResource clientResource = null;

try
{
clientResource = createClientResource();
SnoozeEC2API snoozeEc2 = clientResource.wrap(SnoozeEC2API.class);
Representation result = snoozeEc2.handleGet();
return result;
}
catch (Exception exception)
{
log_.debug("Errort while retrieving the image list");
}
finally
{
if (clientResource != null)
{
clientResource.release();
}
}
return null;
}


@Override
public Representation handlePost(Representation body)
{
log_.debug("handle a post request");
ClientResource clientResource = null;

try
{
clientResource = createClientResource(body.getText());
SnoozeEC2API snoozeEc2 = clientResource.wrap(SnoozeEC2API.class);
Representation result = snoozeEc2.handleGet();
return result;
}
catch (Exception exception)
{
log_.debug("Error while handling post request");
exception.printStackTrace();
}
finally
{
if (clientResource != null)
{
clientResource.release();
}
}
return null;
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.inria.myriads.snoozeec2.resource;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
Expand All @@ -26,6 +27,7 @@
import com.amazonaws.ec2.doc._2010_08_31.TerminateInstancesResponseType;

import org.apache.commons.lang3.StringUtils;
import org.inria.myriads.snoozecommon.communication.NetworkAddress;
import org.inria.myriads.snoozecommon.communication.virtualcluster.VirtualMachineMetaData;
import org.inria.myriads.snoozecommon.communication.virtualcluster.submission.VirtualClusterSubmissionRequest;
import org.inria.myriads.snoozecommon.communication.virtualcluster.submission.VirtualClusterSubmissionResponse;
Expand All @@ -35,12 +37,16 @@
import org.inria.myriads.snoozecommon.virtualmachineimage.VirtualMachineImage;
import org.inria.myriads.snoozeec2.action.EC2Action;
import org.inria.myriads.snoozeec2.backend.SnoozeEC2Backend;
import org.inria.myriads.snoozeec2.communication.rest.CommunicatorFactory;
import org.inria.myriads.snoozeec2.communication.rest.api.SnoozeEC2API;
import org.inria.myriads.snoozeec2.communication.rest.api.impl.RESTletSnoozeEC2Communicator;
import org.inria.myriads.snoozeec2.instances.EC2Instance;
import org.restlet.data.Form;
import org.restlet.data.Parameter;
import org.restlet.ext.jaxb.JaxbRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.restlet.resource.ServerResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -52,7 +58,7 @@
* @author msimonin
*
*/
public class SnoozeEC2Resource extends ServerResource
public class SnoozeEC2Resource extends ServerResource implements SnoozeEC2API
{
/** Define the logger. */
private static final Logger log_ = LoggerFactory.getLogger(SnoozeEC2Resource.class);
Expand All @@ -79,8 +85,8 @@ public SnoozeEC2Resource()
*
* @return xmlRepresentation.
*/
@Get
public Representation toXml()

public Representation handleRequest()
{
Form queryParams = getQuery();
String stringAction = queryParams.getFirstValue("Action");
Expand Down Expand Up @@ -115,6 +121,23 @@ public Representation toXml()
return error();
}
}

@Post
public Representation handlePost(Representation entity)
{
NetworkAddress address = new NetworkAddress();
address.setAddress("localhost");
address.setPort(4001);
SnoozeEC2API snoozeEC2Communicator = CommunicatorFactory.newSnoozeEC2Communicator(address);
return snoozeEC2Communicator.handlePost(entity);

}

@Get
public Representation handleGet()
{
return handleRequest();
}

/**
*
Expand Down

0 comments on commit ac00983

Please sign in to comment.