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);