module AWSCarb

Constants

VERSION

Public Class Methods

banner() click to toggle source
run() click to toggle source
# File lib/aws-carb.rb, line 77
def self.run

  #
  # configuration
  #

  # parse cli args
  cli_arguments = CliArgumentParser.parse

  # display banner on successful cli argument parsing..
  banner

  # create a configuration based on our various data sources..
  @config = Config.instance
  @config.create(cli_arguments)
  @config.display if $GLOBAL_VERBOSE

  # load erb template and parse the template with user_data_template_variables
  # then merge user_data template with raw user_data (if provided) -
  # end up single user_data ready to pass into ec2 instance..
  @user_data = UserData.instance

  combined_user_data = @user_data.create(@config)

  @config.config[:ec2][:user_data] = combined_user_data

  @user_data.display if @config[:user_data_template][:file] and ($GLOBAL_VERBOSE or @config[:show_parsed_template])

  #
  # aws interaction
  #
  if @config[:route53].andand[:new_dns_records]
    @route53 = Services::Route53.instance
    @route53.client(@config)
    @route53.check_hostname_and_domain_availability
  end

  ## initialize ec2 object with credentials
  @ec2 = Services::Ec2.instance
  @ec2.client(@config)
  @ec2.create_instance

  if @config[:route53].andand[:new_dns_records]
    @route53.create_records(@ec2)
  end

  #
  # summary
  #

  show_instance_details
end
show_instance_details() click to toggle source
# File lib/aws-carb.rb, line 131
  def self.show_instance_details

    instance_attributes = []
    instance_data = {}

    ShellSpinner "# collecting instance data", false do
      instance_attributes << @ec2.instance.class.describe_call_attributes.keys
      instance_attributes << @ec2.instance.class.reservation_attributes.keys
      instance_attributes << @ec2.instance.class.mutable_describe_attributes.keys

      instance_attributes.flatten!

      begin
        instance_attributes.each do |attribute|

          # FIXME: You may only describe the sourceDestCheck attribute for VPC instances
          next if attribute == :source_dest_check

          value = @ec2.instance.send(attribute)

          next unless value
          next if attribute == :user_data

          if value.class == AWS::Core::Data::List
            instance_data[attribute] = value.to_a
          else
            instance_data[attribute] = value
          end
        end
      rescue => e
        puts e
      end
    end

    puts
    puts "# instance details:"
    puts instance_data.to_yaml
    puts

    summary = <<-HEREDOC.strip_heredoc
      # instance summary:
      id:               #{@ec2.instance.id}
    HEREDOC

    summary += "public ip:        #{@ec2.instance.public_ip_address}\n" if @ec2.instance.public_ip_address
    summary += "private ip:       #{@ec2.instance.private_ip_address}\n"
    summary += "public aws fqdn:  #{@ec2.instance.public_dns_name}\n"   if @ec2.instance.public_dns_name
    summary += "private aws fqdn: #{@ec2.instance.private_dns_name}\n"

    unless @config[:route53][:new_dns_records].nil?
      # tests exist since if a machine is part of a vpc it may not have a public fqdn..
      summary += "public fqdn:      #{@config[:route53][:new_dns_records][:public][:alias]}\n" if @config[:route53][:new_dns_records][:public][:target]
      summary += "private fqdn:     #{@config[:route53][:new_dns_records][:private][:alias]}\n" if @config[:route53][:new_dns_records][:private][:target]
    end

    if @ec2.instance.dns_name
      summary += <<-HEREDOC.strip_heredoc

        # connect: 
        ssh #{@ec2.instance.dns_name} -l ubuntu
      HEREDOC
    end

    puts summary
  end