delano-rye 0.8.7 → 0.8.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,14 @@
1
1
  RYE, CHANGES
2
2
 
3
3
 
4
+ #### 0.8.8 (2009-08-25) #############################
5
+
6
+ * FIXED: Rye::Box#guess_user_home for Windows SSH support
7
+ * CHANGE: Renamed Rye::Box#cmd -> Rye::Box#__allow
8
+ * ADDED: New whitelist commands: wget, curl, dir
9
+ * ADDED: Rye::Box#file_write
10
+
11
+
4
12
  #### 0.8.7 (2009-08-11) #############################
5
13
 
6
14
  * FIXED: Rye::Box info level output is cleaner
data/bin/try CHANGED
@@ -179,7 +179,7 @@ rbox = Rye::Box.new("localhost", :info => false)
179
179
 
180
180
  # Rye ships without an rm method (for safety!). Here
181
181
  # we add the rm method only to this instance of rbox.
182
- def rbox.rm(*args); cmd('rm', args); end
182
+ def rbox.rm(*args); __allow('rm', args); end
183
183
 
184
184
  rbox.rm(:r, :f, dir_upload) # Silently delete test dirs
185
185
  rbox.rm(:r, :f, dir_download)
data/lib/rye.rb CHANGED
@@ -43,7 +43,7 @@ module Rye
43
43
  extend self
44
44
 
45
45
  unless defined?(SYSINFO)
46
- VERSION = "0.8.7".freeze
46
+ VERSION = "0.8.8".freeze
47
47
  SYSINFO = SysInfo.new.freeze
48
48
  end
49
49
 
@@ -315,7 +315,7 @@ module Rye
315
315
 
316
316
  Rye.reload
317
317
 
318
- unless Rye.sysinfo.os == :win32
318
+ unless Rye.sysinfo.os == :windows
319
319
  begin
320
320
  @@mutex.synchronize { # One thread only
321
321
  start_sshagent_environment # Run this now
@@ -62,7 +62,9 @@ module Rye
62
62
  def info; @rye_info; end
63
63
  def debug; @rye_debug; end
64
64
  def error; @rye_error; end
65
-
65
+
66
+ def ostype=(val); @rye_ostype = val; end
67
+ def impltype=(val); @rye_impltype = val; end
66
68
  def pre_command_hook=(val); @rye_pre_command_hook = val; end
67
69
  def post_command_hook=(val); @rye_post_command_hook = val; end
68
70
  # A Hash. The keys are exception classes, the values are Procs to execute
@@ -111,6 +113,7 @@ module Rye
111
113
  @rye_safe, @rye_debug = @rye_opts.delete(:safe), @rye_opts.delete(:debug)
112
114
  @rye_info, @rye_error = @rye_opts.delete(:info), @rye_opts.delete(:error)
113
115
  @rye_getenv = {} if @rye_opts.delete(:getenv) # Enable getenv with a hash
116
+ @rye_ostype, @rye_impltype = @rye_opts.delete(:ostype), @rye_opts.delete(:impltype)
114
117
  @rye_quiet = @rye_opts.delete(:quiet)
115
118
 
116
119
  # Just in case someone sends a true value rather than IO object
@@ -221,7 +224,7 @@ module Rye
221
224
  # * +additional_keys+ is a list of file paths to private keys
222
225
  # Returns the instance of Box
223
226
  def add_keys(*additional_keys)
224
- if Rye.sysinfo.os == :win32
227
+ if Rye.sysinfo.os == :windows
225
228
  @rye_opts[:keys] ||= []
226
229
  @rye_opts[:keys] += additional_keys.flatten
227
230
  return @rye_opts[:keys]
@@ -249,6 +252,10 @@ module Rye
249
252
  @rye_ostype = os
250
253
  end
251
254
 
255
+ def impltype
256
+ @rye_impltype
257
+ end
258
+
252
259
  # Returns the hash containing the parsed output of "env" on the
253
260
  # remote machine. If the initialize option +:getenv+ was set to
254
261
  # false, this will return an empty hash.
@@ -328,21 +335,24 @@ module Rye
328
335
  # /etc/default/useradd, HOME=/home OR useradd -D
329
336
  # /etc/adduser.config, DHOME=/home OR ??
330
337
  user_defaults = {}
331
- raw = self.quietly { useradd(:D) } rescue ["HOME=/home"]
332
338
  ostmp = self.ostype
333
- raw.each do |nv|
334
-
335
- if ostmp == "sunos"
336
- #nv.scan(/([\w_-]+?)=(.+?)\s/).each do |n, v|
337
- # n = 'HOME' if n == 'basedir'
338
- # user_defaults[n.upcase] = v.strip
339
- #end
340
- # In Solaris, useradd -D says the default home path is /home
341
- # but that directory is not writable. See: http://bit.ly/IJDD0
342
- user_defaults['HOME'] = '/export/home'
343
- elsif ostmp == "darwin"
344
- user_defaults['HOME'] = '/Users'
345
- else
339
+ ostmp &&= ostype.to_s
340
+
341
+ if ostmp == "sunos"
342
+ #nv.scan(/([\w_-]+?)=(.+?)\s/).each do |n, v|
343
+ # n = 'HOME' if n == 'basedir'
344
+ # user_defaults[n.upcase] = v.strip
345
+ #end
346
+ # In Solaris, useradd -D says the default home path is /home
347
+ # but that directory is not writable. See: http://bit.ly/IJDD0
348
+ user_defaults['HOME'] = '/export/home'
349
+ elsif ostmp == "darwin"
350
+ user_defaults['HOME'] = '/Users'
351
+ elsif ostmp == "windows"
352
+ user_defaults['HOME'] = 'C:/Documents and Settings'
353
+ else
354
+ raw = self.quietly { useradd(:D) } rescue ["HOME=/home"]
355
+ raw.each do |nv|
346
356
  n, v = nv.scan(/\A([\w_-]+?)=(.+)\z/).flatten
347
357
  user_defaults[n] = v
348
358
  end
@@ -769,7 +779,7 @@ module Rye
769
779
 
770
780
  rap
771
781
  end
772
- alias :cmd :run_command
782
+ alias :__allow :run_command
773
783
 
774
784
  # Takes a list of arguments appropriate for run_command or
775
785
  # preview_command and returns: [cmd, args].
@@ -11,7 +11,7 @@ module Rye;
11
11
  #
12
12
  # require 'rye'
13
13
  # module Rye::Box::Cmd
14
- # def special(*args); cmd("/your/special/command", args); end
14
+ # def special(*args); __allow("/your/special/command", args); end
15
15
  # end
16
16
  #
17
17
  # rbox = Rye::Box.new('somehost')
@@ -19,73 +19,77 @@ module Rye;
19
19
  #
20
20
  module Cmd
21
21
 
22
- #--
23
- # TODO: Clean this trite mess up!
24
- #++
25
-
26
22
  # NOTE: See Rye::Box for the implementation of cd
27
- #def cd(*args); cmd('cd', args); end
28
- #def rm(*args); cmd('rm', args); end
29
- def wc(*args); cmd('wc', args); end
30
- def cp(*args); cmd("cp", args); end
31
- def mv(*args); cmd("mv", args); end
32
- def ls(*args); cmd('ls', args); end
33
- def ps(*args); cmd('ps', args); end
34
- def sh(*args); cmd('sh', args); end
35
- def df(*args); cmd('df', args); end
36
- def du(*args); cmd('du', args); end
23
+ #def cd(*args); __allow('cd', args); end
24
+ #def rm(*args); __allow('rm', args); end
25
+ def wc(*args); __allow('wc', args); end
26
+ def cp(*args); __allow("cp", args); end
27
+ def mv(*args); __allow("mv", args); end
28
+ def ls(*args); __allow('ls', args); end
29
+ def ps(*args); __allow('ps', args); end
30
+ def sh(*args); __allow('sh', args); end
31
+ def df(*args); __allow('df', args); end
32
+ def du(*args); __allow('du', args); end
33
+
34
+ def env; __allow "env"; end
35
+ def rye(*args); __allow "rye", args; end
36
+ def pwd(*args); __allow "pwd", args; end
37
+ def svn(*args); __allow('svn', args); end
38
+ def cvs(*args); __allow('cvs', args); end
39
+ def git(*args); __allow('git', args); end
40
+ def sed(*args); __allow('sed', args); end
41
+ def awk(*args); __allow('awk', args); end
42
+ def cat(*args); __allow('cat', args); end
43
+ def tar(*args); __allow('tar', args); end
37
44
 
38
- def env; cmd "env"; end
39
- def rye(*args); cmd "rye", args; end
40
- def pwd(*args); cmd "pwd", args; end
41
- def svn(*args); cmd('svn', args); end
42
- def cvs(*args); cmd('cvs', args); end
43
- def git(*args); cmd('git', args); end
44
- def sed(*args); cmd('sed', args); end
45
- def awk(*args); cmd('awk', args); end
46
- def cat(*args); cmd('cat', args); end
47
- def tar(*args); cmd('tar', args); end
45
+ #def kill(*args); __allow('kill', args); end
46
+ def rake(*args); __allow('sudo', args); end
47
+ def sudo(*args); __allow('sudo', args); end
48
+ def grep(*args); __allow('grep', args); end
49
+ def date(*args); __allow('date', args); end
50
+ def ruby(*args); __allow('ruby', args); end
51
+ def rudy(*args); __allow('rudy', args); end
52
+ def perl(*args); __allow('perl', args); end
53
+ def bash(*args); __allow('bash', args); end
54
+ def echo(*args); __allow('echo', args); end
55
+ def test(*args); __allow('test', args); end
56
+ def mkfs(*args); __allow('mkfs', args); end
57
+ def gzip(*args); __allow('gzip', args); end
58
+ def make(*args); __allow('make', args); end
59
+ def wget(*args); __allow('wget', args); end
60
+ def curl(*args); __allow('curl', args); end
48
61
 
49
- #def kill(*args); cmd('kill', args); end
50
- def rake(*args); cmd('sudo', args); end
51
- def sudo(*args); cmd('sudo', args); end
52
- def grep(*args); cmd('grep', args); end
53
- def date(*args); cmd('date', args); end
54
- def ruby(*args); cmd('ruby', args); end
55
- def rudy(*args); cmd('rudy', args); end
56
- def perl(*args); cmd('perl', args); end
57
- def bash(*args); cmd('bash', args); end
58
- def echo(*args); cmd('echo', args); end
59
- def test(*args); cmd('test', args); end
60
- def mkfs(*args); cmd('mkfs', args); end
61
- def gzip(*args); cmd('gzip', args); end
62
- def make(*args); cmd('make', args); end
62
+ def mount(*args); __allow("mount", args); end
63
+ def sleep(*args); __allow("sleep", args); end
64
+ def mkdir(*args); __allow('mkdir', args); end
65
+ def touch(*args); __allow('touch', args); end
66
+ def uname(*args); __allow('uname', args); end
67
+ def chmod(*args); __allow('chmod', args); end
68
+ def chown(*args); __allow('chown', args); end
69
+ def unzip(*args); __allow('unzip', args); end
70
+ def bzip2(*args); __allow('bzip2', args); end
71
+ def which(*args); __allow('which', args); end
63
72
 
64
- def mount(*args); cmd("mount", args); end
65
- def sleep(*args); cmd("sleep", args); end
66
- def mkdir(*args); cmd('mkdir', args); end
67
- def touch(*args); cmd('touch', args); end
68
- def uname(*args); cmd('uname', args); end
69
- def chmod(*args); cmd('chmod', args); end
70
- def chown(*args); cmd('chown', args); end
71
- def unzip(*args); cmd('unzip', args); end
72
- def bzip2(*args); cmd('bzip2', args); end
73
- def which(*args); cmd('which', args); end
73
+ def umount(*args); __allow("umount", args); end
74
+ def uptime(*args); __allow("uptime", args); end
75
+ def python(*args); __allow('python', args); end
76
+ def gunzip(*args); __allow('gunzip', args); end
77
+ def useradd(*args); __allow('useradd', args); end
78
+ def bunzip2(*args); __allow('bunzip2', args); end
79
+ def getconf(*args); __allow('getconf', args); end
80
+ def history(*args); __allow('history', args); end
81
+ def rudy_s3(*args); __allow('rudy-s3', args); end
82
+ def printenv(*args); __allow('printenv', args); end
83
+ def hostname(*args); __allow('hostname', args); end
84
+ def rudy_ec2(*args); __allow('rudy-ec2', args); end
85
+ def rudy_sdb(*args); __allow('rudy-sdb', args); end
86
+ def configure(*args); __allow('./configure', args); end
87
+
88
+ #--
89
+ # WINDOWS
90
+ #++
91
+ def dir(*args); __allow('cmd', args); end
74
92
 
75
- def umount(*args); cmd("umount", args); end
76
- def uptime(*args); cmd("uptime", args); end
77
- def python(*args); cmd('python', args); end
78
- def gunzip(*args); cmd('gunzip', args); end
79
- def useradd(*args); cmd('useradd', args); end
80
- def bunzip2(*args); cmd('bunzip2', args); end
81
- def getconf(*args); cmd('getconf', args); end
82
- def history(*args); cmd('history', args); end
83
- def rudy_s3(*args); cmd('rudy-s3', args); end
84
- def printenv(*args); cmd('printenv', args); end
85
- def hostname(*args); cmd('hostname', args); end
86
- def rudy_ec2(*args); cmd('rudy-ec2', args); end
87
- def rudy_sdb(*args); cmd('rudy-sdb', args); end
88
- def configure(*args); cmd('./configure', args); end
89
93
 
90
94
  # Transfer files to a machine via Net::SCP.
91
95
  # * +paths+ is an Array of files to upload. The last element is the
@@ -151,15 +155,28 @@ module Rye;
151
155
  file_content = self.file_download filepath
152
156
  end
153
157
 
154
- file_content ||= StringIO.new
158
+ content ||= StringIO.new
155
159
  if newcontent.is_a?(StringIO)
156
160
  newcontent.rewind
157
- file_content.puts newcontent.read
161
+ content.puts newcontent.read
158
162
  else
159
- file_content.puts newcontent
163
+ content.puts newcontent
164
+ end
165
+
166
+ self.file_upload content, filepath
167
+ end
168
+
169
+ # Write +newcontent+ to remote +filepath+. If the file exists
170
+ # it will be overwritten. If +backup+ is specified, +filepath+
171
+ # will be copied to +filepath-previous+ before appending.
172
+ def file_write(filepath, newcontent, backup=false)
173
+ if self.file_exists?(filepath)
174
+ self.cp filepath, "#{filepath}-previous" if backup
160
175
  end
161
176
 
162
- self.file_upload file_content, filepath
177
+ content = StringIO.new
178
+ content.puts newcontent
179
+ self.file_upload content, filepath
163
180
  end
164
181
 
165
182
  #--
@@ -252,7 +269,7 @@ module Rye;
252
269
  define_method(meth) do |*args|
253
270
  local_args = hard_args.clone
254
271
  local_args += args
255
- cmd(path, *local_args)
272
+ __allow(path, *local_args)
256
273
  end
257
274
  end
258
275
  end
@@ -69,7 +69,7 @@ module Rye
69
69
  # * +additional_keys+ is a list of file paths to private keys
70
70
  # Returns the instance of Rye::Set
71
71
  def add_key(*additional_keys)
72
- if Rye.sysinfo.os == :win32
72
+ if Rye.sysinfo.os == :windows
73
73
  @opts[:keys] ||= []
74
74
  @opts[:keys] += additional_keys.flatten
75
75
  return @opts[:keys]
@@ -1,7 +1,7 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "rye"
3
3
  s.rubyforge_project = "rye"
4
- s.version = "0.8.7"
4
+ s.version = "0.8.8"
5
5
  s.summary = "Rye: Safely run SSH commands on a bunch of machines at the same time (from Ruby)."
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
@@ -13,6 +13,7 @@
13
13
  s.add_dependency 'drydock'
14
14
  s.add_dependency 'sysinfo'
15
15
  s.add_dependency 'storable'
16
+ s.add_dependency 'sysinfo', '>= 0.7.0'
16
17
 
17
18
  s.add_dependency 'highline', '>= 1.5.1'
18
19
  s.add_dependency 'net-ssh', '>= 2.0.11'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delano-rye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.7
4
+ version: 0.8.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -42,6 +42,16 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: sysinfo
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.7.0
54
+ version:
45
55
  - !ruby/object:Gem::Dependency
46
56
  name: highline
47
57
  type: :runtime