rye 0.9.7 → 0.9.8
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.tar.gz.sig +0 -0
- data/CHANGES.txt +44 -38
- data/README.rdoc +44 -30
- data/Rakefile +41 -82
- data/VERSION +1 -0
- data/gem-public_cert.pem +20 -0
- data/lib/rye.rb +74 -52
- data/lib/rye/box.rb +7 -4
- data/lib/rye/dsl.rb +100 -0
- data/rye.gemspec +95 -55
- data/try/10_basic_tryouts.rb +44 -0
- data/try/12_batch_tryouts.rb +26 -0
- data/try/13_set_tryouts.rb +42 -0
- data/try/14_auth_methods_tryouts.rb +28 -0
- data/try/15_file_tryouts.rb +12 -0
- data/try/20_file_transfer_tryouts.rb +46 -0
- data/try/25_template_upload.rb +37 -0
- data/try/30_safemode_tryouts.rb +85 -0
- data/try/35_basics_with_hop.rb +36 -0
- data/try/70_rye_cli_tryouts.rb +0 -0
- data/try/copying.rb +18 -0
- data/try/keys.rb +141 -0
- data/tst/10-key1 +27 -0
- data/tst/10-key1.pub +1 -0
- data/tst/10-key2 +30 -0
- data/tst/10-key2.pub +1 -0
- data/tst/10_keys_test.rb +88 -0
- data/tst/50_rset_test.rb +54 -0
- data/tst/60-file.mp3 +0 -0
- data/tst/60_rbox_transfer_test.rb +53 -0
- data/tst/65_rbox_file_append_test.rb +53 -0
- data/tst/70_rbox_env_test.rb +19 -0
- data/tst/dsl_example.rb +80 -0
- data/tst/rye.rb +13 -0
- data/tst/shell.rb +280 -0
- data/tst/shell2.rb +278 -0
- data/tst/shell3.rb +280 -0
- data/tst/test_hop.rb +25 -0
- metadata +86 -25
- metadata.gz.sig +0 -0
- data/bin/try +0 -246
data.tar.gz.sig
ADDED
Binary file
|
data/CHANGES.txt
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
RYE, CHANGES
|
2
2
|
|
3
|
+
#### 0.9.8 (2013-02-06) #############################
|
4
|
+
|
5
|
+
* ADDED: Rudimentary DSL (see tst/dsl_example.rb) [Randy D. Wallace Jr]
|
6
|
+
* CHANGE: All releases will now be signed. See "Installation" in the readme.
|
7
|
+
|
8
|
+
|
3
9
|
#### 0.9.7 (2012-07-06) #############################
|
4
10
|
|
5
11
|
* FIXED: STDERR output was printing to STDOUT in one case (Thanks rrepen)
|
@@ -21,7 +27,7 @@ RYE, CHANGES
|
|
21
27
|
|
22
28
|
#### 0.9.3 (2011-01-29) #############################
|
23
29
|
|
24
|
-
* ADDED: Rye::Hop for gateway support.
|
30
|
+
* ADDED: Rye::Hop for gateway support.
|
25
31
|
(https://github.com/delano/rye/issues/closed#issue/10)
|
26
32
|
* CHANGE: Don't overwrite :paranoid option
|
27
33
|
|
@@ -39,7 +45,7 @@ RYE, CHANGES
|
|
39
45
|
|
40
46
|
#### 0.9.0 (2010-08-19) #############################
|
41
47
|
|
42
|
-
* FIXED: Pubkeys correctly added for first connection.
|
48
|
+
* FIXED: Pubkeys correctly added for first connection.
|
43
49
|
(NOTE: some state seems to be maintained by ssh-agent)
|
44
50
|
* ADDED: Interactive and non-interactive shell support (via Net::SSH)
|
45
51
|
* ADDED: Basic readline support for interactive mode
|
@@ -55,7 +61,7 @@ RYE, CHANGES
|
|
55
61
|
#### 0.8.19 (2010-06-28) #############################
|
56
62
|
|
57
63
|
* ADDED: Rye::Box#root?
|
58
|
-
* ADDED: Better sudo handling.
|
64
|
+
* ADDED: Better sudo handling.
|
59
65
|
|
60
66
|
|
61
67
|
#### 0.8.18 (2010-06-19) #############################
|
@@ -91,7 +97,7 @@ RYE, CHANGES
|
|
91
97
|
#### 0.8.12 (2010-01-16) #############################
|
92
98
|
|
93
99
|
* FIXED: Removed dependency on ssh-agent. Also fixes starting
|
94
|
-
many instances of said executable.
|
100
|
+
many instances of said executable.
|
95
101
|
* FIXED: file_append was overwriting when supplied a String (!)
|
96
102
|
* ADDED: Use SSH config file by default [Justin Case]
|
97
103
|
|
@@ -102,7 +108,7 @@ RYE, CHANGES
|
|
102
108
|
|
103
109
|
#### 0.8.10 (2009-10-07) #############################
|
104
110
|
|
105
|
-
* CHANGE: Improved startup time.
|
111
|
+
* CHANGE: Improved startup time.
|
106
112
|
|
107
113
|
#### 0.8.9 (2009-08-26) #############################
|
108
114
|
|
@@ -118,7 +124,7 @@ RYE, CHANGES
|
|
118
124
|
|
119
125
|
#### 0.8.7 (2009-08-11) #############################
|
120
126
|
|
121
|
-
* FIXED: Rye::Box info level output is cleaner
|
127
|
+
* FIXED: Rye::Box info level output is cleaner
|
122
128
|
* FIXED: file_upload / download now expanding local tildas when safemode is disabled
|
123
129
|
* ADDED: Interactive handling for removing gems
|
124
130
|
* ADDED: dir_upload and dir_download
|
@@ -132,11 +138,11 @@ RYE, CHANGES
|
|
132
138
|
#### 0.8.5 (2009-07-14) #############################
|
133
139
|
|
134
140
|
* CHANGE: Rye::Box#getenv now accepts an option key name
|
135
|
-
* CHANGE: When not in safe mode, method missing will execute a
|
141
|
+
* CHANGE: When not in safe mode, method missing will execute a
|
136
142
|
method name as a shell command
|
137
|
-
* ADDED: Rye::Box#execute for running arbitrary commands when
|
143
|
+
* ADDED: Rye::Box#execute for running arbitrary commands when
|
138
144
|
not in safe mode
|
139
|
-
|
145
|
+
|
140
146
|
|
141
147
|
#### 0.8.4 (2009-06-30) #############################
|
142
148
|
|
@@ -180,24 +186,24 @@ RYE, CHANGES
|
|
180
186
|
|
181
187
|
#### 0.7.6 (2009-06-19) #############################
|
182
188
|
|
183
|
-
* FIXED: Raise Rye::NoPty exception when Net::SSH returns message
|
189
|
+
* FIXED: Raise Rye::NoPty exception when Net::SSH returns message
|
184
190
|
"Pseudo-terminal will not be allocated because stdin is not a terminal."
|
185
|
-
* FIXED: Rye::Box#disconnect would hang in some instances. Now waits 3 seconds.
|
191
|
+
* FIXED: Rye::Box#disconnect would hang in some instances. Now waits 3 seconds.
|
186
192
|
* FIXED: Bug in net_ssh_exec which was causing it to not return an exit code
|
187
|
-
* CHANGE: All exceptions now inherit from Rye::Error (Runtimerror)
|
193
|
+
* CHANGE: All exceptions now inherit from Rye::Error (Runtimerror)
|
188
194
|
* CHANGE: A NoPassword exception is raised when a password prompt returns nil.
|
189
|
-
* CHANGE: pre_command_hook block arguments have changed:
|
195
|
+
* CHANGE: pre_command_hook block arguments have changed:
|
190
196
|
NEW: complete command, user, host, nickname
|
191
197
|
OLD: command, args, user, host, nickname
|
192
|
-
|
193
|
-
|
198
|
+
|
199
|
+
|
194
200
|
#### 0.7.5 (2009-06-13) #############################
|
195
201
|
|
196
|
-
* FIXED: Rye::Set methods were not accepting or passing blocks.
|
202
|
+
* FIXED: Rye::Set methods were not accepting or passing blocks.
|
197
203
|
* ADDED: Rye::Set#user and Rye::Set#opts methods
|
198
204
|
* ADDED: Rye::Box#nickname
|
199
205
|
* ADDED: exception hooks for Rye::Box.
|
200
|
-
* CHANGE: Rye::Set method missing now forwards to Rye::Box
|
206
|
+
* CHANGE: Rye::Set method missing now forwards to Rye::Box
|
201
207
|
methods instead of Rye::Cmd
|
202
208
|
|
203
209
|
|
@@ -217,9 +223,9 @@ RYE, CHANGES
|
|
217
223
|
* ADDED: Rye::Cmd#safely and Rye::Cmd#unsafely methods
|
218
224
|
* ADDED: Rye::Cmd#digest_md5, Rye::Cmd#digest_sha1, Rye::Cmd#digest_sha2 methods
|
219
225
|
* ADDED: Rye::Cmd#file_verified? method
|
220
|
-
* ADDED: Rye::Box#net_ssh_exec! now checks and correctly prompts for a sudo response password.
|
221
|
-
Note: this will be upgraded in for 0.8 to support any prompt.
|
222
|
-
* FIXED: Net::SSH paranoid now set to false when safe mode is disabled.
|
226
|
+
* ADDED: Rye::Box#net_ssh_exec! now checks and correctly prompts for a sudo response password.
|
227
|
+
Note: this will be upgraded in for 0.8 to support any prompt.
|
228
|
+
* FIXED: Net::SSH paranoid now set to false when safe mode is disabled.
|
223
229
|
|
224
230
|
|
225
231
|
#### 0.7.2 (2009-06-01) #############################
|
@@ -230,14 +236,14 @@ RYE, CHANGES
|
|
230
236
|
|
231
237
|
* CHANGE: Removed broken grep method from Rye::Rap
|
232
238
|
* FIXED: Bug which prevented setting relative paths in non-home directory
|
233
|
-
* ADDED: Rye::Cmd#add_command helper for adding new command methods.
|
239
|
+
* ADDED: Rye::Cmd#add_command helper for adding new command methods.
|
234
240
|
* ADDED: pre-command-hook now sends the hostname to the block
|
235
241
|
|
236
242
|
|
237
243
|
#### 0.7.0 (2009-05-30) #############################
|
238
244
|
|
239
245
|
* CHANGE: Rye::Box now uses unique instance variable names to encourage using
|
240
|
-
instance variables in batch command blocks.
|
246
|
+
instance variables in batch command blocks.
|
241
247
|
* ADDED: Rye::Box#file_append
|
242
248
|
|
243
249
|
#### 0.6.6 (2009-05-21) #############################
|
@@ -253,7 +259,7 @@ RYE, CHANGES
|
|
253
259
|
|
254
260
|
#### 0.6.4 (2009-05-04) #############################
|
255
261
|
|
256
|
-
* FIXED: authorize_remote was not returning to the directory it started with.
|
262
|
+
* FIXED: authorize_remote was not returning to the directory it started with.
|
257
263
|
* ADDED: pre and post command hooks to Rye::Box
|
258
264
|
* ADDED: Rye::Box.batch
|
259
265
|
* ADDED: Support for OS X for Rye::Box.guess_user_home
|
@@ -283,13 +289,13 @@ RYE, CHANGES
|
|
283
289
|
* FIXED: handling of Process::Status ($?) in Rye.shell
|
284
290
|
* FIXED: Removed reference to Rudy::Error in bin/rye
|
285
291
|
* ADDED: Rye::Box.getenv
|
286
|
-
* ADDED: Rye::Box.can?
|
292
|
+
* ADDED: Rye::Box.can?
|
287
293
|
* ADDED: Rye::Box.umask= (a similar work around as cd / [])
|
288
294
|
* ADDED: Rye::Box.file_exists?
|
289
295
|
* ADDED: Rye::Box.authorize_keys_remote can now authorize for a different user
|
290
296
|
* ADDED: Rye::Box.upload and Rye::Box.download
|
291
297
|
* ADDED: Rye::SystemInfo.tmpdir
|
292
|
-
* CHANGE: Rye::Box.prep_args doesn't treat multicharacter Symbols as
|
298
|
+
* CHANGE: Rye::Box.prep_args doesn't treat multicharacter Symbols as
|
293
299
|
command-line options any more (single character ones are still converted)
|
294
300
|
* CHANGE: Renamed Rye::Box.add_env to Rye::Box.setenv
|
295
301
|
* CHANGE: rm and kill are available in Rye::Cmd by default
|
@@ -310,9 +316,9 @@ Rye.shell and Rye::Box.run_command (SSH) commands.
|
|
310
316
|
#### 0.5.3 (2009-04-20) #############################
|
311
317
|
|
312
318
|
* FIXED: Rye::Box.connect raises exceptions instead of exits
|
313
|
-
* ADDED: Rye::Box.connect now rescues HostKeyMismatch exceptions and
|
314
|
-
prompts for a response.
|
315
|
-
|
319
|
+
* ADDED: Rye::Box.connect now rescues HostKeyMismatch exceptions and
|
320
|
+
prompts for a response.
|
321
|
+
|
316
322
|
#### 0.5.2 (2009-04-19) #############################
|
317
323
|
|
318
324
|
* FIXED: authorize-local command attempted to connect via SSH before authorizing.
|
@@ -336,21 +342,21 @@ Rye.shell and Rye::Box.run_command (SSH) commands.
|
|
336
342
|
|
337
343
|
* ADDED: More helpful debug output
|
338
344
|
* ADDED: hostname command to Rye::Cmd
|
339
|
-
* ADDED: Rye::Box.connect now supports multiple password attempts if STDIN.tty returns true
|
345
|
+
* ADDED: Rye::Box.connect now supports multiple password attempts if STDIN.tty returns true
|
340
346
|
* ADDED: Rye::Box.interactive_ssh for opening an SSH session to the given box.
|
341
|
-
* CHANGE: Using OpenSSH's ssh-agent but also let's Net::SSH handle the ssh keys.
|
347
|
+
* CHANGE: Using OpenSSH's ssh-agent but also let's Net::SSH handle the ssh keys.
|
342
348
|
|
343
349
|
|
344
350
|
#### 0.4.1 (2009-04-06) #############################
|
345
351
|
|
346
352
|
* FIXED: Rye::Box.authorize_keys_remote was not disabling safe mode properly
|
347
|
-
* FIXED: Disabled debug mode.
|
348
|
-
* ADDED: "rye authorize" now specifically enforces the auth method order
|
353
|
+
* FIXED: Disabled debug mode.
|
354
|
+
* ADDED: "rye authorize" now specifically enforces the auth method order
|
349
355
|
|
350
356
|
|
351
357
|
#### 0.4.0 (2009-04-06) #############################
|
352
358
|
|
353
|
-
* FIXED: Box.run_command was parsing arguments incorrectly
|
359
|
+
* FIXED: Box.run_command was parsing arguments incorrectly
|
354
360
|
* FIXED: Box.net_ssh_exec was working on nil stderr
|
355
361
|
* FIXED: bin/try handles the new command exceptions
|
356
362
|
* ADDED: to_s and inspect methods for cleaner debugging output
|
@@ -359,8 +365,8 @@ Rye.shell and Rye::Box.run_command (SSH) commands.
|
|
359
365
|
* ADDED: Command switches can now be sent as Symbols (rbox.ls(:h))
|
360
366
|
* ADDED: Rye.host_keys
|
361
367
|
* ADDED: bin/rye
|
362
|
-
* ADDED: commands now raise a Rye::Err exception
|
363
|
-
when the command returns an exit code greater than 0.
|
368
|
+
* ADDED: commands now raise a Rye::Err exception
|
369
|
+
when the command returns an exit code greater than 0.
|
364
370
|
* CHANGE: Box.add_command renamed to Box.run_command
|
365
371
|
|
366
372
|
|
@@ -375,9 +381,9 @@ Rye.shell and Rye::Box.run_command (SSH) commands.
|
|
375
381
|
|
376
382
|
* FIXED: Rye::Box wasn't properly adding keypairs to SSH Agent
|
377
383
|
* FIXED: Rye::Box.method_missing Symbol/String ambiguity
|
378
|
-
* ADDED: Rye::Set supports executing commands parallel
|
384
|
+
* ADDED: Rye::Set supports executing commands parallel
|
379
385
|
* ADDED: Rye::Rap now contains STDERR output from command
|
380
|
-
* ADDED: Supports all options provided by Net::SSH#start. This
|
386
|
+
* ADDED: Supports all options provided by Net::SSH#start. This
|
381
387
|
includes support for password logins and proxies.
|
382
388
|
* ADDED: Safe mode can now be disabled (to allow file globs
|
383
389
|
and environment variable access).
|
@@ -398,5 +404,5 @@ Initial public release
|
|
398
404
|
|
399
405
|
#### TODO ###########################################
|
400
406
|
|
401
|
-
* Re-implement Rye::Rap as an Observable StringIO object for dynamic printing of output.
|
407
|
+
* Re-implement Rye::Rap as an Observable StringIO object for dynamic printing of output.
|
402
408
|
* Fingerprints: ssh-keygen -l -f id_rsa_repos.pub
|
data/README.rdoc
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
= Rye - v0.9
|
2
2
|
|
3
|
-
<
|
3
|
+
<strong>Safely run SSH commands on a bunch of machines at the same time (from Ruby)</stong>.
|
4
4
|
|
5
5
|
Inspired by Rush[http://rush.heroku.com] and compatible with Ruby 1.8, 1.9, and JRuby 1.3+!
|
6
6
|
|
7
|
+
<em>As of 0.9.8, all gem releases are signed. See Installation.</em>
|
7
8
|
|
8
9
|
== Overview
|
9
10
|
|
@@ -14,14 +15,14 @@ Rye does not require anything to be installed on the server side (other than an
|
|
14
15
|
|
15
16
|
== Example 1 -- Execute commands on a remote machine
|
16
17
|
|
17
|
-
Shell commands are executed by calling methods on a Rye::Box object.
|
18
|
-
|
18
|
+
Shell commands are executed by calling methods on a Rye::Box object.
|
19
|
+
|
19
20
|
rbox = Rye::Box.new('hostname')
|
20
21
|
rbox.pwd # => "/home/rye"
|
21
22
|
rbox.uname :a # => "Darwin rye-stage 9.7.0 ..."
|
22
23
|
|
23
24
|
Method arguments are sent directly as arguments to the shell command. Single-character Symbols are assumed to be single-character switches. <em>e.g. <tt>rbox.uname :a</tt> becomes <tt>uname -a</tt>.</em>
|
24
|
-
|
25
|
+
|
25
26
|
The return value for a command is a modified Array containing the contents of STDOUT split by line. It also gives access to STDERR and the exit code
|
26
27
|
|
27
28
|
ret = rbox.uptime # => "11:02 up 16:01, 3 users"
|
@@ -41,12 +42,12 @@ You can change directories.
|
|
41
42
|
rbox['/etc'].ls # => ['apache', 'init.d', ...]
|
42
43
|
rbox.pwd # => '/etc'
|
43
44
|
rbox.cd # => '/home/rye'
|
44
|
-
|
45
|
+
|
45
46
|
You can specify environment variables.
|
46
47
|
|
47
48
|
rbox.setenv('TIPPLE', "Forty Creek")
|
48
|
-
rbox.getenv 'TIPPLE' # => "Forty Creek"
|
49
|
-
|
49
|
+
rbox.getenv 'TIPPLE' # => "Forty Creek"
|
50
|
+
|
50
51
|
|
51
52
|
== Example 3 -- Adding and removing commands
|
52
53
|
|
@@ -54,7 +55,7 @@ You can add and remove commands to the whitelist.
|
|
54
55
|
|
55
56
|
Rye::Cmd.add_command :anything, '/usr/bin/uptime'
|
56
57
|
rbox = Rye::Box.new
|
57
|
-
rbox.anything
|
58
|
+
rbox.anything
|
58
59
|
Rye::Cmd.remove_command :anything
|
59
60
|
rbox.anything # => Rye::CommandNotFound exception
|
60
61
|
|
@@ -66,18 +67,18 @@ Safe mode can be disabled on one of the following ways.
|
|
66
67
|
rbox = Rye::Box.new 'HOST', :safe => false
|
67
68
|
OR
|
68
69
|
rbox.disable_safe_mode
|
69
|
-
|
70
|
+
|
70
71
|
When safe-mode is disabled, you can run any command (regardless of what is defined in the whitelist) with any valid arguments (fileglobs, tildas, etc...).
|
71
72
|
|
72
73
|
rbox.kill '-SIGHUP', 1928111
|
73
74
|
rbox.rm 'path/2/*'
|
74
|
-
|
75
|
+
|
75
76
|
You can also execute any valid shell command.
|
76
77
|
|
77
78
|
rbox.execute 'ps aux | grep ruby > /tmp/ruby-process-list'
|
78
79
|
|
79
80
|
See the "About Safe Mode" section below for more information.
|
80
|
-
|
81
|
+
|
81
82
|
|
82
83
|
== Example 5a -- Accessing Multiple Machines
|
83
84
|
|
@@ -86,26 +87,26 @@ Shell commands can be executed on multiple machines using a Rye::Set object. Cre
|
|
86
87
|
rbox = Rye::Box.new 'HOST1'
|
87
88
|
rset = Rye::Set.new
|
88
89
|
rset.add_boxes rbox, 'HOST2' # Add boxes as hostnames or objects
|
89
|
-
|
90
|
+
|
90
91
|
Then call methods just like with Rye::Box, except now the return value is an Array of Arrays. The order of return values matches the order the machines were added to the set.
|
91
|
-
|
92
|
+
|
92
93
|
rset.hostname # => [["HOST1"], ["HOST2"]]
|
93
94
|
rset.uname # => [["Darwin"], ["Linux"]]
|
94
|
-
|
95
|
+
|
95
96
|
== Example 5b -- Accessing Multiple Machines in Parallel
|
96
|
-
|
97
|
+
|
97
98
|
By default, Rye::Set connects to each machine sequentially in the order they were added to the set. Commands can also be run in parallel.
|
98
99
|
|
99
100
|
rset = Rye::Set.new "SETNAME", :parallel => true
|
100
101
|
OR
|
101
102
|
rset.parallel = true
|
102
|
-
|
103
|
-
|
103
|
+
|
104
|
+
|
104
105
|
== Example 6 -- File Transfers
|
105
106
|
|
106
107
|
rbox = Rye::Box.new "localhost"
|
107
108
|
|
108
|
-
rbox.file_upload "README.rdoc", "/tmp"
|
109
|
+
rbox.file_upload "README.rdoc", "/tmp"
|
109
110
|
|
110
111
|
applejack = StringIO.new "Some in-memory content"
|
111
112
|
rbox.file_upload applejack, "/tmp/applejack.txt"
|
@@ -152,7 +153,7 @@ When working with machines that are behind another host (assuming that you have
|
|
152
153
|
|
153
154
|
rbox = Rye::Box.new('filibuster', :via => 'firewall.lan')
|
154
155
|
|
155
|
-
The information for the Rye::Box is then relative from the position of the firewall.
|
156
|
+
The information for the Rye::Box is then relative from the position of the firewall.
|
156
157
|
So, the hostname 'filibuster' is used from 'firewall.lan'
|
157
158
|
|
158
159
|
== Example 8b -- Hopping Firewalls, in groups
|
@@ -165,6 +166,12 @@ So, the hostname 'filibuster' is used from 'firewall.lan'
|
|
165
166
|
rset.uptime
|
166
167
|
# => [[17:17:44 up 548 days, 13:37, 20 users, load average: 0.12, 0.07, 0.06], [01:17:49 up 6 days, 1:39, 9 users, load average: 0.13, 0.09, 0.09]]
|
167
168
|
|
169
|
+
== Example 9 -- Disable password prompt
|
170
|
+
|
171
|
+
If you're running in a terminal but you want <tt>Net::SSH::AuthenticationFailed</tt> to be raised instead of getting a password prompt when authentication fails, set <tt>:password_prompt</tt> option to false:
|
172
|
+
|
173
|
+
rbox = Rye::Box.new("foo.com", :user => "dan", :password => "inkorrect", :password_prompt => false)
|
174
|
+
rbox.uptime # => raises Net::SSH::AuthenticationFailed
|
168
175
|
|
169
176
|
== About Safe-Mode
|
170
177
|
|
@@ -175,7 +182,7 @@ In safe-mode:
|
|
175
182
|
* Pipes and operators don't work: <tt>|, &&, >, <, ||, ~</tt>, etc...
|
176
183
|
* Backticks don't work either: <tt>procs=`ps aux`</tt>
|
177
184
|
|
178
|
-
Why? In safe-mode, all command arguments are escaped which turns all arguments into their literal values.
|
185
|
+
Why? In safe-mode, all command arguments are escaped which turns all arguments into their literal values.
|
179
186
|
|
180
187
|
Using a Ruby interface to execute shell commands is pretty awesome, particularly to run them on several machines simultaneously. That's a lot of power and it's potentially very dangerous. That's why Rye disables this stuff by default. There's probably a way to do it safely but it's not obvious yet (to me). If you have any ideas, I'd love to hear them!
|
181
188
|
|
@@ -198,43 +205,50 @@ Rye permits only a limited number of system commands to be run. This default whi
|
|
198
205
|
|
199
206
|
== Installation
|
200
207
|
|
201
|
-
Via Rubygems
|
208
|
+
Via Rubygems:
|
202
209
|
|
203
210
|
$ gem install rye
|
204
211
|
|
212
|
+
However, in order to be sure the code you're install is the code I wrote, I recommended that you verify the signiture[http://docs.rubygems.org/read/chapter/21]. To do this
|
213
|
+
|
214
|
+
# Add the public key as a trusted certificate
|
215
|
+
# (You only need to do this once)
|
216
|
+
$ curl -O https://raw.github.com/delano/rye/master/gem-public_cert.pem
|
217
|
+
$ gem cert --add gem-public_cert.pem
|
218
|
+
|
219
|
+
$ gem install rye -P HighSecurity
|
220
|
+
|
221
|
+
If you don't add the public key, you'll see an error like "Couldn't verify data signature". If you're still having trouble let me know and I'll give you a hand.
|
222
|
+
|
205
223
|
or via download:
|
206
224
|
|
207
225
|
* rye-latest.tar.gz[http://github.com/delano/rye/tarball/latest]
|
208
226
|
* rye-latest.zip[http://github.com/delano/rye/zipball/latest]
|
209
227
|
|
210
|
-
== Known Issues
|
211
|
-
|
212
|
-
* Rye doesn't read the ~/.ssh/config file yet
|
213
|
-
* No support for STDIN for commands.
|
214
|
-
* Limited support for interactive shells.
|
215
228
|
|
216
|
-
|
229
|
+
== Contributing
|
217
230
|
|
231
|
+
The easiest way to contribute is to open an issue[https://github.com/delano/rye/issues] for bugs and feature requests. I'm also very open to thoughtful and interesting pull[https://github.com/delano/rye/pulls] requests[https://github.com/delano/rye/pulls. Fork and be merry.
|
218
232
|
|
219
233
|
== Thanks
|
220
234
|
|
221
235
|
* Kalin Harvey (http://rely.ca)
|
222
236
|
* Rush[http://github.com/adamwiggins/rush] and Capistrano[http://github.com/jamis/capistrano/blob/master/lib/capistrano/shell.rb] for the inspiration.
|
223
|
-
* Mike Cline for giving the okay to use the Rye name.
|
237
|
+
* Mike Cline for giving the okay to use the Rye name.
|
224
238
|
* Justin Case (http://github.com/justincase/) for fixes
|
225
239
|
* Vincent Batts (http://hashbangbash.com/) for Rye::Hop
|
226
240
|
|
227
241
|
|
228
242
|
== More Info
|
229
243
|
|
230
|
-
* Codes[
|
244
|
+
* Codes[https://github.com/delano/rye]
|
231
245
|
* Rdocs[http://delano.github.com/rye]
|
232
246
|
* Inspiration[http://www.youtube.com/watch?v=_StUVh6ENuw]
|
233
247
|
|
234
248
|
|
235
249
|
== Related Projects
|
236
250
|
|
237
|
-
* Rush[
|
251
|
+
* Rush[https://github.com/adamwiggins/rush]
|
238
252
|
|
239
253
|
|
240
254
|
== Credits
|
data/Rakefile
CHANGED
@@ -1,90 +1,49 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
include FileUtils
|
6
|
-
|
7
|
-
begin
|
8
|
-
require 'hanna/rdoctask'
|
9
|
-
rescue LoadError
|
10
|
-
require 'rake/rdoctask'
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
task :default => :package
|
15
|
-
|
16
|
-
# CONFIG =============================================================
|
17
|
-
|
18
|
-
# Change the following according to your needs
|
19
|
-
README = "README.rdoc"
|
20
|
-
CHANGES = "CHANGES.txt"
|
21
|
-
LICENSE = "LICENSE.txt"
|
22
|
-
|
23
|
-
# Files and directories to be deleted when you run "rake clean"
|
24
|
-
CLEAN.include [ 'doc', 'pkg', '*.gem', '.config' ]
|
25
|
-
|
26
|
-
# Virginia assumes your project and gemspec have the same name
|
27
|
-
name = (Dir.glob('*.gemspec') || ['rye']).first.split('.').first
|
28
|
-
load "#{name}.gemspec"
|
29
|
-
version = @spec.version
|
1
|
+
require "rubygems"
|
2
|
+
require "rake"
|
3
|
+
require "rake/clean"
|
4
|
+
require "rdoc/task"
|
30
5
|
|
31
|
-
|
32
|
-
|
6
|
+
task :default => ["build"]
|
7
|
+
CLEAN.include [ 'pkg', 'rdoc' ]
|
8
|
+
name = "rye"
|
33
9
|
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__), 'lib')
|
11
|
+
require name
|
12
|
+
version = Rye::VERSION.to_s
|
34
13
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
# RUBYFORGE RELEASE / PUBLISH TASKS ==================================
|
56
|
-
|
57
|
-
if @spec.rubyforge_project
|
58
|
-
desc 'Publish website to rubyforge'
|
59
|
-
task 'publish:rdoc' => 'doc/index.html' do
|
60
|
-
sh "scp -rp doc/* rubyforge.org:/var/www/gforge-projects/#{name}/"
|
61
|
-
end
|
62
|
-
|
63
|
-
desc 'Public release to rubyforge'
|
64
|
-
task 'publish:gem' => [:package] do |t|
|
65
|
-
sh <<-end
|
66
|
-
rubyforge add_release -o Any -a #{CHANGES} -f -n #{README} #{name} #{name} #{@spec.version} pkg/#{name}-#{@spec.version}.gem &&
|
67
|
-
rubyforge add_file -o Any -a #{CHANGES} -f -n #{README} #{name} #{name} #{@spec.version} pkg/#{name}-#{@spec.version}.tgz
|
68
|
-
end
|
14
|
+
begin
|
15
|
+
require "jeweler"
|
16
|
+
Jeweler::Tasks.new do |s|
|
17
|
+
s.version = version
|
18
|
+
s.name = name
|
19
|
+
s.rubyforge_project = s.name
|
20
|
+
s.summary = "Run SSH commands on a bunch of machines at the same time (from Ruby)."
|
21
|
+
s.description = "Run SSH commands on a bunch of machines at the same time (from Ruby)."
|
22
|
+
s.email = "delano@solutious.com"
|
23
|
+
s.homepage = "https://github.com/delano/rye"
|
24
|
+
s.authors = ["Delano Mandelbaum"]
|
25
|
+
s.add_dependency 'annoy'
|
26
|
+
s.add_dependency 'sysinfo', '>= 0.7.3'
|
27
|
+
s.add_dependency 'highline', '>= 1.5.1'
|
28
|
+
s.add_dependency 'net-ssh', '>= 2.0.13'
|
29
|
+
s.add_dependency 'net-scp', '>= 1.0.2'
|
30
|
+
s.add_dependency 'docile', '>= 1.0.1'
|
31
|
+
|
32
|
+
s.signing_key = File.join('/mnt/gem/', 'gem-private_key.pem')
|
33
|
+
s.cert_chain = ['gem-public_cert.pem']
|
69
34
|
end
|
35
|
+
Jeweler::GemcutterTasks.new
|
36
|
+
rescue LoadError
|
37
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
70
38
|
end
|
71
39
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
t.options << '--charset' << 'utf-8'
|
81
|
-
t.rdoc_files.include(LICENSE)
|
82
|
-
t.rdoc_files.include(README)
|
83
|
-
t.rdoc_files.include(CHANGES)
|
84
|
-
t.rdoc_files.include('bin/*')
|
85
|
-
t.rdoc_files.include('lib/**/*.rb')
|
40
|
+
RDoc::Task.new do |rdoc|
|
41
|
+
rdoc.rdoc_dir = "rdoc"
|
42
|
+
rdoc.title = "#{name} #{version}"
|
43
|
+
rdoc.rdoc_files.include("README*")
|
44
|
+
rdoc.rdoc_files.include("LICENSE.txt")
|
45
|
+
rdoc.rdoc_files.include("VERSION")
|
46
|
+
rdoc.rdoc_files.include("bin/*.rb")
|
47
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
86
48
|
end
|
87
49
|
|
88
|
-
|
89
|
-
|
90
|
-
|