Sha256: aa7993bd4e68d50930c12b56ace034ad09e92ca77ecf71bccf5cb3b103849587
Contents?: true
Size: 1.36 KB
Versions: 5
Compression:
Stored size: 1.36 KB
Contents
require 'bora/cfn/stack' class Bora module Resolver class Ami NoAMI = Class.new(StandardError) InvalidParameter = Class.new(StandardError) InvalidUserId = Class.new(StandardError) def initialize(stack) @stack = stack end def resolve(uri) owners = [] ami_prefix = uri.host raise InvalidParameter, "Invalid ami parameter #{uri}" unless ami_prefix if !uri.query.nil? && uri.query.include?('owner') query = URI.decode_www_form(uri.query).to_h owners = query['owner'].split(',') else owners << 'self' end ec2 = Aws::EC2::Client.new(region: @stack.region) begin images = ec2.describe_images( owners: owners, filters: [ { name: 'name', values: [ami_prefix] }, { name: 'state', values: ['available'] } ] ).images rescue Aws::EC2::Errors::InvalidUserIDMalformed raise InvalidUserId, "Invalid owner argument in #{uri}" end raise NoAMI, "No Matching AMI's for prefix #{ami_prefix}" if images.empty? images.sort! { |a, b| DateTime.parse(a.creation_date) <=> DateTime.parse(b.creation_date) }.last.image_id end end end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
bora-1.7.4 | lib/bora/resolver/ami.rb |
bora-1.7.3 | lib/bora/resolver/ami.rb |
bora-1.7.2 | lib/bora/resolver/ami.rb |
bora-1.7.1 | lib/bora/resolver/ami.rb |
bora-1.7.0 | lib/bora/resolver/ami.rb |