class EC2Launcher::EnvironmentProcessor

Attributes

environments[RW]

Public Class Methods

new(base_directory, environments_directories) click to toggle source
# File lib/ec2launcher/environment_processor.rb, line 15
def initialize(base_directory, environments_directories)
  env_dirs = process_directory_list(base_directory, environments_directories, "environments", "Environments", false)

  # Load other environments
  @environments = { }
  env_dirs.each do |env_dir|
    Dir.entries(env_dir).each do |env_name|
      filename = File.join(env_dir, env_name)
      next if File.directory?(filename)

      new_env = load_environment_file(filename)
      validate_environment(filename, new_env)

      @environments[new_env.name] = new_env
    end
  end

  # Process inheritance rules for environments
  @environments.values.each do |env|
    new_env = process_environment_inheritance(env)
    @environments[new_env.name] = new_env
  end

  # Process aliases
  @environments.values.each do |env|
    env.aliases.each {|env_alias| @environments[env_alias] = env }
  end
end

Private Instance Methods

load_environment_file(name, fail_on_missing = false) click to toggle source

Load and parse an environment file

@param [String] name full pathname of the environment file to load @param [EC2Launcher::Environment, nil] default_environment the default environment,

which will be used as the base for the new environment. Optional.

@param [Boolean] fail_on_missing print an error and exit if the file does not exist.

@return [EC2Launcher::Environment] the new environment loaded from the specified file.

# File lib/ec2launcher/environment_processor.rb, line 55
def load_environment_file(name, fail_on_missing = false)
  unless File.exists?(name)
    abort("Unable to read environment: #{name}") if fail_on_missing
    return nil
  end

  load_env = EC2Launcher::DSL::Environment.new
  load_env.load(File.read(name))
  load_env
end
process_environment_inheritance(env) click to toggle source
# File lib/ec2launcher/environment_processor.rb, line 66
def process_environment_inheritance(env)
    return env if env.inherit.nil?

    # Find base environment
    base_env = @environments[env.inherit]
    abort("Invalid inheritance '#{env.inherit}' in #{env.name}") if base_env.nil?

    new_env = nil
    if base_env.inherit.nil?
      # Clone base environment
      new_env = Marshal::load(Marshal.dump(base_env))
    else
      new_env = process_environment_inheritance(base_env)
    end
    new_env.merge(env)
    new_env
end
validate_environment(filename, environment) click to toggle source

Validates all settings in an environment file

@param [String] filename name of the environment file @param [EC2Launcher::DSL::Environment] environment environment object to validate

# File lib/ec2launcher/environment_processor.rb, line 89
def validate_environment(filename, environment)
  unless environment.availability_zone.nil? || AVAILABILITY_ZONES.include?(environment.availability_zone)
    abort("Invalid availability zone '#{environment.availability_zone}' in environment '#{environment.name}' (#{filename})")
  end
end