Sha256: 5cd48734ab9514bab6d74a1f31e53326a944b86a7a72b05b1024aabfdd580ff1
Contents?: true
Size: 1.79 KB
Versions: 1
Compression:
Stored size: 1.79 KB
Contents
require 'aws-sdk' require 'forwardable' module AmiSpec class AwsInstance extend Forwardable def self.start(args) new(args).tap do |instance| instance.start end end def initialize(options) @role = options.fetch(:role) @ami = options.fetch(:ami) @subnet_id = options.fetch(:subnet_id) @key_name = options.fetch(:key_name) @instance_type = options.fetch(:aws_instance_type) @public_ip = options.fetch(:aws_public_ip) @region = options.fetch(:aws_region) @security_group_ids = options.fetch(:aws_security_groups) @tags = ec2ify_tags(options.fetch(:tags)) end def_delegators :@instance, :instance_id, :tags, :terminate, :private_ip_address, :public_ip_address def start client = Aws::EC2::Client.new(client_options) placeholder_instance = client.run_instances(instances_options).instances.first @instance = Aws::EC2::Instance.new(placeholder_instance.instance_id, client_options) @instance.wait_until_running tag_instance end private def client_options !@region.nil? ? {region: @region} : {} end def ec2ify_tags(tags) tags.map { |k,v| {key: k, value: v} } end def instances_options params = { image_id: @ami, min_count: 1, max_count: 1, instance_type: @instance_type, key_name: @key_name, network_interfaces: [{ device_index: 0, associate_public_ip_address: @public_ip, subnet_id: @subnet_id, }] } unless @security_group_ids.nil? params[:network_interfaces][0][:groups] = @security_group_ids end params end def tag_instance @instance.create_tags(tags: [{ key: 'AmiSpec', value: @role }] + @tags) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ami_spec-0.3.0 | lib/ami_spec/aws_instance.rb |