Added ability to run arbitrary commands on remote machines (useful for updating bundles!)
This commit is contained in:
parent
b89a60d897
commit
beae81621d
|
@ -243,8 +243,9 @@ module Hydra #:nodoc:
|
|||
include Open3
|
||||
# Create a new hydra remote task with the given name.
|
||||
# The task will be named hydra:remote:<name>
|
||||
def initialize(name)
|
||||
def initialize(name, command=nil)
|
||||
@name = name
|
||||
@command = command
|
||||
yield self if block_given?
|
||||
@config = find_config_file
|
||||
if @config
|
||||
|
@ -262,6 +263,7 @@ module Hydra #:nodoc:
|
|||
environment = config.fetch('environment') { 'test' }
|
||||
workers = config.fetch('workers') { [] }
|
||||
workers = workers.select{|w| w['type'] == 'ssh'}
|
||||
@command = "RAILS_ENV=#{environment} rake #{@name}" unless @command
|
||||
|
||||
$stdout.write "==== Hydra Running #{@name} ====\n"
|
||||
Thread.abort_on_exception = true
|
||||
|
@ -270,7 +272,7 @@ module Hydra #:nodoc:
|
|||
workers.each do |worker|
|
||||
@listeners << Thread.new do
|
||||
begin
|
||||
@results[worker] = if run_task(worker, environment)
|
||||
@results[worker] = if run_command(worker, @command)
|
||||
"==== #{@name} passed on #{worker['connect']} ====\n"
|
||||
else
|
||||
"==== #{@name} failed on #{worker['connect']} ====\nPlease see above for more details.\n"
|
||||
|
@ -286,13 +288,13 @@ module Hydra #:nodoc:
|
|||
end
|
||||
end
|
||||
|
||||
def run_task worker, environment
|
||||
def run_command worker, command
|
||||
$stdout.write "==== Hydra Running #{@name} on #{worker['connect']} ====\n"
|
||||
ssh_opts = worker.fetch('ssh_opts') { '' }
|
||||
writer, reader, error = popen3("ssh -tt #{ssh_opts} #{worker['connect']} ")
|
||||
writer.write("cd #{worker['directory']}\n")
|
||||
writer.write "echo BEGIN HYDRA\n"
|
||||
writer.write("RAILS_ENV=#{environment} rake #{@name}\n")
|
||||
writer.write(command + "\r")
|
||||
writer.write "echo END HYDRA\n"
|
||||
writer.write("exit\n")
|
||||
writer.close
|
||||
|
|
Loading…
Reference in New Issue