class Rivet::LaunchConfig

Constants

ATTRIBUTES

Attributes

config[R]
id_prefix[R]

Public Class Methods

new(config, id_prefix = 'rivet_') click to toggle source
# File lib/rivet/as/launch_config.rb, line 16
def initialize(config, id_prefix = 'rivet_')
  @config    = config
  @id_prefix = id_prefix

  ATTRIBUTES.each do |a|
    if config.respond_to?(a)
      Rivet::Log.debug "Setting LaunchConfig @#{a} to #{config.send(a)}"
      instance_variable_set("@#{a}", config.send(a))
    end
  end
end

Public Instance Methods

identity() click to toggle source
# File lib/rivet/as/launch_config.rb, line 32
def identity
  @identity ||= generate_identity
end
save() click to toggle source
# File lib/rivet/as/launch_config.rb, line 36
def save
  AwsUtils.verify_security_groups(security_groups)

  lc_collection = AWS::AutoScaling.new.launch_configurations

  if lc_collection[identity].exists?
    Rivet::Log.info "Launch configuration #{identity} already exists in AWS"
  else
    options = {}
    options[:key_pair]                      = key_name                      unless key_name.nil?
    options[:security_groups]               = security_groups               unless security_groups.nil?
    options[:user_data]                     = user_data                     unless user_data.nil?
    options[:iam_instance_profile]          = iam_instance_profile          unless iam_instance_profile.nil?
    options[:associate_public_ip_address]   = associate_public_ip_address   unless associate_public_ip_address.nil?
    options[:detailed_instance_monitoring]  = detailed_instance_monitoring  unless detailed_instance_monitoring.nil?
    options[:block_device_mappings]         = block_device_mappings         unless block_device_mappings.nil?
    options[:kernel_id]                     = kernel_id                     unless kernel_id.nil?
    options[:ramdisk_id]                    = ramdisk_id                    unless ramdisk_id.nil?
    options[:spot_price]                    = spot_price                    unless spot_price.nil?

    Rivet::Log.info "Saving launch configuration #{identity} to AWS"
    Rivet::Log.debug "Launch Config options:\n #{options.inspect}"
    lc_collection.create(identity, image_id, instance_type, options)
  end
end
user_data() click to toggle source
# File lib/rivet/as/launch_config.rb, line 28
def user_data
  @user_data ||= Bootstrap.new(@config).user_data
end

Protected Instance Methods

build_identity_string() click to toggle source
# File lib/rivet/as/launch_config.rb, line 64
def build_identity_string
  identity = ATTRIBUTES.inject('') do |accum, attribute|
    if attribute != :bootstrap
      attr_value = if self.send(attribute).nil?
        "\0"
      else
        self.send(attribute)
      end
      attr_value = attr_value.join("\t")  if attr_value.respond_to? :join
      attr_value = attr_value.to_s        if !!attr_value == attr_value
      accum << attribute.to_s
      accum << Base64.encode64(attr_value)
    else
      accum << attribute.to_s
      accum << Base64.encode64(user_data ? user_data : "\0")
    end
    accum
  end
  identity
end
generate_identity() click to toggle source
# File lib/rivet/as/launch_config.rb, line 85
def generate_identity
  @id_prefix + Digest::SHA1.hexdigest(build_identity_string)
end