class Capistrano::Asg::AMI

Extend AWS Resource class to include AMI methods

Public Class Methods

create() { |ami| ... } click to toggle source
# File lib/capistrano/asg/ami.rb, line 7
def self.create(&_block)
  ami = new
  ami.cleanup do
    ami.save
    ami.tag 'deployed-with' => 'cap-asg'
    ami.tag 'cap-asg-deploy-group' => ami.autoscaling_group_name
    yield ami
  end
end

Public Instance Methods

destroy(images = []) click to toggle source
# File lib/capistrano/asg/ami.rb, line 26
def destroy(images = [])
  images.each do |i|
    info "Deleting old AMI: #{i.id}"
    snapshots = snapshots_attached_to i
    i.deregister
    delete_snapshots snapshots
  end
end
save() click to toggle source
# File lib/capistrano/asg/ami.rb, line 17
def save
  info "Creating EC2 AMI from EC2 Instance: #{base_ec2_instance.id}"
  ec2_instance = ec2_resource.instance(base_ec2_instance.id)
  @aws_counterpart = ec2_instance.create_image(
    name: name,
    no_reboot: fetch(:aws_no_reboot_on_create_ami, true)
  )
end

Private Instance Methods

delete_snapshots(snapshots) click to toggle source
# File lib/capistrano/asg/ami.rb, line 52
def delete_snapshots(snapshots)
  snapshots.each do |snapshot|
    info "Deleting snapshot: #{snapshot.id}"
    snapshot.delete unless snapshot.nil?
  end
end
name() click to toggle source
# File lib/capistrano/asg/ami.rb, line 37
def name
  timestamp fetch(:aws_ami_name_prefix, "latest-#{environment}-AMI")
end
snapshots_attached_to(image) click to toggle source
# File lib/capistrano/asg/ami.rb, line 47
def snapshots_attached_to(image)
  ids = image.block_device_mappings.map(&:ebs).compact.map(&:snapshot_id)
  ec2_resource.snapshots(snapshot_ids: ids)
end
trash() click to toggle source
# File lib/capistrano/asg/ami.rb, line 41
def trash
  ec2_resource.images(owners: ['self']).to_a.select do |ami|
    deployed_with_asg? ami
  end
end