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/tst/test_hop.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
$: << File.expand_path(Dir.pwd + "/lib")
|
2
|
+
$:.reverse!
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rye'
|
6
|
+
begin
|
7
|
+
require 'perftools'
|
8
|
+
rescue LoadError => ex
|
9
|
+
puts ex.message
|
10
|
+
puts "$> gem install perftools.rb"
|
11
|
+
exit 1
|
12
|
+
end
|
13
|
+
|
14
|
+
data_file = Dir.pwd + "/profile.data"
|
15
|
+
pdf_file = Dir.pwd + "/profile.pdf"
|
16
|
+
text_file = Dir.pwd + "/profile.txt"
|
17
|
+
|
18
|
+
PerfTools::CpuProfiler.start(data_file) do
|
19
|
+
lo0 = Rye::Hop.new "localhost" # set some real host names
|
20
|
+
lo1 = Rye::Box.new "localhost", :via => lo0 # set some real host names
|
21
|
+
puts lo1.uptime
|
22
|
+
end
|
23
|
+
|
24
|
+
system("pprof.rb --pdf #{data_file} > #{pdf_file}")
|
25
|
+
system("pprof.rb --text #{data_file} > #{text_file}")
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rye
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Delano Mandelbaum
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
|
-
cert_chain:
|
12
|
-
|
11
|
+
cert_chain:
|
12
|
+
- !binary |-
|
13
|
+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUROakNDQWg2Z0F3SUJB
|
14
|
+
Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJCTVE4d0RRWURWUVFEREFaa1pX
|
15
|
+
eGgKYm04eEdUQVhCZ29Ka2lhSmsvSXNaQUVaRmdsemIyeDFkR2x2ZFhNeEV6
|
16
|
+
QVJCZ29Ka2lhSmsvSXNaQUVaRmdOagpiMjB3SGhjTk1UTXdNakEyTVRFMU56
|
17
|
+
UTFXaGNOTVRRd01qQTJNVEUxTnpRMVdqQkJNUTh3RFFZRFZRUUREQVprClpX
|
18
|
+
eGhibTh4R1RBWEJnb0praWFKay9Jc1pBRVpGZ2x6YjJ4MWRHbHZkWE14RXpB
|
19
|
+
UkJnb0praWFKay9Jc1pBRVoKRmdOamIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFF
|
20
|
+
QkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEZzFoTXRsMFhzTXVVSwpBS1RnWVd2
|
21
|
+
M2dqajd2dUVzRTJFalQrdnlCZzgvTHBxVlZ3WnppaWFlYkpUOUlaaVErc0NG
|
22
|
+
cWJpYWtqMGI1M3BJCmhnMXlPYUJFbUg2L1cwTDdyd3pxYVJWOXNXMWVKczlK
|
23
|
+
eEZZUUNuZDY3elVuemo4bm5SbE9qRytoaElHK1ZzaWoKbnBzR2J0MjhwZWZ1
|
24
|
+
TlpKak81cTJjbEFsZlNuaUlJSGZJc1U3L1N0RVl1NkZVR09qbndyeVowcjV5
|
25
|
+
SmxyOVJyRQpHcytxMERXOFFuWjlVcEFmdURGUVp1SXFlS1FGRkxFN25NbUNH
|
26
|
+
YUErMEJOMW5MbDNmVkhOYkxIcTdBdms4K1orClp1dXZrZHNjYkhsTy9sKzN4
|
27
|
+
Q05RNW5Vbkh3cTBBREFiTUxPbG1pWVl6cVhvV0xqbWVJNm1lL2Nsa3RKQ2ZO
|
28
|
+
MlIKb1pHM1VRdnZBZ01CQUFHak9UQTNNQWtHQTFVZEV3UUNNQUF3SFFZRFZS
|
29
|
+
ME9CQllFRk1TSk9FdEh6RTRsMGF6dgpNMEpLMGtLTlRvSzFNQXNHQTFVZER3
|
30
|
+
UUVBd0lFc0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXRPZEU3M3F4Ck9I
|
31
|
+
MnlkaTlvVDJoUzVmOUcweTFaNzBUbHdoK1ZHRXh5Znh6VkU5WHdDK2lQcEp4
|
32
|
+
TnJhaUhZZ0YvOS9va3k3WloKUjlxMC90Sm5ldWhBZW5aZGlRa1g3b2k0TzN2
|
33
|
+
OXdSUzZZSG9XQnhNUEZLVlJMTlR6dlZKc2JtZnBDQWxwNS81ZwpwczR3UUZ5
|
34
|
+
NW1pYkVsR1ZsT29iZi9naHFaMjVIUzlKNmtkMC9DL3J5MEFVdFRvZ3NMN1R4
|
35
|
+
R3dUNGtiQ3g2M3ViCjN2eXdFRWhzSlV6ZmQ5N0dDQUJtdFFmUlRsZFgvajdG
|
36
|
+
MXovNXdkOHAraGZkb3gxaWliZHM5WnRmYVpBM0t6S24Ka2NoV045QjZ6Zzly
|
37
|
+
MVhNUThCTTJKejBYb1BhblBlMzU0K2xXd2pwa1JLYkZvdy9aYlFIY0NMQ3Ey
|
38
|
+
NCtONmI2ZwpkZ0tmTkR6d2lEcHFDQT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
|
39
|
+
LS0tLS0K
|
40
|
+
date: 2013-02-06 00:00:00.000000000 Z
|
13
41
|
dependencies:
|
14
42
|
- !ruby/object:Gem::Dependency
|
15
43
|
name: annoy
|
@@ -91,39 +119,79 @@ dependencies:
|
|
91
119
|
- - ! '>='
|
92
120
|
- !ruby/object:Gem::Version
|
93
121
|
version: 1.0.2
|
94
|
-
|
95
|
-
|
122
|
+
- !ruby/object:Gem::Dependency
|
123
|
+
name: docile
|
124
|
+
requirement: !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
126
|
+
requirements:
|
127
|
+
- - ! '>='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 1.0.1
|
130
|
+
type: :runtime
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ! '>='
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 1.0.1
|
138
|
+
description: Run SSH commands on a bunch of machines at the same time (from Ruby).
|
96
139
|
email: delano@solutious.com
|
97
140
|
executables: []
|
98
141
|
extensions: []
|
99
142
|
extra_rdoc_files:
|
100
|
-
- README.rdoc
|
101
143
|
- LICENSE.txt
|
144
|
+
- README.rdoc
|
102
145
|
files:
|
103
146
|
- CHANGES.txt
|
104
147
|
- LICENSE.txt
|
105
148
|
- README.rdoc
|
106
149
|
- Rakefile
|
107
150
|
- Rudyfile
|
108
|
-
-
|
151
|
+
- VERSION
|
152
|
+
- gem-public_cert.pem
|
109
153
|
- lib/esc.rb
|
110
154
|
- lib/rye.rb
|
111
155
|
- lib/rye/box.rb
|
112
156
|
- lib/rye/cmd.rb
|
157
|
+
- lib/rye/dsl.rb
|
158
|
+
- lib/rye/hop.rb
|
113
159
|
- lib/rye/key.rb
|
114
160
|
- lib/rye/rap.rb
|
115
161
|
- lib/rye/set.rb
|
116
|
-
- lib/rye/hop.rb
|
117
162
|
- rye.gemspec
|
118
|
-
|
163
|
+
- try/10_basic_tryouts.rb
|
164
|
+
- try/12_batch_tryouts.rb
|
165
|
+
- try/13_set_tryouts.rb
|
166
|
+
- try/14_auth_methods_tryouts.rb
|
167
|
+
- try/15_file_tryouts.rb
|
168
|
+
- try/20_file_transfer_tryouts.rb
|
169
|
+
- try/25_template_upload.rb
|
170
|
+
- try/30_safemode_tryouts.rb
|
171
|
+
- try/35_basics_with_hop.rb
|
172
|
+
- try/70_rye_cli_tryouts.rb
|
173
|
+
- try/copying.rb
|
174
|
+
- try/keys.rb
|
175
|
+
- tst/10-key1
|
176
|
+
- tst/10-key1.pub
|
177
|
+
- tst/10-key2
|
178
|
+
- tst/10-key2.pub
|
179
|
+
- tst/10_keys_test.rb
|
180
|
+
- tst/50_rset_test.rb
|
181
|
+
- tst/60-file.mp3
|
182
|
+
- tst/60_rbox_transfer_test.rb
|
183
|
+
- tst/65_rbox_file_append_test.rb
|
184
|
+
- tst/70_rbox_env_test.rb
|
185
|
+
- tst/dsl_example.rb
|
186
|
+
- tst/rye.rb
|
187
|
+
- tst/shell.rb
|
188
|
+
- tst/shell2.rb
|
189
|
+
- tst/shell3.rb
|
190
|
+
- tst/test_hop.rb
|
191
|
+
homepage: https://github.com/delano/rye
|
119
192
|
licenses: []
|
120
193
|
post_install_message:
|
121
|
-
rdoc_options:
|
122
|
-
- --line-numbers
|
123
|
-
- --title
|
124
|
-
- ! 'Rye: Safely run SSH commands on a bunch of machines at the same time (from Ruby).'
|
125
|
-
- --main
|
126
|
-
- README.rdoc
|
194
|
+
rdoc_options: []
|
127
195
|
require_paths:
|
128
196
|
- lib
|
129
197
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -132,23 +200,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
200
|
- - ! '>='
|
133
201
|
- !ruby/object:Gem::Version
|
134
202
|
version: '0'
|
135
|
-
segments:
|
136
|
-
- 0
|
137
|
-
hash: -1540559610647947478
|
138
203
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
204
|
none: false
|
140
205
|
requirements:
|
141
206
|
- - ! '>='
|
142
207
|
- !ruby/object:Gem::Version
|
143
208
|
version: '0'
|
144
|
-
segments:
|
145
|
-
- 0
|
146
|
-
hash: -1540559610647947478
|
147
209
|
requirements: []
|
148
210
|
rubyforge_project: rye
|
149
|
-
rubygems_version: 1.8.
|
211
|
+
rubygems_version: 1.8.25
|
150
212
|
signing_key:
|
151
|
-
specification_version:
|
152
|
-
summary:
|
153
|
-
Ruby).'
|
213
|
+
specification_version: 3
|
214
|
+
summary: Run SSH commands on a bunch of machines at the same time (from Ruby).
|
154
215
|
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|
data/bin/try
DELETED
@@ -1,246 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
# Rye -- A working example
|
5
|
-
#
|
6
|
-
# If your reading this via the rdocs you won't be able to see the code
|
7
|
-
# See: http://github.com/delano/rye/blob/master/bin/try
|
8
|
-
#
|
9
|
-
# Usage: bin/try
|
10
|
-
#
|
11
|
-
|
12
|
-
RYE_HOME = File.join(File.dirname(__FILE__), '..')
|
13
|
-
$:.unshift File.join(RYE_HOME, 'lib')
|
14
|
-
%w{net-ssh sysinfo storable drydock}.each { |dir| $:.unshift File.join(File.dirname(__FILE__), '..', '..', dir, 'lib') }
|
15
|
-
|
16
|
-
require 'stringio'
|
17
|
-
require 'yaml'
|
18
|
-
require 'rye'
|
19
|
-
|
20
|
-
|
21
|
-
puts %Q(
|
22
|
-
# ------------------------------------------------------------------
|
23
|
-
# EXAMPLE 1 -- Basic Usage
|
24
|
-
#)
|
25
|
-
|
26
|
-
rbox = Rye::Box.new('localhost')
|
27
|
-
|
28
|
-
# Commands are run as methods on the Rye::Box object
|
29
|
-
puts rbox.uptime # => 11:02 up 16:01, 3 users
|
30
|
-
|
31
|
-
# The response value for all commands is a Rye::Rap object. The rap is a
|
32
|
-
# subclass of Array so you can treat it as an Array, but it can also act
|
33
|
-
# like a String if there's only one element.
|
34
|
-
p rbox.ls(:a, '/') # => ['.', '..', 'bin', 'etc', ...]
|
35
|
-
|
36
|
-
# You can change directories
|
37
|
-
puts rbox.pwd # => /home/rye
|
38
|
-
puts rbox['/usr/bin'].pwd # => /usr/bin
|
39
|
-
puts rbox.pwd # => /usr/bin
|
40
|
-
|
41
|
-
# You can specify environment variables
|
42
|
-
rbox.setenv(:RYE, "Forty Creek")
|
43
|
-
rbox.env # => ['HOME=/home/rye', 'RYE=Forty Creek', ...]
|
44
|
-
|
45
|
-
# The commands method returns an Array of available commands:
|
46
|
-
puts rbox.commands.join(', ') # => pwd, touch, echo, wc, ...
|
47
|
-
|
48
|
-
# When you're done you can disconnect explicitly.
|
49
|
-
# (Although Rye does this automatically at exit.)
|
50
|
-
rbox.disconnect
|
51
|
-
|
52
|
-
|
53
|
-
puts %Q(
|
54
|
-
# ------------------------------------------------------------------
|
55
|
-
# EXAMPLE 2 -- Disabling Safe-Mode
|
56
|
-
#)
|
57
|
-
|
58
|
-
rbox_safe = Rye::Box.new('localhost')
|
59
|
-
rbox_wild = Rye::Box.new('localhost', :safe => false)
|
60
|
-
|
61
|
-
# Safe-mode is enabled by default. In safe-mode, all command
|
62
|
-
# arguments are thoroughly escaped. This prevents access to
|
63
|
-
# environment variables and file globs (among other things).
|
64
|
-
p rbox_safe.echo('$HOME') # => "$HOME"
|
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
|
67
|
-
|
68
|
-
# Here's the same commands with safe-mode disabled:
|
69
|
-
p rbox_wild.echo('$HOME') # => "/home/rye"
|
70
|
-
p rbox_wild['/etc'].ls('host*') # => ["hostconfig", "hosts"]
|
71
|
-
p rbox_wild.ls('-l | wc -l') # => 110
|
72
|
-
p rbox_wild.echo('$HOME > /tmp/rye-home') # =>
|
73
|
-
p rbox_wild.cat('/tmp/rye-home') # => "/home/rye"
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
puts %Q(
|
78
|
-
# ------------------------------------------------------------------
|
79
|
-
# EXAMPLE 3 -- Custom Commands
|
80
|
-
#)
|
81
|
-
|
82
|
-
rbox = Rye::Box.new('localhost')
|
83
|
-
rbox.add_keys('/private/key/path') # Specify additional private keys
|
84
|
-
|
85
|
-
# There's currently no rye900 command
|
86
|
-
p rbox.command?('rye9000') # => false
|
87
|
-
|
88
|
-
# But we can add our own commands to the Rye::Cmd class. They
|
89
|
-
# automatically become available to all Rye::Box objects.
|
90
|
-
module Rye::Cmd
|
91
|
-
def rye9000(*args)
|
92
|
-
run_command("ls", args)
|
93
|
-
end
|
94
|
-
def somescript(*args)
|
95
|
-
run_command("/path/to/my/script", args)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# We can now run rye9000 (with arguments)
|
100
|
-
p rbox.rye9000('-a') # => [".", "..", ".bashrc", ...]
|
101
|
-
p rbox.command?('rye9000') # => true
|
102
|
-
|
103
|
-
|
104
|
-
puts %Q(
|
105
|
-
# ------------------------------------------------------------------
|
106
|
-
# EXAMPLE 4 -- Accessing Multiple Machines
|
107
|
-
#)
|
108
|
-
|
109
|
-
rset = Rye::Set.new('default', :parallel => true)
|
110
|
-
rbox = Rye::Box.new
|
111
|
-
p rbox
|
112
|
-
|
113
|
-
rset.add_keys('/private/key/path') # For passwordless logins
|
114
|
-
rset.add_boxes(rbox, '127.0.0.1') # Add boxes as hostnames or objects
|
115
|
-
|
116
|
-
# Calling methods on Rye::Set objects is very similar to calling them on
|
117
|
-
# Rye::Box objects. In fact, it's identical:
|
118
|
-
p rset.uptime # => [[14:19:02 up 32 days, 19:35 ...], [14:19:02 up 30 days, 01:35]]
|
119
|
-
p rset['/usr'].ls # => [['bin', 'etc', ...], ['bin', 'etc', ...]]
|
120
|
-
|
121
|
-
# Like Rye::Box, the response value is a Rye::Rap object containing the
|
122
|
-
# responses from each box. Each response is itself a Rye::Rap object.
|
123
|
-
unames = rset.uname
|
124
|
-
p unames # => [["Darwin"], ["Darwin"]]
|
125
|
-
puts unames.class # => Rye::Rap
|
126
|
-
|
127
|
-
# The Rye::Rap object also keeps a reference to the object that called the
|
128
|
-
# command. In this case, it will keep a reference to Rye::Set:
|
129
|
-
puts unames.set.class # => Rye::Set
|
130
|
-
puts unames.set == rset # => true
|
131
|
-
puts unames.size # => 2
|
132
|
-
puts unames.first # => Darwin
|
133
|
-
puts unames.first.class # => Rye::Rap
|
134
|
-
puts unames.first.box.class # => Rye::Box
|
135
|
-
puts unames.first.box == rbox # => true
|
136
|
-
|
137
|
-
# Envrionment variables can be set the same way as with Rye::Box
|
138
|
-
rset.setenv(:RYE, "Forty Creek")
|
139
|
-
p rset.env.first.select { |env| env =~ /RYE/ } # => ["RYE=Forty Creek"]
|
140
|
-
|
141
|
-
|
142
|
-
puts %Q(
|
143
|
-
# ------------------------------------------------------------------
|
144
|
-
# EXAMPLE 5 -- ERROR HANDLING
|
145
|
-
#)
|
146
|
-
|
147
|
-
rbox = Rye::Box.new('localhost', :safe => false) # Note: safe mode is off
|
148
|
-
|
149
|
-
# Rye follows the standard convention of taking exception to a non-zero
|
150
|
-
# exit code by raising a Rye::Err. In this case, rye9000.test
|
151
|
-
# is not found by the ls command.
|
152
|
-
begin
|
153
|
-
rbox.ls('rye.test')
|
154
|
-
rescue Rye::Err => ex
|
155
|
-
puts ex.exit_status # => 1
|
156
|
-
puts ex.stderr # => ls: rye.test: No such file or directory
|
157
|
-
end
|
158
|
-
|
159
|
-
# The Rye:Rap response objects also give you the STDOUT and STDERR
|
160
|
-
# content separately. Here we redirect STDOUT to STDERR, so this
|
161
|
-
# will return nothing:
|
162
|
-
puts rbox.uname('-a 1>&2').stdout # =>
|
163
|
-
|
164
|
-
# It all went to STDERR:
|
165
|
-
puts rbox.uname('-a 1>&2').stderr # => Darwin ryehost 9.6.0 ...
|
166
|
-
|
167
|
-
# There were no actual errors so the exit code should be 0.
|
168
|
-
puts rbox.uname('-a 1>&2').exit_status # => 0
|
169
|
-
|
170
|
-
|
171
|
-
puts %Q(
|
172
|
-
# ------------------------------------------------------------------
|
173
|
-
# EXAMPLE 6 -- FILE TRANSFERS
|
174
|
-
#)
|
175
|
-
|
176
|
-
dir_upload = "#{Rye.sysinfo.tmpdir}rye-upload"
|
177
|
-
dir_download = "#{Rye.sysinfo.tmpdir}rye-download"
|
178
|
-
|
179
|
-
rbox = Rye::Box.new("localhost", :info => STDOUT)
|
180
|
-
|
181
|
-
# Rye ships without an rm method (for safety!). Here
|
182
|
-
# we add the rm method only to this instance of rbox.
|
183
|
-
def rbox.rm(*args); __allow('rm', args); end
|
184
|
-
|
185
|
-
rbox.rm(:r, :f, dir_upload) # Silently delete test dirs
|
186
|
-
rbox.rm(:r, :f, dir_download)
|
187
|
-
|
188
|
-
rbox.file_upload("#{RYE_HOME}/README.rdoc",
|
189
|
-
"#{RYE_HOME}/LICENSE.txt", dir_upload)
|
190
|
-
|
191
|
-
applejack = StringIO.new("Some in-memory content")
|
192
|
-
rbox.file_upload(applejack, "#{dir_upload}/applejack.txt")
|
193
|
-
|
194
|
-
p rbox.ls(dir_upload) # => [README.rdoc, LICENSE.txt, applejack.txt]
|
195
|
-
p rbox.cat("#{dir_upload}/applejack.txt") # => "Some in-memory content"
|
196
|
-
|
197
|
-
filecontent = StringIO.new
|
198
|
-
rbox.file_download("#{dir_upload}/applejack.txt", filecontent)
|
199
|
-
filecontent.rewind
|
200
|
-
p filecontent.read
|
201
|
-
|
202
|
-
|
203
|
-
puts %Q(
|
204
|
-
# ------------------------------------------------------------------
|
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
|
232
|
-
#)
|
233
|
-
|
234
|
-
p Rye.shell :uptime
|
235
|
-
|
236
|
-
p Rye.shell :ls, '*'
|
237
|
-
p Rye.shell :ls, '-l $HOME'
|
238
|
-
p Rye.shell :ls, :l, '$HOME > crazy.txt'
|
239
|
-
|
240
|
-
Rye.shell :rm, 'crazy.txt'
|
241
|
-
|
242
|
-
ret = Rye.shell :ls, 'nofile'
|
243
|
-
p ret.exit_status # => 1
|
244
|
-
p ret.stderr # => "sh: nofile: No such file or directory"
|
245
|
-
p ret.class # => Rye::Rap
|
246
|
-
|