public void endElement(String uri, String name, String qName) { if (qName.equals("deviceName")) { deviceName = currentText.toString().trim(); } else if (qName.equals("volumeId")) { volumeId = currentText.toString().trim(); } else if (qName.equals("deleteOnTermination")) { deleteOnTermination = Boolean.parseBoolean(currentText.toString().trim()); } else if (qName.equals("status")) { attachmentStatus = Attachment.Status.fromValue(currentText.toString().trim()); } else if (qName.equals("attachTime")) { attachTime = dateCodec.toDate(currentText.toString().trim()); } else if (qName.equals("item")) { ebsBlockDevices.put(deviceName, new BlockDevice(volumeId, attachmentStatus, attachTime, deleteOnTermination)); this.volumeId = null; this.deviceName = null; this.deleteOnTermination = true; this.attachmentStatus = null; this.attachTime = null; } currentText = new StringBuilder(); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { checkArgument(checkNotNull(input, "input") instanceof Map, "this binder is only valid for Map"); Map<String, BlockDevice> blockDeviceMapping = (Map<String, BlockDevice>) input; Multimap<String, String> original = queryParser().apply(request.getPayload().getRawContent().toString()); ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder(); builder.putAll("Action", "ModifyInstanceAttribute"); int amazonOneBasedIndex = 1; // according to docs, counters must start with 1 for (Entry<String, BlockDevice> ebsBlockDeviceName : blockDeviceMapping.entrySet()) { // not null by contract builder.put(format(deviceNamePattern, amazonOneBasedIndex), ebsBlockDeviceName.getKey()); builder.put(format(deleteOnTerminationPattern, amazonOneBasedIndex), String.valueOf(ebsBlockDeviceName.getValue().isDeleteOnTermination())); builder.put(format(volumeIdPattern, amazonOneBasedIndex), ebsBlockDeviceName.getValue().getVolumeId()); amazonOneBasedIndex++; } builder.putAll("InstanceId", original.get("InstanceId")); request.setPayload(newUrlEncodedFormPayload(builder.build())); return request; }
private void setBlockDeviceMappingForInstanceInRegion() { String volumeId = ebsInstance.getEbsBlockDevices().get("/dev/sda1").getVolumeId(); Map<String, BlockDevice> mapping = Maps.newLinkedHashMap(); mapping.put("/dev/sda1", new BlockDevice(volumeId, false)); try { client.getInstanceServices().setBlockDeviceMappingForInstanceInRegion(null, ebsInstance.getId(), mapping); Map<String, BlockDevice> devices = client.getInstanceServices().getBlockDeviceMappingForInstanceInRegion(null, ebsInstance.getId()); assertEquals(devices.size(), 1); String deviceName = Iterables.getOnlyElement(devices.keySet()); BlockDevice device = Iterables.getOnlyElement(devices.values()); assertEquals(device.getVolumeId(), volumeId); assertEquals(deviceName, "/dev/sda1"); assertEquals(device.isDeleteOnTermination(), false); System.out.println("OK: setBlockDeviceMappingForInstanceInRegion"); } catch (Exception e) { System.err.println("setBlockDeviceMappingForInstanceInRegion"); e.printStackTrace(); } }
@Override public Volume apply(Entry<String, BlockDevice> from) { return new VolumeImpl(from.getValue().getVolumeId(), Volume.Type.SAN, null, from.getKey(), instance.getRootDeviceName() != null && instance.getRootDeviceName().equals(from.getKey()), true); } });
public void testDescribeInstancesWithDashesInPlaceOfNullDates() { InstanceApi client = requestsSendResponses( describeAvailabilityZonesRequest, describeAvailabilityZonesResponse, HttpRequest.builder().method("POST") .endpoint("http://localhost:8773/services/Cloud/") .addHeader("Host", "localhost:8773") .payload(payloadFromStringWithContentType("Action=DescribeInstances&Signature=kkCE1HzyntmkICEidOizw50B9yjLdNZvAWUXVse1c8o%3D&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2012-04-16T15%3A54%3A08.897Z&Version=2009-04-04&AWSAccessKeyId=identity", "application/x-www-form-urlencoded")).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/nova_ec2_describe_instances.xml")).build() ).getInstanceApi().get(); Set<? extends Reservation<? extends RunningInstance>> response = client.describeInstancesInRegion("nova"); assertEquals(response.size(), 3); Reservation<? extends RunningInstance> target = Iterables.get(response, 2); RunningInstance runningInstance = Iterables.getOnlyElement(target); BlockDevice bd = Iterables.getOnlyElement(runningInstance.getEbsBlockDevices().values()); // this is a '-' in the nova_ec2_describe_instances.xml assertNull(bd.getAttachTime()); // double-check the other fields assertFalse(bd.isDeleteOnTermination()); assertEquals(bd.getVolumeId(), "1"); }
private void setBlockDeviceMappingForInstanceInRegion() { String volumeId = ebsInstance.getEbsBlockDevices().get("/dev/sda1").getVolumeId(); Map<String, BlockDevice> mapping = Maps.newLinkedHashMap(); mapping.put("/dev/sda1", new BlockDevice(volumeId, false)); try { client.getInstanceApi().get().setBlockDeviceMappingForInstanceInRegion(null, ebsInstance.getId(), mapping); Map<String, BlockDevice> devices = client.getInstanceApi().get().getBlockDeviceMappingForInstanceInRegion(null, ebsInstance.getId()); assertEquals(devices.size(), 1); String deviceName = Iterables.getOnlyElement(devices.keySet()); BlockDevice device = Iterables.getOnlyElement(devices.values()); assertEquals(device.getVolumeId(), volumeId); assertEquals(deviceName, "/dev/sda1"); assertEquals(device.isDeleteOnTermination(), false); System.out.println("OK: setBlockDeviceMappingForInstanceInRegion"); } catch (Exception e) { System.err.println("setBlockDeviceMappingForInstanceInRegion"); e.printStackTrace(); } }
@Override public Volume apply(Entry<String, BlockDevice> from) { return new VolumeImpl(from.getValue().getVolumeId(), Volume.Type.SAN, null, from.getKey(), instance.getRootDeviceName() != null && instance.getRootDeviceName().equals(from.getKey()), true); } });
public void endElement(String uri, String name, String qName) { if (qName.equals("deviceName")) { deviceName = currentText.toString().trim(); } else if (qName.equals("volumeId")) { volumeId = currentText.toString().trim(); } else if (qName.equals("deleteOnTermination")) { deleteOnTermination = Boolean.parseBoolean(currentText.toString().trim()); } else if (qName.equals("status")) { attachmentStatus = Attachment.Status.fromValue(currentText.toString().trim()); } else if (qName.equals("attachTime")) { attachTime = dateCodec.toDate(currentText.toString().trim()); } else if (qName.equals("item")) { ebsBlockDevices.put(deviceName, new BlockDevice(volumeId, attachmentStatus, attachTime, deleteOnTermination)); this.volumeId = null; this.deviceName = null; this.deleteOnTermination = true; this.attachmentStatus = null; this.attachTime = null; } currentText = new StringBuilder(); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { checkArgument(checkNotNull(input, "input") instanceof Map, "this binder is only valid for Map"); Map<String, BlockDevice> blockDeviceMapping = (Map<String, BlockDevice>) input; Multimap<String, String> original = queryParser().apply(request.getPayload().getRawContent().toString()); ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder(); builder.putAll("Action", "ModifyInstanceAttribute"); int amazonOneBasedIndex = 1; // according to docs, counters must start with 1 for (Entry<String, BlockDevice> ebsBlockDeviceName : blockDeviceMapping.entrySet()) { // not null by contract builder.put(format(deviceNamePattern, amazonOneBasedIndex), ebsBlockDeviceName.getKey()); builder.put(format(deleteOnTerminationPattern, amazonOneBasedIndex), String.valueOf(ebsBlockDeviceName.getValue().isDeleteOnTermination())); builder.put(format(volumeIdPattern, amazonOneBasedIndex), ebsBlockDeviceName.getValue().getVolumeId()); amazonOneBasedIndex++; } builder.putAll("InstanceId", original.get("InstanceId")); request.setPayload(newUrlEncodedFormPayload(builder.build())); return request; }
@Override public Volume apply(Entry<String, BlockDevice> from) { return new VolumeImpl(from.getValue().getVolumeId(), Volume.Type.SAN, null, from.getKey(), instance.getRootDeviceName() != null && instance.getRootDeviceName().equals(from.getKey()), true); } });
public void endElement(String uri, String name, String qName) { if (qName.equals("deviceName")) { deviceName = currentText.toString().trim(); } else if (qName.equals("volumeId")) { volumeId = currentText.toString().trim(); } else if (qName.equals("deleteOnTermination")) { deleteOnTermination = Boolean.parseBoolean(currentText.toString().trim()); } else if (qName.equals("status")) { attachmentStatus = Attachment.Status.fromValue(currentText.toString().trim()); } else if (qName.equals("attachTime")) { attachTime = dateService.iso8601DateOrSecondsDateParse(currentText.toString().trim()); } else if (qName.equals("item")) { ebsBlockDevices.put(deviceName, new BlockDevice(volumeId, attachmentStatus, attachTime, deleteOnTermination)); this.volumeId = null; this.deviceName = null; this.deleteOnTermination = true; this.attachmentStatus = null; this.attachTime = null; } currentText.setLength(0); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { checkArgument(checkNotNull(input, "input") instanceof Map, "this binder is only valid for Map"); Map<String, BlockDevice> blockDeviceMapping = (Map<String, BlockDevice>) input; Multimap<String, String> original = queryParser().apply(request.getPayload().getRawContent().toString()); ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder(); builder.putAll("Action", "ModifyInstanceAttribute"); int amazonOneBasedIndex = 1; // according to docs, counters must start with 1 for (Entry<String, BlockDevice> ebsBlockDeviceName : blockDeviceMapping.entrySet()) { // not null by contract builder.put(format(deviceNamePattern, amazonOneBasedIndex), ebsBlockDeviceName.getKey()); builder.put(format(deleteOnTerminationPattern, amazonOneBasedIndex), String.valueOf(ebsBlockDeviceName.getValue().isDeleteOnTermination())); builder.put(format(volumeIdPattern, amazonOneBasedIndex), ebsBlockDeviceName.getValue().getVolumeId()); amazonOneBasedIndex++; } builder.putAll("InstanceId", original.get("InstanceId")); request.setPayload(newUrlEncodedFormPayload(builder.build())); return request; }
@Override public Volume apply(Entry<String, BlockDevice> from) { return new VolumeImpl(from.getValue().getVolumeId(), Volume.Type.SAN, null, from.getKey(), instance.getRootDeviceName() != null && instance.getRootDeviceName().equals(from.getKey()), true); } });
public void endElement(String uri, String name, String qName) { if (qName.equals("deviceName")) { deviceName = currentText.toString().trim(); } else if (qName.equals("volumeId")) { volumeId = currentText.toString().trim(); } else if (qName.equals("deleteOnTermination")) { deleteOnTermination = Boolean.parseBoolean(currentText.toString().trim()); } else if (qName.equals("status")) { attachmentStatus = Attachment.Status.fromValue(currentText.toString().trim()); } else if (qName.equals("attachTime")) { attachTime = dateService.iso8601DateOrSecondsDateParse(currentText.toString().trim()); } else if (qName.equals("item")) { ebsBlockDevices.put(deviceName, new BlockDevice(volumeId, attachmentStatus, attachTime, deleteOnTermination)); this.volumeId = null; this.deviceName = null; this.deleteOnTermination = true; this.attachmentStatus = null; this.attachTime = null; } currentText.setLength(0); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { checkArgument(checkNotNull(input, "input") instanceof Map, "this binder is only valid for Map"); Map<String, BlockDevice> blockDeviceMapping = (Map<String, BlockDevice>) input; Multimap<String, String> original = queryParser().apply(request.getPayload().getRawContent().toString()); ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder(); builder.putAll("Action", "ModifyInstanceAttribute"); int amazonOneBasedIndex = 1; // according to docs, counters must start with 1 for (Entry<String, BlockDevice> ebsBlockDeviceName : blockDeviceMapping.entrySet()) { // not null by contract builder.put(format(deviceNamePattern, amazonOneBasedIndex), ebsBlockDeviceName.getKey()); builder.put(format(deleteOnTerminationPattern, amazonOneBasedIndex), String.valueOf(ebsBlockDeviceName.getValue().isDeleteOnTermination())); builder.put(format(volumeIdPattern, amazonOneBasedIndex), ebsBlockDeviceName.getValue().getVolumeId()); amazonOneBasedIndex++; } builder.putAll("InstanceId", original.get("InstanceId")); request.setPayload(newUrlEncodedFormPayload(builder.build())); return request; }
@Override public Volume apply(Entry<String, BlockDevice> from) { return new VolumeImpl(from.getValue().getVolumeId(), Volume.Type.SAN, null, from.getKey(), instance.getRootDeviceName() != null && instance.getRootDeviceName().equals(from.getKey()), true); } });
public void endElement(String uri, String name, String qName) { if (qName.equals("deviceName")) { deviceName = currentText.toString().trim(); } else if (qName.equals("volumeId")) { volumeId = currentText.toString().trim(); } else if (qName.equals("deleteOnTermination")) { deleteOnTermination = Boolean.parseBoolean(currentText.toString().trim()); } else if (qName.equals("status")) { attachmentStatus = Attachment.Status.fromValue(currentText.toString().trim()); } else if (qName.equals("attachTime")) { attachTime = dateService.iso8601DateOrSecondsDateParse(currentText.toString().trim()); } else if (qName.equals("item")) { ebsBlockDevices.put(deviceName, new BlockDevice(volumeId, attachmentStatus, attachTime, deleteOnTermination)); this.volumeId = null; this.deviceName = null; this.deleteOnTermination = true; this.attachmentStatus = null; this.attachTime = null; } currentText.setLength(0); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object input) { checkArgument(checkNotNull(input, "input") instanceof Map, "this binder is only valid for Map"); Map<String, BlockDevice> blockDeviceMapping = (Map<String, BlockDevice>) input; Multimap<String, String> original = queryParser().apply(request.getPayload().getRawContent().toString()); ImmutableMultimap.Builder<String, String> builder = ImmutableMultimap.builder(); builder.putAll("Action", "ModifyInstanceAttribute"); int amazonOneBasedIndex = 1; // according to docs, counters must start with 1 for (Entry<String, BlockDevice> ebsBlockDeviceName : blockDeviceMapping.entrySet()) { // not null by contract builder.put(format(deviceNamePattern, amazonOneBasedIndex), ebsBlockDeviceName.getKey()); builder.put(format(deleteOnTerminationPattern, amazonOneBasedIndex), String.valueOf(ebsBlockDeviceName.getValue().isDeleteOnTermination())); builder.put(format(volumeIdPattern, amazonOneBasedIndex), ebsBlockDeviceName.getValue().getVolumeId()); amazonOneBasedIndex++; } builder.putAll("InstanceId", original.get("InstanceId")); request.setPayload(newUrlEncodedFormPayload(builder.build())); return request; }
private Snapshot createSnapshot() throws RunNodesException { String instanceId = null; try { RunningInstance instance = getOnlyElement(concat(ec2Client.getInstanceServices().runInstancesInRegion( regionId, null, imageId, 1, 1))); instanceId = instance.getId(); assertTrue(runningTester.apply(instance), instanceId + "didn't achieve the state running!"); instance = getOnlyElement(concat(ec2Client.getInstanceServices().describeInstancesInRegion(regionId, instanceId))); BlockDevice device = instance.getEbsBlockDevices().get("/dev/sda1"); assertNotNull(device, "device: /dev/sda1 not present on: " + instance); Snapshot snapshot = ec2Client.getElasticBlockStoreServices().createSnapshotInRegion(regionId, device.getVolumeId()); snapshotsToDelete.add(snapshot.getId()); return snapshot; } finally { if (instanceId != null) ec2Client.getInstanceServices().terminateInstancesInRegion(regionId, instanceId); } }
public void testApplyInputStream() { InputStream is = getClass().getResourceAsStream( "/describe_image_attribute_blockDeviceMapping.xml"); DateService dateService = injector.getInstance(DateService.class); Map<String, BlockDevice> expected = ImmutableMap.<String, BlockDevice> of("/dev/sda1", new BlockDevice("vol-d74b82be", Attachment.Status.ATTACHED, dateService .iso8601DateParse("2010-02-20T18:25:26.000Z"), true), "/dev/sdf", new BlockDevice("vol-another", Attachment.Status.DETACHED, dateService .iso8601DateParse("2010-02-20T19:26:26.000Z"), false)); Map<String, BlockDevice> result = factory.create( injector.getInstance(BlockDeviceMappingHandler.class)).parse(is); assertEquals(result, expected); } }