List of usage examples for com.amazonaws.services.ec2.model Volume getState
public String getState()
The volume state.
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); }