Example usage for com.amazonaws.services.ec2.model InstanceAttributeName BlockDeviceMapping

List of usage examples for com.amazonaws.services.ec2.model InstanceAttributeName BlockDeviceMapping

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2.model InstanceAttributeName BlockDeviceMapping.

Prototype

InstanceAttributeName BlockDeviceMapping

To view the source code for com.amazonaws.services.ec2.model InstanceAttributeName BlockDeviceMapping.

Click Source Link

Usage

From source file:com.cloudera.director.aws.ec2.ebs.EBSAllocator.java

License:Apache License

/**
 * Adds a delete on termination flag to all volumes in an {@code InstanceEbsVolumes} list
 * that have the ATTACHED status. This makes sure that the volumes associated with the
 * instance will be automatically cleaned up upon instance termination.
 *
 * @param instanceEbsVolumesList list of instances along with their associated volumes
 *//*from  w  w  w .  j  a  va  2 s. c o m*/
public void addDeleteOnTerminationFlag(List<InstanceEbsVolumes> instanceEbsVolumesList) {
    Set<String> volumesToFlag = getAllVolumeIdsWithStatus(instanceEbsVolumesList,
            InstanceEbsVolumes.Status.ATTACHED);

    if (!volumesToFlag.isEmpty()) {
        for (InstanceEbsVolumes instanceEbsVolumes : instanceEbsVolumesList) {
            String ec2InstanceId = instanceEbsVolumes.getEc2InstanceId();

            DescribeInstanceAttributeRequest instanceAttributeRequest = new DescribeInstanceAttributeRequest()
                    .withAttribute(InstanceAttributeName.BlockDeviceMapping).withInstanceId(ec2InstanceId);

            List<InstanceBlockDeviceMapping> blockDeviceMappings = client
                    .describeInstanceAttribute(instanceAttributeRequest).getInstanceAttribute()
                    .getBlockDeviceMappings();

            for (InstanceBlockDeviceMapping blockDeviceMapping : blockDeviceMappings) {
                String volumeId = blockDeviceMapping.getEbs().getVolumeId();

                // The block device mapping may have volumes associated with it that were not
                // provisioned by us. We skip marking those volumes for deletion.

                if (!volumesToFlag.contains(volumeId)) {
                    continue;
                }

                InstanceBlockDeviceMappingSpecification updatedSpec = new InstanceBlockDeviceMappingSpecification()
                        .withEbs(new EbsInstanceBlockDeviceSpecification().withDeleteOnTermination(true)
                                .withVolumeId(volumeId))
                        .withDeviceName(blockDeviceMapping.getDeviceName());

                ModifyInstanceAttributeRequest modifyRequest = new ModifyInstanceAttributeRequest()
                        .withBlockDeviceMappings(updatedSpec).withInstanceId(ec2InstanceId);

                client.modifyInstanceAttribute(modifyRequest);
            }
        }
    }
}

From source file:com.cloudera.director.aws.ec2.EC2Provider.java

License:Apache License

/**
 * Get EBS volumes attached to the specified virtual instance id.
 *
 * @return list of ebs volumes//ww w.  j  av a  2 s . c  om
 */
@VisibleForTesting
List<Volume> getVolumes(String virtualInstanceId) {
    String ec2InstanceId = getOnlyElement(
            getEC2InstanceIdsByVirtualInstanceId(Collections.singletonList(virtualInstanceId)).values());

    DescribeInstanceAttributeResult results = client
            .describeInstanceAttribute(new DescribeInstanceAttributeRequest().withInstanceId(ec2InstanceId)
                    .withAttribute(InstanceAttributeName.BlockDeviceMapping));

    List<InstanceBlockDeviceMapping> blockDeviceMappings = results.getInstanceAttribute()
            .getBlockDeviceMappings();

    List<String> volumeIds = Lists.newArrayList();
    for (InstanceBlockDeviceMapping mapping : blockDeviceMappings) {
        volumeIds.add(mapping.getEbs().getVolumeId());
    }

    DescribeVolumesResult volumeResults = client
            .describeVolumes(new DescribeVolumesRequest().withVolumeIds(volumeIds));

    return volumeResults.getVolumes();
}