Return-Path: X-Original-To: apmail-airavata-commits-archive@www.apache.org Delivered-To: apmail-airavata-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6CF1F9CC4 for ; Fri, 8 Mar 2013 01:06:54 +0000 (UTC) Received: (qmail 80521 invoked by uid 500); 8 Mar 2013 01:06:54 -0000 Delivered-To: apmail-airavata-commits-archive@airavata.apache.org Received: (qmail 80493 invoked by uid 500); 8 Mar 2013 01:06:54 -0000 Mailing-List: contact commits-help@airavata.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@airavata.apache.org Delivered-To: mailing list commits@airavata.apache.org Received: (qmail 80485 invoked by uid 99); 8 Mar 2013 01:06:54 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Mar 2013 01:06:54 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Mar 2013 01:06:50 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id B3DDA238889B; Fri, 8 Mar 2013 01:06:30 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1454206 - /airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java Date: Fri, 08 Mar 2013 01:06:30 -0000 To: commits@airavata.apache.org From: heshan@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130308010630.B3DDA238889B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 startInstances(AmazonEC2Client ec2, String AMI_ID, String INS_TYPE, JobExecutionContext jobExecutionContext) throws AmazonServiceException {