47 lines
1.6 KiB
Ruby
47 lines
1.6 KiB
Ruby
|
require 'net/ssh'
|
||
|
require 'net/ssh/proxy/http'
|
||
|
require 'pathname'
|
||
|
namespace :create_site do
|
||
|
desc "Test ssh"
|
||
|
task :test_ssh,[] => :environment do |task,args|
|
||
|
@site_server = SiteServer.where(:server_name=>'dev').first
|
||
|
Net::SSH.start(@site_server.ip , @site_server.account , password: @site_server.password) do |ssh|
|
||
|
exec_ssh_command_by_sudo_and_see_output_for_test(ssh,"bash -l -c 'cd orbit_sites/design3;bundle update'")
|
||
|
end
|
||
|
end
|
||
|
def exec_ssh_command_and_see_output_for_test(session,command)
|
||
|
outputs = []
|
||
|
puts "execing #{command}"
|
||
|
session.open_channel do |channel|
|
||
|
channel.request_pty do |channel, success|
|
||
|
channel.exec(command) do |ch, success|
|
||
|
abort "could not execute command: #{command}" unless success
|
||
|
channel.on_data do |ch, data|
|
||
|
outputs.push(data)
|
||
|
print "#{data}"
|
||
|
if data.to_s.include? "sudo password:"
|
||
|
channel.send_data "#{@site_server.password}\n"
|
||
|
end
|
||
|
end
|
||
|
channel.on_close do |ch|
|
||
|
puts "finish execing #{command}"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
session.loop
|
||
|
return outputs
|
||
|
end
|
||
|
def exec_ssh_command_by_sudo_and_see_output_for_test(session,command)
|
||
|
outputs = exec_ssh_command_and_see_output_for_test(session,command)
|
||
|
if outputs.join("\n").include?("Permission denied")
|
||
|
exec_ssh_command_and_see_output_for_test(session,"sudo -p 'sudo password:' #{command}")
|
||
|
end
|
||
|
end
|
||
|
def update_thread_infos(info)
|
||
|
puts info
|
||
|
@thread.status["infos"] = @thread.status["infos"].push(info)
|
||
|
@thread.save!
|
||
|
return @thread.status["infos"]
|
||
|
end
|
||
|
end
|