class EY::Serverside::Deploy::Configuration
Constants
- DEFAULT_KEEP_RELEASES
Public Class Methods
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
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
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
# 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
# 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
# File lib/engineyard-serverside/configuration.rb, line 288 def active_revision paths.active_revision.read.strip end
# 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
# File lib/engineyard-serverside/configuration.rb, line 309 def check_database_adapter? !ignore_database_adapter_warning? && has_database? end
# File lib/engineyard-serverside/configuration.rb, line 149 def configuration @configuration ||= @config_sources.inject({}) {|low,high| low.merge(high)} end
# 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
# File lib/engineyard-serverside/configuration.rb, line 321 def current_role current_roles.to_a.first end
# 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 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
# 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
# File lib/engineyard-serverside/configuration.rb, line 325 def framework_env_names %w[RAILS_ENV RACK_ENV NODE_ENV MERB_ENV] end
# File lib/engineyard-serverside/configuration.rb, line 329 def framework_envs framework_env_names.map { |e| "#{e}=#{framework_env}" }.join(' ') end
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
# File lib/engineyard-serverside/configuration.rb, line 205 def has_key?(key) respond_to?(key.to_sym) || configuration.has_key?(key) end
# File lib/engineyard-serverside/configuration.rb, line 292 def latest_revision paths.latest_revision.read.strip end
# 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
# 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
Delegate to the configuration objects
# 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
# File lib/engineyard-serverside/configuration.rb, line 313 def migrate? !!migration_command end
# File lib/engineyard-serverside/configuration.rb, line 222 def node EY::Serverside.node end
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
# File lib/engineyard-serverside/configuration.rb, line 348 def precompile_assets? precompile_assets == true || precompile_assets == "true" end
# File lib/engineyard-serverside/configuration.rb, line 344 def precompile_assets_inferred? precompile_assets.nil? || precompile_assets == "detect" end
# File lib/engineyard-serverside/configuration.rb, line 297 def previous_revision prev = paths.previous_revision prev && prev.readable? && prev.read.strip end
reset cached configuration hash
# File lib/engineyard-serverside/configuration.rb, line 156 def reload_configuration! @configuration = nil end
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
# File lib/engineyard-serverside/configuration.rb, line 214 def respond_to?(meth, include_private=false) configuration.key?(meth.to_s) || super end
# File lib/engineyard-serverside/configuration.rb, line 317 def role node['instance_role'] end
# 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
# File lib/engineyard-serverside/configuration.rb, line 280 def ruby_version_command "ruby -v" end
# File lib/engineyard-serverside/configuration.rb, line 333 def set_framework_envs framework_env_names.each { |e| ENV[e] = environment } end
# File lib/engineyard-serverside/configuration.rb, line 352 def skip_precompile_assets? precompile_assets == false || precompile_assets == "false" end
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
# File lib/engineyard-serverside/configuration.rb, line 139 def string_keys(hsh) hsh.inject({}) { |h,(k,v)| h[k.to_s] = v; h } end
# File lib/engineyard-serverside/configuration.rb, line 284 def system_version_command "uname -m" end
# File lib/engineyard-serverside/configuration.rb, line 218 def to_json JSON.dump(configuration) end