class EY::Serverside::Slug::Enabler

Attributes

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

Public Class Methods

new(config, shell, servers) click to toggle source
# File lib/engineyard-serverside/slug/enabler.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/enabler.rb, line 85
def all_releases(data)
  "#{app_path(data)}/releases"
end
app_path(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 93
def app_path(data)
  "/data/#{data[:app_name]}"
end
create_release(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 65
def create_release(data)
  "mkdir -p #{release_path(data)}"
end
current_path(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 89
def current_path(data)
  "#{app_path(data)}/current"
end
enable_local(data = {}) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 43
def enable_local(data = {})
  unless run_and_success?(local_command(data))
    return Failure(data.merge(:error => "Could not enable #{data[:release_name]} on the app master"))
  end

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

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

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

  Success(data.merge(:enabled => enabled))
end
local_command(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 61
def local_command(data)
  "#{unarchive(data)} && #{link_current(data)}"
end
package(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 77
def package(data)
  "#{release_path(data)}.tgz"
end
release_path(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 81
def release_path(data)
  "#{all_releases(data)}/#{data[:release_name]}"
end
remote_command(remote, data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 57
def remote_command(remote, data)
  "ssh -i #{config.paths.internal_key} #{remote.user}@#{remote.hostname} '#{create_release(data)} && #{unarchive(data)} && #{link_current(data)}'"
end
remotes() click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 53
def remotes
  servers.reject {|server| server.role == :app_master}
end
unarchive(data) click to toggle source
# File lib/engineyard-serverside/slug/enabler.rb, line 69
def unarchive(data)
  "tar -C #{release_path(data)} -z -x -f #{package(data)}"
end