List of usage examples for com.amazonaws.services.ec2.model VolumeAttachment getAttachTime
public java.util.Date getAttachTime()
The time stamp when the attachment initiated.
From source file:EbsAttach.java
License:Open Source License
public static void main(String[] args) throws Exception { init();//www.ja va 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.netflix.simianarmy.aws.janitor.VolumeTaggingMonkey.java
License:Apache License
private void tagVolumesWithLatestAttachment(AWSClient awsClient) { List<Volume> volumes = awsClient.describeVolumes(); LOGGER.info(String.format("Trying to tag %d volumes for Janitor Monkey meta data.", volumes.size())); Date now = calendar.now().getTime(); for (Volume volume : volumes) { String owner = null, instanceId = null; Date lastDetachTime = null; List<VolumeAttachment> attachments = volume.getAttachments(); List<Tag> tags = volume.getTags(); // The volume can have a special tag is it does not want to be changed/tagged // by Janitor monkey. if ("donotmark".equals(getTagValue(JanitorMonkey.JANITOR_TAG, tags))) { LOGGER.info(/*from w w w . j a v a 2s .c o m*/ String.format("The volume %s is tagged as not handled by Janitor", volume.getVolumeId())); continue; } Map<String, String> janitorMetadata = parseJanitorTag(tags); // finding the instance attached most recently. VolumeAttachment latest = null; for (VolumeAttachment attachment : attachments) { if (latest == null || latest.getAttachTime().before(attachment.getAttachTime())) { latest = attachment; } } if (latest != null) { instanceId = latest.getInstanceId(); owner = getOwnerEmail(instanceId, janitorMetadata, tags, awsClient); } if (latest == null || "detached".equals(latest.getState())) { if (janitorMetadata.get(JanitorMonkey.DETACH_TIME_TAG_KEY) == null) { // There is no attached instance and the last detached time is not set. // Use the current time as the last detached time. LOGGER.info(String.format("Setting the last detached time to %s for volume %s", now, volume.getVolumeId())); lastDetachTime = now; } else { LOGGER.debug(String.format("The volume %s was already marked as detached at time %s", volume.getVolumeId(), janitorMetadata.get(JanitorMonkey.DETACH_TIME_TAG_KEY))); } } else { // The volume is currently attached to an instance lastDetachTime = null; } String existingOwner = janitorMetadata.get(JanitorMonkey.OWNER_TAG_KEY); if (owner == null && existingOwner != null) { // Save the current owner in the tag when we are not able to find a owner. owner = existingOwner; } if (needsUpdate(janitorMetadata, owner, instanceId, lastDetachTime)) { Event evt = updateJanitorMetaTag(volume, instanceId, owner, lastDetachTime, awsClient); if (evt != null) { context().recorder().recordEvent(evt); } } } }
From source file:org.xmlsh.aws.util.AWSEC2Command.java
License:BSD License
protected void writeAttachment(VolumeAttachment attachment) throws XMLStreamException { startElement("attachment"); attribute("delete-on-termination", AWSUtil.parseBoolean(attachment.getDeleteOnTermination())); attribute("attach-date", Util.formatXSDateTime(attachment.getAttachTime())); attribute("device", attachment.getDevice()); attribute("instance-id", attachment.getInstanceId()); attribute("volume-id", attachment.getVolumeId()); attribute("state", attachment.getState()); endElement();/*w ww . j a v a 2s . c o m*/ }