class AwsEc2::Cleaner::Ami

Public Instance Methods

clean() click to toggle source
# File lib/aws_ec2/cleaner/ami.rb, line 5
def clean
  query = @options[:query]
  keep = @options[:keep] || 2
  puts "Cleaning out old AMIs with base name: #{@options[:query]}"
  return if ENV['TEST']

  images = search_ami(query)
  images = images.sort_by { |i| i.name }.reverse
  delete_list = images[keep..-1] || []
  puts "Deleting #{delete_list.size} images."
  delete_list.each do |i|
    delete(i)
  end
end

Private Instance Methods

delete(image) click to toggle source
# File lib/aws_ec2/cleaner/ami.rb, line 21
def delete(image)
  message = "Deleting image: #{image.image_id} #{image.name}"
  if @options[:noop]
    puts "NOOP: #{message}"
  else
    puts message
    ec2.deregister_image(image_id: image.image_id)
  end
rescue Aws::EC2::Errors::InvalidAMIIDUnavailable
  # happens when image was just deleted but its still
  # showing up as available when calling describe_images
  puts "WARN: #{e.message}"
end
search_ami(query, owners=["self"]) click to toggle source
# File lib/aws_ec2/cleaner/ami.rb, line 35
def search_ami(query, owners=["self"])
  ec2.describe_images(
    owners: owners,
    filters: [
      {name: "name", values: [query]},
      {name: "state", values: ["available"]}
    ]
  ).images
end