rye 0.8.19 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (10) hide show
  1. data/CHANGES.txt +17 -1
  2. data/README.rdoc +2 -29
  3. data/bin/try +42 -13
  4. data/lib/rye/box.rb +318 -224
  5. data/lib/rye/cmd.rb +156 -78
  6. data/lib/rye/rap.rb +10 -6
  7. data/lib/rye.rb +32 -5
  8. data/rye.gemspec +4 -7
  9. metadata +68 -49
  10. data/bin/rye +0 -147
data/CHANGES.txt CHANGED
@@ -1,5 +1,21 @@
1
1
  RYE, CHANGES
2
2
 
3
+
4
+ #### 0.9.0 (2010-08-19) #############################
5
+
6
+ * FIXED: Pubkeys correctly added for first connection.
7
+ (NOTE: some state seems to be maintained by ssh-agent)
8
+ * ADDED: Interactive and non-interactive shell support (via Net::SSH)
9
+ * ADDED: Basic readline support for interactive mode
10
+ * ADDED: New hook for printing STDOUT as it is returned
11
+ * CHANGE: Removed bin/rye
12
+ * CHANGE: Removed authorize_keys_remote and authorize_keys_local
13
+
14
+
15
+ #### 0.8.20 (2010-08-17) #############################
16
+
17
+ * ADDED: string_append, template_write, template_upload, file_modify
18
+
3
19
  #### 0.8.19 (2010-06-28) #############################
4
20
 
5
21
  * ADDED: Rye::Box#root?
@@ -307,7 +323,7 @@ Rye.shell and Rye::Box.run_command (SSH) commands.
307
323
  * ADDED: Command switches can now be sent as Symbols (rbox.ls(:h))
308
324
  * ADDED: Rye.host_keys
309
325
  * ADDED: bin/rye
310
- * ADDED: commands now raise a Rye::CommandError exception
326
+ * ADDED: commands now raise a Rye::Err exception
311
327
  when the command returns an exit code greater than 0.
312
328
  * CHANGE: Box.add_command renamed to Box.run_command
313
329
 
data/README.rdoc CHANGED
@@ -11,33 +11,6 @@ Rye is a Ruby abstraction for executing shell commands via SSH. By default, Rye
11
11
 
12
12
  Rye does not require anything to be installed on the server side (other than an SSH daemon) so it can be run from any machine with Ruby, OpenSSL, and OpenSSH.
13
13
 
14
- === SSH keys
15
-
16
- You need SSH keys to use Rye. After installing Rye, you can check if you have any by running:
17
-
18
- $ rye
19
-
20
- If you get the message <i>"The agent has no identities"</i> you will need to generate a keypair.
21
-
22
- $ ssh-keygen
23
-
24
-
25
- === Passwordless SSH authorization
26
-
27
- The easiest way to work with Rye is to authorize your remote accounts for passwordless logins (otherwise you'll be prompted for a password for every connection).
28
-
29
- Enable passwordless logins to remote HOST1 and HOST2:
30
-
31
- $ rye authorize HOST1 HOST2
32
-
33
- This will copy your public SSH keys to the <tt>~/.ssh/authorized_keys</tt> and <tt>~/.ssh/authorized_keys2</tt> files on the remote machine(s).
34
-
35
- Enable passwordless logins to the local machine:
36
-
37
- $ rye authorize-local
38
-
39
- See <tt>rye -h</tt> for more info.
40
-
41
14
 
42
15
  == Example 1 -- Execute commands on a remote machine
43
16
 
@@ -53,7 +26,7 @@ The return value for a command is a modified Array containing the contents of ST
53
26
 
54
27
  ret = rbox.uptime # => "11:02 up 16:01, 3 users"
55
28
  ret.stderr # => []
56
- ret.exit_code # => 0
29
+ ret.exit_status # => 0
57
30
  ret.stdout # => "11:02 up 16:01, 3 users"
58
31
  ret.stdout.class # => Array
59
32
  ret.class # => Rye::Rap
@@ -161,7 +134,7 @@ The first argument must be the command name and the remaining arguments are sent
161
134
  The return value is a Rye::Rap object (just like with Rye::Box) so you have access to the exit code and STDERR output:
162
135
 
163
136
  ret = Rye.shell :ls, 'nofile'
164
- ret.exit_code # => 1
137
+ ret.exit_status # => 1
165
138
  ret.stderr # => "sh: nofile: No such file or directory"
166
139
  ret.class # => Rye::Rap
167
140
 
data/bin/try CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/ruby
2
+ # encoding: UTF-8
2
3
 
3
4
  # Rye -- A working example
4
5
  #
@@ -61,8 +62,8 @@ rbox_wild = Rye::Box.new('localhost', :safe => false)
61
62
  # arguments are thoroughly escaped. This prevents access to
62
63
  # environment variables and file globs (among other things).
63
64
  p rbox_safe.echo('$HOME') # => "$HOME"
64
- p rbox_safe['/etc'].ls('host*') rescue Rye::CommandError # Doesn't exist
65
- p rbox_safe.ls('-l | wc -l') rescue Rye::CommandError # => '|' is not a valid ls arg
65
+ p rbox_safe['/etc'].ls('host*') rescue Rye::Err # Doesn't exist
66
+ p rbox_safe.ls('-l | wc -l') rescue Rye::Err # => '|' is not a valid ls arg
66
67
 
67
68
  # Here's the same commands with safe-mode disabled:
68
69
  p rbox_wild.echo('$HOME') # => "/home/rye"
@@ -82,7 +83,7 @@ rbox = Rye::Box.new('localhost')
82
83
  rbox.add_keys('/private/key/path') # Specify additional private keys
83
84
 
84
85
  # There's currently no rye900 command
85
- p rbox.commands.member?('rye9000') # => false
86
+ p rbox.command?('rye9000') # => false
86
87
 
87
88
  # But we can add our own commands to the Rye::Cmd class. They
88
89
  # automatically become available to all Rye::Box objects.
@@ -97,7 +98,7 @@ end
97
98
 
98
99
  # We can now run rye9000 (with arguments)
99
100
  p rbox.rye9000('-a') # => [".", "..", ".bashrc", ...]
100
- p rbox.commands.member?('rye9000') # => true
101
+ p rbox.command?('rye9000') # => true
101
102
 
102
103
 
103
104
  puts %Q(
@@ -146,12 +147,12 @@ puts %Q(
146
147
  rbox = Rye::Box.new('localhost', :safe => false) # Note: safe mode is off
147
148
 
148
149
  # Rye follows the standard convention of taking exception to a non-zero
149
- # exit code by raising a Rye::CommandError. In this case, rye9000.test
150
+ # exit code by raising a Rye::Err. In this case, rye9000.test
150
151
  # is not found by the ls command.
151
152
  begin
152
153
  rbox.ls('rye.test')
153
- rescue Rye::CommandError => ex
154
- puts ex.exit_code # => 1
154
+ rescue Rye::Err => ex
155
+ puts ex.exit_status # => 1
155
156
  puts ex.stderr # => ls: rye.test: No such file or directory
156
157
  end
157
158
 
@@ -164,7 +165,7 @@ puts rbox.uname('-a 1>&2').stdout # =>
164
165
  puts rbox.uname('-a 1>&2').stderr # => Darwin ryehost 9.6.0 ...
165
166
 
166
167
  # There were no actual errors so the exit code should be 0.
167
- puts rbox.uname('-a 1>&2').exit_code # => 0
168
+ puts rbox.uname('-a 1>&2').exit_status # => 0
168
169
 
169
170
 
170
171
  puts %Q(
@@ -172,10 +173,10 @@ puts %Q(
172
173
  # EXAMPLE 6 -- FILE TRANSFERS
173
174
  #)
174
175
 
175
- dir_upload = "#{Rye.sysinfo.tmpdir}/rye-upload/"
176
- dir_download = "#{Rye.sysinfo.tmpdir}/rye-download/"
176
+ dir_upload = "#{Rye.sysinfo.tmpdir}rye-upload"
177
+ dir_download = "#{Rye.sysinfo.tmpdir}rye-download"
177
178
 
178
- rbox = Rye::Box.new("localhost", :info => false)
179
+ rbox = Rye::Box.new("localhost", :info => STDOUT)
179
180
 
180
181
  # Rye ships without an rm method (for safety!). Here
181
182
  # we add the rm method only to this instance of rbox.
@@ -201,7 +202,33 @@ p filecontent.read
201
202
 
202
203
  puts %Q(
203
204
  # ------------------------------------------------------------------
204
- # EXAMPLE 7 -- LOCAL PROCESSES
205
+ # EXAMPLE 7 -- FILE TRANSFERS w/ VARIABLE INTERPOLATION
206
+ #)
207
+
208
+ dir_upload = "#{Rye.sysinfo.tmpdir}rye-upload"
209
+ dir_download = "#{Rye.sysinfo.tmpdir}rye-download"
210
+
211
+ rbox = Rye::Box.new("localhost", :info => STDOUT)
212
+
213
+ # Rye ships without an rm method (for safety!). Here
214
+ # we add the rm method only to this instance of rbox.
215
+ def rbox.rm(*args); __allow('rm', args); end
216
+
217
+ rbox.rm(:r, :f, dir_upload) # Silently delete test dirs
218
+ rbox.rm(:r, :f, dir_download)
219
+
220
+ template = StringIO.new("Can we use templates? <%= 'Yes!' %>")
221
+ rbox.mkdir dir_upload
222
+
223
+ rbox.template_write("#{dir_upload}/template.txt", template)
224
+
225
+ p rbox.ls(dir_upload) # => [template.txt]
226
+ p rbox.cat("#{dir_upload}/template.txt") # => "Can we use templates? Yes!"
227
+
228
+
229
+ puts %Q(
230
+ # ------------------------------------------------------------------
231
+ # EXAMPLE 8 -- LOCAL PROCESSES
205
232
  #)
206
233
 
207
234
  p Rye.shell :uptime
@@ -210,8 +237,10 @@ p Rye.shell :ls, '*'
210
237
  p Rye.shell :ls, '-l $HOME'
211
238
  p Rye.shell :ls, :l, '$HOME > crazy.txt'
212
239
 
240
+ Rye.shell :rm, 'crazy.txt'
241
+
213
242
  ret = Rye.shell :ls, 'nofile'
214
- p ret.exit_code # => 1
243
+ p ret.exit_status # => 1
215
244
  p ret.stderr # => "sh: nofile: No such file or directory"
216
245
  p ret.class # => Rye::Rap
217
246