You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2021/06/01 17:58:48 UTC

[airavata-data-lake] 05/46: Initial framework for orchestrator API

This is an automated email from the ASF dual-hosted git repository.

isjarana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git

commit 5c072e3b648a1b56f7aa19910764f83df6ca3f14
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Tue Jan 5 04:51:42 2021 -0500

    Initial framework for orchestrator API
---
 data-orchestrator/data-orchestrator-api/pom.xml    |  51 ++++++++++
 .../datalake/orchestrator/api/Application.java     |   7 ++
 .../HookController.java}                           |   7 +-
 .../api/controller/TransferController.java         |  48 +++++++++
 .../api/controller/remote/SFTPController.java      |  57 +++++++++++
 .../orchestrator/api/model/TransferEntry.java      |  75 ++++++++++++++
 .../api/model/remote/SFTPCredential.java           | 110 +++++++++++++++++++++
 .../orchestrator/api/model/remote/SFTPRemote.java  |  73 ++++++++++++++
 data-orchestrator/pom.xml                          |  21 ++++
 9 files changed, 444 insertions(+), 5 deletions(-)

diff --git a/data-orchestrator/data-orchestrator-api/pom.xml b/data-orchestrator/data-orchestrator-api/pom.xml
index 720bd6c..c840c04 100644
--- a/data-orchestrator/data-orchestrator-api/pom.xml
+++ b/data-orchestrator/data-orchestrator-api/pom.xml
@@ -1,4 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -11,5 +32,35 @@
 
     <artifactId>data-orchestrator-api</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+            <version>2.4.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.4.1</version>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>
\ No newline at end of file
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
index dc91369..df78fc2 100644
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
@@ -19,8 +19,15 @@
  */
 package org.apache.airavata.datalake.orchestrator.api;
 
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
 /**
  * TODO: Spring Boot API
  */
+@SpringBootApplication
 public class Application {
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class, args);
+    }
 }
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
similarity index 87%
copy from data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
copy to data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
index dc91369..c171681 100644
--- a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/Application.java
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/HookController.java
@@ -17,10 +17,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.airavata.datalake.orchestrator.api;
+package org.apache.airavata.datalake.orchestrator.api.controller;
 
-/**
- * TODO: Spring Boot API
- */
-public class Application {
+public class HookController {
 }
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java
new file mode 100644
index 0000000..5e5b04c
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/TransferController.java
@@ -0,0 +1,48 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.datalake.orchestrator.api.controller;
+
+import org.apache.airavata.datalake.orchestrator.api.model.TransferEntry;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(path = "/transfer")
+public class TransferController {
+
+    @PostMapping(path = "")
+    public String createTransfer(@RequestBody TransferEntry transferEntry) {
+        return "transfer-id";
+    }
+
+    @GetMapping(path = "/start/{transferId}")
+    public String startTransfer(@PathVariable(name = "transferId") String transferId) {
+        return "trackingId";
+    }
+
+    @GetMapping(path = "/track/{trackingId}")
+    public String trackTransfer(@PathVariable(name = "trackingId") String trackingId) {
+        return "RUNNING";
+    }
+
+    @GetMapping(path = "/cancel/{trackingId}")
+    public String cancelTransfer(@PathVariable(name = "trackingId") String trackingId) {
+        return "CANCELLED";
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
new file mode 100644
index 0000000..5492889
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/controller/remote/SFTPController.java
@@ -0,0 +1,57 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.datalake.orchestrator.api.controller.remote;
+
+import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPCredential;
+import org.apache.airavata.datalake.orchestrator.api.model.remote.SFTPRemote;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping(path = "/remotes/sftp")
+public class SFTPController {
+
+    @GetMapping(value = "/{remoteId}", produces = "application/json")
+    public SFTPRemote fetchSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
+        return new SFTPRemote()
+            .setHost("localhost")
+            .setPort(22)
+            .setCredential(
+                    new SFTPCredential()
+                        .setAuthMethod(SFTPCredential.AuthMethod.SSH_KEY)
+                        .setPrivateKey("")
+                        .setPublicKey(""));
+    }
+
+    @PostMapping(value = "")
+    public String createSFTPRemote(@RequestBody SFTPRemote sftpRemote) {
+        return "Remote id";
+    }
+
+    @PutMapping(value = "/{remoteId}")
+    public String updateSFTPRemote(@RequestBody SFTPRemote sftpRemote,
+                                   @PathVariable(name = "remoteId") String remoteId) {
+        return "Remote id";
+    }
+
+    @DeleteMapping(value = "/{remoteId}")
+    public String removeSFTPRemote(@PathVariable(name = "remoteId") String remoteId) {
+        return "Deleted";
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java
new file mode 100644
index 0000000..a597836
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/TransferEntry.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.datalake.orchestrator.api.model;
+
+public class TransferEntry {
+
+    private String id;
+    private String sourceRemoteId;
+    private String sourcePath;
+
+    private String destRemoteId;
+    private String destPath;
+
+    public String getId() {
+        return id;
+    }
+
+    public TransferEntry setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getSourceRemoteId() {
+        return sourceRemoteId;
+    }
+
+    public TransferEntry setSourceRemoteId(String sourceRemoteId) {
+        this.sourceRemoteId = sourceRemoteId;
+        return this;
+    }
+
+    public String getSourcePath() {
+        return sourcePath;
+    }
+
+    public TransferEntry setSourcePath(String sourcePath) {
+        this.sourcePath = sourcePath;
+        return this;
+    }
+
+    public String getDestRemoteId() {
+        return destRemoteId;
+    }
+
+    public TransferEntry setDestRemoteId(String destRemoteId) {
+        this.destRemoteId = destRemoteId;
+        return this;
+    }
+
+    public String getDestPath() {
+        return destPath;
+    }
+
+    public TransferEntry setDestPath(String destPath) {
+        this.destPath = destPath;
+        return this;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java
new file mode 100644
index 0000000..ee9a91c
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPCredential.java
@@ -0,0 +1,110 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.datalake.orchestrator.api.model.remote;
+
+public class SFTPCredential {
+
+    public enum AuthMethod {SSH_KEY, PASSWORD}
+    private String id;
+
+    private String userName;
+
+    private String existingKeyId;
+
+    private String publicKey;
+    private String privateKey;
+    private String passphrase;
+
+    private String password;
+
+    private AuthMethod authMethod;
+
+    public String getId() {
+        return id;
+    }
+
+    public SFTPCredential setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public SFTPCredential setUserName(String userName) {
+        this.userName = userName;
+        return this;
+    }
+
+    public String getExistingKeyId() {
+        return existingKeyId;
+    }
+
+    public SFTPCredential setExistingKeyId(String existingKeyId) {
+        this.existingKeyId = existingKeyId;
+        return this;
+    }
+
+    public String getPublicKey() {
+        return publicKey;
+    }
+
+    public SFTPCredential setPublicKey(String publicKey) {
+        this.publicKey = publicKey;
+        return this;
+    }
+
+    public String getPrivateKey() {
+        return privateKey;
+    }
+
+    public SFTPCredential setPrivateKey(String privateKey) {
+        this.privateKey = privateKey;
+        return this;
+    }
+
+    public String getPassphrase() {
+        return passphrase;
+    }
+
+    public SFTPCredential setPassphrase(String passphrase) {
+        this.passphrase = passphrase;
+        return this;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public SFTPCredential setPassword(String password) {
+        this.password = password;
+        return this;
+    }
+
+    public AuthMethod getAuthMethod() {
+        return authMethod;
+    }
+
+    public SFTPCredential setAuthMethod(AuthMethod authMethod) {
+        this.authMethod = authMethod;
+        return this;
+    }
+}
diff --git a/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java
new file mode 100644
index 0000000..68d6578
--- /dev/null
+++ b/data-orchestrator/data-orchestrator-api/src/main/java/org/apache/airavata/datalake/orchestrator/api/model/remote/SFTPRemote.java
@@ -0,0 +1,73 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.airavata.datalake.orchestrator.api.model.remote;
+
+public class SFTPRemote {
+    private String id;
+    private String name;
+    private String host;
+    private Integer port;
+    private SFTPCredential credential;
+
+    public String getId() {
+        return id;
+    }
+
+    public SFTPRemote setId(String id) {
+        this.id = id;
+        return this;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public SFTPRemote setName(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public SFTPRemote setHost(String host) {
+        this.host = host;
+        return this;
+    }
+
+    public Integer getPort() {
+        return port;
+    }
+
+    public SFTPRemote setPort(Integer port) {
+        this.port = port;
+        return this;
+    }
+
+    public SFTPCredential getCredential() {
+        return credential;
+    }
+
+    public SFTPRemote setCredential(SFTPCredential credential) {
+        this.credential = credential;
+        return this;
+    }
+}
diff --git a/data-orchestrator/pom.xml b/data-orchestrator/pom.xml
index d0ba9bf..2d3ee54 100644
--- a/data-orchestrator/pom.xml
+++ b/data-orchestrator/pom.xml
@@ -1,4 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">