@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); } });
@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); } });
@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); } });
@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); } });
@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); } });
@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; }
@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; }
@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; }
@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; }
@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.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(); } }
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(); } }
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); } }
protected Snapshot createSnapshot() throws RunNodesException { String instanceId = null; try { RunningInstance instance = getOnlyElement(concat(ec2Api.getInstanceApi().get().runInstancesInRegion( regionId, null, imageId, 1, 1))); instanceId = instance.getId(); assertTrue(runningTester.apply(instance), instanceId + "didn't achieve the state running!"); instance = getOnlyElement(concat(ec2Api.getInstanceApi().get().describeInstancesInRegion(regionId, instanceId))); BlockDevice device = instance.getEbsBlockDevices().get("/dev/sda1"); assertNotNull(device, "device: /dev/sda1 not present on: " + instance); Snapshot snapshot = ec2Api.getElasticBlockStoreApi().get().createSnapshotInRegion(regionId, device.getVolumeId()); snapshotsToDelete.add(snapshot.getId()); Predicate<Snapshot> snapshotted = retry(new SnapshotCompleted(ec2Api.getElasticBlockStoreApi().get()), 600, 10, SECONDS); assert snapshotted.apply(snapshot); return snapshot; } finally { if (instanceId != null) ec2Api.getInstanceApi().get().terminateInstancesInRegion(regionId, instanceId); } }
BlockDevice gp2Device = instance.getEbsBlockDevices().get("/dev/sdb"); assertNotNull(gp2Device, "device /dev/sdb not present on " + instance); Volume gp2Volume = Iterables.getOnlyElement(ec2Api.getElasticBlockStoreApi().get().describeVolumesInRegion(regionId, gp2Device.getVolumeId())); assertNotNull(gp2Volume, "/dev/sdb volume is null"); assertEquals(gp2Volume.getVolumeType(), "gp2"); assertNotNull(device, "device: /dev/sda1 not present on: " + instance); Snapshot snapshot = ec2Api.getElasticBlockStoreApi().get().createSnapshotInRegion(regionId, device.getVolumeId()); snapshotsToDelete.add(snapshot.getId()); Predicate<Snapshot> snapshotted = retry(new SnapshotCompleted(ec2Api.getElasticBlockStoreApi().get()), 600, 10, SECONDS);
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"); }
device.getVolumeId())); device.getVolumeId()));
device.getVolumeId())); device.getVolumeId()));