public boolean apply(RunningInstance instance) { logger.trace("looking for state on instance %s", instance); try { instance = refresh(instance); logger.trace("%s: looking for instance state %s: currently: %s", instance.getId(), InstanceState.RUNNING, instance .getInstanceState()); return instance.getInstanceState() == InstanceState.RUNNING; } catch (ResourceNotFoundException e) { return false; } }
@VisibleForTesting static List<Volume> addEBS(final RunningInstance instance, Iterable<? extends Volume> volumes) { Iterable<Volume> ebsVolumes = Iterables.transform(instance.getEbsBlockDevices().entrySet(), new Function<Entry<String, BlockDevice>, Volume>() { @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); } }); if (instance.getRootDeviceType() == RootDeviceType.EBS) { volumes = Iterables.filter(volumes, new Predicate<Volume>() { @Override public boolean apply(Volume input) { return !input.isBootDevice(); } }); } return Lists.newArrayList(Iterables.concat(volumes, ebsVolumes)); }
@Override public boolean apply(RunningInstance input) { switch (input.getInstanceState()) { case TERMINATED: case SHUTTING_DOWN: return false; } return keyPair.getKeyName().equals(input.getKeyName()); } };
@VisibleForTesting String getGroupForInstance(final RunningInstance instance) { String group = parseGroupFrom(instance, instance.getGroupNames()); if(group == null && instance.getKeyName() != null) { // when not using a generated security group, e.g. in VPC, try from key: group = parseGroupFrom(instance, Sets.newHashSet(instance.getKeyName())); } return group; }
@Override public NodeMetadata apply(RunningInstance instance) { if (instance == null || instance.getId() == null) return null; NodeMetadataBuilder builder = new NodeMetadataBuilder(); builder.name(instance.getTags().get("Name")); addMetadataAndParseTagsFromValuesOfEmptyString(builder, instance.getTags()); builder.providerId(instance.getId()); builder.id(instance.getRegion() + "/" + instance.getId()); String group = getGroupForInstance(instance); builder.group(group); if (instance.getPrivateDnsName() != null) builder.hostname(instance.getPrivateDnsName().replaceAll("\\..*", "")); addCredentialsForInstance(builder, instance); builder.status(instanceToNodeStatus.get(instance.getInstanceState())); builder.backendStatus(instance.getRawState()); if (emptyToNull(instance.getIpAddress()) != null) addressesBuilder.add(instance.getIpAddress()); if (emptyToNull(instance.getPrivateIpAddress()) != null) addressesBuilder.add(instance.getPrivateIpAddress()); Location location = getLocationForAvailabilityZoneOrRegion(instance); builder.location(location); builder.imageId(instance.getRegion() + "/" + instance.getImageId()); RegionAndName regionAndName = new RegionAndName(instance.getRegion(), instance.getImageId()); try { Image image = imageMap.get().getUnchecked(regionAndName);
public void testWhenRunning() throws UnknownHostException { Set<Reservation<RunningInstance>> contents = ImmutableSet.of(new Reservation<RunningInstance>(defaultRegion, ImmutableSet.of("adriancole.ec2ingress"), ImmutableSet.of(RunningInstance.builder().region( defaultRegion).groupName("adriancole.ec2ingress").amiLaunchIndex("0").dnsName( "ec2-174-129-81-68.compute-1.amazonaws.com").imageId("ami-82e4b5c7").instanceId("i-0799056f") .instanceState(InstanceState.RUNNING).rawState("running").instanceType(InstanceType.M1_SMALL) .ipAddress("174.129.81.68").kernelId("aki-a71cf9ce").keyName("adriancole.ec21").launchTime( dateService.iso8601DateParse("2009-11-09T03:00:34.000Z")) // MonitoringState.DISABLED, .availabilityZone("us-east-1c").virtualizationType("paravirtual").privateDnsName( "ip-10-243-42-70.ec2.internal").privateIpAddress("10.243.42.70").ramdiskId( "ari-a51cf9cc").rootDeviceType(RootDeviceType.INSTANCE_STORE).build()), "993194456877", null, "r-a3c508cb")); Set<Reservation<? extends RunningInstance>> result = parseRunningInstances("/describe_instances_running.xml"); assertEquals(result.toString(), contents.toString()); assertEquals(get(get(result, 0), 0).getInstanceState(), InstanceState.RUNNING); assertEquals(get(get(result, 0), 0).getRawState(), "running"); }
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 RunningInstance blockUntilWeCanSshIntoInstance(RunningInstance instance) throws UnknownHostException { System.out.printf("%d: %s awaiting instance to run %n", System.currentTimeMillis(), instance.getId()); assert runningTester.apply(instance); // search my identity for the instance I just created Set<? extends Reservation<? extends RunningInstance>> reservations = client.getInstanceServices() .describeInstancesInRegion(instance.getRegion(), instance.getId()); // last // parameter // (ids) // narrows // the // search instance = Iterables.getOnlyElement(Iterables.getOnlyElement(reservations)); System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(), instance.getIpAddress()); assert socketTester.apply(HostAndPort.fromParts(instance.getIpAddress(), 22)); System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), instance.getDnsName()); sshPing(instance); System.out.printf("%d: %s ssh connection made%n", System.currentTimeMillis(), instance.getId()); return instance; }
@Test(enabled = false, dependsOnMethods = "testCreateRunningInstance") void testCreateAndAttachVolume() { volume = client.getElasticBlockStoreServices().createVolumeInAvailabilityZone(instance.getAvailabilityZone(), VOLUME_SIZE); System.out.printf("%d: %s awaiting volume to become available%n", System.currentTimeMillis(), volume.getId()); assert volumeTester.apply(volume); Attachment attachment = client.getElasticBlockStoreServices().attachVolumeInRegion(instance.getRegion(), volume.getId(), instance.getId(), "/dev/sdh"); System.out.printf("%d: %s awaiting attachment to complete%n", System.currentTimeMillis(), attachment.getId()); assert attachTester.apply(attachment); System.out.printf("%d: %s attachment complete%n", System.currentTimeMillis(), attachment.getId()); }
@VisibleForTesting String getPrivateKeyOrNull(RunningInstance instance) { KeyPair keyPair = credentialsMap.get(new RegionAndName(instance.getRegion(), instance.getKeyName())); return keyPair != null ? keyPair.getKeyMaterial() : null; }
private Location getLocationForAvailabilityZoneOrRegion(final RunningInstance instance) { Location location = findLocationWithId(instance.getAvailabilityZone()); if (location == null) location = findLocationWithId(instance.getRegion()); return location; }
private RunningInstance blockUntilWeCanSshIntoInstance(RunningInstance instance) throws UnknownHostException { System.out.printf("%d: %s awaiting instance to run %n", System.currentTimeMillis(), instance.getId()); assert runningTester.apply(instance); instance = getInstance(instance.getId()); System.out .printf("%d: %s awaiting instance to have ip assigned %n", System.currentTimeMillis(), instance.getId()); assert hasIpTester.apply(instance); System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(), instance.getIpAddress()); assert socketTester.apply(HostAndPort.fromParts(instance.getIpAddress(), 22)); System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), instance.getDnsName()); sshPing(instance); System.out.printf("%d: %s ssh connection made%n", System.currentTimeMillis(), instance.getId()); System.out.printf("%d: %s awaiting http service to start%n", System.currentTimeMillis(), instance.getIpAddress()); assert socketTester.apply(HostAndPort.fromParts(instance.getIpAddress(), 80)); System.out.printf("%d: %s http service started%n", System.currentTimeMillis(), instance.getDnsName()); return instance; }
public boolean apply(RunningInstance instance) { logger.trace("looking for ipAddress on instance %s", instance); try { instance = refresh(instance); return instance.getIpAddress() != null; } catch (AWSResponseException e) { if (e.getError().getCode().equals("InvalidInstanceID.NotFound")) return false; throw e; } }
assertEquals(instance.getKeyName(), group); assertEquals(Sets.newTreeSet(instance.getGroupNames()), ImmutableSortedSet.<String> of("jclouds#" + group + "#" + instance.getRegion(), group)); "jclouds#" + group + "#" + instance.getRegion())); assert secgroup.size() == 0 : secgroup;
protected Builder<?> newBuilder() { return RunningInstance.builder(); }
@Override public boolean apply(@Nullable String s) { if (Strings.isNullOrEmpty(s)) return false; data.set(windowsApi.getPasswordDataForInstance(instance.getId())); if (data.get() == null) return false; return !Strings.isNullOrEmpty(data.get().getPasswordData()); } };
@VisibleForTesting String getLoginAccountFor(RunningInstance from) throws ExecutionException { return imageMap.get().get(new RegionAndName(from.getRegion(), from.getImageId())).getDefaultCredentials().identity; } }
@Override public Optional<LoginCredentials> load(final RunningInstance instance) throws ExecutionException { if ("windows".equals(instance.getPlatform())) { return Optional.of(passwordCredentialsFromWindowsInstance.apply(instance)); } else if (instance.getKeyName() != null) { return Optional.of(LoginCredentials.builder().user(getLoginAccountFor(instance)).privateKey(getPrivateKeyOrNull(instance)).build()); } return Optional.absent(); }
@Override public Set<SecurityGroup> listSecurityGroupsForNode(String id) { checkNotNull(id, "id"); String[] parts = AWSUtils.parseHandle(id); String region = parts[0]; String instanceId = parts[1]; RunningInstance instance = getOnlyElement(Iterables.concat(client.getInstanceApi().get().describeInstancesInRegion(region, instanceId))); if (instance == null) { return ImmutableSet.of(); } Set<String> groupNames = instance.getGroupNames(); Set<? extends org.jclouds.ec2.domain.SecurityGroup> rawGroups = client.getSecurityGroupApi().get().describeSecurityGroupsInRegion(region, Iterables.toArray(groupNames, String.class)); return ImmutableSet.copyOf(transform(filter(rawGroups, notNull()), groupConverter)); }