class Vanagon::Engine::Ec2

Attributes

ami[RW]
instance_type[RW]
key[RW]
key_name[RW]
shutdown_behavior[RW]
subnet_id[RW]
userdata[RW]

Public Class Methods

new(platform, target = nil, **opts) click to toggle source
Calls superclass method Vanagon::Engine::Base::new
# File lib/vanagon/engine/ec2.rb, line 13
def initialize(platform, target = nil, **opts)
  super

  @ami = @platform.aws_ami
  @target_user = @platform.target_user
  @subnet_id = @platform.aws_subnet_id
  @userdata = @platform.aws_user_data
  @region = @platform.aws_region || 'us-east-1'
  @key_name = @platform.aws_key_name
  @key = @platform.aws_key
  @instance_type = @platform.aws_instance_type || "t1.micro"
  @required_attributes = ["ssh_port", "aws_ami", "aws_key_name"]
  @shutdown_behavior = @platform.aws_shutdown_behavior

  @ec2 = ::Aws::EC2::Client.new(region: @region)
  @resource = ::Aws::EC2::Resource.new(client: @ec2)
end

Public Instance Methods

get_userdata() click to toggle source
# File lib/vanagon/engine/ec2.rb, line 35
def get_userdata
  unless @userdata.nil?
    Base64.encode64(ERB.new(@userdata).result(binding))
  end
end
instance() click to toggle source
# File lib/vanagon/engine/ec2.rb, line 56
def instance
  @instance ||= instances.first
end
instances() click to toggle source
# File lib/vanagon/engine/ec2.rb, line 41
def instances
  @instances ||= @resource.create_instances({
    image_id: ami,
    min_count: 1,
    max_count: 1,
    key_name: key_name,
    instance_type: instance_type,
    subnet_id: subnet_id,
    user_data: get_userdata,
    monitoring: {
      enabled: false,
    }
  })
end
name() click to toggle source
# File lib/vanagon/engine/ec2.rb, line 31
def name
  'ec2'
end
select_target() click to toggle source
# File lib/vanagon/engine/ec2.rb, line 60
def select_target
  VanagonLogger.info "Instance created id: #{instance.id}"
  VanagonLogger.info "Created instance waiting for status ok"
  @ec2.wait_until(:instance_status_ok, instance_ids: [instance.id])
  VanagonLogger.info "Instance running"
  @target = instance.private_ip_address
rescue ::Aws::Waiters::Errors::WaiterFailed => error
  fail "Failed to wait for ec2 instance to start got error #{error}"
end
teardown() click to toggle source
# File lib/vanagon/engine/ec2.rb, line 70
def teardown
  VanagonLogger.info "Destroying instance on AWS id: #{instance.id}"
  instances.batch_terminate!
end