class EY::Serverside::Slug::Restarter

Attributes

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

Public Class Methods

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

Private Instance Methods

internal_key() click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 97
def internal_key
  config.paths.internal_key
end
master() click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 75
def master
  @master ||= server_array.find {|server|
    master_roles.include?(server.role)
  }
end
master?(server) click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 67
def master?(server)
  server == master
end
master_roles() click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 81
def master_roles
  [:app_master, :solo]
end
remote_apps() click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 63
def remote_apps
  remotes.select {|server| server.role == :app}
end
remote_command(remote, data) click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 89
def remote_command(remote, data)
  "ssh -i #{internal_key} #{remote.user}@#{remote.hostname} '#{restart_command(data)}'"
end
remotes() click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 57
def remotes
  server_array.reject {|server|
    master?(server)
  }
end
restart_command(data) click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 93
def restart_command(data)
  %{LANG="en_US.UTF-8" /engineyard/bin/app_#{data[:app_name]} deploy}
end
restart_local(data = {}) click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 47
def restart_local(data = {})
  unless run_and_success?(restart_command(data))
    return Failure(data.merge(:error => "Could not restart #{data[:release_name]} on the app master"))
  end

  data[:restarted].push(master)

  Success(data)
end
restart_remote_apps(data = {}) click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 28
def restart_remote_apps(data = {})
  restarted = []

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

  Success(data.merge(:restarted => restarted))
end
server_array() click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 85
def server_array
  @server_array ||= servers.to_a
end
util?(server) click to toggle source
# File lib/engineyard-serverside/slug/restarter.rb, line 71
def util?(server)
  server.role == :util
end