You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2016/11/07 19:58:38 UTC

[3/4] airavata git commit: Replaced cloud job submission command with generated script

Replaced cloud job submission command with generated script


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/9f3810ef
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/9f3810ef
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/9f3810ef

Branch: refs/heads/develop
Commit: 9f3810efcc9da8557bf745f6a5986b5abf1373ce
Parents: 2b13da9
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Mon Nov 7 13:13:43 2016 -0500
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Mon Nov 7 13:13:43 2016 -0500

----------------------------------------------------------------------
 .../main/resources/lib/airavata/Airavata.cpp    |  62 +++-
 .../src/main/resources/lib/airavata/Airavata.h  |  45 ++-
 .../lib/airavata/Airavata_server.skeleton.cpp   |   6 +-
 .../airavata/compute_resource_model_types.cpp   | 257 +++++++++-------
 .../lib/airavata/compute_resource_model_types.h |  10 +-
 .../Model/AppCatalog/ComputeResource/Types.php  |  45 ++-
 .../lib/apache/airavata/api/Airavata-remote     |   8 +-
 .../lib/apache/airavata/api/Airavata.py         |  55 +++-
 .../model/appcatalog/computeresource/ttypes.py  |  42 ++-
 .../appcatalog/computeresource/BatchQueue.java  |  25 +-
 .../computeresource/CloudJobSubmission.java     | 145 ++++++++-
 .../computeresource/ResourceJobManagerType.java |   5 +-
 .../src/main/resources/CLOUD_Groovy.template    |   7 +
 .../apache/airavata/gfac/core/GFacUtils.java    | 300 ++++++++++---------
 .../apache/airavata/gfac/core/GroovyMap.java    |   9 +
 .../org/apache/airavata/gfac/impl/Factory.java  |  13 +-
 .../gfac/impl/task/AuroraJobSubmission.java     |  25 +-
 .../impl/task/DefaultJobSubmissionTask.java     |  14 +-
 .../compute_resource_model.thrift               |  12 +-
 19 files changed, 732 insertions(+), 353 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
index 278781b..7ac0f13 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp
@@ -15127,6 +15127,14 @@ uint32_t Airavata_cloneExperiment_args::read(::apache::thrift::protocol::TProtoc
           xfer += iprot->skip(ftype);
         }
         break;
+      case 4:
+        if (ftype == ::apache::thrift::protocol::T_STRING) {
+          xfer += iprot->readString(this->newExperimentProjectId);
+          this->__isset.newExperimentProjectId = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -15158,6 +15166,10 @@ uint32_t Airavata_cloneExperiment_args::write(::apache::thrift::protocol::TProto
   xfer += oprot->writeString(this->newExperimentName);
   xfer += oprot->writeFieldEnd();
 
+  xfer += oprot->writeFieldBegin("newExperimentProjectId", ::apache::thrift::protocol::T_STRING, 4);
+  xfer += oprot->writeString(this->newExperimentProjectId);
+  xfer += oprot->writeFieldEnd();
+
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -15185,6 +15197,10 @@ uint32_t Airavata_cloneExperiment_pargs::write(::apache::thrift::protocol::TProt
   xfer += oprot->writeString((*(this->newExperimentName)));
   xfer += oprot->writeFieldEnd();
 
+  xfer += oprot->writeFieldBegin("newExperimentProjectId", ::apache::thrift::protocol::T_STRING, 4);
+  xfer += oprot->writeString((*(this->newExperimentProjectId)));
+  xfer += oprot->writeFieldEnd();
+
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -15264,6 +15280,14 @@ uint32_t Airavata_cloneExperiment_result::read(::apache::thrift::protocol::TProt
           xfer += iprot->skip(ftype);
         }
         break;
+      case 6:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->pnfe.read(iprot);
+          this->__isset.pnfe = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -15306,6 +15330,10 @@ uint32_t Airavata_cloneExperiment_result::write(::apache::thrift::protocol::TPro
     xfer += oprot->writeFieldBegin("ae", ::apache::thrift::protocol::T_STRUCT, 5);
     xfer += this->ae.write(oprot);
     xfer += oprot->writeFieldEnd();
+  } else if (this->__isset.pnfe) {
+    xfer += oprot->writeFieldBegin("pnfe", ::apache::thrift::protocol::T_STRUCT, 6);
+    xfer += this->pnfe.write(oprot);
+    xfer += oprot->writeFieldEnd();
   }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
@@ -15386,6 +15414,14 @@ uint32_t Airavata_cloneExperiment_presult::read(::apache::thrift::protocol::TPro
           xfer += iprot->skip(ftype);
         }
         break;
+      case 6:
+        if (ftype == ::apache::thrift::protocol::T_STRUCT) {
+          xfer += this->pnfe.read(iprot);
+          this->__isset.pnfe = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -55462,13 +55498,13 @@ void AiravataClient::recv_getJobDetails(std::vector< ::apache::airavata::model::
   throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "getJobDetails failed: unknown result");
 }
 
-void AiravataClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+void AiravataClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
-  send_cloneExperiment(authzToken, existingExperimentID, newExperimentName);
+  send_cloneExperiment(authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
   recv_cloneExperiment(_return);
 }
 
-void AiravataClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+void AiravataClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
   int32_t cseqid = 0;
   oprot_->writeMessageBegin("cloneExperiment", ::apache::thrift::protocol::T_CALL, cseqid);
@@ -55477,6 +55513,7 @@ void AiravataClient::send_cloneExperiment(const  ::apache::airavata::model::secu
   args.authzToken = &authzToken;
   args.existingExperimentID = &existingExperimentID;
   args.newExperimentName = &newExperimentName;
+  args.newExperimentProjectId = &newExperimentProjectId;
   args.write(oprot_);
 
   oprot_->writeMessageEnd();
@@ -55534,6 +55571,9 @@ void AiravataClient::recv_cloneExperiment(std::string& _return)
   if (result.__isset.ae) {
     throw result.ae;
   }
+  if (result.__isset.pnfe) {
+    throw result.pnfe;
+  }
   throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "cloneExperiment failed: unknown result");
 }
 
@@ -67196,7 +67236,7 @@ void AiravataProcessor::process_cloneExperiment(int32_t seqid, ::apache::thrift:
 
   Airavata_cloneExperiment_result result;
   try {
-    iface_->cloneExperiment(result.success, args.authzToken, args.existingExperimentID, args.newExperimentName);
+    iface_->cloneExperiment(result.success, args.authzToken, args.existingExperimentID, args.newExperimentName, args.newExperimentProjectId);
     result.__isset.success = true;
   } catch ( ::apache::airavata::api::error::InvalidRequestException &ire) {
     result.ire = ire;
@@ -67213,6 +67253,9 @@ void AiravataProcessor::process_cloneExperiment(int32_t seqid, ::apache::thrift:
   } catch ( ::apache::airavata::api::error::AuthorizationException &ae) {
     result.ae = ae;
     result.__isset.ae = true;
+  } catch ( ::apache::airavata::api::error::ProjectNotFoundException &pnfe) {
+    result.pnfe = pnfe;
+    result.__isset.pnfe = true;
   } catch (const std::exception& e) {
     if (this->eventHandler_.get() != NULL) {
       this->eventHandler_->handlerError(ctx, "Airavata.cloneExperiment");
@@ -79885,13 +79928,13 @@ void AiravataConcurrentClient::recv_getJobDetails(std::vector< ::apache::airavat
   } // end while(true)
 }
 
-void AiravataConcurrentClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+void AiravataConcurrentClient::cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
-  int32_t seqid = send_cloneExperiment(authzToken, existingExperimentID, newExperimentName);
+  int32_t seqid = send_cloneExperiment(authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
   recv_cloneExperiment(_return, seqid);
 }
 
-int32_t AiravataConcurrentClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName)
+int32_t AiravataConcurrentClient::send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId)
 {
   int32_t cseqid = this->sync_.generateSeqId();
   ::apache::thrift::async::TConcurrentSendSentry sentry(&this->sync_);
@@ -79901,6 +79944,7 @@ int32_t AiravataConcurrentClient::send_cloneExperiment(const  ::apache::airavata
   args.authzToken = &authzToken;
   args.existingExperimentID = &existingExperimentID;
   args.newExperimentName = &newExperimentName;
+  args.newExperimentProjectId = &newExperimentProjectId;
   args.write(oprot_);
 
   oprot_->writeMessageEnd();
@@ -79980,6 +80024,10 @@ void AiravataConcurrentClient::recv_cloneExperiment(std::string& _return, const
         sentry.commit();
         throw result.ae;
       }
+      if (result.__isset.pnfe) {
+        sentry.commit();
+        throw result.pnfe;
+      }
       // in a bad state, don't commit
       throw ::apache::thrift::TApplicationException(::apache::thrift::TApplicationException::MISSING_RESULT, "cloneExperiment failed: unknown result");
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
index 1af59e7..9eb38ef 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h
@@ -978,6 +978,9 @@ class AiravataIf {
    *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
    *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
    *      should be shared public by default.
+   * @param newExperimentProjectId
+   *    The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+   *      in the same project as the existing experiment.
    * 
    * @return
    *   The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -1009,8 +1012,9 @@ class AiravataIf {
    * @param authzToken
    * @param existingExperimentID
    * @param newExperimentName
+   * @param newExperimentProjectId
    */
-  virtual void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName) = 0;
+  virtual void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId) = 0;
 
   /**
    * 
@@ -3057,7 +3061,7 @@ class AiravataNull : virtual public AiravataIf {
   void getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */) {
     return;
   }
-  void cloneExperiment(std::string& /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* existingExperimentID */, const std::string& /* newExperimentName */) {
+  void cloneExperiment(std::string& /* _return */, const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* existingExperimentID */, const std::string& /* newExperimentName */, const std::string& /* newExperimentProjectId */) {
     return;
   }
   void terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& /* authzToken */, const std::string& /* airavataExperimentId */, const std::string& /* gatewayId */) {
@@ -10178,9 +10182,10 @@ class Airavata_getJobDetails_presult {
 };
 
 typedef struct _Airavata_cloneExperiment_args__isset {
-  _Airavata_cloneExperiment_args__isset() : existingExperimentID(false), newExperimentName(false) {}
+  _Airavata_cloneExperiment_args__isset() : existingExperimentID(false), newExperimentName(false), newExperimentProjectId(false) {}
   bool existingExperimentID :1;
   bool newExperimentName :1;
+  bool newExperimentProjectId :1;
 } _Airavata_cloneExperiment_args__isset;
 
 class Airavata_cloneExperiment_args {
@@ -10188,13 +10193,14 @@ class Airavata_cloneExperiment_args {
 
   Airavata_cloneExperiment_args(const Airavata_cloneExperiment_args&);
   Airavata_cloneExperiment_args& operator=(const Airavata_cloneExperiment_args&);
-  Airavata_cloneExperiment_args() : existingExperimentID(), newExperimentName() {
+  Airavata_cloneExperiment_args() : existingExperimentID(), newExperimentName(), newExperimentProjectId() {
   }
 
   virtual ~Airavata_cloneExperiment_args() throw();
    ::apache::airavata::model::security::AuthzToken authzToken;
   std::string existingExperimentID;
   std::string newExperimentName;
+  std::string newExperimentProjectId;
 
   _Airavata_cloneExperiment_args__isset __isset;
 
@@ -10204,6 +10210,8 @@ class Airavata_cloneExperiment_args {
 
   void __set_newExperimentName(const std::string& val);
 
+  void __set_newExperimentProjectId(const std::string& val);
+
   bool operator == (const Airavata_cloneExperiment_args & rhs) const
   {
     if (!(authzToken == rhs.authzToken))
@@ -10212,6 +10220,8 @@ class Airavata_cloneExperiment_args {
       return false;
     if (!(newExperimentName == rhs.newExperimentName))
       return false;
+    if (!(newExperimentProjectId == rhs.newExperimentProjectId))
+      return false;
     return true;
   }
   bool operator != (const Airavata_cloneExperiment_args &rhs) const {
@@ -10234,19 +10244,21 @@ class Airavata_cloneExperiment_pargs {
   const  ::apache::airavata::model::security::AuthzToken* authzToken;
   const std::string* existingExperimentID;
   const std::string* newExperimentName;
+  const std::string* newExperimentProjectId;
 
   uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const;
 
 };
 
 typedef struct _Airavata_cloneExperiment_result__isset {
-  _Airavata_cloneExperiment_result__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false) {}
+  _Airavata_cloneExperiment_result__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false), pnfe(false) {}
   bool success :1;
   bool ire :1;
   bool enf :1;
   bool ace :1;
   bool ase :1;
   bool ae :1;
+  bool pnfe :1;
 } _Airavata_cloneExperiment_result__isset;
 
 class Airavata_cloneExperiment_result {
@@ -10264,6 +10276,7 @@ class Airavata_cloneExperiment_result {
    ::apache::airavata::api::error::AiravataClientException ace;
    ::apache::airavata::api::error::AiravataSystemException ase;
    ::apache::airavata::api::error::AuthorizationException ae;
+   ::apache::airavata::api::error::ProjectNotFoundException pnfe;
 
   _Airavata_cloneExperiment_result__isset __isset;
 
@@ -10279,6 +10292,8 @@ class Airavata_cloneExperiment_result {
 
   void __set_ae(const  ::apache::airavata::api::error::AuthorizationException& val);
 
+  void __set_pnfe(const  ::apache::airavata::api::error::ProjectNotFoundException& val);
+
   bool operator == (const Airavata_cloneExperiment_result & rhs) const
   {
     if (!(success == rhs.success))
@@ -10293,6 +10308,8 @@ class Airavata_cloneExperiment_result {
       return false;
     if (!(ae == rhs.ae))
       return false;
+    if (!(pnfe == rhs.pnfe))
+      return false;
     return true;
   }
   bool operator != (const Airavata_cloneExperiment_result &rhs) const {
@@ -10307,13 +10324,14 @@ class Airavata_cloneExperiment_result {
 };
 
 typedef struct _Airavata_cloneExperiment_presult__isset {
-  _Airavata_cloneExperiment_presult__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false) {}
+  _Airavata_cloneExperiment_presult__isset() : success(false), ire(false), enf(false), ace(false), ase(false), ae(false), pnfe(false) {}
   bool success :1;
   bool ire :1;
   bool enf :1;
   bool ace :1;
   bool ase :1;
   bool ae :1;
+  bool pnfe :1;
 } _Airavata_cloneExperiment_presult__isset;
 
 class Airavata_cloneExperiment_presult {
@@ -10327,6 +10345,7 @@ class Airavata_cloneExperiment_presult {
    ::apache::airavata::api::error::AiravataClientException ace;
    ::apache::airavata::api::error::AiravataSystemException ase;
    ::apache::airavata::api::error::AuthorizationException ae;
+   ::apache::airavata::api::error::ProjectNotFoundException pnfe;
 
   _Airavata_cloneExperiment_presult__isset __isset;
 
@@ -27126,8 +27145,8 @@ class AiravataClient : virtual public AiravataIf {
   void getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void send_getJobDetails(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void recv_getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return);
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
-  void send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
+  void send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
   void recv_cloneExperiment(std::string& _return);
   void terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);
   void send_terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);
@@ -28327,13 +28346,13 @@ class AiravataMultiface : virtual public AiravataIf {
     return;
   }
 
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName) {
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId) {
     size_t sz = ifaces_.size();
     size_t i = 0;
     for (; i < (sz - 1); ++i) {
-      ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName);
+      ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
     }
-    ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName);
+    ifaces_[i]->cloneExperiment(_return, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId);
     return;
   }
 
@@ -29639,8 +29658,8 @@ class AiravataConcurrentClient : virtual public AiravataIf {
   void getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   int32_t send_getJobDetails(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId);
   void recv_getJobDetails(std::vector< ::apache::airavata::model::job::JobModel> & _return, const int32_t seqid);
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
-  int32_t send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName);
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
+  int32_t send_cloneExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId);
   void recv_cloneExperiment(std::string& _return, const int32_t seqid);
   void terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);
   int32_t send_terminateExperiment(const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& airavataExperimentId, const std::string& gatewayId);

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
index 389f8d7..7e696db 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp
@@ -1130,6 +1130,9 @@ class AiravataHandler : virtual public AiravataIf {
    *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
    *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
    *      should be shared public by default.
+   * @param newExperimentProjectId
+   *    The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+   *      in the same project as the existing experiment.
    * 
    * @return
    *   The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -1161,8 +1164,9 @@ class AiravataHandler : virtual public AiravataIf {
    * @param authzToken
    * @param existingExperimentID
    * @param newExperimentName
+   * @param newExperimentProjectId
    */
-  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName) {
+  void cloneExperiment(std::string& _return, const  ::apache::airavata::model::security::AuthzToken& authzToken, const std::string& existingExperimentID, const std::string& newExperimentName, const std::string& newExperimentProjectId) {
     // Your implementation goes here
     printf("cloneExperiment\n");
   }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
index a744a1f..1b0a612 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.cpp
@@ -35,16 +35,18 @@ int _kResourceJobManagerTypeValues[] = {
   ResourceJobManagerType::PBS,
   ResourceJobManagerType::SLURM,
   ResourceJobManagerType::LSF,
-  ResourceJobManagerType::UGE
+  ResourceJobManagerType::UGE,
+  ResourceJobManagerType::CLOUD
 };
 const char* _kResourceJobManagerTypeNames[] = {
   "FORK",
   "PBS",
   "SLURM",
   "LSF",
-  "UGE"
+  "UGE",
+  "CLOUD"
 };
-const std::map<int, const char*> _ResourceJobManagerType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(5, _kResourceJobManagerTypeValues, _kResourceJobManagerTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
+const std::map<int, const char*> _ResourceJobManagerType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(6, _kResourceJobManagerTypeValues, _kResourceJobManagerTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL));
 
 int _kJobManagerCommandValues[] = {
   JobManagerCommand::SUBMISSION,
@@ -1389,6 +1391,10 @@ void CloudJobSubmission::__set_securityProtocol(const  ::apache::airavata::model
   this->securityProtocol = val;
 }
 
+void CloudJobSubmission::__set_jobManagerType(const ResourceJobManagerType::type val) {
+  this->jobManagerType = val;
+}
+
 void CloudJobSubmission::__set_nodeId(const std::string& val) {
   this->nodeId = val;
 }
@@ -1419,6 +1425,7 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
 
   bool isset_jobSubmissionInterfaceId = false;
   bool isset_securityProtocol = false;
+  bool isset_jobManagerType = false;
   bool isset_nodeId = false;
   bool isset_executableType = false;
   bool isset_providerName = false;
@@ -1451,6 +1458,16 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
         }
         break;
       case 3:
+        if (ftype == ::apache::thrift::protocol::T_I32) {
+          int32_t ecast49;
+          xfer += iprot->readI32(ecast49);
+          this->jobManagerType = (ResourceJobManagerType::type)ecast49;
+          isset_jobManagerType = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
+      case 4:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->nodeId);
           isset_nodeId = true;
@@ -1458,7 +1475,7 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
           xfer += iprot->skip(ftype);
         }
         break;
-      case 4:
+      case 5:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->executableType);
           isset_executableType = true;
@@ -1466,17 +1483,17 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
           xfer += iprot->skip(ftype);
         }
         break;
-      case 5:
+      case 6:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast49;
-          xfer += iprot->readI32(ecast49);
-          this->providerName = (ProviderName::type)ecast49;
+          int32_t ecast50;
+          xfer += iprot->readI32(ecast50);
+          this->providerName = (ProviderName::type)ecast50;
           isset_providerName = true;
         } else {
           xfer += iprot->skip(ftype);
         }
         break;
-      case 6:
+      case 7:
         if (ftype == ::apache::thrift::protocol::T_STRING) {
           xfer += iprot->readString(this->userAccountName);
           isset_userAccountName = true;
@@ -1497,6 +1514,8 @@ uint32_t CloudJobSubmission::read(::apache::thrift::protocol::TProtocol* iprot)
     throw TProtocolException(TProtocolException::INVALID_DATA);
   if (!isset_securityProtocol)
     throw TProtocolException(TProtocolException::INVALID_DATA);
+  if (!isset_jobManagerType)
+    throw TProtocolException(TProtocolException::INVALID_DATA);
   if (!isset_nodeId)
     throw TProtocolException(TProtocolException::INVALID_DATA);
   if (!isset_executableType)
@@ -1521,19 +1540,23 @@ uint32_t CloudJobSubmission::write(::apache::thrift::protocol::TProtocol* oprot)
   xfer += oprot->writeI32((int32_t)this->securityProtocol);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("nodeId", ::apache::thrift::protocol::T_STRING, 3);
+  xfer += oprot->writeFieldBegin("jobManagerType", ::apache::thrift::protocol::T_I32, 3);
+  xfer += oprot->writeI32((int32_t)this->jobManagerType);
+  xfer += oprot->writeFieldEnd();
+
+  xfer += oprot->writeFieldBegin("nodeId", ::apache::thrift::protocol::T_STRING, 4);
   xfer += oprot->writeString(this->nodeId);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("executableType", ::apache::thrift::protocol::T_STRING, 4);
+  xfer += oprot->writeFieldBegin("executableType", ::apache::thrift::protocol::T_STRING, 5);
   xfer += oprot->writeString(this->executableType);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("providerName", ::apache::thrift::protocol::T_I32, 5);
+  xfer += oprot->writeFieldBegin("providerName", ::apache::thrift::protocol::T_I32, 6);
   xfer += oprot->writeI32((int32_t)this->providerName);
   xfer += oprot->writeFieldEnd();
 
-  xfer += oprot->writeFieldBegin("userAccountName", ::apache::thrift::protocol::T_STRING, 6);
+  xfer += oprot->writeFieldBegin("userAccountName", ::apache::thrift::protocol::T_STRING, 7);
   xfer += oprot->writeString(this->userAccountName);
   xfer += oprot->writeFieldEnd();
 
@@ -1546,27 +1569,30 @@ void swap(CloudJobSubmission &a, CloudJobSubmission &b) {
   using ::std::swap;
   swap(a.jobSubmissionInterfaceId, b.jobSubmissionInterfaceId);
   swap(a.securityProtocol, b.securityProtocol);
+  swap(a.jobManagerType, b.jobManagerType);
   swap(a.nodeId, b.nodeId);
   swap(a.executableType, b.executableType);
   swap(a.providerName, b.providerName);
   swap(a.userAccountName, b.userAccountName);
 }
 
-CloudJobSubmission::CloudJobSubmission(const CloudJobSubmission& other50) {
-  jobSubmissionInterfaceId = other50.jobSubmissionInterfaceId;
-  securityProtocol = other50.securityProtocol;
-  nodeId = other50.nodeId;
-  executableType = other50.executableType;
-  providerName = other50.providerName;
-  userAccountName = other50.userAccountName;
-}
-CloudJobSubmission& CloudJobSubmission::operator=(const CloudJobSubmission& other51) {
+CloudJobSubmission::CloudJobSubmission(const CloudJobSubmission& other51) {
   jobSubmissionInterfaceId = other51.jobSubmissionInterfaceId;
   securityProtocol = other51.securityProtocol;
+  jobManagerType = other51.jobManagerType;
   nodeId = other51.nodeId;
   executableType = other51.executableType;
   providerName = other51.providerName;
   userAccountName = other51.userAccountName;
+}
+CloudJobSubmission& CloudJobSubmission::operator=(const CloudJobSubmission& other52) {
+  jobSubmissionInterfaceId = other52.jobSubmissionInterfaceId;
+  securityProtocol = other52.securityProtocol;
+  jobManagerType = other52.jobManagerType;
+  nodeId = other52.nodeId;
+  executableType = other52.executableType;
+  providerName = other52.providerName;
+  userAccountName = other52.userAccountName;
   return *this;
 }
 void CloudJobSubmission::printTo(std::ostream& out) const {
@@ -1574,6 +1600,7 @@ void CloudJobSubmission::printTo(std::ostream& out) const {
   out << "CloudJobSubmission(";
   out << "jobSubmissionInterfaceId=" << to_string(jobSubmissionInterfaceId);
   out << ", " << "securityProtocol=" << to_string(securityProtocol);
+  out << ", " << "jobManagerType=" << to_string(jobManagerType);
   out << ", " << "nodeId=" << to_string(nodeId);
   out << ", " << "executableType=" << to_string(executableType);
   out << ", " << "providerName=" << to_string(providerName);
@@ -1632,9 +1659,9 @@ uint32_t JobSubmissionInterface::read(::apache::thrift::protocol::TProtocol* ipr
         break;
       case 2:
         if (ftype == ::apache::thrift::protocol::T_I32) {
-          int32_t ecast52;
-          xfer += iprot->readI32(ecast52);
-          this->jobSubmissionProtocol = (JobSubmissionProtocol::type)ecast52;
+          int32_t ecast53;
+          xfer += iprot->readI32(ecast53);
+          this->jobSubmissionProtocol = (JobSubmissionProtocol::type)ecast53;
           isset_jobSubmissionProtocol = true;
         } else {
           xfer += iprot->skip(ftype);
@@ -1695,15 +1722,15 @@ void swap(JobSubmissionInterface &a, JobSubmissionInterface &b) {
   swap(a.priorityOrder, b.priorityOrder);
 }
 
-JobSubmissionInterface::JobSubmissionInterface(const JobSubmissionInterface& other53) {
-  jobSubmissionInterfaceId = other53.jobSubmissionInterfaceId;
-  jobSubmissionProtocol = other53.jobSubmissionProtocol;
-  priorityOrder = other53.priorityOrder;
-}
-JobSubmissionInterface& JobSubmissionInterface::operator=(const JobSubmissionInterface& other54) {
+JobSubmissionInterface::JobSubmissionInterface(const JobSubmissionInterface& other54) {
   jobSubmissionInterfaceId = other54.jobSubmissionInterfaceId;
   jobSubmissionProtocol = other54.jobSubmissionProtocol;
   priorityOrder = other54.priorityOrder;
+}
+JobSubmissionInterface& JobSubmissionInterface::operator=(const JobSubmissionInterface& other55) {
+  jobSubmissionInterfaceId = other55.jobSubmissionInterfaceId;
+  jobSubmissionProtocol = other55.jobSubmissionProtocol;
+  priorityOrder = other55.priorityOrder;
   return *this;
 }
 void JobSubmissionInterface::printTo(std::ostream& out) const {
@@ -1831,14 +1858,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->hostAliases.clear();
-            uint32_t _size55;
-            ::apache::thrift::protocol::TType _etype58;
-            xfer += iprot->readListBegin(_etype58, _size55);
-            this->hostAliases.resize(_size55);
-            uint32_t _i59;
-            for (_i59 = 0; _i59 < _size55; ++_i59)
+            uint32_t _size56;
+            ::apache::thrift::protocol::TType _etype59;
+            xfer += iprot->readListBegin(_etype59, _size56);
+            this->hostAliases.resize(_size56);
+            uint32_t _i60;
+            for (_i60 = 0; _i60 < _size56; ++_i60)
             {
-              xfer += iprot->readString(this->hostAliases[_i59]);
+              xfer += iprot->readString(this->hostAliases[_i60]);
             }
             xfer += iprot->readListEnd();
           }
@@ -1851,14 +1878,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->ipAddresses.clear();
-            uint32_t _size60;
-            ::apache::thrift::protocol::TType _etype63;
-            xfer += iprot->readListBegin(_etype63, _size60);
-            this->ipAddresses.resize(_size60);
-            uint32_t _i64;
-            for (_i64 = 0; _i64 < _size60; ++_i64)
+            uint32_t _size61;
+            ::apache::thrift::protocol::TType _etype64;
+            xfer += iprot->readListBegin(_etype64, _size61);
+            this->ipAddresses.resize(_size61);
+            uint32_t _i65;
+            for (_i65 = 0; _i65 < _size61; ++_i65)
             {
-              xfer += iprot->readString(this->ipAddresses[_i64]);
+              xfer += iprot->readString(this->ipAddresses[_i65]);
             }
             xfer += iprot->readListEnd();
           }
@@ -1887,14 +1914,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->batchQueues.clear();
-            uint32_t _size65;
-            ::apache::thrift::protocol::TType _etype68;
-            xfer += iprot->readListBegin(_etype68, _size65);
-            this->batchQueues.resize(_size65);
-            uint32_t _i69;
-            for (_i69 = 0; _i69 < _size65; ++_i69)
+            uint32_t _size66;
+            ::apache::thrift::protocol::TType _etype69;
+            xfer += iprot->readListBegin(_etype69, _size66);
+            this->batchQueues.resize(_size66);
+            uint32_t _i70;
+            for (_i70 = 0; _i70 < _size66; ++_i70)
             {
-              xfer += this->batchQueues[_i69].read(iprot);
+              xfer += this->batchQueues[_i70].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1907,19 +1934,19 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_MAP) {
           {
             this->fileSystems.clear();
-            uint32_t _size70;
-            ::apache::thrift::protocol::TType _ktype71;
-            ::apache::thrift::protocol::TType _vtype72;
-            xfer += iprot->readMapBegin(_ktype71, _vtype72, _size70);
-            uint32_t _i74;
-            for (_i74 = 0; _i74 < _size70; ++_i74)
+            uint32_t _size71;
+            ::apache::thrift::protocol::TType _ktype72;
+            ::apache::thrift::protocol::TType _vtype73;
+            xfer += iprot->readMapBegin(_ktype72, _vtype73, _size71);
+            uint32_t _i75;
+            for (_i75 = 0; _i75 < _size71; ++_i75)
             {
-              FileSystems::type _key75;
-              int32_t ecast77;
-              xfer += iprot->readI32(ecast77);
-              _key75 = (FileSystems::type)ecast77;
-              std::string& _val76 = this->fileSystems[_key75];
-              xfer += iprot->readString(_val76);
+              FileSystems::type _key76;
+              int32_t ecast78;
+              xfer += iprot->readI32(ecast78);
+              _key76 = (FileSystems::type)ecast78;
+              std::string& _val77 = this->fileSystems[_key76];
+              xfer += iprot->readString(_val77);
             }
             xfer += iprot->readMapEnd();
           }
@@ -1932,14 +1959,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->jobSubmissionInterfaces.clear();
-            uint32_t _size78;
-            ::apache::thrift::protocol::TType _etype81;
-            xfer += iprot->readListBegin(_etype81, _size78);
-            this->jobSubmissionInterfaces.resize(_size78);
-            uint32_t _i82;
-            for (_i82 = 0; _i82 < _size78; ++_i82)
+            uint32_t _size79;
+            ::apache::thrift::protocol::TType _etype82;
+            xfer += iprot->readListBegin(_etype82, _size79);
+            this->jobSubmissionInterfaces.resize(_size79);
+            uint32_t _i83;
+            for (_i83 = 0; _i83 < _size79; ++_i83)
             {
-              xfer += this->jobSubmissionInterfaces[_i82].read(iprot);
+              xfer += this->jobSubmissionInterfaces[_i83].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -1952,14 +1979,14 @@ uint32_t ComputeResourceDescription::read(::apache::thrift::protocol::TProtocol*
         if (ftype == ::apache::thrift::protocol::T_LIST) {
           {
             this->dataMovementInterfaces.clear();
-            uint32_t _size83;
-            ::apache::thrift::protocol::TType _etype86;
-            xfer += iprot->readListBegin(_etype86, _size83);
-            this->dataMovementInterfaces.resize(_size83);
-            uint32_t _i87;
-            for (_i87 = 0; _i87 < _size83; ++_i87)
+            uint32_t _size84;
+            ::apache::thrift::protocol::TType _etype87;
+            xfer += iprot->readListBegin(_etype87, _size84);
+            this->dataMovementInterfaces.resize(_size84);
+            uint32_t _i88;
+            for (_i88 = 0; _i88 < _size84; ++_i88)
             {
-              xfer += this->dataMovementInterfaces[_i87].read(iprot);
+              xfer += this->dataMovementInterfaces[_i88].read(iprot);
             }
             xfer += iprot->readListEnd();
           }
@@ -2033,10 +2060,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("hostAliases", ::apache::thrift::protocol::T_LIST, 3);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->hostAliases.size()));
-      std::vector<std::string> ::const_iterator _iter88;
-      for (_iter88 = this->hostAliases.begin(); _iter88 != this->hostAliases.end(); ++_iter88)
+      std::vector<std::string> ::const_iterator _iter89;
+      for (_iter89 = this->hostAliases.begin(); _iter89 != this->hostAliases.end(); ++_iter89)
       {
-        xfer += oprot->writeString((*_iter88));
+        xfer += oprot->writeString((*_iter89));
       }
       xfer += oprot->writeListEnd();
     }
@@ -2046,10 +2073,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("ipAddresses", ::apache::thrift::protocol::T_LIST, 4);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->ipAddresses.size()));
-      std::vector<std::string> ::const_iterator _iter89;
-      for (_iter89 = this->ipAddresses.begin(); _iter89 != this->ipAddresses.end(); ++_iter89)
+      std::vector<std::string> ::const_iterator _iter90;
+      for (_iter90 = this->ipAddresses.begin(); _iter90 != this->ipAddresses.end(); ++_iter90)
       {
-        xfer += oprot->writeString((*_iter89));
+        xfer += oprot->writeString((*_iter90));
       }
       xfer += oprot->writeListEnd();
     }
@@ -2069,10 +2096,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("batchQueues", ::apache::thrift::protocol::T_LIST, 7);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->batchQueues.size()));
-      std::vector<BatchQueue> ::const_iterator _iter90;
-      for (_iter90 = this->batchQueues.begin(); _iter90 != this->batchQueues.end(); ++_iter90)
+      std::vector<BatchQueue> ::const_iterator _iter91;
+      for (_iter91 = this->batchQueues.begin(); _iter91 != this->batchQueues.end(); ++_iter91)
       {
-        xfer += (*_iter90).write(oprot);
+        xfer += (*_iter91).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2082,11 +2109,11 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("fileSystems", ::apache::thrift::protocol::T_MAP, 8);
     {
       xfer += oprot->writeMapBegin(::apache::thrift::protocol::T_I32, ::apache::thrift::protocol::T_STRING, static_cast<uint32_t>(this->fileSystems.size()));
-      std::map<FileSystems::type, std::string> ::const_iterator _iter91;
-      for (_iter91 = this->fileSystems.begin(); _iter91 != this->fileSystems.end(); ++_iter91)
+      std::map<FileSystems::type, std::string> ::const_iterator _iter92;
+      for (_iter92 = this->fileSystems.begin(); _iter92 != this->fileSystems.end(); ++_iter92)
       {
-        xfer += oprot->writeI32((int32_t)_iter91->first);
-        xfer += oprot->writeString(_iter91->second);
+        xfer += oprot->writeI32((int32_t)_iter92->first);
+        xfer += oprot->writeString(_iter92->second);
       }
       xfer += oprot->writeMapEnd();
     }
@@ -2096,10 +2123,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("jobSubmissionInterfaces", ::apache::thrift::protocol::T_LIST, 9);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->jobSubmissionInterfaces.size()));
-      std::vector<JobSubmissionInterface> ::const_iterator _iter92;
-      for (_iter92 = this->jobSubmissionInterfaces.begin(); _iter92 != this->jobSubmissionInterfaces.end(); ++_iter92)
+      std::vector<JobSubmissionInterface> ::const_iterator _iter93;
+      for (_iter93 = this->jobSubmissionInterfaces.begin(); _iter93 != this->jobSubmissionInterfaces.end(); ++_iter93)
       {
-        xfer += (*_iter92).write(oprot);
+        xfer += (*_iter93).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2109,10 +2136,10 @@ uint32_t ComputeResourceDescription::write(::apache::thrift::protocol::TProtocol
     xfer += oprot->writeFieldBegin("dataMovementInterfaces", ::apache::thrift::protocol::T_LIST, 10);
     {
       xfer += oprot->writeListBegin(::apache::thrift::protocol::T_STRUCT, static_cast<uint32_t>(this->dataMovementInterfaces.size()));
-      std::vector< ::apache::airavata::model::data::movement::DataMovementInterface> ::const_iterator _iter93;
-      for (_iter93 = this->dataMovementInterfaces.begin(); _iter93 != this->dataMovementInterfaces.end(); ++_iter93)
+      std::vector< ::apache::airavata::model::data::movement::DataMovementInterface> ::const_iterator _iter94;
+      for (_iter94 = this->dataMovementInterfaces.begin(); _iter94 != this->dataMovementInterfaces.end(); ++_iter94)
       {
-        xfer += (*_iter93).write(oprot);
+        xfer += (*_iter94).write(oprot);
       }
       xfer += oprot->writeListEnd();
     }
@@ -2162,24 +2189,7 @@ void swap(ComputeResourceDescription &a, ComputeResourceDescription &b) {
   swap(a.__isset, b.__isset);
 }
 
-ComputeResourceDescription::ComputeResourceDescription(const ComputeResourceDescription& other94) {
-  computeResourceId = other94.computeResourceId;
-  hostName = other94.hostName;
-  hostAliases = other94.hostAliases;
-  ipAddresses = other94.ipAddresses;
-  resourceDescription = other94.resourceDescription;
-  enabled = other94.enabled;
-  batchQueues = other94.batchQueues;
-  fileSystems = other94.fileSystems;
-  jobSubmissionInterfaces = other94.jobSubmissionInterfaces;
-  dataMovementInterfaces = other94.dataMovementInterfaces;
-  maxMemoryPerNode = other94.maxMemoryPerNode;
-  gatewayUsageReporting = other94.gatewayUsageReporting;
-  gatewayUsageModuleLoadCommand = other94.gatewayUsageModuleLoadCommand;
-  gatewayUsageExecutable = other94.gatewayUsageExecutable;
-  __isset = other94.__isset;
-}
-ComputeResourceDescription& ComputeResourceDescription::operator=(const ComputeResourceDescription& other95) {
+ComputeResourceDescription::ComputeResourceDescription(const ComputeResourceDescription& other95) {
   computeResourceId = other95.computeResourceId;
   hostName = other95.hostName;
   hostAliases = other95.hostAliases;
@@ -2195,6 +2205,23 @@ ComputeResourceDescription& ComputeResourceDescription::operator=(const ComputeR
   gatewayUsageModuleLoadCommand = other95.gatewayUsageModuleLoadCommand;
   gatewayUsageExecutable = other95.gatewayUsageExecutable;
   __isset = other95.__isset;
+}
+ComputeResourceDescription& ComputeResourceDescription::operator=(const ComputeResourceDescription& other96) {
+  computeResourceId = other96.computeResourceId;
+  hostName = other96.hostName;
+  hostAliases = other96.hostAliases;
+  ipAddresses = other96.ipAddresses;
+  resourceDescription = other96.resourceDescription;
+  enabled = other96.enabled;
+  batchQueues = other96.batchQueues;
+  fileSystems = other96.fileSystems;
+  jobSubmissionInterfaces = other96.jobSubmissionInterfaces;
+  dataMovementInterfaces = other96.dataMovementInterfaces;
+  maxMemoryPerNode = other96.maxMemoryPerNode;
+  gatewayUsageReporting = other96.gatewayUsageReporting;
+  gatewayUsageModuleLoadCommand = other96.gatewayUsageModuleLoadCommand;
+  gatewayUsageExecutable = other96.gatewayUsageExecutable;
+  __isset = other96.__isset;
   return *this;
 }
 void ComputeResourceDescription::printTo(std::ostream& out) const {

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
index 89566a0..479d828 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/compute_resource_model_types.h
@@ -45,7 +45,8 @@ struct ResourceJobManagerType {
     PBS = 1,
     SLURM = 2,
     LSF = 3,
-    UGE = 4
+    UGE = 4,
+    CLOUD = 5
   };
 };
 
@@ -599,12 +600,13 @@ class CloudJobSubmission {
 
   CloudJobSubmission(const CloudJobSubmission&);
   CloudJobSubmission& operator=(const CloudJobSubmission&);
-  CloudJobSubmission() : jobSubmissionInterfaceId("DO_NOT_SET_AT_CLIENTS"), securityProtocol(( ::apache::airavata::model::data::movement::SecurityProtocol::type)0), nodeId(), executableType(), providerName((ProviderName::type)0), userAccountName() {
+  CloudJobSubmission() : jobSubmissionInterfaceId("DO_NOT_SET_AT_CLIENTS"), securityProtocol(( ::apache::airavata::model::data::movement::SecurityProtocol::type)0), jobManagerType((ResourceJobManagerType::type)0), nodeId(), executableType(), providerName((ProviderName::type)0), userAccountName() {
   }
 
   virtual ~CloudJobSubmission() throw();
   std::string jobSubmissionInterfaceId;
    ::apache::airavata::model::data::movement::SecurityProtocol::type securityProtocol;
+  ResourceJobManagerType::type jobManagerType;
   std::string nodeId;
   std::string executableType;
   ProviderName::type providerName;
@@ -614,6 +616,8 @@ class CloudJobSubmission {
 
   void __set_securityProtocol(const  ::apache::airavata::model::data::movement::SecurityProtocol::type val);
 
+  void __set_jobManagerType(const ResourceJobManagerType::type val);
+
   void __set_nodeId(const std::string& val);
 
   void __set_executableType(const std::string& val);
@@ -628,6 +632,8 @@ class CloudJobSubmission {
       return false;
     if (!(securityProtocol == rhs.securityProtocol))
       return false;
+    if (!(jobManagerType == rhs.jobManagerType))
+      return false;
     if (!(nodeId == rhs.nodeId))
       return false;
     if (!(executableType == rhs.executableType))

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
index 39acd3c..63cc404 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/ComputeResource/Types.php
@@ -42,12 +42,14 @@ final class ResourceJobManagerType {
   const SLURM = 2;
   const LSF = 3;
   const UGE = 4;
+  const CLOUD = 5;
   static public $__names = array(
     0 => 'FORK',
     1 => 'PBS',
     2 => 'SLURM',
     3 => 'LSF',
     4 => 'UGE',
+    5 => 'CLOUD',
   );
 }
 
@@ -1484,6 +1486,10 @@ class CloudJobSubmission {
    */
   public $securityProtocol = null;
   /**
+   * @var int
+   */
+  public $jobManagerType = null;
+  /**
    * @var string
    */
   public $nodeId = null;
@@ -1512,18 +1518,22 @@ class CloudJobSubmission {
           'type' => TType::I32,
           ),
         3 => array(
+          'var' => 'jobManagerType',
+          'type' => TType::I32,
+          ),
+        4 => array(
           'var' => 'nodeId',
           'type' => TType::STRING,
           ),
-        4 => array(
+        5 => array(
           'var' => 'executableType',
           'type' => TType::STRING,
           ),
-        5 => array(
+        6 => array(
           'var' => 'providerName',
           'type' => TType::I32,
           ),
-        6 => array(
+        7 => array(
           'var' => 'userAccountName',
           'type' => TType::STRING,
           ),
@@ -1536,6 +1546,9 @@ class CloudJobSubmission {
       if (isset($vals['securityProtocol'])) {
         $this->securityProtocol = $vals['securityProtocol'];
       }
+      if (isset($vals['jobManagerType'])) {
+        $this->jobManagerType = $vals['jobManagerType'];
+      }
       if (isset($vals['nodeId'])) {
         $this->nodeId = $vals['nodeId'];
       }
@@ -1585,27 +1598,34 @@ class CloudJobSubmission {
           }
           break;
         case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->jobManagerType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->nodeId);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 4:
+        case 5:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->executableType);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 5:
+        case 6:
           if ($ftype == TType::I32) {
             $xfer += $input->readI32($this->providerName);
           } else {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 6:
+        case 7:
           if ($ftype == TType::STRING) {
             $xfer += $input->readString($this->userAccountName);
           } else {
@@ -1635,23 +1655,28 @@ class CloudJobSubmission {
       $xfer += $output->writeI32($this->securityProtocol);
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->jobManagerType !== null) {
+      $xfer += $output->writeFieldBegin('jobManagerType', TType::I32, 3);
+      $xfer += $output->writeI32($this->jobManagerType);
+      $xfer += $output->writeFieldEnd();
+    }
     if ($this->nodeId !== null) {
-      $xfer += $output->writeFieldBegin('nodeId', TType::STRING, 3);
+      $xfer += $output->writeFieldBegin('nodeId', TType::STRING, 4);
       $xfer += $output->writeString($this->nodeId);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->executableType !== null) {
-      $xfer += $output->writeFieldBegin('executableType', TType::STRING, 4);
+      $xfer += $output->writeFieldBegin('executableType', TType::STRING, 5);
       $xfer += $output->writeString($this->executableType);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->providerName !== null) {
-      $xfer += $output->writeFieldBegin('providerName', TType::I32, 5);
+      $xfer += $output->writeFieldBegin('providerName', TType::I32, 6);
       $xfer += $output->writeI32($this->providerName);
       $xfer += $output->writeFieldEnd();
     }
     if ($this->userAccountName !== null) {
-      $xfer += $output->writeFieldBegin('userAccountName', TType::STRING, 6);
+      $xfer += $output->writeFieldBegin('userAccountName', TType::STRING, 7);
       $xfer += $output->writeString($this->userAccountName);
       $xfer += $output->writeFieldEnd();
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
index b2bd563..8a66c88 100755
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata-remote
@@ -72,7 +72,7 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
   print('   getIntermediateOutputs(AuthzToken authzToken, string airavataExperimentId)')
   print('   getJobStatuses(AuthzToken authzToken, string airavataExperimentId)')
   print('   getJobDetails(AuthzToken authzToken, string airavataExperimentId)')
-  print('  string cloneExperiment(AuthzToken authzToken, string existingExperimentID, string newExperimentName)')
+  print('  string cloneExperiment(AuthzToken authzToken, string existingExperimentID, string newExperimentName, string newExperimentProjectId)')
   print('  void terminateExperiment(AuthzToken authzToken, string airavataExperimentId, string gatewayId)')
   print('  string registerApplicationModule(AuthzToken authzToken, string gatewayId, ApplicationModule applicationModule)')
   print('  ApplicationModule getApplicationModule(AuthzToken authzToken, string appModuleId)')
@@ -536,10 +536,10 @@ elif cmd == 'getJobDetails':
   pp.pprint(client.getJobDetails(eval(args[0]),args[1],))
 
 elif cmd == 'cloneExperiment':
-  if len(args) != 3:
-    print('cloneExperiment requires 3 args')
+  if len(args) != 4:
+    print('cloneExperiment requires 4 args')
     sys.exit(1)
-  pp.pprint(client.cloneExperiment(eval(args[0]),args[1],args[2],))
+  pp.pprint(client.cloneExperiment(eval(args[0]),args[1],args[2],args[3],))
 
 elif cmd == 'terminateExperiment':
   if len(args) != 3:

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
index e0188bf..d43bdf8 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
@@ -1086,7 +1086,7 @@ class Iface:
     """
     pass
 
-  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName):
+  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId):
     """
 
     Clone an Existing Experiment
@@ -1100,6 +1100,9 @@ class Iface:
        Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
          the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
          should be shared public by default.
+    @param newExperimentProjectId
+       The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+         in the same project as the existing experiment.
 
     @return
       The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -1132,6 +1135,7 @@ class Iface:
      - authzToken
      - existingExperimentID
      - newExperimentName
+     - newExperimentProjectId
     """
     pass
 
@@ -6031,7 +6035,7 @@ class Client(Iface):
       raise result.ae
     raise TApplicationException(TApplicationException.MISSING_RESULT, "getJobDetails failed: unknown result")
 
-  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName):
+  def cloneExperiment(self, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId):
     """
 
     Clone an Existing Experiment
@@ -6045,6 +6049,9 @@ class Client(Iface):
        Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
          the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
          should be shared public by default.
+    @param newExperimentProjectId
+       The project in which to create the cloned experiment. This is optional and if null the experiment will be created
+         in the same project as the existing experiment.
 
     @return
       The server-side generated.airavata.registry.core.experiment.globally unique identifier (Experiment ID) for the newly cloned experiment.
@@ -6077,16 +6084,18 @@ class Client(Iface):
      - authzToken
      - existingExperimentID
      - newExperimentName
+     - newExperimentProjectId
     """
-    self.send_cloneExperiment(authzToken, existingExperimentID, newExperimentName)
+    self.send_cloneExperiment(authzToken, existingExperimentID, newExperimentName, newExperimentProjectId)
     return self.recv_cloneExperiment()
 
-  def send_cloneExperiment(self, authzToken, existingExperimentID, newExperimentName):
+  def send_cloneExperiment(self, authzToken, existingExperimentID, newExperimentName, newExperimentProjectId):
     self._oprot.writeMessageBegin('cloneExperiment', TMessageType.CALL, self._seqid)
     args = cloneExperiment_args()
     args.authzToken = authzToken
     args.existingExperimentID = existingExperimentID
     args.newExperimentName = newExperimentName
+    args.newExperimentProjectId = newExperimentProjectId
     args.write(self._oprot)
     self._oprot.writeMessageEnd()
     self._oprot.trans.flush()
@@ -6114,6 +6123,8 @@ class Client(Iface):
       raise result.ase
     if result.ae is not None:
       raise result.ae
+    if result.pnfe is not None:
+      raise result.pnfe
     raise TApplicationException(TApplicationException.MISSING_RESULT, "cloneExperiment failed: unknown result")
 
   def terminateExperiment(self, authzToken, airavataExperimentId, gatewayId):
@@ -13989,7 +14000,7 @@ class Processor(Iface, TProcessor):
     iprot.readMessageEnd()
     result = cloneExperiment_result()
     try:
-      result.success = self._handler.cloneExperiment(args.authzToken, args.existingExperimentID, args.newExperimentName)
+      result.success = self._handler.cloneExperiment(args.authzToken, args.existingExperimentID, args.newExperimentName, args.newExperimentProjectId)
       msg_type = TMessageType.REPLY
     except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
       raise
@@ -14008,6 +14019,9 @@ class Processor(Iface, TProcessor):
     except apache.airavata.api.error.ttypes.AuthorizationException as ae:
       msg_type = TMessageType.REPLY
       result.ae = ae
+    except apache.airavata.api.error.ttypes.ProjectNotFoundException as pnfe:
+      msg_type = TMessageType.REPLY
+      result.pnfe = pnfe
     except Exception as ex:
       msg_type = TMessageType.EXCEPTION
       logging.exception(ex)
@@ -28093,6 +28107,7 @@ class cloneExperiment_args:
    - authzToken
    - existingExperimentID
    - newExperimentName
+   - newExperimentProjectId
   """
 
   thrift_spec = (
@@ -28100,12 +28115,14 @@ class cloneExperiment_args:
     (1, TType.STRUCT, 'authzToken', (apache.airavata.model.security.ttypes.AuthzToken, apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
     (2, TType.STRING, 'existingExperimentID', None, None, ), # 2
     (3, TType.STRING, 'newExperimentName', None, None, ), # 3
+    (4, TType.STRING, 'newExperimentProjectId', None, None, ), # 4
   )
 
-  def __init__(self, authzToken=None, existingExperimentID=None, newExperimentName=None,):
+  def __init__(self, authzToken=None, existingExperimentID=None, newExperimentName=None, newExperimentProjectId=None,):
     self.authzToken = authzToken
     self.existingExperimentID = existingExperimentID
     self.newExperimentName = newExperimentName
+    self.newExperimentProjectId = newExperimentProjectId
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
@@ -28132,6 +28149,11 @@ class cloneExperiment_args:
           self.newExperimentName = iprot.readString()
         else:
           iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.STRING:
+          self.newExperimentProjectId = iprot.readString()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -28154,6 +28176,10 @@ class cloneExperiment_args:
       oprot.writeFieldBegin('newExperimentName', TType.STRING, 3)
       oprot.writeString(self.newExperimentName)
       oprot.writeFieldEnd()
+    if self.newExperimentProjectId is not None:
+      oprot.writeFieldBegin('newExperimentProjectId', TType.STRING, 4)
+      oprot.writeString(self.newExperimentProjectId)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -28168,6 +28194,7 @@ class cloneExperiment_args:
     value = (value * 31) ^ hash(self.authzToken)
     value = (value * 31) ^ hash(self.existingExperimentID)
     value = (value * 31) ^ hash(self.newExperimentName)
+    value = (value * 31) ^ hash(self.newExperimentProjectId)
     return value
 
   def __repr__(self):
@@ -28190,6 +28217,7 @@ class cloneExperiment_result:
    - ace
    - ase
    - ae
+   - pnfe
   """
 
   thrift_spec = (
@@ -28199,15 +28227,17 @@ class cloneExperiment_result:
     (3, TType.STRUCT, 'ace', (apache.airavata.api.error.ttypes.AiravataClientException, apache.airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ), # 3
     (4, TType.STRUCT, 'ase', (apache.airavata.api.error.ttypes.AiravataSystemException, apache.airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ), # 4
     (5, TType.STRUCT, 'ae', (apache.airavata.api.error.ttypes.AuthorizationException, apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), # 5
+    (6, TType.STRUCT, 'pnfe', (apache.airavata.api.error.ttypes.ProjectNotFoundException, apache.airavata.api.error.ttypes.ProjectNotFoundException.thrift_spec), None, ), # 6
   )
 
-  def __init__(self, success=None, ire=None, enf=None, ace=None, ase=None, ae=None,):
+  def __init__(self, success=None, ire=None, enf=None, ace=None, ase=None, ae=None, pnfe=None,):
     self.success = success
     self.ire = ire
     self.enf = enf
     self.ace = ace
     self.ase = ase
     self.ae = ae
+    self.pnfe = pnfe
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
@@ -28253,6 +28283,12 @@ class cloneExperiment_result:
           self.ae.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.STRUCT:
+          self.pnfe = apache.airavata.api.error.ttypes.ProjectNotFoundException()
+          self.pnfe.read(iprot)
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -28287,6 +28323,10 @@ class cloneExperiment_result:
       oprot.writeFieldBegin('ae', TType.STRUCT, 5)
       self.ae.write(oprot)
       oprot.writeFieldEnd()
+    if self.pnfe is not None:
+      oprot.writeFieldBegin('pnfe', TType.STRUCT, 6)
+      self.pnfe.write(oprot)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -28302,6 +28342,7 @@ class cloneExperiment_result:
     value = (value * 31) ^ hash(self.ace)
     value = (value * 31) ^ hash(self.ase)
     value = (value * 31) ^ hash(self.ae)
+    value = (value * 31) ^ hash(self.pnfe)
     return value
 
   def __repr__(self):

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
index 174d3b8..b86ac9a 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/computeresource/ttypes.py
@@ -45,6 +45,7 @@ class ResourceJobManagerType:
   SLURM = 2
   LSF = 3
   UGE = 4
+  CLOUD = 5
 
   _VALUES_TO_NAMES = {
     0: "FORK",
@@ -52,6 +53,7 @@ class ResourceJobManagerType:
     2: "SLURM",
     3: "LSF",
     4: "UGE",
+    5: "CLOUD",
   }
 
   _NAMES_TO_VALUES = {
@@ -60,6 +62,7 @@ class ResourceJobManagerType:
     "SLURM": 2,
     "LSF": 3,
     "UGE": 4,
+    "CLOUD": 5,
   }
 
 class JobManagerCommand:
@@ -1137,6 +1140,7 @@ class CloudJobSubmission:
   Attributes:
    - jobSubmissionInterfaceId
    - securityProtocol
+   - jobManagerType
    - nodeId
    - executableType
    - providerName
@@ -1147,15 +1151,17 @@ class CloudJobSubmission:
     None, # 0
     (1, TType.STRING, 'jobSubmissionInterfaceId', None, "DO_NOT_SET_AT_CLIENTS", ), # 1
     (2, TType.I32, 'securityProtocol', None, None, ), # 2
-    (3, TType.STRING, 'nodeId', None, None, ), # 3
-    (4, TType.STRING, 'executableType', None, None, ), # 4
-    (5, TType.I32, 'providerName', None, None, ), # 5
-    (6, TType.STRING, 'userAccountName', None, None, ), # 6
+    (3, TType.I32, 'jobManagerType', None, None, ), # 3
+    (4, TType.STRING, 'nodeId', None, None, ), # 4
+    (5, TType.STRING, 'executableType', None, None, ), # 5
+    (6, TType.I32, 'providerName', None, None, ), # 6
+    (7, TType.STRING, 'userAccountName', None, None, ), # 7
   )
 
-  def __init__(self, jobSubmissionInterfaceId=thrift_spec[1][4], securityProtocol=None, nodeId=None, executableType=None, providerName=None, userAccountName=None,):
+  def __init__(self, jobSubmissionInterfaceId=thrift_spec[1][4], securityProtocol=None, jobManagerType=None, nodeId=None, executableType=None, providerName=None, userAccountName=None,):
     self.jobSubmissionInterfaceId = jobSubmissionInterfaceId
     self.securityProtocol = securityProtocol
+    self.jobManagerType = jobManagerType
     self.nodeId = nodeId
     self.executableType = executableType
     self.providerName = providerName
@@ -1181,21 +1187,26 @@ class CloudJobSubmission:
         else:
           iprot.skip(ftype)
       elif fid == 3:
+        if ftype == TType.I32:
+          self.jobManagerType = iprot.readI32()
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
         if ftype == TType.STRING:
           self.nodeId = iprot.readString()
         else:
           iprot.skip(ftype)
-      elif fid == 4:
+      elif fid == 5:
         if ftype == TType.STRING:
           self.executableType = iprot.readString()
         else:
           iprot.skip(ftype)
-      elif fid == 5:
+      elif fid == 6:
         if ftype == TType.I32:
           self.providerName = iprot.readI32()
         else:
           iprot.skip(ftype)
-      elif fid == 6:
+      elif fid == 7:
         if ftype == TType.STRING:
           self.userAccountName = iprot.readString()
         else:
@@ -1218,20 +1229,24 @@ class CloudJobSubmission:
       oprot.writeFieldBegin('securityProtocol', TType.I32, 2)
       oprot.writeI32(self.securityProtocol)
       oprot.writeFieldEnd()
+    if self.jobManagerType is not None:
+      oprot.writeFieldBegin('jobManagerType', TType.I32, 3)
+      oprot.writeI32(self.jobManagerType)
+      oprot.writeFieldEnd()
     if self.nodeId is not None:
-      oprot.writeFieldBegin('nodeId', TType.STRING, 3)
+      oprot.writeFieldBegin('nodeId', TType.STRING, 4)
       oprot.writeString(self.nodeId)
       oprot.writeFieldEnd()
     if self.executableType is not None:
-      oprot.writeFieldBegin('executableType', TType.STRING, 4)
+      oprot.writeFieldBegin('executableType', TType.STRING, 5)
       oprot.writeString(self.executableType)
       oprot.writeFieldEnd()
     if self.providerName is not None:
-      oprot.writeFieldBegin('providerName', TType.I32, 5)
+      oprot.writeFieldBegin('providerName', TType.I32, 6)
       oprot.writeI32(self.providerName)
       oprot.writeFieldEnd()
     if self.userAccountName is not None:
-      oprot.writeFieldBegin('userAccountName', TType.STRING, 6)
+      oprot.writeFieldBegin('userAccountName', TType.STRING, 7)
       oprot.writeString(self.userAccountName)
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -1242,6 +1257,8 @@ class CloudJobSubmission:
       raise TProtocol.TProtocolException(message='Required field jobSubmissionInterfaceId is unset!')
     if self.securityProtocol is None:
       raise TProtocol.TProtocolException(message='Required field securityProtocol is unset!')
+    if self.jobManagerType is None:
+      raise TProtocol.TProtocolException(message='Required field jobManagerType is unset!')
     if self.nodeId is None:
       raise TProtocol.TProtocolException(message='Required field nodeId is unset!')
     if self.executableType is None:
@@ -1257,6 +1274,7 @@ class CloudJobSubmission:
     value = 17
     value = (value * 31) ^ hash(self.jobSubmissionInterfaceId)
     value = (value * 31) ^ hash(self.securityProtocol)
+    value = (value * 31) ^ hash(self.jobManagerType)
     value = (value * 31) ^ hash(self.nodeId)
     value = (value * 31) ^ hash(self.executableType)
     value = (value * 31) ^ hash(self.providerName)

http://git-wip-us.apache.org/repos/asf/airavata/blob/9f3810ef/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
index 682ab2d..67dfc20 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/computeresource/BatchQueue.java
@@ -23,15 +23,32 @@
  */
 package org.apache.airavata.model.appcatalog.computeresource;
 
-import org.apache.thrift.EncodingUtils;
-import org.apache.thrift.protocol.TTupleProtocol;
 import org.apache.thrift.scheme.IScheme;
 import org.apache.thrift.scheme.SchemeFactory;
 import org.apache.thrift.scheme.StandardScheme;
-import org.apache.thrift.scheme.TupleScheme;
 
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
 import javax.annotation.Generated;
-import java.util.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
 /**