module Builderator::Control::Data::Image
Find AMI IDs to use for sources
Constants
- FILTERS
Pre-defined filters
- OWNERS
Account IDs of public image owners
- PROPERTIES
Filter fields defined in docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Builderator::Util.ec2.html#describe_images-instance_method
Public Class Methods
search(query = {})
click to toggle source
# File lib/builderator/control/data/image.rb, line 64 def search(query = {}) options = {} ## Reverse-merge a pre-defined filter into the query if query.include?('filter') query = FILTERS[query['filter']].merge(query) if FILTERS.include?(query['filter']) query.delete('filter') end options['image_ids'] = Util.to_array(query.delete('image_id')) if query.include?('image_id') options['owners'] = Util.to_array(query.delete('owner') { 'self' }) options['filters'] = query.each_with_object([]) do |(k, v), memo| next if v.nil? ## Construct filter objects. Assume that non-enumerated keys are tags memo << { :name => PROPERTIES.include?(k.to_s) ? k.to_s : "tag:#{ k }", :values => Util.to_array(v) } end ## Don't send an empty filters array options.delete('filters') if options['filters'].empty? Util.ec2.describe_images(options) .each_with_object([]) { |page, images| images.push(*page.images) } .sort { |a, b| DateTime.iso8601(b.creation_date) <=> DateTime.iso8601(a.creation_date) } end