class EC2Bootstrap
Attributes
cloud_config[RW]
default_ami_config[RW]
dryrun[RW]
instances_config[RW]
Public Class Methods
from_config(config, *args)
click to toggle source
# File lib/ec2_bootstrap.rb, line 24 def self.from_config(config, *args) self.validate_config(config) config['instances'].map! {|i| i.map {|key, value| [key.to_sym, value]}.to_h} return self.new(config, *args) end
from_config_file(config_path, *args)
click to toggle source
# File lib/ec2_bootstrap.rb, line 32 def self.from_config_file(config_path, *args) config = YAML.load(File.read(config_path)) return self.from_config(config, *args) end
new(config, dryrun: true, verbose: false, logger: nil)
click to toggle source
# File lib/ec2_bootstrap.rb, line 16 def initialize(config, dryrun: true, verbose: false, logger: nil) @logger = logger || self.new_logger(verbose) @dryrun = dryrun @cloud_config = config['cloud_config'] @instances_config = config['instances'] @default_ami_config = config['default_ami'] end
validate_config(config)
click to toggle source
# File lib/ec2_bootstrap.rb, line 37 def self.validate_config(config) instances = config['instances'] raise KeyError, "Config file is missing 'instances' key." unless instances raise TypeError, "'instances' config must be an array of hashes." unless instances.is_a?(Array) && instances.first.is_a?(Hash) if config['default_ami'] raise TypeError, "'default_ami' config must be a hash." unless config['default_ami'].is_a?(Hash) end return true end
Public Instance Methods
ami_class()
click to toggle source
# File lib/ec2_bootstrap.rb, line 55 def ami_class return AMI end
create_instances()
click to toggle source
# File lib/ec2_bootstrap.rb, line 68 def create_instances @logger.info("This was a dry run. No EC2 instances were created.") if @dryrun default_image_id = @default_ami_config ? ami_class.from_config(@default_ami_config, @logger).find_newest_image_id : nil instances = self.make_instances(default_image_id) instances.each do |instance| knife_shell_command = instance.format_knife_shell_command @logger.debug("Knife shell command for #{instance.name}:\n#{knife_shell_command}") unless @dryrun status = self.shell_out_command(knife_shell_command) return status end end end
instance_class()
click to toggle source
# File lib/ec2_bootstrap.rb, line 64 def instance_class return Instance end
make_instances(default_image_id)
click to toggle source
# File lib/ec2_bootstrap.rb, line 59 def make_instances(default_image_id) generic_args = {logger: @logger, image: default_image_id, dryrun: @dryrun, cloud_config: @cloud_config} return @instances_config.map {|i| self.instance_class.new(i.merge(generic_args))} end
new_logger(verbose)
click to toggle source
# File lib/ec2_bootstrap.rb, line 49 def new_logger(verbose) logger = Logger.new(STDOUT) verbose ? logger.level = Logger::DEBUG : logger.level = Logger::INFO return logger end
shell_out_command(command)
click to toggle source
# File lib/ec2_bootstrap.rb, line 85 def shell_out_command(command) STDOUT.sync = true Open3::popen2e(command) do |stdin, stdout_and_stderr, wait_thr| while (line = stdout_and_stderr.gets) do @logger.info(line.strip) end status = wait_thr.value @logger.info("status: #{status}") return status end end