class Awsom::Instance

Public Class Methods

new(name, vpc_id:, setup_proc: nil) click to toggle source
# File lib/awsom/instance.rb, line 7
def initialize(name, vpc_id:, setup_proc: nil)
  @name = name
  @vpc_id = vpc_id
end

Public Instance Methods

created(setup_proc = nil) { || ... } click to toggle source
# File lib/awsom/instance.rb, line 12
def created(setup_proc = nil, &block)
  id = find_id
  return id if id
  run_params = yield
  id = create(run_params)
  instance = Aws::EC2::Instance.new(id)
  puts "(#{@name}) waiting for instance to start"
  instance.wait_until_running
  setup_proc.call(instance) if setup_proc
end

Private Instance Methods

create(run_params) click to toggle source
# File lib/awsom/instance.rb, line 46
def create(run_params)
  result = Ec2.run_instances(run_params)
  result.instances[0].instance_id
rescue Aws::Errors::ServiceError, ArgumentError
  raise Error, "while creating instance #{@name}"
end
find_id() click to toggle source
# File lib/awsom/instance.rb, line 25
def find_id
  filters = [
    { name: "vpc-id", values: [@vpc_id] },
    { name: "tag:Name", values: [@name] }
  ]
  
  result = Ec2.describe_instances(filters: filters)
  instances = []
  result.reservations.each do |r|
    r.instances.each { |i| instances << i }
  end
  
  num_results = instances.size
  raise Error, "mulitple instances found with name #{@name}" if num_results > 1
  if num_results == 1
    instances.first.instance_id
  else
    false
  end
end