class EY::Serverside::Deploy::Configuration

Constants

DEFAULT_KEEP_RELEASES

Public Class Methods

def_boolean_option(name, default=nil, &block) click to toggle source

Calls def_option and adds a name? predicate method

# File lib/engineyard-serverside/configuration.rb, line 28
def self.def_boolean_option(name, default=nil, &block)
  key ||= name.to_s

  define_method(name) do
    if block
      val = fetch(key) {instance_eval(&block)}
    else
      val = fetch(key, default)
    end
    not [false,nil,'false','nil'].include?(val) # deal with command line options turning booleans into strings
  end
  alias_method(:"#{name}?", name)
end
def_option(name, default=nil, key=nil, &block) click to toggle source

Defines a fetch method for the specified key. If no default and no block is specified, it means the key is required and if it’s accessed without a value, it should raise.

# File lib/engineyard-serverside/configuration.rb, line 18
def self.def_option(name, default=nil, key=nil, &block)
  key ||= name.to_s
  if block_given?
    define_method(name) { fetch(key) {instance_eval(&block)} }
  else
    define_method(name) { fetch(key, default) }
  end
end
def_required_option(name, key=nil) click to toggle source

Required options do not have a default value. An option being required does not mean that it is always supplied, it just means that if it is accessed and it does not exist, an error will be raised instead of returning a nil default value.

# File lib/engineyard-serverside/configuration.rb, line 46
def self.def_required_option(name, key=nil)
  key ||= name.to_s
  define_method(name) do
    fetch(key) { raise "Required configuration option not found: #{key.inspect}" }
  end
end
new(options) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 132
def initialize(options)
  opts = string_keys(options)
  config = JSON.load(opts.delete("config") || "{}")
  append_config_source opts # high priority
  append_config_source config # lower priority
end

Public Instance Methods

[](key) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 197
def [](key)
  if respond_to?(key.to_sym)
    send(key.to_sym)
  else
    configuration[key]
  end
end
active_revision() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 288
def active_revision
  paths.active_revision.read.strip
end
append_config_source(config_source) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 143
def append_config_source(config_source)
  @config_sources ||= []
  @config_sources.unshift(config_source.dup)
  reload_configuration!
end
c()

FIXME: single letter variable is of very questionable value

Alias for: configuration
check_database_adapter?() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 309
def check_database_adapter?
  !ignore_database_adapter_warning? && has_database?
end
configuration() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 149
def configuration
  @configuration ||= @config_sources.inject({}) {|low,high| low.merge(high)}
end
Also aliased as: c
configured_services() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 361
def configured_services
  services = YAML.load_file(paths.shared_services_yml.to_s)
  services.respond_to?(:keys) && !services.empty? ? services.keys : nil
rescue
  nil
end
current_role() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 321
def current_role
  current_roles.to_a.first
end
extra_bundle_install_options() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 337
def extra_bundle_install_options
  opts = []
  opts += ["--without", bundle_without] if bundle_without
  opts += [bundle_options] if bundle_options
  opts.flatten
end
fetch(key, *args, &block) click to toggle source

Fetch a key from the config. You must supply either a default second argument, or a default block

# File lib/engineyard-serverside/configuration.rb, line 193
def fetch(key, *args, &block)
  configuration.fetch(key.to_s, *args, &block)
end
fetch_deprecated(attr, replacement, default) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 53
def fetch_deprecated(attr, replacement, default)
  called = false
  result = fetch(attr) { called = true; default }
  if !called # deprecated attr was found
    @deprecation_warning ||= {}
    @deprecation_warning[attr] ||= begin
                                     EY::Serverside.deprecation_warning "The configuration key '#{attr}' is deprecated in favor of '#{replacement}'."
                                     true
                                   end
  end
  result
end
framework_env_names() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 325
def framework_env_names
  %w[RAILS_ENV RACK_ENV NODE_ENV MERB_ENV]
end
framework_envs() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 329
def framework_envs
  framework_env_names.map { |e| "#{e}=#{framework_env}" }.join(' ')
end
has_database?() click to toggle source

The nodatabase.yml file is dropped by server configuration when there is no database in the cluster.

# File lib/engineyard-serverside/configuration.rb, line 304
def has_database?
  paths.path(:shared_config, 'database.yml').exist? &&
    !paths.path(:shared_config, 'nodatabase.yml').exist?
end
has_key?(key) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 205
def has_key?(key)
  respond_to?(key.to_sym) || configuration.has_key?(key)
end
latest_revision() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 292
def latest_revision
  paths.latest_revision.read.strip
end
Also aliased as: revision
load_ey_yml_data(data, shell) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 160
def load_ey_yml_data(data, shell)
  loaded = false

  environments = data['environments']
  if environments && environments[environment_name]
    shell.substatus "ey.yml configuration loaded for environment #{environment_name.inspect}."

    env_data = string_keys(environments[environment_name])
    shell.debug "#{environment_name}:\n#{env_data.pretty_inspect}"

    append_config_source(env_data) # insert at higher priority than defaults
    loaded = true
  end

  defaults = data['defaults']
  if defaults
    shell.substatus "ey.yml configuration loaded."
    append_config_source(string_keys(defaults)) # insert at lowest priority so as not to disturb important config
    shell.debug "defaults:\n#{defaults.pretty_inspect}"
    loaded = true
  end

  if loaded
    true
  else
    shell.info "No matching ey.yml configuration found for environment #{environment_name.inspect}."
    shell.debug "ey.yml:\n#{data.pretty_inspect}"
    false
  end
end
load_source(klass, shell, uri) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 244
def load_source(klass, shell, uri)
  klass.new(
    shell,
    :verbose          => verbose,
    :repository_cache => paths.repository_cache,
    :app              => app,
    :uri              => uri,
    :ref              => branch
  )
end
method_missing(meth, *args, &blk) click to toggle source

Delegate to the configuration objects

Calls superclass method
# File lib/engineyard-serverside/configuration.rb, line 210
def method_missing(meth, *args, &blk)
  configuration.key?(meth.to_s) ? configuration.fetch(meth.to_s) : super
end
migrate?() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 313
def migrate?
  !!migration_command
end
node() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 222
def node
  EY::Serverside.node
end
paths() click to toggle source

Use [] to access attributes instead of calling methods so that we get nils instead of NoMethodError.

Rollback doesn’t know about the repository location (nor should it need to), but it would like to use short_log_message.

# File lib/engineyard-serverside/configuration.rb, line 260
def paths
  @paths ||= Paths.new({
    :home             => configuration['home_path'],
    :app_name         => app_name,
    :deploy_root      => configuration['deploy_to'],
    :active_release   => configuration['release_path'],
    :repository_cache => configuration['repository_cache'],
  })
end
precompile_assets?() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 348
def precompile_assets?
  precompile_assets == true || precompile_assets == "true"
end
precompile_assets_inferred?() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 344
def precompile_assets_inferred?
  precompile_assets.nil? || precompile_assets == "detect"
end
previous_revision() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 297
def previous_revision
  prev = paths.previous_revision
  prev && prev.readable? && prev.read.strip
end
reload_configuration!() click to toggle source

reset cached configuration hash

# File lib/engineyard-serverside/configuration.rb, line 156
def reload_configuration!
  @configuration = nil
end
required_downtime_stack?() click to toggle source

Assume downtime required if stack is not specified (nil) just in case.

# File lib/engineyard-serverside/configuration.rb, line 357
def required_downtime_stack?
  [nil, 'nginx_mongrel', 'glassfish'].include? stack
end
respond_to?(meth, include_private=false) click to toggle source
Calls superclass method
# File lib/engineyard-serverside/configuration.rb, line 214
def respond_to?(meth, include_private=false)
  configuration.key?(meth.to_s) || super
end
revision()
Alias for: latest_revision
role() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 317
def role
  node['instance_role']
end
rollback_paths!() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 270
def rollback_paths!
  rollback_paths = paths.rollback
  if rollback_paths
    @paths = rollback_paths
    true
  else
    false
  end
end
ruby_version_command() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 280
def ruby_version_command
  "ruby -v"
end
set_framework_envs() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 333
def set_framework_envs
  framework_env_names.each { |e| ENV[e] = environment }
end
skip_precompile_assets?() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 352
def skip_precompile_assets?
  precompile_assets == false || precompile_assets == "false"
end
source(shell) click to toggle source

Infer the deploy source strategy to use based on flag or default to specified strategy.

Returns a Source object.

# File lib/engineyard-serverside/configuration.rb, line 230
def source(shell)
  if archive && git
    shell.fatal "Both --git and --archive specified. Precedence is not defined. Aborting"
    raise "Both --git and --archive specified. Precedence is not defined. Aborting"
  end
  if archive
    load_source(EY::Serverside::Source::Archive, shell, archive)
  elsif source_class
    load_source(EY::Serverside::Source.const_get(source_class), shell, git)
  else # git can be nil for integrate or rollback
    load_source(EY::Serverside::Source::Git, shell, git)
  end
end
string_keys(hsh) click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 139
def string_keys(hsh)
  hsh.inject({}) { |h,(k,v)| h[k.to_s] = v; h }
end
system_version_command() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 284
def system_version_command
  "uname -m"
end
to_json() click to toggle source
# File lib/engineyard-serverside/configuration.rb, line 218
def to_json
  JSON.dump(configuration)
end