You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by he...@apache.org on 2013/03/08 02:06:30 UTC
svn commit: r1454206 -
/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
Author: heshan
Date: Fri Mar 8 01:06:30 2013
New Revision: 1454206
URL: http://svn.apache.org/r1454206
Log:
AIRAVATA-202 Bundled the logic into methods in such a way that it looks cleaner. I am going to implement the EC2Provider in a such a way that it no longer requires SSHProvider to run jobs. By now all the references to SSHProvider is removed.
Modified:
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java?rev=1454206&r1=1454205&r2=1454206&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java Fri Mar 8 01:06:30 2013
@@ -57,6 +57,8 @@ public class EC2Provider implements GFac
private static final String privateKeyFilePath = System.getProperty("user.home") + "/.ssh/" + KEY_PAIR_FILE;
+ private Instance instance = null;
+
private AmazonSecurityContext amazonSecurityContext;
public void initialize(JobExecutionContext jobExecutionContext) throws GFacProviderException {
@@ -69,10 +71,6 @@ public class EC2Provider implements GFac
} else {
throw new GFacProviderException("Job Execution Context is null" + jobExecutionContext);
}
- }
-
- public void execute(JobExecutionContext jobExecutionContext) throws GFacProviderException {
- Instance instance;
if (log.isDebugEnabled()) {
log.debug("ACCESS_KEY:" + amazonSecurityContext.getAccessKey());
@@ -100,6 +98,56 @@ public class EC2Provider implements GFac
new BasicAWSCredentials(amazonSecurityContext.getAccessKey(), amazonSecurityContext.getSecretKey());
AmazonEC2Client ec2client = new AmazonEC2Client(credential);
+ instance = initEc2Environment(jobExecutionContext, ec2client);
+ checkConnection(instance, ec2client);
+ }
+
+ public void execute(JobExecutionContext jobExecutionContext) throws GFacProviderException {
+ // TODO: Run job
+
+ }
+
+ public void dispose(JobExecutionContext jobExecutionContext) throws GFacProviderException {
+
+ }
+
+ /**
+ * Checks whether the port 22 of the Amazon instance is accessible.
+ *
+ * @param instance Amazon instance id.
+ * @param ec2client AmazonEC2Client object
+ */
+ private void checkConnection(Instance instance, AmazonEC2Client ec2client) {
+ /* Make sure port 22 is connectable */
+ for (GroupIdentifier g : instance.getSecurityGroups()) {
+ IpPermission ip = new IpPermission();
+ ip.setIpProtocol("tcp");
+ ip.setFromPort(22);
+ ip.setToPort(22);
+ AuthorizeSecurityGroupIngressRequest r = new AuthorizeSecurityGroupIngressRequest();
+ r = r.withIpPermissions(ip.withIpRanges("0.0.0.0/0"));
+ r.setGroupId(g.getGroupId());
+ try {
+ ec2client.authorizeSecurityGroupIngress(r);
+ } catch (AmazonServiceException as) {
+ /* If exception is from duplicate room, ignore it. */
+ if (!as.getErrorCode().equals("InvalidPermission.Duplicate"))
+ throw as;
+ }
+ }
+ }
+
+ /**
+ * Initializes the Amazon EC2 environment needed to run the Cloud job submission. This will bring
+ * up an Amazon instance (out of an AMI) or use an existing instance id.
+ *
+ * @param jobExecutionContext Job execution context.
+ * @param ec2client EC2 Client.
+ * @return instance id of the running Amazon instance.
+ * @throws GFacProviderException
+ */
+ private Instance initEc2Environment(JobExecutionContext jobExecutionContext, AmazonEC2Client ec2client) throws GFacProviderException {
+ Instance instance;
try {
/* Build key pair before start instance */
buildKeyPair(ec2client);
@@ -131,37 +179,10 @@ public class EC2Provider implements GFac
//TODO send out instance id
//execContext.getNotificationService().sendResourceMappingNotifications(this.instance.getPublicDnsName(), "EC2 Instance " + this.instance.getInstanceId() + " is running with public name " + this.instance.getPublicDnsName(), this.instance.getInstanceId());
-
- /*
- * Make sure port 22 is connectable
- */
- for (GroupIdentifier g : instance.getSecurityGroups()) {
- IpPermission ip = new IpPermission();
- ip.setIpProtocol("tcp");
- ip.setFromPort(22);
- ip.setToPort(22);
- AuthorizeSecurityGroupIngressRequest r = new AuthorizeSecurityGroupIngressRequest();
- r = r.withIpPermissions(ip.withIpRanges("0.0.0.0/0"));
- r.setGroupId(g.getGroupId());
- try {
- ec2client.authorizeSecurityGroupIngress(r);
- } catch (AmazonServiceException as) {
- /*
- * If exception is from duplicate room, ignore it.
- */
- if (!as.getErrorCode().equals("InvalidPermission.Duplicate"))
- throw as;
- }
- }
-
} catch (Exception e) {
- throw new GFacProviderException("Invalied Request",e,jobExecutionContext);
+ throw new GFacProviderException("Invalid Request",e,jobExecutionContext);
}
-
- }
-
- public void dispose(JobExecutionContext jobExecutionContext) throws GFacProviderException {
- //To change body of implemented methods use File | Settings | File Templates.
+ return instance;
}
private List<Instance> startInstances(AmazonEC2Client ec2, String AMI_ID, String INS_TYPE, JobExecutionContext jobExecutionContext) throws AmazonServiceException {