class Tsudura::Aws::Ami
Public Class Methods
new(instance_id, config, timestamp)
click to toggle source
# File lib/tsudura/aws/ami.rb, line 5 def initialize(instance_id, config, timestamp) @instance_id = instance_id @config = config @timestamp = timestamp end
Public Instance Methods
create()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 11 def create @new_image_id = create_ami waiting_for_available @new_image_id end
deregister()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 17 def deregister unless not_use_images.empty? not_use_images.each do |image_id| ec2.deregister_image(image_id: image_id) end end end
Private Instance Methods
all_images()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 58 def all_images tmp = [] ec2.describe_images( owners: ["#{@config[:owner]}"], filters: [ { name: "name", values: ["#{@config[:service]}-#{short_env}*"] }] ).each_page { |i| tmp.concat i.images } tmp.map(&:image_id) end
available_images()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 69 def available_images tmp = [] launch_config.describe_launch_configurations.each_page { |i| tmp.concat i.launch_configurations } tmp.select { |i| i[:launch_configuration_name] =~ /#{@config[:service]}-#{short_env}/ }.map(&:image_id).uniq end
create_ami()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 27 def create_ami result = ec2.create_image(name: "#{@config[:service]}-#{short_env}-#{@timestamp}", instance_id: @instance_id) result[:image_id] end
ec2()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 46 def ec2 @ec2 ||= ::Aws::EC2::Client.new(region: @config[:region]) end
launch_config()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 50 def launch_config @launch_config ||= ::Aws::AutoScaling::Client.new(region: @config[:region]) end
not_use_images()
click to toggle source
# File lib/tsudura/aws/ami.rb, line 54 def not_use_images @not_use_images ||= all_images - available_images end
waiting_for_available()
click to toggle source
stateがavailableになるまで待ち
# File lib/tsudura/aws/ami.rb, line 35 def waiting_for_available status = nil progress = Tsudura::ProgressBar.new while (status.nil? || status == 'pending') sleep 10 status = ec2.describe_images(image_ids: [@new_image_id])[:images].first.state progress.write end end