private Optional<Image> getAmiFromEC2Api(final AmazonEC2Client ec2Client, final String imageId) { try { final DescribeImagesResult response = ec2Client.describeImages(new DescribeImagesRequest().withImageIds(imageId)); return ofNullable(response) .map(DescribeImagesResult::getImages) .map(List::stream) .flatMap(Stream::findFirst); } catch (final AmazonClientException e) { log.warn("Could not describe image " + imageId, e); return empty(); } } }
@Override @Cacheable(cacheNames = "ami-details", cacheManager = "oneDayTTLCacheManager") public Map<String, String> getAmiDetails(final String accountId, final Region region, final String amiId) { final ImmutableMap.Builder<String, String> result = ImmutableMap.builder(); result.put("ami_id", amiId); final AmazonEC2Client ec2 = clientProvider.getClient(AmazonEC2Client.class, accountId, region); final Optional<Image> ami = Optional.ofNullable(new DescribeImagesRequest().withImageIds(amiId)) .map(ec2::describeImages) .map(DescribeImagesResult::getImages) .map(List::stream) .flatMap(Stream::findFirst); ami.map(Image::getName).ifPresent(name -> result.put("ami_name", name)); ami.map(Image::getOwnerId).ifPresent(owner -> result.put("ami_owner_id", owner)); return result.build(); } }
private Optional<Image> getAmi(@Nonnull final EC2InstanceContext context) { final Optional<String> amiId = context.getAmiId(); try { return amiId .map(id -> context .getClient(AmazonEC2Client.class) .describeImages(new DescribeImagesRequest().withImageIds(id))) .map(DescribeImagesResult::getImages) .flatMap(images -> images.stream().findFirst()); } catch (final AmazonClientException e) { log.warn("Could not get AMI of: " + amiId.get(), e); return empty(); } }
/** * * @param ownerId * @param imageIds * @param ec2Client * @return */ public List<Image> getImages(String ownerId, List<String> imageIds, AmazonEC2 ec2Client) { List<Image> images = null; DescribeImagesRequest request = new DescribeImagesRequest(); if (ownerId != null && !ownerId.isEmpty()) { request = request.withOwners(ownerId); } if (imageIds != null && !imageIds.isEmpty()) { request = request.withImageIds(imageIds); } DescribeImagesResult result = ec2Client.describeImages(request); if (result != null) { images = result.getImages(); } else { log.warn("No images found"); } return images; }
private Image getImage() { DescribeImagesRequest request = new DescribeImagesRequest().withImageIds(ami); for (final Image image : getParent().connect().describeImages(request).getImages()) { if (ami.equals(image.getImageId())) { return image; } } throw new AmazonClientException("Unable to find AMI " + ami); }