class EY::Serverside::Propagator

Propagator ensures that a proper version of the engineyard-serverside gem is installed on a given set of servers

Attributes

servers[R]
shell[R]

Public Class Methods

new(servers, shell) click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 21
def initialize(servers, shell)
  @servers = servers
  @shell = shell
end
propagate(servers, shell) click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 10
def self.propagate(servers, shell)
  new(servers, shell).propagate
end

Public Instance Methods

propagate() click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 26
def propagate
  shell.status "Verifying and propagating #{name_with_version} to all servers."

  servers.remote.run_for_each! do |server|
    propagation_command_for(server)
  end
end

Private Instance Methods

check_command() click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 47
def check_command
  # the [,)] is to stop us from looking for e.g. 0.5.1, seeing
  # 0.5.11, and mistakenly thinking 0.5.1 is there

   %{#{gem_binary} list #{gem_name} | grep "#{gem_name}" | egrep -q "#{version.gsub(/\./, '\.')}[,)]"}
end
install_command() click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 54
def install_command
  "#{gem_binary} install '#{remote_gem_file}'"
end
propagation_command_for(server) click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 35
def propagation_command_for(server)
  check = server.command_on_server('sh -l -c', check_command)
  scp = server.scp_command(About.gem_file, remote_gem_file)
  install = server.command_on_server('sudo sh -l -c', install_command)

  "(#{check}) || ((#{scp}) && (#{install}))"
end
remote_gem_file() click to toggle source
# File lib/engineyard-serverside/propagator.rb, line 43
def remote_gem_file
  @remote_gem_file ||= File.join(Dir.tmpdir, gem_filename)
end