Example usage for com.amazonaws.services.ec2.model Volume getState

List of usage examples for com.amazonaws.services.ec2.model Volume getState

Introduction

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

Prototype


public String getState() 

Source Link

Document

The volume state.

Usage

From source file:EbsAttach.java

License:Open Source License

public static void main(String[] args) throws Exception {

    init();//w w  w.  ja  v a  2  s  . c o  m

    try {
        DescribeAvailabilityZonesResult availabilityZonesResult = ec2.describeAvailabilityZones();
        System.out.println("You have access to " + availabilityZonesResult.getAvailabilityZones().size()
                + " Availability Zones.");

        DescribeInstancesResult describeInstancesRequest = ec2.describeInstances();
        List<Reservation> reservations = describeInstancesRequest.getReservations();
        Set<Instance> instances = new HashSet<Instance>();

        for (Reservation reservation : reservations) {
            instances.addAll(reservation.getInstances());
        }

        System.out.println("You have " + instances.size() + " Amazon EC2 instance(s) running.");
        for (Instance ins : instances) {

            // instance id
            String instanceId = ins.getInstanceId();

            // instance state
            InstanceState is = ins.getState();
            System.out.println(instanceId + " " + is.getName());
        }

        System.out.println("Attached Instance id: " + attachedInsId);
        /*********************************************
         * 
         *  #1 Create New Volume
         *  
         *********************************************/
        System.out.println("===========================================");
        System.out.println("#1   Volume State before Creating");
        System.out.println("===========================================");

        DescribeVolumesResult describeVolumesResult = ec2.describeVolumes();
        List<Volume> volumes = describeVolumesResult.getVolumes();
        for (Volume volume : volumes) {
            String volumeId = volume.getVolumeId();
            String volumeAvbZone = volume.getAvailabilityZone();
            String volumeSize = String.valueOf(volume.getSize());
            String volumeState = volume.getState();
            System.out.println(volumeId + "\t" + volumeSize + "\t" + volumeAvbZone + "\t" + volumeState);
        }

        CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest().withSize(4).withVolumeType("gp2")
                .withAvailabilityZone("us-east-1a");
        CreateVolumeResult createVolumeResult = ec2.createVolume(createVolumeRequest);
        String createdVolumeId = createVolumeResult.getVolume().getVolumeId();
        System.out.println("# Created a volume #  ID: " + createdVolumeId);
        /*********************************************
         * 
         *  #2 Attach the created new Volume
         *  
         *********************************************/
        System.out.println("===========================================");
        System.out.println("#2   Volume State after Creating");
        System.out.println("===========================================");

        describeVolumesResult = ec2.describeVolumes();
        volumes = describeVolumesResult.getVolumes();
        for (Volume volume : volumes) {
            String volumeId = volume.getVolumeId();
            String volumeAvbZone = volume.getAvailabilityZone();
            String volumeSize = String.valueOf(volume.getSize());
            String volumeState = volume.getState();
            System.out.println(volumeId + "\t" + volumeSize + "\t" + volumeAvbZone + "\t" + volumeState);
        }
        //wait new volume is available
        System.out.println("#   Waiting new Volume is available");
        boolean avail = false;
        while (true) {
            Thread.sleep(1000);
            describeVolumesResult = ec2.describeVolumes();
            volumes = describeVolumesResult.getVolumes();
            for (Volume volume : volumes) {
                if (volume.getVolumeId().equals(createdVolumeId) && volume.getState().equals("available")) {
                    avail = true;
                    break;
                }
            }
            if (avail)
                break;
        }
        System.out.println("New Volume is available now.");

        AttachVolumeRequest attachVolumeRequest = new AttachVolumeRequest().withVolumeId(createdVolumeId)
                .withInstanceId(attachedInsId).withDevice("/dev/sdn");
        AttachVolumeResult attachVolumeResult = ec2.attachVolume(attachVolumeRequest);
        VolumeAttachment volumeAttachment = attachVolumeResult.getAttachment();

        System.out.println(
                volumeAttachment.getVolumeId() + " is attached on " + volumeAttachment.getAttachTime());

        /*********************************************
         * 
         *  #3 SSh to instance and run command
         *  
         *********************************************/
        System.out.println("===========================================");
        System.out.println("#2   Ssh and mount disk");
        System.out.println("===========================================");

        Session session = null;
        Channel openChannel = null;
        String keyDir = KEYDIR;
        String user = "ec2-user";
        String host = publicDNSName;
        String command = "df -h;" + "sudo mkfs -t ext3 /dev/xvdn;" + "sudo mkdir /minihw3;"
                + "sudo mount /dev/xvdn /minihw3;" + "df -h";
        boolean isConnect = false;
        while (!isConnect) {
            JSch jsch = new JSch();
            System.out.println("Waiting 5 seconds for SSH being available.");
            Thread.sleep(5 * 1000);
            try {
                jsch.addIdentity(keyDir);
            } catch (JSchException e) {
                System.out.println(e.getMessage());
            }
            try {
                session = jsch.getSession(user, host, 22);
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
                session.setConfig(config);
                session.connect();
                System.out.println("SSH Connection Established.");
                isConnect = true;
                openChannel = session.openChannel("exec");

                ((ChannelExec) openChannel).setPty(true);

                ((ChannelExec) openChannel).setCommand(command);
                openChannel.setInputStream(null);
                ((ChannelExec) openChannel).setErrStream(System.err);

                int exitStatus = openChannel.getExitStatus();
                System.out.println("exit-status: " + exitStatus);
                InputStream in = openChannel.getInputStream();
                System.out.println("Exxcute remote cammand :" + command);
                openChannel.connect();

                byte[] tmp = new byte[1024];
                while (true) {
                    while (in.available() > 0) {
                        int i = in.read(tmp, 0, 1024);
                        if (i < 0)
                            break;
                        System.out.print(new String(tmp, 0, i));
                    }
                    if (openChannel.isClosed()) {
                        if (in.available() > 0)
                            continue;
                        System.out.println("exit-status: " + openChannel.getExitStatus());
                        break;
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (Exception ee) {
                    }
                }
            } catch (JSchException | IOException e) {
                System.out.println(e.getMessage());
            } finally {
                if (openChannel != null && !openChannel.isClosed()) {
                    openChannel.disconnect();
                    System.out.println("Channel Disconnected");
                }
                if (session != null && session.isConnected()) {
                    session.disconnect();
                    System.out.println("Session Disconnected");
                }
            }

        }
    } catch (AmazonServiceException ase) {
        System.out.println("Caught Exception: " + ase.getMessage());
        System.out.println("Reponse Status Code: " + ase.getStatusCode());
        System.out.println("Error Code: " + ase.getErrorCode());
        System.out.println("Request ID: " + ase.getRequestId());
    }

}

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

License:Apache License

/**
 * Waits for the volumes in a list of {@code InstanceEbsVolumes} to reach an available state.
 * Returns an updated list of {@code InstanceEbsVolumes} with the volumes that became
 * available marked as AVAILABLE and volumes that failed or timed out marked as FAILED.
 *
 * @param createdInstanceVolumes list of instances with their created ebs volumes
 * @return updated list of instances EBS volumes
 */// w w  w  . j  a  va  2 s . c  o  m
public List<InstanceEbsVolumes> waitUntilVolumesAvailable(List<InstanceEbsVolumes> createdInstanceVolumes)
        throws InterruptedException {

    Set<String> volumesToCheck = getAllVolumeIdsWithStatus(createdInstanceVolumes,
            InstanceEbsVolumes.Status.CREATED);

    int numRequestedVolumes = volumesToCheck.size();
    Set<String> volumesAvailable = Sets.newHashSetWithExpectedSize(numRequestedVolumes);

    if (numRequestedVolumes > 0) {
        LOG.info("Waiting for a maximum of {} seconds for volumes to become available",
                availableTimeoutSeconds);

        Stopwatch watch = Stopwatch.createStarted();
        while (watch.elapsed(TimeUnit.SECONDS) < availableTimeoutSeconds) {
            DescribeVolumesRequest volumeRequest = new DescribeVolumesRequest().withVolumeIds(volumesToCheck);

            try {
                List<Volume> volumes = client.describeVolumes(volumeRequest).getVolumes();

                for (Volume volume : volumes) {
                    String id = volume.getVolumeId();
                    VolumeState state = VolumeState.fromValue(volume.getState());

                    switch (state) {
                    case Creating:
                        break;
                    case Available:
                        volumesToCheck.remove(id);
                        volumesAvailable.add(id);
                        break;
                    case Error:
                        // TODO log why the volume failed which may need a separate api call
                        volumesToCheck.remove(id);
                        break;
                    default:
                        String err = String
                                .format("A requested volume went into an unexpected state %s while waiting "
                                        + "for volume to become available", state);
                        throw new IllegalStateException(String.format(err, state));
                    }
                }

                if (volumesToCheck.isEmpty()) {
                    break;
                }
            } catch (AmazonServiceException ex) {
                // ignore exception when volume isn't found, newly created volumes may not be found right away
                if (ex.getErrorCode().equals("InvalidVolume.NotFound")) {
                    LOG.info("Requested volume(s) not yet found");
                } else {
                    throw AWSExceptions.propagate(ex);
                }
            }

            LOG.info("Waiting on {} out of {} volumes to reach a final state, next check in {} seconds",
                    volumesToCheck.size(), numRequestedVolumes, WAIT_UNTIL_AVAILABLE_INTERVAL_SECONDS);
            TimeUnit.SECONDS.sleep(WAIT_UNTIL_AVAILABLE_INTERVAL_SECONDS);
        }

        if (volumesToCheck.size() > 0) {
            LOG.error(
                    "Timed out while waiting for volumes to be created, {} out of {} volumes became available",
                    volumesAvailable.size(), numRequestedVolumes);
        }
    } else {
        LOG.info("Skipping wait for availability because no EBS volumes were created");
    }

    // Update the status of each volume to AVAILABLE or FAILED based on the result

    List<InstanceEbsVolumes> updated = Lists.newArrayList();
    for (InstanceEbsVolumes instanceEbsVolumes : createdInstanceVolumes) {
        Map<String, InstanceEbsVolumes.Status> updatedVolumes = Maps.newHashMap();
        for (String volumeId : instanceEbsVolumes.getVolumeStatuses().keySet()) {
            InstanceEbsVolumes.Status updatedStatus = volumesAvailable.contains(volumeId)
                    ? InstanceEbsVolumes.Status.AVAILABLE
                    : InstanceEbsVolumes.Status.FAILED;
            updatedVolumes.put(volumeId, updatedStatus);
        }
        updated.add(new InstanceEbsVolumes(instanceEbsVolumes.getVirtualInstanceId(),
                instanceEbsVolumes.getEc2InstanceId(), updatedVolumes));
    }

    return updated;
}

From source file:com.dowdandassociates.gentoo.bootstrap.EbsOnDemandBootstrapInstanceInformationProvider.java

License:Apache License

@Override
protected Optional<Volume> generateVolume(Optional<Instance> instance) {
    if (!instance.isPresent()) {
        return Optional.absent();
    }/*w  ww .j a v  a2 s  . c o  m*/

    log.info("AvailabilityZone=" + instance.get().getPlacement().getAvailabilityZone());
    log.info("Size=" + volumeSize.get().toString());

    CreateVolumeResult createVolumeResult = getEc2Client().createVolume(
            new CreateVolumeRequest().withAvailabilityZone(instance.get().getPlacement().getAvailabilityZone())
                    .withSize(volumeSize.get()));

    log.info("volume id = " + createVolumeResult.getVolume().getVolumeId());
    DescribeVolumesRequest describeVolumesRequest = new DescribeVolumesRequest()
            .withVolumeIds(createVolumeResult.getVolume().getVolumeId());

    try {
        while (true) {
            log.info("Sleeping for " + sleep.get().toString() + " ms");
            Thread.sleep(sleep.get());
            DescribeVolumesResult describeVolumesResult = getEc2Client()
                    .describeVolumes(describeVolumesRequest);

            Volume volume = describeVolumesResult.getVolumes().get(0);
            String state = volume.getState();

            log.info("volume state = " + state);

            if ("creating".equals(state)) {
                continue;
            }

            if (!"available".equals(state)) {
                return Optional.absent();
            }

            return Optional.fromNullable(volume);
        }

    } catch (InterruptedException e) {
        return Optional.absent();
    }
}

From source file:com.dowdandassociates.gentoo.bootstrap.SnapshotOnDemandBootstrapInstanceInformationProvider.java

License:Apache License

@Override
protected Optional<Volume> generateVolume(Optional<Instance> instance) {
    if (!instance.isPresent()) {
        log.error("Instance is not present");
        return Optional.absent();
    }//from   w  w w  .ja v  a 2  s.c  o m

    if (null == snapshotId.get()) {
        log.error("SnapshotId not set");
        return Optional.absent();
    }

    log.info("AvailabilityZone=" + instance.get().getPlacement().getAvailabilityZone());
    log.info("SnapshotId = " + snapshotId.get().toString());

    CreateVolumeResult createVolumeResult = getEc2Client().createVolume(
            new CreateVolumeRequest().withAvailabilityZone(instance.get().getPlacement().getAvailabilityZone())
                    .withSnapshotId(snapshotId.get()));

    DescribeVolumesRequest describeVolumesRequest = new DescribeVolumesRequest()
            .withVolumeIds(createVolumeResult.getVolume().getVolumeId());

    try {
        while (true) {
            log.info("Sleeping for " + sleep.get().toString() + " ms");
            Thread.sleep(sleep.get());
            DescribeVolumesResult describeVolumesResult = getEc2Client()
                    .describeVolumes(describeVolumesRequest);

            Volume volume = describeVolumesResult.getVolumes().get(0);
            String state = volume.getState();

            log.info("volume state = " + state);

            if ("creating".equals(state)) {
                continue;
            }

            if (!"available".equals(state)) {
                return Optional.absent();
            }

            return Optional.fromNullable(volume);
        }

    } catch (InterruptedException e) {
        return Optional.absent();
    }
}

From source file:com.netflix.simianarmy.aws.janitor.crawler.EBSVolumeJanitorCrawler.java

License:Apache License

private List<Resource> getVolumeResources(String... volumeIds) {
    List<Resource> resources = new LinkedList<Resource>();

    AWSClient awsClient = getAWSClient();

    for (Volume volume : awsClient.describeVolumes(volumeIds)) {
        Resource volumeResource = new AWSResource().withId(volume.getVolumeId())
                .withRegion(getAWSClient().region()).withResourceType(AWSResourceType.EBS_VOLUME)
                .withLaunchTime(volume.getCreateTime());
        for (Tag tag : volume.getTags()) {
            LOGGER.info(String.format("Adding tag %s = %s to resource %s", tag.getKey(), tag.getValue(),
                    volumeResource.getId()));
            volumeResource.setTag(tag.getKey(), tag.getValue());
        }//  www .  j av  a 2s . com
        volumeResource.setOwnerEmail(getOwnerEmailForResource(volumeResource));
        volumeResource.setDescription(getVolumeDescription(volume));
        ((AWSResource) volumeResource).setAWSResourceState(volume.getState());
        resources.add(volumeResource);
    }
    return resources;
}

From source file:com.vb.aws.services.compute.ec2.EC2UtilsImpl.java

/**
 * This method returns list of EBS volumes which are available.
 * @return returns list of EBS volumes which are available.
 *//*from ww  w  .  j  av a2  s .  c om*/
public List<Volume> getEBSVolumesAvailable(List<Volume> allEBSVolumes) {

    List<Volume> ebsVolumesAvailable = new ArrayList<>();

    for (Volume volume : allEBSVolumes) {
        if (volume.getState().equalsIgnoreCase(VolumeState.Available.toString())) {
            ebsVolumesAvailable.add(volume);
        }
    }

    System.out.println("INFO : Number of EBS volumes not in use : " + ebsVolumesAvailable.size());
    List<String> volumeIds = ebsVolumesAvailable.stream().map(e -> e.getVolumeId())
            .collect(Collectors.toList());
    System.out.println("INFO: EBS volumes not in use : " + volumeIds);

    return ebsVolumesAvailable;
}

From source file:jp.primecloud.auto.process.aws.AwsCommonProcess.java

License:Open Source License

public Volume waitVolume(AwsProcessClient awsProcessClient, String volumeId) {
    // ???//from   www  .ja v a 2 s  . c o  m
    Volume volume;
    while (true) {
        try {
            Thread.sleep(1000L * awsProcessClient.getDescribeInterval());
        } catch (InterruptedException ignore) {
        }

        volume = describeVolume(awsProcessClient, volumeId);
        VolumeState state;
        try {
            state = VolumeState.fromValue(volume.getState());
        } catch (IllegalArgumentException e) {
            // ???
            AutoException exception = new AutoException("EPROCESS-000112", volume, volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // ?????
        if (state == VolumeState.Available || state == VolumeState.InUse || state == VolumeState.Deleted
                || state == VolumeState.Error) {
            break;
        }
    }

    return volume;
}

From source file:jp.primecloud.auto.process.aws.AwsVolumeProcess.java

License:Open Source License

public void createVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);
    AwsInstance awsInstance = awsInstanceDao.read(instanceNo);

    // ??/*from   ww  w  .  j a va  2 s.  co  m*/
    CreateVolumeRequest request = new CreateVolumeRequest();
    request.withSize(awsVolume.getSize());
    request.withSnapshotId(awsVolume.getSnapshotId());
    request.withAvailabilityZone(awsInstance.getAvailabilityZone());

    String volumeType = Config.getProperty("aws.volumeType");
    if (StringUtils.isNotEmpty(volumeType)) {
        request.withVolumeType(volumeType);
    }

    CreateVolumeResult result = awsProcessClient.getEc2Client().createVolume(request);
    Volume volume = result.getVolume();

    String volumeId = volume.getVolumeId();

    // 
    if (log.isInfoEnabled()) {
        log.info(MessageUtils.getMessage("IPROCESS-100121", volumeId));
    }

    //
    Component component = null;
    if (awsVolume.getComponentNo() != null) {
        component = componentDao.read(awsVolume.getComponentNo());
    }
    Instance instance = instanceDao.read(instanceNo);
    processLogger.debug(component, instance, "AwsEbsCreate",
            new Object[] { awsProcessClient.getPlatform().getPlatformName() });

    // 
    awsVolume.setVolumeId(volume.getVolumeId());
    awsVolume.setStatus(volume.getState());
    awsVolumeDao.update(awsVolume);
}

From source file:jp.primecloud.auto.process.aws.AwsVolumeProcess.java

License:Open Source License

public void waitCreateVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);
    String volumeId = awsVolume.getVolumeId();

    // ???/*  w  w w .j a va2 s . co m*/
    Volume volume;
    try {
        volume = awsCommonProcess.waitVolume(awsProcessClient, volumeId);

        if (!StringUtils.equals(volume.getState(), VolumeState.Available.toString())) {
            // ?
            AutoException exception = new AutoException("EPROCESS-000113", volumeId, volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // 
        if (log.isInfoEnabled()) {
            log.info(MessageUtils.getMessage("IPROCESS-100122", volumeId));
        }
    } catch (AutoException e) {
        // ?
        awsVolume = awsVolumeDao.read(volumeNo);
        awsVolume.setVolumeId(null);
        awsVolume.setStatus(null);
        awsVolumeDao.update(awsVolume);

        throw e;
    }

    //
    Component component = null;
    if (awsVolume.getComponentNo() != null) {
        component = componentDao.read(awsVolume.getComponentNo());
    }
    Instance instance = instanceDao.read(instanceNo);
    processLogger.debug(component, instance, "AwsEbsCreateFinish", new Object[] {
            awsProcessClient.getPlatform().getPlatformName(), awsVolume.getVolumeId(), awsVolume.getSize() });

    // 
    awsVolume = awsVolumeDao.read(volumeNo);
    awsVolume.setStatus(volume.getState());
    awsVolumeDao.update(awsVolume);
}

From source file:jp.primecloud.auto.process.aws.AwsVolumeProcess.java

License:Open Source License

public void waitAttachVolume(AwsProcessClient awsProcessClient, Long instanceNo, Long volumeNo) {
    AwsVolume awsVolume = awsVolumeDao.read(volumeNo);
    String volumeId = awsVolume.getVolumeId();

    Volume volume = null;
    try {//from   w  w w.  jav a 2 s  . c o m
        // volume = awsProcessClient.waitAttachVolume(volumeId, instanceId);
        // TODO: ????????????
        int retry = 6;
        for (int i = 0; i < retry; i++) {
            volume = awsCommonProcess.waitVolume(awsProcessClient, volumeId);
            if (StringUtils.equals(volume.getState(), VolumeState.InUse.toString())) {
                break;
            }
        }

        if (!StringUtils.equals(volume.getState(), VolumeState.InUse.toString())) {
            // ?????
            AutoException exception = new AutoException("EPROCESS-000115", awsVolume.getInstanceId(), volumeId,
                    volume.getState());
            exception.addDetailInfo("result=" + ReflectionToStringBuilder.toString(volume));
            throw exception;
        }

        // 
        if (log.isInfoEnabled()) {
            log.info(MessageUtils.getMessage("IPROCESS-100124", volumeId, awsVolume.getInstanceId()));
        }
    } catch (AutoException e) {
        // ?????
        awsVolume = awsVolumeDao.read(volumeNo);
        awsVolume.setStatus(VolumeState.Error.toString());
        awsVolume.setInstanceId(null);
        awsVolumeDao.update(awsVolume);

        throw e;
    }

    //
    Component component = null;
    if (awsVolume.getComponentNo() != null) {
        component = componentDao.read(awsVolume.getComponentNo());
    }
    Instance instance = instanceDao.read(instanceNo);
    processLogger.debug(component, instance, "AwsEbsAttachFinish",
            new Object[] { instance.getInstanceName(), awsVolume.getVolumeId(), awsVolume.getDevice() });

    // ?
    awsVolume = awsVolumeDao.read(volumeNo);
    awsVolume.setStatus(volume.getState());
    awsVolumeDao.update(awsVolume);
}