class Roark::Ami
Attributes
ami_id[RW]
aws[RW]
name[RW]
Public Class Methods
new(args)
click to toggle source
# File lib/roark/ami.rb, line 6 def initialize(args) @aws = args[:aws] @ami_id = args[:ami_id] @name = args[:name] @region = @aws.region @logger = Roark.logger end
Public Instance Methods
available?()
click to toggle source
# File lib/roark/ami.rb, line 131 def available? state == :available end
create_ami()
click to toggle source
# File lib/roark/ami.rb, line 28 def create_ami @logger.info "Creating AMI '#{@name}' from Instance '#{instance_id}'." begin ami = instance.create_ami_from_instance @ami_id = ami.id rescue AWS::Errors::Base => e return Response.new :code => 1, :message => e.message end @logger.info "AMI '#{@ami_id}' created." Response.new :code => 0, :message => "AMI '#{@ami_id}' created." end
create_instance(args)
click to toggle source
# File lib/roark/ami.rb, line 15 def create_instance(args) @logger.info "Creating instance in '#{@region}'." begin instance.create :parameters => args[:parameters], :template => args[:template] rescue AWS::Errors::Base => e return Response.new :code => 1, :message => e.message end @logger.info "Instance created." Response.new :code => 0, :message => 'Instance created.' end
destroy()
click to toggle source
# File lib/roark/ami.rb, line 60 def destroy @logger.info "Destroying AMI '#{@ami_id}'." begin ec2_destroy_ami.destroy @ami_id rescue AWS::Errors::Base, AWS::Core::Resource::NotFound => e return Response.new :code => 1, :message => e.message end @logger.info "Destroy completed succesfully." Response.new :code => 0, :message => "Destroy completed succesfully." end
destroy_instance()
click to toggle source
# File lib/roark/ami.rb, line 50 def destroy_instance begin instance.destroy rescue AWS::Errors::Base => e return Response.new :code => 1, :message => e.message end @logger.info "Instance destroyed." Response.new :code => 0, :message => "Instance destroyed." end
exists?()
click to toggle source
# File lib/roark/ami.rb, line 139 def exists? ec2_ami_state.exists? @ami_id end
instance_id()
click to toggle source
# File lib/roark/ami.rb, line 147 def instance_id instance.instance_id end
pending?()
click to toggle source
# File lib/roark/ami.rb, line 135 def pending? state == :pending end
state()
click to toggle source
# File lib/roark/ami.rb, line 143 def state ec2_ami_state.state @ami_id end
stop_instance()
click to toggle source
# File lib/roark/ami.rb, line 40 def stop_instance @logger.info "Stopping instance." begin instance.stop rescue AWS::Errors::Base => e return Response.new :code => 1, :message => e.message end Response.new :code => 0, :message => "Instance stopped." end
wait_for_ami()
click to toggle source
# File lib/roark/ami.rb, line 96 def wait_for_ami while !exists? || pending? @logger.info "Waiting for AMI creation to complete. Current state: '#{state}'." sleep 15 end if available? msg = "AMI completed succesfully." @logger.info msg Response.new :code => 0, :message => msg else msg = "AMI did not complete succesfully." @logger.info msg Response.new :code => 1, :message => msg end end
wait_for_instance()
click to toggle source
# File lib/roark/ami.rb, line 71 def wait_for_instance while instance.in_progress? || !instance.exists? @logger.info "Waiting for instance to come online." sleep 60 end if instance.success? msg = "Instance '#{instance_id}' completed succesfully." @logger.info msg Response.new :code => 0, :message => msg else msg = "Instance did not complete succesfully." @logger.info msg Response.new :code => 1, :message => msg end end
wait_for_instance_to_stop()
click to toggle source
# File lib/roark/ami.rb, line 88 def wait_for_instance_to_stop while instance.status != :stopped @logger.info "Waiting for instance '#{instance_id}' to stop. Current state: '#{instance.status}'." sleep 15 end Response.new :code => 0, :message => "Instance stopped." end
Private Instance Methods
ec2_ami_state()
click to toggle source
# File lib/roark/ami.rb, line 169 def ec2_ami_state @ec2_ami_state ||= Roark::Aws::Ec2::AmiState.new @aws end
ec2_destroy_ami()
click to toggle source
# File lib/roark/ami.rb, line 181 def ec2_destroy_ami @ec2_destroy_ami ||= Roark::Aws::Ec2::DestroyAmi.new @aws end
instance()
click to toggle source
# File lib/roark/ami.rb, line 165 def instance @instance ||= Instance.new :aws => @aws, :name => instance_name end
instance_name()
click to toggle source
# File lib/roark/ami.rb, line 153 def instance_name @name.downcase.gsub /[^a-zA-Z0-9\-]/, '-' end
tag(tags)
click to toggle source
# File lib/roark/ami.rb, line 161 def tag(tags) ec2_ami_tags.add :ami_id => @ami_id, :tags => tags end