Search in sources :

Example 1 with DescribeFileSystemsRequest

use of com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest in project cloudbreak by hortonworks.

the class AwsEfsResourceBuilder method checkResources.

@Override
protected List<CloudResourceStatus> checkResources(ResourceType type, AwsContext context, AuthenticatedContext auth, Iterable<CloudResource> resources) {
    AmazonEfsClient client = getAmazonEfsClient(auth);
    List<CloudResource> efsResources = StreamSupport.stream(resources.spliterator(), false).filter(r -> r.getType().equals(resourceType())).collect(Collectors.toList());
    List<String> efsIds = new ArrayList<>();
    List<CloudResourceStatus> cloudResourceStatusList = new ArrayList<>();
    for (CloudResource efsResource : efsResources) {
        CloudEfsAttributes efsAttributes = efsResource.getParameter(CloudResource.ATTRIBUTES, CloudEfsAttributes.class);
        String efsId = efsAttributes.getFileSystemId();
        efsIds.add(efsId);
        DescribeFileSystemsRequest request = new DescribeFileSystemsRequest().withFileSystemId(efsId);
        DescribeFileSystemsResult result = client.describeFileSystems(request);
        List<CloudResourceStatus> efsStatusList = getResourceStatus(efsResource, efsId, result);
        cloudResourceStatusList.addAll(efsStatusList);
    }
    LOGGER.debug("got EFS status for [{}]", String.join(",", efsIds));
    return cloudResourceStatusList;
}
Also used : AmazonEfsClient(com.sequenceiq.cloudbreak.cloud.aws.common.client.AmazonEfsClient) DescribeMountTargetsResult(com.amazonaws.services.elasticfilesystem.model.DescribeMountTargetsResult) AmazonElasticFileSystemException(com.amazonaws.services.elasticfilesystem.model.AmazonElasticFileSystemException) AsyncTaskExecutor(org.springframework.core.task.AsyncTaskExecutor) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) CloudInstance(com.sequenceiq.cloudbreak.cloud.model.CloudInstance) AmazonEfsClient(com.sequenceiq.cloudbreak.cloud.aws.common.client.AmazonEfsClient) Image(com.sequenceiq.cloudbreak.cloud.model.Image) Function(java.util.function.Function) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Future(java.util.concurrent.Future) AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.common.view.AwsCredentialView) AuthenticatedContext(com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext) AwsContext(com.sequenceiq.cloudbreak.cloud.aws.common.context.AwsContext) Map(java.util.Map) Qualifier(org.springframework.beans.factory.annotation.Qualifier) StreamSupport(java.util.stream.StreamSupport) DescribeMountTargetsRequest(com.amazonaws.services.elasticfilesystem.model.DescribeMountTargetsRequest) CommonStatus(com.sequenceiq.common.api.type.CommonStatus) ResourceType(com.sequenceiq.common.api.type.ResourceType) Logger(org.slf4j.Logger) CreateFileSystemRequest(com.amazonaws.services.elasticfilesystem.model.CreateFileSystemRequest) DescribeFileSystemsResult(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsResult) FileSystemDescription(com.amazonaws.services.elasticfilesystem.model.FileSystemDescription) CloudResource(com.sequenceiq.cloudbreak.cloud.model.CloudResource) Collection(java.util.Collection) CloudResourceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus) DescribeFileSystemsRequest(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest) Tag(com.amazonaws.services.elasticfilesystem.model.Tag) Collectors(java.util.stream.Collectors) CloudStack(com.sequenceiq.cloudbreak.cloud.model.CloudStack) CreateFileSystemResult(com.amazonaws.services.elasticfilesystem.model.CreateFileSystemResult) List(java.util.List) Component(org.springframework.stereotype.Component) DeleteMountTargetRequest(com.amazonaws.services.elasticfilesystem.model.DeleteMountTargetRequest) LifeCycleState(com.sequenceiq.cloudbreak.cloud.model.filesystem.efs.LifeCycleState) MountTargetDescription(com.amazonaws.services.elasticfilesystem.model.MountTargetDescription) CloudEfsAttributes(com.sequenceiq.cloudbreak.cloud.model.CloudEfsAttributes) Group(com.sequenceiq.cloudbreak.cloud.model.Group) Optional(java.util.Optional) DeleteFileSystemRequest(com.amazonaws.services.elasticfilesystem.model.DeleteFileSystemRequest) CommonAwsClient(com.sequenceiq.cloudbreak.cloud.aws.common.CommonAwsClient) Collections(java.util.Collections) AwsTaggingService(com.sequenceiq.cloudbreak.cloud.aws.common.AwsTaggingService) StringUtils(org.springframework.util.StringUtils) CloudEfsAttributes(com.sequenceiq.cloudbreak.cloud.model.CloudEfsAttributes) CloudResourceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus) ArrayList(java.util.ArrayList) DescribeFileSystemsRequest(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest) DescribeFileSystemsResult(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsResult) CloudResource(com.sequenceiq.cloudbreak.cloud.model.CloudResource)

Example 2 with DescribeFileSystemsRequest

use of com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest in project cloudbreak by hortonworks.

the class AwsEfsResourceBuilder method delete.

@Override
public CloudResource delete(AwsContext context, AuthenticatedContext auth, CloudResource resource) throws InterruptedException {
    // 
    // https://docs.aws.amazon.com/efs/latest/ug/wt1-clean-up.html
    // To delete an EFS instance, need the following steps
    // 1. Terminate the EC2 instances that mount on this EFS. The caller of this function has to make sure it is done before calling this function
    // 2. Delete the mount targets of this EFS.
    // 3. (Optional) Delete the security group of each mount target. AWS does not charge for security groups
    // 4. (Optional) Delete the security group of the EC2 instances at step 1. The mount target's security group has a rule that references
    // the EC2 security group. Therefore, we cannot first delete the EC2 instance's security group.
    // 5. Actually delete the EFS
    // 
    AmazonEfsClient client = getAmazonEfsClient(auth);
    CloudEfsAttributes efsAttributes = resource.getParameter(CloudResource.ATTRIBUTES, CloudEfsAttributes.class);
    String efsId = efsAttributes.getFileSystemId();
    DescribeFileSystemsRequest request = new DescribeFileSystemsRequest().withFileSystemId(efsId);
    DescribeFileSystemsResult result = client.describeFileSystems(request);
    List<FileSystemDescription> efsDescriptions = result.getFileSystems();
    for (FileSystemDescription efsDescription : efsDescriptions) {
        LifeCycleState efsLifeCycleState = LifeCycleState.fromValue(efsDescription.getLifeCycleState());
        if (LifeCycleState.DELETED.equals(efsLifeCycleState) || LifeCycleState.DELETING.equals(efsLifeCycleState)) {
            LOGGER.debug("The given AWS EFS's [name: {}] lifecycle state was [{}] hence we are going to skip any delete operation over this resource", efsDescription.getName(), efsLifeCycleState);
            continue;
        }
        if (efsDescription.getNumberOfMountTargets() > 0) {
            DescribeMountTargetsRequest mtRequest = new DescribeMountTargetsRequest().withFileSystemId(efsId);
            DescribeMountTargetsResult mtResult = client.describeMountTargets(mtRequest);
            List<MountTargetDescription> mountTargetDescriptionList = mtResult.getMountTargets();
            // Only delete the mount targets.
            for (MountTargetDescription mtDescription : mountTargetDescriptionList) {
                DeleteMountTargetRequest mtDelRequest = new DeleteMountTargetRequest().withMountTargetId(mtDescription.getMountTargetId());
                LOGGER.debug("About to delete AWS EFS mount target that has the following id: {}", mtDescription.getMountTargetId());
                client.deleteMountTarget(mtDelRequest);
            }
        // TODO: delete the security groups in the future
        }
        DeleteFileSystemRequest efsDelRequest = new DeleteFileSystemRequest().withFileSystemId(efsId);
        client.deleteFileSystem(efsDelRequest);
    }
    return null;
}
Also used : AmazonEfsClient(com.sequenceiq.cloudbreak.cloud.aws.common.client.AmazonEfsClient) CloudEfsAttributes(com.sequenceiq.cloudbreak.cloud.model.CloudEfsAttributes) DescribeMountTargetsResult(com.amazonaws.services.elasticfilesystem.model.DescribeMountTargetsResult) MountTargetDescription(com.amazonaws.services.elasticfilesystem.model.MountTargetDescription) DescribeMountTargetsRequest(com.amazonaws.services.elasticfilesystem.model.DescribeMountTargetsRequest) DescribeFileSystemsRequest(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest) DeleteFileSystemRequest(com.amazonaws.services.elasticfilesystem.model.DeleteFileSystemRequest) DeleteMountTargetRequest(com.amazonaws.services.elasticfilesystem.model.DeleteMountTargetRequest) LifeCycleState(com.sequenceiq.cloudbreak.cloud.model.filesystem.efs.LifeCycleState) DescribeFileSystemsResult(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsResult) FileSystemDescription(com.amazonaws.services.elasticfilesystem.model.FileSystemDescription)

Example 3 with DescribeFileSystemsRequest

use of com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest in project cloudbreak by hortonworks.

the class CloudFormationStackUtil method getEfsByFileSystemId.

public FileSystemDescription getEfsByFileSystemId(AuthenticatedContext ac, String fileSystemId) {
    String region = ac.getCloudContext().getLocation().getRegion().value();
    AmazonEfsClient amazonEfsClient = awsClient.createElasticFileSystemClient(new AwsCredentialView(ac.getCloudCredential()), region);
    DescribeFileSystemsResult efsResult = amazonEfsClient.describeFileSystems(new DescribeFileSystemsRequest().withFileSystemId(fileSystemId));
    return efsResult.getFileSystems().get(0);
}
Also used : AmazonEfsClient(com.sequenceiq.cloudbreak.cloud.aws.common.client.AmazonEfsClient) AwsCredentialView(com.sequenceiq.cloudbreak.cloud.aws.common.view.AwsCredentialView) DescribeFileSystemsResult(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsResult) DescribeFileSystemsRequest(com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest)

Aggregations

DescribeFileSystemsRequest (com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsRequest)3 DescribeFileSystemsResult (com.amazonaws.services.elasticfilesystem.model.DescribeFileSystemsResult)3 AmazonEfsClient (com.sequenceiq.cloudbreak.cloud.aws.common.client.AmazonEfsClient)3 DeleteFileSystemRequest (com.amazonaws.services.elasticfilesystem.model.DeleteFileSystemRequest)2 DeleteMountTargetRequest (com.amazonaws.services.elasticfilesystem.model.DeleteMountTargetRequest)2 DescribeMountTargetsRequest (com.amazonaws.services.elasticfilesystem.model.DescribeMountTargetsRequest)2 DescribeMountTargetsResult (com.amazonaws.services.elasticfilesystem.model.DescribeMountTargetsResult)2 FileSystemDescription (com.amazonaws.services.elasticfilesystem.model.FileSystemDescription)2 MountTargetDescription (com.amazonaws.services.elasticfilesystem.model.MountTargetDescription)2 AwsCredentialView (com.sequenceiq.cloudbreak.cloud.aws.common.view.AwsCredentialView)2 CloudEfsAttributes (com.sequenceiq.cloudbreak.cloud.model.CloudEfsAttributes)2 LifeCycleState (com.sequenceiq.cloudbreak.cloud.model.filesystem.efs.LifeCycleState)2 AmazonElasticFileSystemException (com.amazonaws.services.elasticfilesystem.model.AmazonElasticFileSystemException)1 CreateFileSystemRequest (com.amazonaws.services.elasticfilesystem.model.CreateFileSystemRequest)1 CreateFileSystemResult (com.amazonaws.services.elasticfilesystem.model.CreateFileSystemResult)1 Tag (com.amazonaws.services.elasticfilesystem.model.Tag)1 AwsTaggingService (com.sequenceiq.cloudbreak.cloud.aws.common.AwsTaggingService)1 CommonAwsClient (com.sequenceiq.cloudbreak.cloud.aws.common.CommonAwsClient)1 AwsContext (com.sequenceiq.cloudbreak.cloud.aws.common.context.AwsContext)1 AuthenticatedContext (com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext)1