relay 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +6 -0
- data/lib/relay.rb +22 -5
- data/relay.gemspec +1 -1
- data/test/relay_test.rb +5 -0
- data/test/test_helper.rb +1 -0
- metadata +1 -1
data/README.markdown
CHANGED
@@ -37,6 +37,12 @@ You can also add your public key to a remote server's authorized keys file:
|
|
37
37
|
|
38
38
|
$ relay identify myserver
|
39
39
|
|
40
|
+
Relay exposes the `execute` method, which returns the output of the command:
|
41
|
+
|
42
|
+
>> require "relay"
|
43
|
+
>> Relay.execute "echo foo", "myserver"
|
44
|
+
=> ["foo\n"]
|
45
|
+
|
40
46
|
Installation
|
41
47
|
------------
|
42
48
|
|
data/lib/relay.rb
CHANGED
@@ -4,8 +4,10 @@ require "thor"
|
|
4
4
|
require "open3"
|
5
5
|
|
6
6
|
class Ssh
|
7
|
-
def initialize(server)
|
7
|
+
def initialize(server, quiet = false)
|
8
8
|
@server = server
|
9
|
+
@output = []
|
10
|
+
@quiet = quiet
|
9
11
|
end
|
10
12
|
|
11
13
|
def start
|
@@ -16,30 +18,44 @@ class Ssh
|
|
16
18
|
|
17
19
|
threads << Thread.new do
|
18
20
|
while line = stderr.gets
|
19
|
-
$stderr.puts(line)
|
21
|
+
$stderr.puts(line) unless @quiet
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
25
|
threads << Thread.new do
|
24
26
|
while line = stdout.gets
|
25
|
-
|
27
|
+
@output << line
|
28
|
+
$stdout.puts(line) unless @quiet
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
29
32
|
yield(self)
|
30
33
|
stdin.close
|
31
34
|
threads.each {|t| t.join }
|
35
|
+
@output
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
35
39
|
def run(command)
|
36
|
-
puts "\e[1m\e[33m$ #{command.strip}\e[0m"
|
40
|
+
puts "\e[1m\e[33m$ #{command.strip}\e[0m" unless @quiet
|
37
41
|
@stdin.puts(command)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
45
|
class Relay < Thor
|
42
46
|
|
47
|
+
# If you require the relay library, you can issue commands
|
48
|
+
# with the execute method:
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
#
|
52
|
+
# >> require "relay"
|
53
|
+
# >> Relay.execute "echo foo", "myserver"
|
54
|
+
# => ["foo\n"]
|
55
|
+
def self.execute(*args)
|
56
|
+
start args.unshift("execute").push("--quiet")
|
57
|
+
end
|
58
|
+
|
43
59
|
desc "identify SERVER", "Copies your public key to a remote server"
|
44
60
|
method_option :key, :type => :string, :aliases => "-k"
|
45
61
|
method_option :path, :type => :string, :aliases => "-p"
|
@@ -63,8 +79,9 @@ class Relay < Thor
|
|
63
79
|
end
|
64
80
|
|
65
81
|
desc "execute COMMAND SERVER", "Execute COMMAND in the context of SERVER"
|
82
|
+
method_option :quiet, :type => :boolean, :aliases => "-q"
|
66
83
|
def execute(command, server)
|
67
|
-
Ssh.new(server).start do |session|
|
84
|
+
Ssh.new(server, options[:quiet]).start do |session|
|
68
85
|
session.run(command)
|
69
86
|
end
|
70
87
|
end
|
data/relay.gemspec
CHANGED
data/test/relay_test.rb
CHANGED
@@ -38,5 +38,10 @@ class TestRelay < Test::Unit::TestCase
|
|
38
38
|
assert out["recipe.sh"]
|
39
39
|
end
|
40
40
|
end
|
41
|
+
|
42
|
+
should "return the output when used programmatically" do
|
43
|
+
assert_equal ["foo\n"], Relay.execute("echo foo", "localhost")
|
44
|
+
assert_equal ["foo\n", "bar\n", "baz\n"], Relay.execute("echo foo; echo bar; echo baz", "localhost")
|
45
|
+
end
|
41
46
|
end
|
42
47
|
end
|
data/test/test_helper.rb
CHANGED