class EY::Serverside::Slug::Finalizer

Attributes

config[R]
servers[R]
shell[R]

Public Class Methods

new(config, shell, servers) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 17
def initialize(config, shell, servers)
  @config = config
  @shell = shell
  @servers = servers
end

Private Instance Methods

all_releases(data) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 75
def all_releases(data)
  "#{app_path(data)}/releases"
end
app_path(data) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 79
def app_path(data)
  "/data/#{data[:app_name]}"
end
finalize_command(data) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 61
def finalize_command(data)
  [
    "for release in #{all_releases(data)}/*",
    %{do if [ -d "${release}" ] && [ "$(basename "${release}")" != "#{data[:release_name]}"]},
    'then rm -rf "${release}"',
    'fi',
    'done'
  ].join(' ; ')
end
finalize_local(data = {}) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 43
def finalize_local(data = {})
  unless run_and_success?(finalize_command(data))
    return Failure(data.merge(:error => "Could not finalize #{data[:release_name]} on the app master"))
  end

  data[:finalized].push(servers.first {|server| server.role == :app_master || server.role == :solo})

  Success(data)
end
finalize_remotes(data) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 24
def finalize_remotes(data)
  finalized = []

  remotes.each do |remote|
    if run_and_success?(remote_command(remote, data))
      finalized.push(remote)
    else
      return Failure(
        data.merge(
          :finalized => finalized,
          :error => "Could not finalize #{data[:release_name]} on #{remote.hostname}"
        )
      )
    end
  end

  Success(data.merge(:finalized => finalized))
end
old_release_path(data) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 71
def old_release_path(data)
  "#{all_releases(data)}/#{data[:current_release_name]}"
end
remote_command(remote, data) click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 57
def remote_command(remote, data)
  "ssh -i #{config.paths.internal_key} #{remote.user}@#{remote.hostname} '#{finalize_command(data)}'"
end
remotes() click to toggle source
# File lib/engineyard-serverside/slug/finalizer.rb, line 53
def remotes
  servers.reject {|server| server.role == :app_master}
end