rye 0.8.18 → 0.8.19
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +6 -0
- data/README.rdoc +0 -1
- data/lib/rye.rb +1 -1
- data/lib/rye/box.rb +36 -6
- data/lib/rye/cmd.rb +0 -1
- data/lib/rye/set.rb +1 -0
- data/rye.gemspec +1 -1
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
RYE, CHANGES
|
2
2
|
|
3
|
+
#### 0.8.19 (2010-06-28) #############################
|
4
|
+
|
5
|
+
* ADDED: Rye::Box#root?
|
6
|
+
* ADDED: Better sudo handling.
|
7
|
+
|
8
|
+
|
3
9
|
#### 0.8.18 (2010-06-19) #############################
|
4
10
|
|
5
11
|
* FIXED: Authentication would never succeed if the first password attempt failed.
|
data/README.rdoc
CHANGED
data/lib/rye.rb
CHANGED
data/lib/rye/box.rb
CHANGED
@@ -33,6 +33,11 @@ module Rye
|
|
33
33
|
def opts; @rye_opts; end
|
34
34
|
def safe; @rye_safe; end
|
35
35
|
def user; @rye_user; end
|
36
|
+
def root?; user.to_s == "root" end
|
37
|
+
|
38
|
+
def enable_sudo; @rye_sudo = true; end
|
39
|
+
def disable_sudo; @rye_sudo = false; end
|
40
|
+
def sudo?; @rye_sudo == true end
|
36
41
|
|
37
42
|
# Returns the current value of the stash +@rye_stash+
|
38
43
|
def stash; @rye_stash; end
|
@@ -84,6 +89,7 @@ module Rye
|
|
84
89
|
# * :error => an IO object to print Rye::Box errors to. Default: STDERR
|
85
90
|
# * :getenv => pre-fetch +host+ environment variables? (default: true)
|
86
91
|
# * :password => the user's password (ignored if there's a valid private key)
|
92
|
+
# * :sudo => Run all commands via sudo (default: false)
|
87
93
|
#
|
88
94
|
# NOTE: +opts+ can also contain any parameter supported by
|
89
95
|
# Net::SSH.start that is not already mentioned above.
|
@@ -121,7 +127,7 @@ module Rye
|
|
121
127
|
@rye_info, @rye_error = @rye_opts.delete(:info), @rye_opts.delete(:error)
|
122
128
|
@rye_getenv = {} if @rye_opts.delete(:getenv) # Enable getenv with a hash
|
123
129
|
@rye_ostype, @rye_impltype = @rye_opts.delete(:ostype), @rye_opts.delete(:impltype)
|
124
|
-
@rye_quiet = @rye_opts.delete(:quiet)
|
130
|
+
@rye_quiet, @rye_sudo = @rye_opts.delete(:quiet), @rye_opts.delete(:sudo)
|
125
131
|
|
126
132
|
# Just in case someone sends a true value rather than IO object
|
127
133
|
@rye_debug = STDERR if @rye_debug == true
|
@@ -430,10 +436,16 @@ module Rye
|
|
430
436
|
# We need to rewind so that all of the StringIO object is uploaded
|
431
437
|
authorized_keys.rewind
|
432
438
|
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
439
|
+
full_path = "#{homedir}/#{akey_path}"
|
440
|
+
temp_path = "/tmp/rye-#{user}-#{File.basename(akey_path)}"
|
441
|
+
|
442
|
+
sudo do
|
443
|
+
mkdir :p, :m, '700', File.dirname(akey_path)
|
444
|
+
file_upload authorized_keys, temp_path
|
445
|
+
mv temp_path, full_path
|
446
|
+
chmod '0600', akey_path
|
447
|
+
chown :R, this_user.to_s, File.dirname(akey_path)
|
448
|
+
end
|
437
449
|
end
|
438
450
|
|
439
451
|
# And let's return to the directory we came from.
|
@@ -587,6 +599,24 @@ module Rye
|
|
587
599
|
ret
|
588
600
|
end
|
589
601
|
|
602
|
+
# Like batch, except it enables sudo mode before executing the block.
|
603
|
+
# If the user is already root, this has no effect. Otherwise all
|
604
|
+
# commands executed in the block will run via sudo.
|
605
|
+
#
|
606
|
+
# If no block is specified then sudo is called just like a regular
|
607
|
+
# command.
|
608
|
+
def sudo(*args, &block)
|
609
|
+
if block.nil?
|
610
|
+
__allow('sudo', args);
|
611
|
+
else
|
612
|
+
previous_state = @rye_sudo
|
613
|
+
enable_sudo
|
614
|
+
ret = self.instance_exec *args, &block
|
615
|
+
@rye_sudo = previous_state
|
616
|
+
ret
|
617
|
+
end
|
618
|
+
end
|
619
|
+
|
590
620
|
# instance_exec for Ruby 1.8 written by Mauricio Fernandez
|
591
621
|
# http://eigenclass.org/hiki/instance_exec
|
592
622
|
if RUBY_VERSION =~ /1.8/
|
@@ -816,7 +846,7 @@ module Rye
|
|
816
846
|
def prep_args(*args)
|
817
847
|
args = args.flatten.compact
|
818
848
|
args = args.first.to_s.split(/\s+/) if args.size == 1
|
819
|
-
cmd = args.shift
|
849
|
+
cmd = sudo? ? :sudo : args.shift
|
820
850
|
|
821
851
|
# Symbols to switches. :l -> -l, :help -> --help
|
822
852
|
args.collect! do |a|
|
data/lib/rye/cmd.rb
CHANGED
@@ -48,7 +48,6 @@ module Rye;
|
|
48
48
|
|
49
49
|
#def kill(*args); __allow('kill', args); end
|
50
50
|
def rake(*args); __allow('rake', args); end
|
51
|
-
def sudo(*args); __allow('sudo', args); end
|
52
51
|
def grep(*args); __allow('grep', args); end
|
53
52
|
def date(*args); __allow('date', args); end
|
54
53
|
def ruby(*args); __allow('ruby', args); end
|
data/lib/rye/set.rb
CHANGED
@@ -50,6 +50,7 @@ module Rye
|
|
50
50
|
|
51
51
|
def opts; @opts; end
|
52
52
|
def user; (@opts || {})[:user]; end
|
53
|
+
def root?; user.to_s == "root" end
|
53
54
|
|
54
55
|
# * +boxes+ one or more boxes. Rye::Box objects will be added directly
|
55
56
|
# to the set. Hostnames will be used to create new instances of Rye::Box
|
data/rye.gemspec
CHANGED
@@ -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.
|
4
|
+
s.version = "0.8.19"
|
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"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rye
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delano Mandelbaum
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-06-
|
12
|
+
date: 2010-06-27 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|