class Awsom::InstanceDSL
Attributes
setup_proc[R]
Public Class Methods
new(name, subnet_id:, vpc_id:)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 7 def initialize(name, subnet_id:, vpc_id:) @name = name @subnet_id = subnet_id @vpc_id = vpc_id @volumes = {} @security_groups = [] @attrs = { image_id: nil, key_name: nil, size: nil, associate_public_ip_address: true, credits: "unlimited", term_protect: false, } @setup_proc = nil end
Public Instance Methods
include_config(pr)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 32 def include_config(pr) instance_eval(&pr) if pr end
read(&block)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 24 def read(&block) instance_eval(&block) end
run_params()
click to toggle source
# File lib/awsom/instance_dsl.rb, line 28 def run_params params end
Private Instance Methods
associate_public_ip_address(val)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 66 def associate_public_ip_address(val) set :associate_public_ip_address, val end
get(key)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 43 def get(key) val = @attrs[key] raise Error, "key #{key} not found" if val.nil? val end
image_id(val)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 62 def image_id(val) set :image_id, val end
key_name(val)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 70 def key_name(val) set :key_name, val end
load_ami_volumes()
click to toggle source
# File lib/awsom/instance_dsl.rb, line 89 def load_ami_volumes Image.block_device_mappings(get :image_id).each do |m| name = m.device_name ebs = m.ebs.to_h if @volumes.key?(name) @volumes[name][:ebs].merge!(ebs) { |k, old, new| old } else @volumes[name] = { device_name: name, ebs: ebs } end end end
network_interfaces()
click to toggle source
# File lib/awsom/instance_dsl.rb, line 101 def network_interfaces groups = @security_groups.map do |i| SecurityGroup.id(i, @vpc_id) end netif = { associate_public_ip_address: get(:associate_public_ip_address), delete_on_termination: true, device_index: 0, groups: groups, subnet_id: @subnet_id } [netif] end
params()
click to toggle source
# File lib/awsom/instance_dsl.rb, line 116 def params load_ami_volumes tag_specifications = [ { resource_type: "instance", tags: [ { key: "Name", value: @name } ] }, { resource_type: "volume", tags: [ { key: "Name", value: @name } ] } ] params = { image_id: get(:image_id), instance_type: get(:size), key_name: get(:key_name), disable_api_termination: get(:term_protect), block_device_mappings: @volumes.values, network_interfaces: network_interfaces, tag_specifications: tag_specifications, min_count: 1, max_count: 1 } params[:credit_specification] = { cpu_credits: get(:credits) } if get(:size) =~ /\At[23]/ params end
security_groups(val)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 85 def security_groups(val) @security_groups = Set.new(val) end
set(key, val)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 38 def set(key, val) raise Error, "unknown attr #{key}" if not @attrs.key?(key) @attrs[key] = val end
setup(&block)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 49 def setup(&block) @setup_proc = block end
setup_salt(template, &block)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 53 def setup_salt(template, &block) require_relative 'salt_bootstrap' @setup_proc = Proc.new do |instance| ip = instance.private_ip_address bootstrap = SaltBootstrap.new(@name, ip: ip, template: template) bootstrap.run end end
size(val)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 74 def size(val) set :size, val end
volume(name, size:, **opts)
click to toggle source
# File lib/awsom/instance_dsl.rb, line 78 def volume(name, size:, **opts) ebs = { delete_on_termination: false, volume_type: "gp2", iops: nil } ebs[:volume_size] = size ebs.merge!(opts) @volumes[name] = { device_name: name, ebs: ebs } end