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