class EY::Serverside::Slug::Distributor

Attributes

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

Public Class Methods

distribute(data = {}) click to toggle source
# File lib/engineyard-serverside/slug/distributor.rb, line 14
def self.distribute(data = {})
  new(data[:config], data[:shell], data[:servers]).call(data)
end
new(config, shell, servers) click to toggle source
# File lib/engineyard-serverside/slug/distributor.rb, line 20
def initialize(config, shell, servers)
  @config = config
  @shell = shell
  @servers = servers
end

Private Instance Methods

distribute_to_remotes(input = {}) click to toggle source
# File lib/engineyard-serverside/slug/distributor.rb, line 35
def distribute_to_remotes(input = {})
  remotes = input[:remotes]
  releases_path = "/data/#{input[:app_name]}/releases"
  package = "#{releases_path}/#{input[:release_name]}.tgz"
  internal_key = config.paths.internal_key

  remotes.each do |remote|
    cmd = "scp -i #{internal_key} #{package} #{remote.user}@#{remote.hostname}:#{releases_path}"

    unless run_and_success?(cmd)
      return Failure(
        input.merge(
          :error => "Could not copy #{package} to #{remote.hostname}"
        )
      )
    end
  end

  Success(input)
end
find_remotes(input = {}) click to toggle source
# File lib/engineyard-serverside/slug/distributor.rb, line 27
def find_remotes(input = {})
  remotes = servers.
    to_a.
    reject {|server| server.role.to_sym == :app_master}

  Success(input.merge(:remotes => remotes))
end