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/09/01 18:00:16 UTC
[airavata-data-lake] branch master updated: Auto sharing of
resource with admin group
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
The following commit(s) were added to refs/heads/master by this push:
new d4bed54 Auto sharing of resource with admin group
new 9b6318c Merge pull request #48 from isururanawaka/sharing_service_impl
d4bed54 is described below
commit d4bed545696396feab0c0d9100f2c1e7fd1c039a
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Sep 1 13:59:06 2021 -0400
Auto sharing of resource with admin group
---
.../datalake/orchestrator/Configuration.java | 42 ++++++++++++++++++++
.../orchestrator/connectors/DRMSConnector.java | 24 +++++++++++
.../handlers/async/OrchestratorEventProcessor.java | 46 ++++++++++++++++------
.../drms/api/handlers/SharingServiceHandler.java | 4 +-
4 files changed, 101 insertions(+), 15 deletions(-)
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
index 52494e5..8e6ca47 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
@@ -20,6 +20,8 @@ public class Configuration {
this.messageFilter = messageFilter;
}
+ public TenantConfigs tenantConfigs;
+
public Configuration() {
}
@@ -60,6 +62,14 @@ public class Configuration {
this.outboundEventProcessor = outboundEventProcessor;
}
+ public TenantConfigs getTenantConfigs() {
+ return tenantConfigs;
+ }
+
+ public void setTenantConfigs(TenantConfigs tenantConfigs) {
+ this.tenantConfigs = tenantConfigs;
+ }
+
public static class Consumer {
private String brokerURL;
@@ -219,4 +229,36 @@ public class Configuration {
}
+ public static class TenantConfigs {
+
+ private String tenantId;
+ private String userGroup;
+ private String adminGroup;
+
+ public String getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(String tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ public String getUserGroup() {
+ return userGroup;
+ }
+
+ public void setUserGroup(String userGroup) {
+ this.userGroup = userGroup;
+ }
+
+ public String getAdminGroup() {
+ return adminGroup;
+ }
+
+ public void setAdminGroup(String adminGroup) {
+ this.adminGroup = adminGroup;
+ }
+ }
+
+
}
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java
index 96fac88..350aee8 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java
@@ -7,6 +7,7 @@ import org.apache.airavata.datalake.drms.AuthenticatedUser;
import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
import org.apache.airavata.datalake.drms.resource.GenericResource;
import org.apache.airavata.datalake.drms.sharing.DRMSSharingServiceGrpc;
+import org.apache.airavata.datalake.drms.sharing.ShareEntityWithGroupRequest;
import org.apache.airavata.datalake.drms.sharing.ShareEntityWithUserRequest;
import org.apache.airavata.datalake.drms.storage.*;
import org.apache.airavata.datalake.orchestrator.Configuration;
@@ -77,6 +78,29 @@ public class DRMSConnector implements AbstractConnector<Configuration> {
}
+
+ public void shareWithGroup(String authToken, String tenantId, String admin, String groupId, String resourceId,
+ String permission) throws Exception {
+
+ DRMSServiceAuthToken serviceAuthToken = DRMSServiceAuthToken.newBuilder()
+ .setAccessToken(authToken)
+ .setAuthCredentialType(AuthCredentialType.AGENT_ACCOUNT_CREDENTIAL)
+ .setAuthenticatedUser(AuthenticatedUser.newBuilder()
+ .setUsername(admin)
+ .setTenantId(tenantId)
+ .build())
+ .build();
+
+ ShareEntityWithGroupRequest.Builder shareBuilder = ShareEntityWithGroupRequest.newBuilder()
+ .setAuthToken(serviceAuthToken)
+ .setEntityId(resourceId)
+ .setSharedGroupId(groupId)
+ .setPermissionId(permission);
+
+ this.sharingServiceBlockingStub.shareEntityWithGroup(shareBuilder.build());
+
+ }
+
public Optional<TransferMapping> getActiveTransferMapping(String authToken, String tenantId,
String user, String hostName) throws Exception {
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java
index af8bac0..da70561 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java
@@ -57,8 +57,9 @@ public class OrchestratorEventProcessor implements Runnable {
this.configuration = configuration;
}
- private List<GenericResource> createResourceRecursively(String storageId, String basePath, String resourcePath, String resourceType, String user)
- throws Exception{
+ private List<GenericResource> createResourceRecursively(String storageId, String basePath,
+ String resourcePath, String resourceType, String user)
+ throws Exception {
List<GenericResource> resourceList = new ArrayList<>();
@@ -66,7 +67,7 @@ public class OrchestratorEventProcessor implements Runnable {
String[] splitted = resourcePath.substring(basePath.length()).split("/");
- String currentPath = basePath.endsWith("/")? basePath.substring(0, basePath.length() -1): basePath;
+ String currentPath = basePath.endsWith("/") ? basePath.substring(0, basePath.length() - 1) : basePath;
String parentId = storageId;
for (int i = 0; i < splitted.length - 1; i++) {
String resourceName = splitted[i];
@@ -86,13 +87,13 @@ public class OrchestratorEventProcessor implements Runnable {
}
}
- currentPath = currentPath + "/" + splitted[splitted.length -1];
+ currentPath = currentPath + "/" + splitted[splitted.length - 1];
Optional<GenericResource> optionalGenericResource =
this.drmsConnector.createResource(notificationEvent.getAuthToken(),
notificationEvent.getTenantId(),
Utils.getId(storageId + ":" + currentPath),
- splitted[splitted.length -1], currentPath,
+ splitted[splitted.length - 1], currentPath,
parentId, resourceType, parentType, user);
if (optionalGenericResource.isPresent()) {
@@ -106,11 +107,21 @@ public class OrchestratorEventProcessor implements Runnable {
}
- private void shareResources(List<GenericResource> resourceList, String admin, String user, String permission) throws Exception {
+ private void shareResourcesWithUsers(List<GenericResource> resourceList, String admin, String user, String permission) throws Exception {
for (GenericResource resource : resourceList) {
logger.info("Sharing resource {} with path {} with user {}",
resource.getResourceId(), resource.getResourcePath(), user);
- this.drmsConnector.shareWithUser(notificationEvent.getAuthToken(), notificationEvent.getTenantId(), admin, user, resource.getResourceId(), permission);
+ this.drmsConnector.shareWithUser(notificationEvent.getAuthToken(), notificationEvent.getTenantId(),
+ admin, user, resource.getResourceId(), permission);
+ }
+ }
+
+ private void shareResourcesWithGroups(List<GenericResource> resourceList, String admin, String group, String permission) throws Exception {
+ for (GenericResource resource : resourceList) {
+ logger.info("Sharing resource {} with path {} with group {}",
+ resource.getResourceId(), resource.getResourcePath(), group);
+ this.drmsConnector.shareWithGroup(notificationEvent.getAuthToken(), notificationEvent.getTenantId(),
+ admin, group, resource.getResourceId(), permission);
}
}
@@ -134,7 +145,7 @@ public class OrchestratorEventProcessor implements Runnable {
String owner = splitted[1].split("_")[0];
Map<String, String> ownerRules = new HashMap<>();
- ownerRules.put(adminUser, "ADMIN");
+ ownerRules.put(adminUser, "VIEWER");
ownerRules.put(splitted[1], "OWNER");
Optional<TransferMapping> optionalTransferMapping = drmsConnector.getActiveTransferMapping(
@@ -159,9 +170,18 @@ public class OrchestratorEventProcessor implements Runnable {
notificationEvent.getResourcePath(),
"COLLECTION", adminUser);
- shareResources(Collections.singletonList(resourceList.get(resourceList.size() -1)), adminUser, owner, "ADMIN");
+ shareResourcesWithUsers(Collections.singletonList(resourceList.get(resourceList.size() - 1)),
+ adminUser, owner, "VIEWER");
+
+ shareResourcesWithGroups(Collections.singletonList(resourceList.get(resourceList.size() - 1)), adminUser,
+ configuration.getTenantConfigs().getAdminGroup(),
+ "EDITOR");
+
+// shareResourcesWithGroups(Collections.singletonList(resourceList.get(resourceList.size() - 1)), adminUser,
+// configuration.getTenantConfigs().getUserGroup(),
+// "VIEWER");
- GenericResource resourceObj = resourceList.get(resourceList.size() -1);
+ GenericResource resourceObj = resourceList.get(resourceList.size() - 1);
Optional<AnyStoragePreference> sourceSPOp = this.drmsConnector.getStoragePreference(
notificationEvent.getAuthToken(), adminUser,
@@ -207,7 +227,7 @@ public class OrchestratorEventProcessor implements Runnable {
.setMftAuthorizationToken(mftAuth)
.setResourceId(resourceObj.getResourceId());
- switch (sourceSP.getStorageCase()){
+ switch (sourceSP.getStorageCase()) {
case SSH_STORAGE_PREFERENCE:
resourceMetadataReq.setResourceType("SCP");
resourceMetadataReq.setResourceToken(sourceSP.getSshStoragePreference().getCredentialToken());
@@ -227,7 +247,7 @@ public class OrchestratorEventProcessor implements Runnable {
logger.info("Registering file {} for source storage {}", fileMetadata.getResourcePath(), sourceStorageId);
resourceList = createResourceRecursively(sourceStorageId, notificationEvent.getBasePath(),
fileMetadata.getResourcePath(), "FILE", adminUser);
- GenericResource fileResource = resourceList.get(resourceList.size() -1);
+ GenericResource fileResource = resourceList.get(resourceList.size() - 1);
resourceIDsToProcess.add(fileResource.getResourceId());
}
@@ -244,7 +264,7 @@ public class OrchestratorEventProcessor implements Runnable {
resourceList = createResourceRecursively(destinationStorageId, notificationEvent.getBasePath(),
notificationEvent.getResourcePath(), "FILE", adminUser);
- GenericResource destinationResource = resourceList.get(resourceList.size() -1);
+ GenericResource destinationResource = resourceList.get(resourceList.size() - 1);
System.out.println(destinationResource);
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java
index 31e01af..43b7f27 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java
@@ -34,7 +34,7 @@ public class SharingServiceHandler extends DRMSSharingServiceGrpc.DRMSSharingSer
SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient();
Entity entity = Entity.newBuilder().setId(request.getEntityId()).build();
- PermissionType permissionTypeEditor = PermissionType.newBuilder().setId("EDITOR").build();
+ PermissionType permissionTypeEditor = PermissionType.newBuilder().setId(request.getPermissionId()).build();
PermissionType permissionTypeAdmin = PermissionType.newBuilder().setId("ADMIN").build();
SharingRequest sharingRequestEditor = SharingRequest
@@ -88,7 +88,7 @@ public class SharingServiceHandler extends DRMSSharingServiceGrpc.DRMSSharingSer
SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient();
Entity entity = Entity.newBuilder().setId(request.getEntityId()).build();
- PermissionType permissionTypeEditor = PermissionType.newBuilder().setId("EDITOR").build();
+ PermissionType permissionTypeEditor = PermissionType.newBuilder().setId(request.getPermissionId()).build();
PermissionType permissionTypeAdmin = PermissionType.newBuilder().setId("ADMIN").build();
SharingRequest sharingRequestEditor = SharingRequest