@Test(expectedExceptions = AWSResponseException.class) void testDescribeKeyPairsWithInvalidFilter() { for (String region : ec2Api.getConfiguredRegions()) { SortedSet<KeyPair> allResults = Sets.newTreeSet(client.describeKeyPairsInRegion(region)); assertNotNull(allResults); if (!allResults.isEmpty()) { KeyPair pair = allResults.last(); client.describeKeyPairsInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("invalid-filter", pair.getKeyName()).build()); } } }
@Test void testDescribeKeyPairsWithFilter() { for (String region : ec2Api.getConfiguredRegions()) { SortedSet<KeyPair> allResults = Sets.newTreeSet(client.describeKeyPairsInRegion(region)); assertNotNull(allResults); if (!allResults.isEmpty()) { KeyPair pair = allResults.last(); SortedSet<KeyPair> result = Sets.newTreeSet(client.describeKeyPairsInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("key-name", pair.getKeyName()).build())); assertNotNull(result); KeyPair compare = result.last(); assertEquals(compare, pair); } } }
@VisibleForTesting void deleteKeyPair(String region, String group) { for (KeyPair keyPair : client.getKeyPairApi().get().describeKeyPairsInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("key-name", String.format("jclouds#%s#*", group).replace('#', delimiter)) .build())) { String keyName = keyPair.getKeyName(); Predicate<String> keyNameMatcher = namingConvention.create().containsGroup(group); String oldKeyNameRegex = String.format("jclouds#%s#%s#%s", group, region, "[0-9a-f]+").replace('#', delimiter); // old keypair pattern too verbose as it has an unnecessary region qualifier if (keyNameMatcher.apply(keyName) || keyName.matches(oldKeyNameRegex)) { Set<String> instancesUsingKeyPair = extractIdsFromInstances(concat(client.getInstanceApi().get() .describeInstancesInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("instance-state-name", InstanceState.TERMINATED.toString()) .put("instance-state-name", InstanceState.SHUTTING_DOWN.toString()) .put("key-name", keyPair.getKeyName()).build()))); if (!instancesUsingKeyPair.isEmpty()) { logger.debug("<< inUse keyPair(%s), by (%s)", keyPair.getKeyName(), instancesUsingKeyPair); } else { logger.debug(">> deleting keyPair(%s)", keyPair.getKeyName()); client.getKeyPairApi().get().deleteKeyPairInRegion(region, keyPair.getKeyName()); // TODO: test this clear happens credentialsMap.remove(new RegionAndName(region, keyPair.getKeyName())); credentialsMap.remove(new RegionAndName(region, group)); logger.debug("<< deleted keyPair(%s)", keyPair.getKeyName()); } } } }
@VisibleForTesting void deleteKeyPair(String region, String group) { for (KeyPair keyPair : client.getKeyPairApi().get().describeKeyPairsInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("key-name", String.format("jclouds#%s#*", group).replace('#', delimiter)) .build())) { String keyName = keyPair.getKeyName(); Predicate<String> keyNameMatcher = namingConvention.create().containsGroup(group); String oldKeyNameRegex = String.format("jclouds#%s#%s#%s", group, region, "[0-9a-f]+").replace('#', delimiter); // old keypair pattern too verbose as it has an unnecessary region qualifier if (keyNameMatcher.apply(keyName) || keyName.matches(oldKeyNameRegex)) { Set<String> instancesUsingKeyPair = extractIdsFromInstances(concat(client.getInstanceApi().get() .describeInstancesInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("instance-state-name", InstanceState.TERMINATED.toString()) .put("instance-state-name", InstanceState.SHUTTING_DOWN.toString()) .put("key-name", keyPair.getKeyName()).build()))); if (!instancesUsingKeyPair.isEmpty()) { logger.debug("<< inUse keyPair(%s), by (%s)", keyPair.getKeyName(), instancesUsingKeyPair); } else { logger.debug(">> deleting keyPair(%s)", keyPair.getKeyName()); client.getKeyPairApi().get().deleteKeyPairInRegion(region, keyPair.getKeyName()); // TODO: test this clear happens credentialsMap.remove(new RegionAndName(region, keyPair.getKeyName())); credentialsMap.remove(new RegionAndName(region, group)); logger.debug("<< deleted keyPair(%s)", keyPair.getKeyName()); } } } }
@VisibleForTesting void deleteKeyPair(String region, String group) { for (KeyPair keyPair : client.getKeyPairApi().get().describeKeyPairsInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("key-name", String.format("jclouds#%s#*", group).replace('#', delimiter)) .build())) { String keyName = keyPair.getKeyName(); Predicate<String> keyNameMatcher = namingConvention.create().containsGroup(group); String oldKeyNameRegex = String.format("jclouds#%s#%s#%s", group, region, "[0-9a-f]+").replace('#', delimiter); // old keypair pattern too verbose as it has an unnecessary region qualifier if (keyNameMatcher.apply(keyName) || keyName.matches(oldKeyNameRegex)) { Set<String> instancesUsingKeyPair = extractIdsFromInstances(concat(client.getInstanceApi().get() .describeInstancesInRegionWithFilter(region, ImmutableMultimap.<String, String>builder() .put("instance-state-name", InstanceState.TERMINATED.toString()) .put("instance-state-name", InstanceState.SHUTTING_DOWN.toString()) .put("key-name", keyPair.getKeyName()).build()))); if (!instancesUsingKeyPair.isEmpty()) { logger.debug("<< inUse keyPair(%s), by (%s)", keyPair.getKeyName(), instancesUsingKeyPair); } else { logger.debug(">> deleting keyPair(%s)", keyPair.getKeyName()); client.getKeyPairApi().get().deleteKeyPairInRegion(region, keyPair.getKeyName()); // TODO: test this clear happens credentialsMap.remove(new RegionAndName(region, keyPair.getKeyName())); credentialsMap.remove(new RegionAndName(region, group)); logger.debug("<< deleted keyPair(%s)", keyPair.getKeyName()); } } } }
public void testFilterWhenResponseIs404() { HttpResponse filterResponse = HttpResponse.builder().statusCode(404).build(); EC2Api apiWhenNotExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse); assertEquals(apiWhenNotExist.getKeyPairApi().get().describeKeyPairsInRegionWithFilter("us-east-1", ImmutableMultimap.<String, String>builder() .put("key-name", "gsg-keypair") .build()), ImmutableSet.of()); } }
public void testFilterWhenResponseIs2xx() { HttpResponse filterResponse = HttpResponse.builder().statusCode(200) .payload(payloadFromResourceWithContentType("/describe_keypairs.xml", "text/xml")).build(); EC2Api apiWhenExist = requestsSendResponses(describeRegionsRequest, describeRegionsResponse, filter, filterResponse); KeyPair keyPair = getOnlyElement(apiWhenExist.getKeyPairApi().get().describeKeyPairsInRegionWithFilter("us-east-1", ImmutableMultimap.<String, String>builder() .put("key-name", "gsg-keypair") .build())); assertEquals(keyPair.getKeyName(), "gsg-keypair"); }