Chee 0.3.0 → 0.4.0
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.md +51 -25
- data/lib/Chee.rb +4 -5
- data/lib/Chee/version.rb +1 -1
- data/spec/main.rb +1 -2
- data/spec/tests/Chee.rb +8 -5
- metadata +1 -1
data/README.md
CHANGED
@@ -2,8 +2,14 @@
|
|
2
2
|
Chee
|
3
3
|
================
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
A Ruby gem that allows interactive `User <-> Ruby <-> SSH` sessions.
|
6
|
+
It uses Net::SSH and a pseudo-terminal.
|
7
|
+
|
8
|
+
Thanks
|
9
|
+
------
|
10
|
+
|
11
|
+
This post by `jtzero` provided the solution for using STDIN and Net::SSH:
|
12
|
+
[http://stackoverflow.com/questions/6942279/ruby-net-ssh-channel-dies](http://stackoverflow.com/questions/6942279/ruby-net-ssh-channel-dies)
|
7
13
|
|
8
14
|
Limitations
|
9
15
|
-----------
|
@@ -12,8 +18,9 @@ Limitations
|
|
12
18
|
Apt-get and
|
13
19
|
other programs that request input in a simple manner should work well enough.
|
14
20
|
|
15
|
-
*
|
16
|
-
Which leads to *no* STDERR access. All output
|
21
|
+
* A pseudo-terminal is used. Which means it runs in a sub-shell.
|
22
|
+
Which leads to *no* STDERR access. All returning output from your command
|
23
|
+
is done on STDOUT.
|
17
24
|
|
18
25
|
Installation
|
19
26
|
------------
|
@@ -27,14 +34,12 @@ You could include the DSL into your own object:
|
|
27
34
|
|
28
35
|
require "Chee"
|
29
36
|
Class My_SSH
|
30
|
-
|
31
37
|
include Chee::DSL
|
38
|
+
end
|
32
39
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end # === Class My_SSH
|
40
|
+
o = My_SSH.new
|
41
|
+
o.server 'my_server'
|
42
|
+
o.ssh "uptime"
|
38
43
|
|
39
44
|
Or you could use Chee directly:
|
40
45
|
|
@@ -42,31 +47,50 @@ Or you could use Chee directly:
|
|
42
47
|
Chee.server 'my_server'
|
43
48
|
Chee.ssh "uptime"
|
44
49
|
|
50
|
+
`:server` accepts the same options as `Net::SSH.start`:
|
51
|
+
|
52
|
+
Chee.server(
|
53
|
+
'localhost',
|
54
|
+
'me',
|
55
|
+
:password => "try to use private/public keys",
|
56
|
+
:timeout => 3
|
57
|
+
)
|
58
|
+
|
45
59
|
`:ssh` returns a `Chee::Result` object:
|
46
60
|
|
47
61
|
result = Chee.ssh( "uptime" )
|
48
|
-
|
49
62
|
result.out # ==> output from STDOUT
|
50
63
|
result.exit_status
|
51
64
|
|
65
|
+
Usage: Printing Output
|
66
|
+
-----
|
67
|
+
|
68
|
+
Override default printing with `:print_data`:
|
69
|
+
|
70
|
+
def print_data data
|
71
|
+
# ignore data
|
72
|
+
end
|
73
|
+
|
74
|
+
# The default is:
|
75
|
+
def print_data data
|
76
|
+
print data
|
77
|
+
STDOUT.flush
|
78
|
+
end
|
79
|
+
|
80
|
+
You can still get the output with the returned value of `:ssh`
|
81
|
+
or `:ssh_to_all`:
|
82
|
+
|
83
|
+
o.ssh( "uptime" ).out
|
84
|
+
|
85
|
+
o.ssh_to_all("uptime").map(&:out)
|
86
|
+
|
52
87
|
Usage: Single Server
|
53
88
|
-----
|
54
89
|
|
55
90
|
require "Chee"
|
56
91
|
|
57
|
-
# If you configured server using ~/.ssh/config:
|
58
92
|
Chee.server "my_server"
|
59
93
|
|
60
|
-
# You can also use the same options you would send to
|
61
|
-
# Net::SSH:
|
62
|
-
Chee.server(
|
63
|
-
'localhost',
|
64
|
-
'me',
|
65
|
-
:password => "try to use private/public keys",
|
66
|
-
:timeout => 3
|
67
|
-
)
|
68
|
-
|
69
|
-
# Send a command
|
70
94
|
Chee.ssh %^ sudo add-apt-repository ppa:nginx/stable ^
|
71
95
|
|
72
96
|
|
@@ -99,11 +123,13 @@ Multiple servers, multiple commands:
|
|
99
123
|
Chee.server 'localhost'
|
100
124
|
Chee.server 'my_other_host'
|
101
125
|
|
102
|
-
Chee.ssh_to_all
|
126
|
+
Chee.ssh_to_all('
|
103
127
|
echo "a"
|
104
128
|
echo "b"
|
105
|
-
|
106
|
-
|
129
|
+
')
|
130
|
+
.map(&:out)
|
131
|
+
|
132
|
+
# ---> [ "a", "b", "a", "b" ]
|
107
133
|
|
108
134
|
Run Tests
|
109
135
|
---------
|
data/lib/Chee.rb
CHANGED
@@ -29,10 +29,9 @@ class Chee
|
|
29
29
|
@server = args
|
30
30
|
end
|
31
31
|
|
32
|
-
def print_data
|
33
|
-
|
34
|
-
|
35
|
-
@print_data = blok
|
32
|
+
def print_data d
|
33
|
+
print d
|
34
|
+
STDOUT.flush
|
36
35
|
end
|
37
36
|
|
38
37
|
def ssh_to_all command
|
@@ -127,7 +126,7 @@ class Chee
|
|
127
126
|
stdout << d # .sub(%r!\r?\n\Z!,'')
|
128
127
|
|
129
128
|
unless prev_cmd.to_s.strip == d.strip
|
130
|
-
print_data
|
129
|
+
print_data d
|
131
130
|
end
|
132
131
|
|
133
132
|
prev_data = d
|
data/lib/Chee/version.rb
CHANGED
data/spec/main.rb
CHANGED
data/spec/tests/Chee.rb
CHANGED
@@ -10,11 +10,14 @@ describe "Chee :ssh" do
|
|
10
10
|
]
|
11
11
|
|
12
12
|
Chee.server @localhost
|
13
|
-
@data = ''
|
14
13
|
|
15
|
-
Chee.
|
16
|
-
@data
|
17
|
-
|
14
|
+
def Chee.data
|
15
|
+
@data
|
16
|
+
end
|
17
|
+
|
18
|
+
def Chee.print_data d
|
19
|
+
@data = d
|
20
|
+
end
|
18
21
|
end
|
19
22
|
|
20
23
|
it 'accepts a String for the server info.' do
|
@@ -29,7 +32,7 @@ describe "Chee :ssh" do
|
|
29
32
|
|
30
33
|
it 'uses :print_data to print data' do
|
31
34
|
Chee.ssh 'echo c'
|
32
|
-
|
35
|
+
Chee.data.strip.should == 'c'
|
33
36
|
end
|
34
37
|
|
35
38
|
it 'uses a PTY' do
|