Author: heshan
Date: Mon Mar  4 20:38:54 2013
New Revision: 1452497

URL: http://svn.apache.org/r1452497
Log:
AIRAVATA-775 Updating the EC2Provider to use the new GFac architecture. 
TODO: Have to do more work on the EC2Provider as it depends on SSHProvider. 
Have to wait until Raman commits his changes/fixes to SSHProvider. 

Added:
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/AmazonSecurityContext.java
Removed:
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/utils/AmazonSecurityContext.java
Modified:
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
    
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/XBayaConfiguration.java
    
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
    
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java

Added: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/AmazonSecurityContext.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/AmazonSecurityContext.java?rev=1452497&view=auto
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/AmazonSecurityContext.java
 (added)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/context/AmazonSecurityContext.java
 Mon Mar  4 20:38:54 2013
@@ -0,0 +1,55 @@
+package org.apache.airavata.gfac.context;
+
+public class AmazonSecurityContext extends SecurityContext {
+    private String userName;
+    private String accessKey;
+    private String secretKey;
+    private String amiId;
+    private String instanceType;
+    private String instanceId;
+    private boolean isRunningInstance = false;
+
+    public AmazonSecurityContext(String userName, String accessKey, String 
secretKey, String amiId, String instanceType) {
+        this.userName = userName;
+        this.accessKey = accessKey;
+        this.secretKey = secretKey;
+        this.amiId = amiId;
+        this.instanceType = instanceType;
+    }
+
+    public AmazonSecurityContext(String userName, String accessKey, String 
secretKey, String instanceId) {
+        this.userName = userName;
+        this.accessKey = accessKey;
+        this.secretKey = secretKey;
+        this.instanceId = instanceId;
+        this.isRunningInstance = true;
+    }
+
+    public String getAccessKey() {
+        return accessKey;
+    }
+
+    public String getSecretKey() {
+        return secretKey;
+    }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
+
+    public String getInstanceType() {
+        return instanceType;
+    }
+
+    public String getAmiId() {
+        return amiId;
+    }
+
+    public boolean isRunningInstance() {
+        return isRunningInstance;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+}

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=1452497&r1=1452496&r2=1452497&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
 Mon Mar  4 20:38:54 2013
@@ -32,6 +32,10 @@ import org.apache.airavata.core.gfac.con
 import 
org.apache.airavata.core.gfac.context.security.impl.SSHSecurityContextImpl;
 import org.apache.airavata.core.gfac.exception.GfacException;
 import org.apache.airavata.core.gfac.exception.ProviderException;
+import org.apache.airavata.gfac.context.AmazonSecurityContext;
+import org.apache.airavata.gfac.context.JobExecutionContext;
+import org.apache.airavata.gfac.provider.GFacProvider;
+import org.apache.airavata.gfac.provider.GFacProviderException;
 import org.apache.airavata.schemas.wec.ContextHeaderDocument;
 import org.apache.airavata.schemas.wec.SecurityContextDocument;
 import org.apache.axiom.om.OMElement;
@@ -49,9 +53,7 @@ import java.util.List;
 // TODO
 // import com.sshtools.j2ssh.util.Base64;
 
-public class EC2Provider extends SSHProvider {
-
-    //private static MLogger log = 
MLogger.getLogger(GFacConstants.LOGGER_NAME);
+public class EC2Provider extends SSHProvider implements GFacProvider {
 
     public static final int SLEEP_TIME_SECOND = 120;
 
@@ -67,27 +69,25 @@ public class EC2Provider extends SSHProv
 
     private String username;
 
-    public EC2Provider(InvocationContext invocationContext) throws 
ProviderException {
-        ExecutionContext execContext = invocationContext.getExecutionContext();
-        OMElement omSecurityContextHeader = 
execContext.getSecurityContextHeader();
+    private AmazonSecurityContext amazonSecurityContext;
 
-        ContextHeaderDocument document = null;
-        try {
-            document = 
ContextHeaderDocument.Factory.parse(omSecurityContextHeader.toStringWithConsume());
-        } catch (XMLStreamException e) {
-            e.printStackTrace();
-        } catch (XmlException e) {
-            e.printStackTrace();
+    public void initialize(JobExecutionContext jobExecutionContext) throws 
GFacProviderException {
+        if ((jobExecutionContext != null) &&
+                (jobExecutionContext.getSecurityContext() instanceof 
AmazonSecurityContext)) {
+            this.amazonSecurityContext = (AmazonSecurityContext) 
jobExecutionContext.getSecurityContext();
+        } else {
+            //TODO : error
         }
-        SecurityContextDocument.SecurityContext.AmazonWebservices 
amazonWebservices =
-                
document.getContextHeader().getSecurityContext().getAmazonWebservices();
-        String access_key = amazonWebservices.getAccessKeyId();
-
-        String secret_key = amazonWebservices.getSecretAccessKey();
-        String ami_id = amazonWebservices.getAmiId();
-        String ins_id = amazonWebservices.getInstanceId();
-        String ins_type = amazonWebservices.getInstanceType();
-        this.username = amazonWebservices.getUsername();
+    }
+
+    public void execute(JobExecutionContext jobExecutionContext) throws 
GFacProviderException {
+
+        String secret_key = amazonSecurityContext.getSecretKey();
+        String access_key = amazonSecurityContext.getAccessKey();
+        String ami_id = amazonSecurityContext.getAmiId();
+        String ins_id = amazonSecurityContext.getInstanceId();
+        String ins_type = amazonSecurityContext.getInstanceType();
+        this.username = amazonSecurityContext.getUserName();
 
         log.debug("ACCESS_KEY:" + access_key);
         log.debug("SECRET_KEY:" + secret_key);
@@ -100,13 +100,13 @@ public class EC2Provider extends SSHProv
          * Validation
          */
         if (access_key == null || access_key.isEmpty())
-            throw new ProviderException("EC2 Access Key is empty", 
invocationContext);
+            throw new GFacProviderException("EC2 Access Key is empty", 
jobExecutionContext);
         if (secret_key == null || secret_key.isEmpty())
-            throw new ProviderException("EC2 Secret Key is empty", 
invocationContext);
+            throw new GFacProviderException("EC2 Secret Key is empty", 
jobExecutionContext);
         if ((ami_id == null && ins_id == null) || (ami_id != null && 
ami_id.isEmpty()) || (ins_id != null && ins_id.isEmpty()))
-            throw new ProviderException("EC2 AMI or Instance ID is empty", 
invocationContext);
+            throw new GFacProviderException("EC2 AMI or Instance ID is empty", 
jobExecutionContext);
         if (this.username == null || this.username.isEmpty())
-            throw new ProviderException("EC2 Username is empty", 
invocationContext);
+            throw new GFacProviderException("EC2 Username is empty", 
jobExecutionContext);
 
         /*
          * Need to start EC2 instance before running it
@@ -122,7 +122,7 @@ public class EC2Provider extends SSHProv
 
             // right now, we can run it on one host
             if (ami_id != null)
-                this.instance = startInstances(ec2client, ami_id, ins_type, 
execContext).get(0);
+                this.instance = startInstances(ec2client, ami_id, ins_type, 
jobExecutionContext).get(0);
             else {
 
                 // already running instance
@@ -167,18 +167,19 @@ public class EC2Provider extends SSHProv
             }
 
         } catch (Exception e) {
-            throw new ProviderException("Invalied 
Request",e,invocationContext);
-        }
-
-        SSHSecurityContextImpl sshContext = ((SSHSecurityContextImpl) 
invocationContext.getSecurityContext(SSH_SECURITY_CONTEXT));
-        if (sshContext == null) {
-            sshContext = new SSHSecurityContextImpl();
+            throw new GFacProviderException("Invalied 
Request",e,jobExecutionContext);
         }
 
-        sshContext.setUsername(username);
-        sshContext.setKeyPass("");
-        sshContext.setPrivateKeyLoc(privateKeyFilePath);
-        invocationContext.addSecurityContext(SSH_SECURITY_CONTEXT, sshContext);
+        // TODO: Fix the following once Raman commits his changes to the 
SSHProvider.
+//        SSHSecurityContextImpl sshContext = ((SSHSecurityContextImpl) 
invocationContext.getSecurityContext(SSH_SECURITY_CONTEXT));
+//        if (sshContext == null) {
+//            sshContext = new SSHSecurityContextImpl();
+//        }
+//
+//        sshContext.setUsername(username);
+//        sshContext.setKeyPass("");
+//        sshContext.setPrivateKeyLoc(privateKeyFilePath);
+//        invocationContext.addSecurityContext(SSH_SECURITY_CONTEXT, 
sshContext);
 
         //set to super class
         /*setUsername(username);
@@ -193,7 +194,15 @@ public class EC2Provider extends SSHProv
         execContext.setFileTransferService(new 
SshFileTransferService(execContext, this.username, privateKeyFilePath));*/
     }
 
-    private List<Instance> startInstances(AmazonEC2Client ec2, String AMI_ID, 
String INS_TYPE, ExecutionContext executionContext) throws 
AmazonServiceException {
+    public void dispose(JobExecutionContext jobExecutionContext) throws 
GFacProviderException {
+        //To change body of implemented methods use File | Settings | File 
Templates.
+    }
+
+    public EC2Provider(InvocationContext invocationContext) throws 
ProviderException {
+
+    }
+
+    private List<Instance> startInstances(AmazonEC2Client ec2, String AMI_ID, 
String INS_TYPE, JobExecutionContext jobExecutionContext) throws 
AmazonServiceException {
         // start only 1 instance
         RunInstancesRequest request = new RunInstancesRequest(AMI_ID, 1, 1);
         request.setKeyName(KEY_PAIR_NAME);

Modified: 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/XBayaConfiguration.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/XBayaConfiguration.java?rev=1452497&r1=1452496&r2=1452497&view=diff
==============================================================================
--- 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/XBayaConfiguration.java
 (original)
+++ 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/XBayaConfiguration.java
 Mon Mar  4 20:38:54 2013
@@ -29,6 +29,7 @@ import java.util.Observable;
 import java.util.Observer;
 
 import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.gfac.context.AmazonSecurityContext;
 import org.apache.airavata.schemas.wec.ContextHeaderDocument;
 import 
org.apache.airavata.workflow.model.component.registry.JCRComponentRegistry;
 import org.apache.airavata.xbaya.core.ide.XBayaExecutionModeListener;
@@ -148,7 +149,10 @@ public class XBayaConfiguration extends 
 
     private boolean regURLSetByCMD = false;
 
+    private AmazonSecurityContext amazonSecurityContext = null;
+
     private ContextHeaderDocument.ContextHeader contextHeader;
+
     public enum XBayaExecutionMode{
        IDE,
        MONITOR
@@ -336,6 +340,22 @@ public class XBayaConfiguration extends 
     }
 
     /**
+     * Get the AmazonSecurityContext needed for cloud job submission.
+     * @return AmazonSecurityContext
+     */
+    public AmazonSecurityContext getAmazonSecurityContext() {
+        return amazonSecurityContext;
+    }
+
+    /**
+     * Set the AmazonSecurityContext needed for cloud job submission.
+     * @param amazonSecurityContext amazon security context.
+     */
+    public void setAmazonSecurityContext(AmazonSecurityContext 
amazonSecurityContext) {
+        this.amazonSecurityContext = amazonSecurityContext;
+    }
+
+    /**
      * @return The GFac URL
      */
     public URI getGFacURL() {

Modified: 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java?rev=1452497&r1=1452496&r2=1452497&view=diff
==============================================================================
--- 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
 (original)
+++ 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/interpretor/WorkflowInterpreter.java
 Mon Mar  4 20:38:54 2013
@@ -46,6 +46,7 @@ import org.apache.airavata.client.api.Ai
 import org.apache.airavata.common.utils.Pair;
 import org.apache.airavata.common.utils.WSDLUtil;
 import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.gfac.context.AmazonSecurityContext;
 import org.apache.airavata.registry.api.workflow.*;
 import org.apache.airavata.registry.api.workflow.WorkflowExecutionStatus.State;
 import org.apache.airavata.workflow.model.component.Component;
@@ -671,23 +672,24 @@ public class WorkflowInterpreter {
                                 */
                                for (Node n : 
wsNode.getControlInPort().getFromNodes()) {
                                        if (n instanceof InstanceNode) {
-                                               // TODO make it as constant
-                                               LeadResourceMapping x = new 
LeadResourceMapping("AMAZON");
+                        AmazonSecurityContext amazonSecurityContext;
+                        final String awsAccessKeyId = 
AmazonCredential.getInstance().getAwsAccessKeyId();
+                        final String awsSecretKey = 
AmazonCredential.getInstance().getAwsSecretAccessKey();
+                        final String username = ((InstanceNode) 
n).getUsername();
+
+                        if (((InstanceNode) n).isStartNewInstance()) {
+                            final String amiId = ((InstanceNode) 
n).getIdAsValue();
+                            final String instanceType = ((InstanceNode) 
n).getInstanceType();
+
+                            amazonSecurityContext =
+                                    new AmazonSecurityContext(username, 
awsAccessKeyId, awsSecretKey, amiId, instanceType);
+                        } else {
+                            final String instanceId = ((InstanceNode) 
n).getIdAsValue();
+                            amazonSecurityContext =
+                                    new AmazonSecurityContext(username, 
awsAccessKeyId, awsSecretKey, instanceId);
+                        }
 
-                                               x.addAttribute("ACCESS_KEY", 
AmazonCredential.getInstance().getAwsAccessKeyId());
-                                               x.addAttribute("SECRET_KEY", 
AmazonCredential.getInstance().getAwsSecretAccessKey());
-
-                                               if (((InstanceNode) 
n).isStartNewInstance()) {
-                                                       
x.addAttribute("AMI_ID", ((InstanceNode) n).getIdAsValue());
-                                                       
x.addAttribute("INS_TYPE", ((InstanceNode) n).getInstanceType());
-                                               } else {
-                                                       
x.addAttribute("INS_ID", ((InstanceNode) n).getIdAsValue());
-                                               }
-
-                                               x.addAttribute("USERNAME", 
((InstanceNode) n).getUsername());
-
-                                               // set to leadHeader
-                                               
leadCtxHeader.setResourceMapping(x);
+                        
this.config.getConfiguration().setAmazonSecurityContext(amazonSecurityContext);
                                        }
                                }
 

Modified: 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java?rev=1452497&r1=1452496&r2=1452497&view=diff
==============================================================================
--- 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
 (original)
+++ 
airavata/trunk/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/invoker/EmbeddedGFacInvoker.java
 Mon Mar  4 20:38:54 2013
@@ -264,6 +264,10 @@ public class EmbeddedGFacInvoker impleme
             
jobExecutionContext.setProperty(Constants.PROP_BROKER_URL,this.configuration.getBrokerURL().toASCIIString());
             
jobExecutionContext.setProperty(Constants.PROP_WORKFLOW_INSTANCE_ID,this.configuration.getTopic());
 
+            if(this.configuration.getAmazonSecurityContext() != null) {
+                
jobExecutionContext.setSecurityContext(this.configuration.getAmazonSecurityContext());
+            }
+
             ApplicationContext applicationContext = new ApplicationContext();
             
applicationContext.setApplicationDeploymentDescription(applicationDescription);
             applicationContext.setHostDescription(registeredHost);


Reply via email to