ppe.ec2
Class Ec2Wrangler

java.lang.Object
  extended by ppe.ec2.Ec2Wrangler

public class Ec2Wrangler
extends java.lang.Object

All operations that require sending requests to AWS re ec2 are implemented in this class.


Field Summary
 com.amazonaws.services.ec2.AmazonEC2Client ec2Client
           
 
Constructor Summary
Ec2Wrangler(ParamsEc2 params)
           
 
Method Summary
static java.lang.String chooseNetworkName(ParamsEc2 params)
           
 java.lang.String createNetwork(NetworkSpec spec)
          Blocks until all requested ec2 instances are up and running.
 java.util.List<java.lang.String> getActiveNetworkNames()
          Gets the networkNames of all ec2-mpi networks owned by the user that are active.
static java.util.List<java.lang.String> getInstanceIDs(com.amazonaws.services.ec2.model.RequestSpotInstancesResult rir)
           
static java.util.List<java.lang.String> getInstanceIDs(com.amazonaws.services.ec2.model.RunInstancesResult rir)
           
 java.util.List<InstanceStatus> getInstances(NetworkInfo ni)
           
static java.util.List<InstanceStatus> getInstances(com.amazonaws.services.ec2.model.RunInstancesResult rir)
          Returns status objects for instances listed in rir that are 'active', i.e.
 java.util.List<InstanceStatus> getInstancesActive()
          Gets InstanceStatuss for all instances owned by the user.
 java.util.List<InstanceStatus> getInstancesAllListed()
          Gets InstanceStatuss for all instances owned by the user, including any that are not active.
 java.util.List<java.lang.String> getKeypairNames()
           
 InstanceStatus getMaster(NetworkInfo ni)
           
 java.lang.String getMasterPublicDns(NetworkInfo ni)
           
 ParamsEc2 getParams()
           
 java.util.List<java.lang.String> getPublicDns(NetworkInfo ni)
           
static java.util.List<InstanceStatus> getRunningInstances(com.amazonaws.services.ec2.model.RunInstancesResult rir)
          Returns status objects for instances listed in rir that have ec2 status 'running'.
 java.util.List<InstanceStatus> getSlaves(NetworkInfo ni)
           
 java.util.List<java.lang.String> getSlavesPublicDns(NetworkInfo ni)
           
 boolean isHVM(java.lang.String imageID)
           
 java.lang.String launchInstances(com.amazonaws.services.ec2.model.InstanceType instanceType, java.lang.String imageID, java.lang.String availabilityZone, int minInstances, int maxInstances, java.lang.String keyName, java.lang.String securityGroupName, java.lang.String networkName)
          This version of launchInstances() gets all parameters from method arguments.
 java.lang.String launchInstances(NetworkSpec spec)
          If NetworkSpec.securityGroupName is null, a one time default security group is created.
 java.lang.String launchSpotInstances(com.amazonaws.services.ec2.model.InstanceType instanceType, java.lang.String imageID, java.lang.String availabilityZone, int nInstances, java.lang.String keyName, java.lang.String securityGroupName, java.lang.String networkName, double spotPrice)
          Note that spot price instances are not available for cluster instances.
 java.lang.String launchSpotInstances(NetworkSpec spec)
          If NetworkSpec.securityGroupName is null, a one time default security group is created.
 void rebootInstances(java.util.List<java.lang.String> instanceIDs)
           
 void rebootInstances(NetworkInfo ni)
          Blocks with NetworkInfo.pingAllInstances() until all networks are available (or ping times out).
 void setParams(ParamsEc2 params)
           
 void setTags(java.lang.String instanceID, java.lang.String networkID, java.lang.String networkName, NodeType nodeType)
          Used by other classes to change an instance's tags.
 com.amazonaws.services.ec2.model.TerminateInstancesResult terminateInstances(java.util.List<java.lang.String> instanceIDs)
          Terminates the instances with the specified instance IDs.
 com.amazonaws.services.ec2.model.TerminateInstancesResult terminateInstances(NetworkInfo ni)
          Terminates the instances in the specified network and deletes the one time security group that they were members of.
 void waitForInstances(NetworkInfo ni, int nInstancesExpected)
          Waits until all expected instances have status 'running'.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ec2Client

public com.amazonaws.services.ec2.AmazonEC2Client ec2Client
Constructor Detail

Ec2Wrangler

public Ec2Wrangler(ParamsEc2 params)
            throws ParamMissingException
Throws:
ParamMissingException
Method Detail

getParams

public ParamsEc2 getParams()

setParams

public void setParams(ParamsEc2 params)

createNetwork

public java.lang.String createNetwork(NetworkSpec spec)
                               throws java.io.IOException,
                                      ParamMissingException,
                                      ImproperParamException,
                                      IncompatibleInstanceImageException,
                                      NoSuchAmiException,
                                      NoSuchInstanceException,
                                      IncompleteNetworkSpecException,
                                      NoSuchNetworkException
Blocks until all requested ec2 instances are up and running.

Returns:
networkID
Throws:
java.io.IOException
ParamMissingException
ImproperParamException
IncompatibleInstanceImageException
NoSuchAmiException
NoSuchInstanceException
IncompleteNetworkSpecException
NoSuchNetworkException

launchInstances

public java.lang.String launchInstances(com.amazonaws.services.ec2.model.InstanceType instanceType,
                                        java.lang.String imageID,
                                        java.lang.String availabilityZone,
                                        int minInstances,
                                        int maxInstances,
                                        java.lang.String keyName,
                                        java.lang.String securityGroupName,
                                        java.lang.String networkName)
                                 throws ParamMissingException,
                                        ImproperParamException
This version of launchInstances() gets all parameters from method arguments.

Parameters:
instanceType -
imageID -
minCountInstances -
maxCountInstances -
keyName -
securityGroupName -
networkName -
Returns:
networkID
Throws:
ParamMissingException
ImproperParamException

launchInstances

public java.lang.String launchInstances(NetworkSpec spec)
                                 throws ParamMissingException,
                                        ImproperParamException
If NetworkSpec.securityGroupName is null, a one time default security group is created. min and max n instances are set to NetworkSpec.nInstances.

Parameters:
spec -
Returns:
network ID
Throws:
ParamMissingException
ImproperParamException

launchSpotInstances

public java.lang.String launchSpotInstances(com.amazonaws.services.ec2.model.InstanceType instanceType,
                                            java.lang.String imageID,
                                            java.lang.String availabilityZone,
                                            int nInstances,
                                            java.lang.String keyName,
                                            java.lang.String securityGroupName,
                                            java.lang.String networkName,
                                            double spotPrice)
                                     throws ParamMissingException,
                                            ImproperParamException
Note that spot price instances are not available for cluster instances.

This method blocks until the spot order has been filled. This is necessary so that we can tag the instances. Note when this method returns the instances may not be fully booted.

Parameters:
instanceType -
imageID -
nInstances -
keyName -
securityGroupName -
networkName, -
spotPrice -
Returns:
network ID
Throws:
ParamMissingException
ImproperParamException

launchSpotInstances

public java.lang.String launchSpotInstances(NetworkSpec spec)
                                     throws ParamMissingException,
                                            ImproperParamException
If NetworkSpec.securityGroupName is null, a one time default security group is created.

Parameters:
spec -
Returns:
network ID
Throws:
ParamMissingException
ImproperParamException

waitForInstances

public void waitForInstances(NetworkInfo ni,
                             int nInstancesExpected)
Waits until all expected instances have status 'running'.

Parameters:
networkName -
n - number of instances expected

getInstancesActive

public java.util.List<InstanceStatus> getInstancesActive()
Gets InstanceStatuss for all instances owned by the user. This list includes instances that are running or pending, but not those that have been shutdown.

Returns:

getInstancesAllListed

public java.util.List<InstanceStatus> getInstancesAllListed()
Gets InstanceStatuss for all instances owned by the user, including any that are not active.

Returns:

getInstances

public static java.util.List<InstanceStatus> getInstances(com.amazonaws.services.ec2.model.RunInstancesResult rir)
Returns status objects for instances listed in rir that are 'active', i.e. have ec2 status 'running' pr 'pending'.

Parameters:
rir -
Returns:

getRunningInstances

public static java.util.List<InstanceStatus> getRunningInstances(com.amazonaws.services.ec2.model.RunInstancesResult rir)
Returns status objects for instances listed in rir that have ec2 status 'running'.

Parameters:
rir -
Returns:

getInstanceIDs

public static java.util.List<java.lang.String> getInstanceIDs(com.amazonaws.services.ec2.model.RequestSpotInstancesResult rir)

getInstanceIDs

public static java.util.List<java.lang.String> getInstanceIDs(com.amazonaws.services.ec2.model.RunInstancesResult rir)

getMaster

public InstanceStatus getMaster(NetworkInfo ni)

getInstances

public java.util.List<InstanceStatus> getInstances(NetworkInfo ni)

getSlaves

public java.util.List<InstanceStatus> getSlaves(NetworkInfo ni)

getActiveNetworkNames

public java.util.List<java.lang.String> getActiveNetworkNames()
Gets the networkNames of all ec2-mpi networks owned by the user that are active. A network is defined as 'active' if it's master ec2 instance is either "pending" or "running".

Returns:

getMasterPublicDns

public java.lang.String getMasterPublicDns(NetworkInfo ni)

getSlavesPublicDns

public java.util.List<java.lang.String> getSlavesPublicDns(NetworkInfo ni)

getPublicDns

public java.util.List<java.lang.String> getPublicDns(NetworkInfo ni)

terminateInstances

public com.amazonaws.services.ec2.model.TerminateInstancesResult terminateInstances(java.util.List<java.lang.String> instanceIDs)
Terminates the instances with the specified instance IDs.

Parameters:
instanceIDs -
Returns:

terminateInstances

public com.amazonaws.services.ec2.model.TerminateInstancesResult terminateInstances(NetworkInfo ni)
Terminates the instances in the specified network and deletes the one time security group that they were members of.

Parameters:
networkID -
Returns:
null if no instances with networkID were found.

getKeypairNames

public java.util.List<java.lang.String> getKeypairNames()

rebootInstances

public void rebootInstances(NetworkInfo ni)
                     throws java.lang.Exception
Blocks with NetworkInfo.pingAllInstances() until all networks are available (or ping times out).

Parameters:
ni -
Throws:
java.lang.Exception

rebootInstances

public void rebootInstances(java.util.List<java.lang.String> instanceIDs)

chooseNetworkName

public static java.lang.String chooseNetworkName(ParamsEc2 params)

setTags

public void setTags(java.lang.String instanceID,
                    java.lang.String networkID,
                    java.lang.String networkName,
                    NodeType nodeType)
Used by other classes to change an instance's tags.

Parameters:
instanceID -

isHVM

public boolean isHVM(java.lang.String imageID)