Search in sources :

Example 1 with ECSException

use of com.emc.storageos.ecs.api.ECSException in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method doUpdateBucketACL.

@Override
public BiosCommandResult doUpdateBucketACL(StorageSystem storageObj, Bucket bucket, ObjectDeviceInputOutput objectArgs, BucketACLUpdateParams param, String taskId) throws ControllerException {
    List<BucketACE> aclToAdd = objectArgs.getBucketAclToAdd();
    List<BucketACE> aclToModify = objectArgs.getBucketAclToModify();
    List<BucketACE> aclToDelete = objectArgs.getBucketAclToDelete();
    // Get existing Acl for the Bucket
    List<BucketACE> aclsToProcess = objectArgs.getExistingBucketAcl();
    aclsToProcess.addAll(aclToAdd);
    // Process ACLs to modify
    for (BucketACE existingAce : aclsToProcess) {
        String domainOfExistingAce = existingAce.getDomain();
        if (domainOfExistingAce == null) {
            domainOfExistingAce = "";
        }
        for (BucketACE aceToModify : aclToModify) {
            String domainOfmodifiedAce = aceToModify.getDomain();
            if (domainOfmodifiedAce == null) {
                domainOfmodifiedAce = "";
            }
            if (aceToModify.getUser() != null && existingAce.getUser() != null) {
                if (domainOfExistingAce.concat(existingAce.getUser()).equalsIgnoreCase(domainOfmodifiedAce.concat(aceToModify.getUser()))) {
                    existingAce.setPermissions(aceToModify.getPermissions());
                }
            }
            if (aceToModify.getGroup() != null && existingAce.getGroup() != null) {
                if (domainOfExistingAce.concat(existingAce.getGroup()).equalsIgnoreCase(domainOfmodifiedAce.concat(aceToModify.getGroup()))) {
                    existingAce.setPermissions(aceToModify.getPermissions());
                }
            }
            if (aceToModify.getCustomGroup() != null && existingAce.getCustomGroup() != null) {
                if (domainOfExistingAce.concat(existingAce.getCustomGroup()).equalsIgnoreCase(domainOfmodifiedAce.concat(aceToModify.getCustomGroup()))) {
                    existingAce.setPermissions(aceToModify.getPermissions());
                }
            }
        }
    }
    // Process ACLs to delete
    for (BucketACE aceToDelete : aclToDelete) {
        String domainOfDeleteAce = aceToDelete.getDomain();
        if (domainOfDeleteAce == null) {
            domainOfDeleteAce = "";
        }
        for (Iterator<BucketACE> iterator = aclsToProcess.iterator(); iterator.hasNext(); ) {
            BucketACE existingAcl = iterator.next();
            String domainOfExistingAce = existingAcl.getDomain();
            if (domainOfExistingAce == null) {
                domainOfExistingAce = "";
            }
            if (aceToDelete.getUser() != null && existingAcl.getUser() != null) {
                if (domainOfDeleteAce.concat(aceToDelete.getUser()).equalsIgnoreCase(domainOfExistingAce.concat(existingAcl.getUser()))) {
                    iterator.remove();
                }
            }
            if (aceToDelete.getGroup() != null && existingAcl.getGroup() != null) {
                if (domainOfDeleteAce.concat(aceToDelete.getGroup()).equalsIgnoreCase(domainOfExistingAce.concat(existingAcl.getGroup()))) {
                    iterator.remove();
                }
            }
            if (aceToDelete.getCustomGroup() != null && existingAcl.getCustomGroup() != null) {
                if (domainOfDeleteAce.concat(aceToDelete.getCustomGroup()).equalsIgnoreCase(domainOfExistingAce.concat(existingAcl.getCustomGroup()))) {
                    iterator.remove();
                }
            }
        }
    }
    ECSApi objectAPI = getAPI(storageObj);
    try {
        String payload = toJsonString(objectArgs, aclsToProcess);
        objectAPI.updateBucketACL(objectArgs.getName(), payload);
        updateBucketACLInDB(param, objectArgs, bucket);
    } catch (ECSException e) {
        _log.error("ACL Update for Bucket : {} failed.", objectArgs.getName(), e);
        completeTask(bucket.getId(), taskId, e);
        return BiosCommandResult.createErrorResult(e);
    }
    completeTask(bucket.getId(), taskId, "Successfully updated Bucket ACL.");
    return BiosCommandResult.createSuccessfulResult();
}
Also used : ECSApi(com.emc.storageos.ecs.api.ECSApi) ECSException(com.emc.storageos.ecs.api.ECSException) BucketACE(com.emc.storageos.model.object.BucketACE)

Example 2 with ECSException

use of com.emc.storageos.ecs.api.ECSException in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method doSyncBucketACL.

/*
     * (non-Javadoc)
     * 
     * @see com.emc.storageos.volumecontroller.ObjectStorageDevice#doSyncBucketACL(com.emc.storageos.db.client.model.StorageSystem,
     * com.emc.storageos.db.client.model.Bucket, com.emc.storageos.volumecontroller.ObjectDeviceInputOutput, java.lang.String)
     * 
     * Gets the ACl for the bucket from ECS and persist in coprhd DB.
     */
@Override
public BiosCommandResult doSyncBucketACL(StorageSystem storageObj, Bucket bucket, ObjectDeviceInputOutput objectArgs, String taskId) throws ControllerException {
    ECSApi objectAPI = getAPI(storageObj);
    try {
        String aclResponse = objectAPI.getBucketAclFromECS(objectArgs.getName(), objectArgs.getNamespace());
        _log.info("aclResponse {} " + aclResponse);
        ECSBucketACL bucketACl = new Gson().fromJson(SecurityUtils.sanitizeJsonString(aclResponse), ECSBucketACL.class);
        ECSBucketACL.Acl acl = bucketACl.getAcl();
        List<ECSBucketACL.UserAcl> user_acl = acl.getUseAcl();
        List<ECSBucketACL.GroupAcl> group_acl = acl.getGroupAcl();
        List<ECSBucketACL.CustomGroupAcl> customgroup_acl = acl.getCustomgroupAcl();
        List<BucketACE> aclToAdd = Lists.newArrayList();
        final String _VERSION = "acl_supported";
        final String DELIMETER = "@";
        for (ECSBucketACL.UserAcl userAce : user_acl) {
            String userWithDomain = userAce.getUser();
            String[] usrDomain = userWithDomain.split(DELIMETER);
            BucketACE bucketAce = new BucketACE();
            if (usrDomain.length > 1) {
                bucketAce.setDomain(usrDomain[1]);
                bucketAce.setUser(usrDomain[0]);
            } else if (usrDomain.length == 1) {
                // username without domain
                bucketAce.setUser(usrDomain[0]);
            }
            String[] permArray = userAce.getPermission();
            String permissions = formatPermissions(permArray);
            bucketAce.setPermissions(permissions);
            aclToAdd.add(bucketAce);
        }
        for (ECSBucketACL.GroupAcl groupAce : group_acl) {
            String groupWithDomain = groupAce.getGroup();
            String[] grpDomain = groupWithDomain.split(DELIMETER);
            BucketACE bucketAce = new BucketACE();
            if (grpDomain.length > 1) {
                bucketAce.setDomain(grpDomain[1]);
                bucketAce.setGroup(grpDomain[0]);
            } else if (grpDomain.length == 1) {
                // group without domain
                bucketAce.setGroup(grpDomain[0]);
            }
            String[] permArray = groupAce.getPermission();
            String permissions = formatPermissions(permArray);
            bucketAce.setPermissions(permissions);
            aclToAdd.add(bucketAce);
        }
        for (ECSBucketACL.CustomGroupAcl customGroupAce : customgroup_acl) {
            String customGroupWithDomain = customGroupAce.getCustomgroup();
            String[] grpDomain = customGroupWithDomain.split(DELIMETER);
            BucketACE bucketAce = new BucketACE();
            if (grpDomain.length > 1) {
                bucketAce.setDomain(grpDomain[1]);
                bucketAce.setCustomGroup(grpDomain[0]);
            } else if (grpDomain.length == 1) {
                // custom group without domain
                bucketAce.setCustomGroup(grpDomain[0]);
            }
            String[] permArray = customGroupAce.getPermission();
            String permissions = formatPermissions(permArray);
            bucketAce.setPermissions(permissions);
            aclToAdd.add(bucketAce);
        }
        BucketACLUpdateParams param = new BucketACLUpdateParams();
        BucketACL aclForAddition = new BucketACL();
        aclForAddition.setBucketACL(aclToAdd);
        param.setAclToAdd(aclForAddition);
        updateBucketACLInDB(param, objectArgs, bucket);
        bucket.setVersion(_VERSION);
        _dbClient.updateObject(bucket);
    } catch (ECSException e) {
        _log.error("Sync ACL for Bucket : {} failed.", objectArgs.getName(), e);
        completeTask(bucket.getId(), taskId, e);
        return BiosCommandResult.createErrorResult(e);
    }
    completeTask(bucket.getId(), taskId, "Bucket ACL Sync Successful.");
    return BiosCommandResult.createSuccessfulResult();
}
Also used : Gson(com.google.gson.Gson) BucketACE(com.emc.storageos.model.object.BucketACE) ECSApi(com.emc.storageos.ecs.api.ECSApi) BucketACLUpdateParams(com.emc.storageos.model.object.BucketACLUpdateParams) ObjectBucketACL(com.emc.storageos.db.client.model.ObjectBucketACL) ECSBucketACL(com.emc.storageos.ecs.api.ECSBucketACL) BucketACL(com.emc.storageos.model.object.BucketACL) ECSBucketACL(com.emc.storageos.ecs.api.ECSBucketACL) ECSException(com.emc.storageos.ecs.api.ECSException)

Example 3 with ECSException

use of com.emc.storageos.ecs.api.ECSException in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method doDeleteBucketACL.

@Override
public BiosCommandResult doDeleteBucketACL(StorageSystem storageObj, Bucket bucket, ObjectDeviceInputOutput objectArgs, String taskId) throws ControllerException {
    ECSApi objectAPI = getAPI(storageObj);
    BucketACLUpdateParams param = new BucketACLUpdateParams();
    BucketACL aclForDeletion = new BucketACL();
    aclForDeletion.setBucketACL(objectArgs.getBucketAclToDelete());
    param.setAclToDelete(aclForDeletion);
    try {
        String payload = "{\"bucket\":\"" + objectArgs.getName() + "\",\"namespace\":\"" + objectArgs.getNamespace() + "\",\"acl\":{}}\"";
        objectAPI.updateBucketACL(objectArgs.getName(), payload);
        updateBucketACLInDB(param, objectArgs, bucket);
    } catch (ECSException e) {
        _log.error("Delete ACL for Bucket : {} failed.", objectArgs.getName(), e);
        completeTask(bucket.getId(), taskId, e);
        return BiosCommandResult.createErrorResult(e);
    }
    completeTask(bucket.getId(), taskId, "Successfully updated Bucket ACL.");
    return BiosCommandResult.createSuccessfulResult();
}
Also used : ECSApi(com.emc.storageos.ecs.api.ECSApi) BucketACLUpdateParams(com.emc.storageos.model.object.BucketACLUpdateParams) ObjectBucketACL(com.emc.storageos.db.client.model.ObjectBucketACL) ECSBucketACL(com.emc.storageos.ecs.api.ECSBucketACL) BucketACL(com.emc.storageos.model.object.BucketACL) ECSException(com.emc.storageos.ecs.api.ECSException)

Example 4 with ECSException

use of com.emc.storageos.ecs.api.ECSException in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method doDeleteBucket.

@Override
public BiosCommandResult doDeleteBucket(StorageSystem storageObj, Bucket bucket, String deleteType, final String taskId) {
    BiosCommandResult result;
    try {
        ECSApi objectAPI = getAPI(storageObj);
        if (ObjectControllerConstants.DeleteTypeEnum.INTERNAL_DB_ONLY.toString().equalsIgnoreCase(deleteType.toString())) {
            _log.info("Inventory only bucket delete {}", bucket.getName());
        } else {
            objectAPI.deleteBucket(bucket.getName(), bucket.getNamespace());
        }
        // Deleting the ACL for bucket if any
        List<ObjectBucketACL> aclToDelete = queryDbBucketACL(bucket);
        if (aclToDelete != null && !aclToDelete.isEmpty()) {
            for (ObjectBucketACL ace : aclToDelete) {
                ObjectBucketACL dbBucketAcl = new ObjectBucketACL();
                if (ace != null) {
                    dbBucketAcl.setId(ace.getId());
                    dbBucketAcl.setInactive(true);
                    _log.info("Marking acl inactive in DB: {}", dbBucketAcl);
                    _dbClient.updateObject(dbBucketAcl);
                }
            }
        }
        bucket.setInactive(true);
        _dbClient.persistObject(bucket);
        result = BiosCommandResult.createSuccessfulResult();
        completeTask(bucket.getId(), taskId, "Bucket deleted successfully!");
    } catch (ECSException e) {
        _log.error("Delete Bucket : {} failed.", bucket.getName(), e);
        result = BiosCommandResult.createErrorResult(e);
        completeTask(bucket.getId(), taskId, e);
    }
    return result;
}
Also used : ECSApi(com.emc.storageos.ecs.api.ECSApi) BiosCommandResult(com.emc.storageos.volumecontroller.impl.BiosCommandResult) ECSException(com.emc.storageos.ecs.api.ECSException) ObjectBucketACL(com.emc.storageos.db.client.model.ObjectBucketACL)

Example 5 with ECSException

use of com.emc.storageos.ecs.api.ECSException in project coprhd-controller by CoprHD.

the class ECSObjectStorageDevice method doCreateBucket.

@Override
public BiosCommandResult doCreateBucket(StorageSystem storageObj, Bucket bucket, ObjectDeviceInputOutput args, String taskId) throws ControllerException {
    ECSApi ecsApi = getAPI(storageObj);
    BiosCommandResult result = null;
    String bktNativeId = null, currentOwner = null;
    String aceName = "";
    try {
        _log.info("Initiated for Bucket creation. Name : {} Namespace : {}", args.getName(), args.getNamespace());
        bktNativeId = ecsApi.createBucket(args.getName(), args.getNamespace(), args.getDevStoragePool());
        ecsApi.updateBucketRetention(args.getName(), args.getNamespace(), args.getRetentionPeriod());
        ecsApi.updateBucketQuota(args.getName(), args.getNamespace(), args.getNotSizeSQ(), args.getBlkSizeHQ());
        currentOwner = ecsApi.getBucketOwner(args.getName(), args.getNamespace());
        aceName = currentOwner;
        // This would lead to confusion as if there is an error
        if (!StringUtil.isBlank(args.getOwner()) && !currentOwner.equals(args.getOwner())) {
            ecsApi.updateBucketOwner(args.getName(), args.getNamespace(), args.getOwner());
            aceName = args.getOwner();
        }
        _log.info("Successfully created Bucket. Name : {} Namespace : {}", args.getName(), args.getNamespace());
        bucket.setNativeId(bktNativeId);
        completeTask(bucket.getId(), taskId, "Successfully created Bucket.");
        result = BiosCommandResult.createSuccessfulResult();
    } catch (ECSException e) {
        _log.error("ECSObjectStorageDevice:doCreateBucket failed. Trying to cleanup at source as well.", e);
        bucket.setInactive(true);
        if (null != bktNativeId) {
            try {
                ecsApi.deleteBucket(args.getName(), args.getNamespace());
            } catch (Exception del) {
                _log.error("Could not clean up orphan bucket : {} Storage : {} from ECS, Please remove manully", bucket.getLabel(), bucket.getStorageDevice());
            }
        }
        completeTask(bucket.getId(), taskId, e);
        result = BiosCommandResult.createErrorResult(e);
    }
    String aclSupportedVersion = "acl_supported";
    bucket.setVersion(aclSupportedVersion);
    _dbClient.persistObject(bucket);
    if (!bucket.getInactive()) {
        persistDefaultBucketACEInDb(aceName, bucket, args);
    }
    return result;
}
Also used : ECSApi(com.emc.storageos.ecs.api.ECSApi) BiosCommandResult(com.emc.storageos.volumecontroller.impl.BiosCommandResult) ECSException(com.emc.storageos.ecs.api.ECSException) URISyntaxException(java.net.URISyntaxException) InternalException(com.emc.storageos.svcs.errorhandling.resources.InternalException) ControllerException(com.emc.storageos.volumecontroller.ControllerException) ECSException(com.emc.storageos.ecs.api.ECSException)

Aggregations

ECSApi (com.emc.storageos.ecs.api.ECSApi)6 ECSException (com.emc.storageos.ecs.api.ECSException)6 ObjectBucketACL (com.emc.storageos.db.client.model.ObjectBucketACL)3 ECSBucketACL (com.emc.storageos.ecs.api.ECSBucketACL)2 BucketACE (com.emc.storageos.model.object.BucketACE)2 BucketACL (com.emc.storageos.model.object.BucketACL)2 BucketACLUpdateParams (com.emc.storageos.model.object.BucketACLUpdateParams)2 BiosCommandResult (com.emc.storageos.volumecontroller.impl.BiosCommandResult)2 InternalException (com.emc.storageos.svcs.errorhandling.resources.InternalException)1 ControllerException (com.emc.storageos.volumecontroller.ControllerException)1 Gson (com.google.gson.Gson)1 URISyntaxException (java.net.URISyntaxException)1