rye 0.6.2 → 0.6.3
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/CHANGES.txt +8 -0
 - data/bin/rye +5 -2
 - data/bin/try +1 -1
 - data/lib/rye/box.rb +27 -4
 - data/lib/rye/cmd.rb +17 -1
 - data/lib/sys.rb +5 -0
 - data/rye.gemspec +1 -1
 - metadata +2 -2
 
    
        data/CHANGES.txt
    CHANGED
    
    | 
         @@ -2,9 +2,17 @@ RYE, CHANGES 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            TODO
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            * Re-implement Rye::Rap as an Observable StringIO object for dynamic printing of output. 
         
     | 
| 
       5 
6 
     | 
    
         
             
            * Fingerprints: ssh-keygen -l -f id_rsa_repos.pub
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
            #### 0.6.3 (2009-05-02) #############################
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            * FIXED: Rye::Box.guess_user_home wasn't handling the username arg (only using default name)
         
     | 
| 
      
 12 
     | 
    
         
            +
            * ADDED: Rye::Cmd.can?
         
     | 
| 
      
 13 
     | 
    
         
            +
            * ADDED: Rye::Cmd.ostype
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       8 
16 
     | 
    
         
             
            #### 0.6.2 (2009-04-29) #############################
         
     | 
| 
       9 
17 
     | 
    
         | 
| 
       10 
18 
     | 
    
         
             
            * FIXED: I forgot to add highline to the gemspec file manifest. Cripes!
         
     | 
    
        data/bin/rye
    CHANGED
    
    | 
         @@ -41,16 +41,18 @@ option :u, :user, String, "Username" 
     | 
|
| 
       41 
41 
     | 
    
         
             
            argv :hostname
         
     | 
| 
       42 
42 
     | 
    
         
             
            command :authorize do |obj|
         
     | 
| 
       43 
43 
     | 
    
         
             
              raise "You must specify a host" unless obj.argv.hostname
         
     | 
| 
      
 44 
     | 
    
         
            +
              user = Rye.sysinfo.user
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
              opts = { :debug => nil, :auth_methods => %w(publickey hostbased) }
         
     | 
| 
       46 
47 
     | 
    
         
             
              opts[:user] = obj.option.user if obj.option.user
         
     | 
| 
      
 48 
     | 
    
         
            +
              opts[:user] ||= user
         
     | 
| 
       47 
49 
     | 
    
         | 
| 
       48 
50 
     | 
    
         
             
              obj.argv.each do |hostname|
         
     | 
| 
       49 
51 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                puts "Authorizing #{ 
     | 
| 
      
 52 
     | 
    
         
            +
                puts "Authorizing #{opts[:user]}@#{hostname}"
         
     | 
| 
       51 
53 
     | 
    
         
             
                rbox = Rye::Box.new(hostname, opts)
         
     | 
| 
       52 
54 
     | 
    
         
             
                puts "Added public keys for: ", rbox.authorize_keys_remote
         
     | 
| 
       53 
     | 
    
         
            -
                puts "Now try: " << "ssh #{ 
     | 
| 
      
 55 
     | 
    
         
            +
                puts "Now try: " << "ssh #{opts[:user]}@#{hostname}"
         
     | 
| 
       54 
56 
     | 
    
         | 
| 
       55 
57 
     | 
    
         
             
              end
         
     | 
| 
       56 
58 
     | 
    
         | 
| 
         @@ -60,6 +62,7 @@ command_alias :authorize, :authorise 
     | 
|
| 
       60 
62 
     | 
    
         
             
            about "Add your public keys to your current account on this machine"
         
     | 
| 
       61 
63 
     | 
    
         
             
            command :authorize_local do |obj|
         
     | 
| 
       62 
64 
     | 
    
         
             
              user = Rye.sysinfo.user
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
       63 
66 
     | 
    
         
             
              puts "Authorizing #{user}@localhost"
         
     | 
| 
       64 
67 
     | 
    
         
             
              rbox = Rye::Box.new('localhost')
         
     | 
| 
       65 
68 
     | 
    
         
             
              puts "Added public keys for: ", rbox.authorize_keys_local
         
     | 
    
        data/bin/try
    CHANGED
    
    
    
        data/lib/rye/box.rb
    CHANGED
    
    | 
         @@ -301,10 +301,17 @@ module Rye 
     | 
|
| 
       301 
301 
     | 
    
         
             
                  Rye.remote_host_keys(@host)
         
     | 
| 
       302 
302 
     | 
    
         
             
                end
         
     | 
| 
       303 
303 
     | 
    
         | 
| 
      
 304 
     | 
    
         
            +
                
         
     | 
| 
       304 
305 
     | 
    
         
             
                # Uses the output of "useradd -D" to determine the default home
         
     | 
| 
       305 
306 
     | 
    
         
             
                # directory. This returns a GUESS rather than the a user's real
         
     | 
| 
       306 
307 
     | 
    
         
             
                # home directory. Currently used only by authorize_keys_remote.
         
     | 
| 
       307 
308 
     | 
    
         
             
                def guess_user_home(other_user=nil)
         
     | 
| 
      
 309 
     | 
    
         
            +
                  this_user = other_user || opts[:user]
         
     | 
| 
      
 310 
     | 
    
         
            +
                  @guessed_homes ||= {}
         
     | 
| 
      
 311 
     | 
    
         
            +
                  
         
     | 
| 
      
 312 
     | 
    
         
            +
                  # A simple cache. 
         
     | 
| 
      
 313 
     | 
    
         
            +
                  return @guessed_homes[this_user] if @guessed_homes.has_key?(this_user)
         
     | 
| 
      
 314 
     | 
    
         
            +
                  
         
     | 
| 
       308 
315 
     | 
    
         
             
                  # Some junk to determine where user home directories are by default.
         
     | 
| 
       309 
316 
     | 
    
         
             
                  # We're relying on the command "useradd -D" so this may not work on
         
     | 
| 
       310 
317 
     | 
    
         
             
                  # different Linuxen and definitely won't work on Windows.
         
     | 
| 
         @@ -314,10 +321,22 @@ module Rye 
     | 
|
| 
       314 
321 
     | 
    
         
             
                  user_defaults = {}
         
     | 
| 
       315 
322 
     | 
    
         
             
                  raw = self.useradd(:D) rescue ["HOME=/home"]
         
     | 
| 
       316 
323 
     | 
    
         
             
                  raw.each do |nv|
         
     | 
| 
       317 
     | 
    
         
            -
             
     | 
| 
       318 
     | 
    
         
            -
                     
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
                    if self.ostype == "sunos"
         
     | 
| 
      
 326 
     | 
    
         
            +
                      #nv.scan(/([\w_-]+?)=(.+?)\s/).each do |n, v|
         
     | 
| 
      
 327 
     | 
    
         
            +
                      #  n = 'HOME' if n == 'basedir'
         
     | 
| 
      
 328 
     | 
    
         
            +
                      #  user_defaults[n.upcase] = v.strip
         
     | 
| 
      
 329 
     | 
    
         
            +
                      #end
         
     | 
| 
      
 330 
     | 
    
         
            +
                      # In Solaris, useradd -D says the default home path is /home
         
     | 
| 
      
 331 
     | 
    
         
            +
                      # but that directory is not writable. See: http://bit.ly/IJDD0
         
     | 
| 
      
 332 
     | 
    
         
            +
                      user_defaults['HOME'] = '/export/home'
         
     | 
| 
      
 333 
     | 
    
         
            +
                    else
         
     | 
| 
      
 334 
     | 
    
         
            +
                      n, v = nv.scan(/\A([\w_-]+?)=(.+)\z/).flatten
         
     | 
| 
      
 335 
     | 
    
         
            +
                      user_defaults[n] = v
         
     | 
| 
      
 336 
     | 
    
         
            +
                    end
         
     | 
| 
       319 
337 
     | 
    
         
             
                  end
         
     | 
| 
       320 
     | 
    
         
            -
                   
     | 
| 
      
 338 
     | 
    
         
            +
                  
         
     | 
| 
      
 339 
     | 
    
         
            +
                  @guessed_homes[this_user] = "#{user_defaults['HOME']}/#{this_user}"
         
     | 
| 
       321 
340 
     | 
    
         
             
                end
         
     | 
| 
       322 
341 
     | 
    
         | 
| 
       323 
342 
     | 
    
         
             
                # Copy the local public keys (as specified by Rye.keys) to 
         
     | 
| 
         @@ -402,7 +421,7 @@ module Rye 
     | 
|
| 
       402 
421 
     | 
    
         
             
                # A handler for undefined commands. 
         
     | 
| 
       403 
422 
     | 
    
         
             
                # Raises Rye::CommandNotFound exception.
         
     | 
| 
       404 
423 
     | 
    
         
             
                def method_missing(meth, *args, &block)
         
     | 
| 
       405 
     | 
    
         
            -
                  raise Rye::CommandNotFound, "#{meth.to_s} 
     | 
| 
      
 424 
     | 
    
         
            +
                  raise Rye::CommandNotFound, "#{meth.to_s}"
         
     | 
| 
       406 
425 
     | 
    
         
             
                end
         
     | 
| 
       407 
426 
     | 
    
         
             
                def preview_command(*args)
         
     | 
| 
       408 
427 
     | 
    
         
             
                  prep_args(*args).join(' ')
         
     | 
| 
         @@ -481,6 +500,10 @@ module Rye 
     | 
|
| 
       481 
500 
     | 
    
         
             
                  rap.exit_signal = esignal
         
     | 
| 
       482 
501 
     | 
    
         
             
                  rap.cmd = cmd
         
     | 
| 
       483 
502 
     | 
    
         | 
| 
      
 503 
     | 
    
         
            +
                  # It seems a convention for various commands to return -1
         
     | 
| 
      
 504 
     | 
    
         
            +
                  # when something only mildly concerning happens. ls even 
         
     | 
| 
      
 505 
     | 
    
         
            +
                  # returns -1 for apparently no reason sometimes. In any
         
     | 
| 
      
 506 
     | 
    
         
            +
                  # case, the real errors are the ones greater than zero
         
     | 
| 
       484 
507 
     | 
    
         
             
                  raise Rye::CommandError.new(rap) if ecode > 0
         
     | 
| 
       485 
508 
     | 
    
         | 
| 
       486 
509 
     | 
    
         
             
                  rap
         
     | 
    
        data/lib/rye/cmd.rb
    CHANGED
    
    | 
         @@ -109,6 +109,17 @@ module Rye; 
     | 
|
| 
       109 
109 
     | 
    
         
             
                  ret.stderr.empty?
         
     | 
| 
       110 
110 
     | 
    
         
             
                end
         
     | 
| 
       111 
111 
     | 
    
         | 
| 
      
 112 
     | 
    
         
            +
                # Return the value of uname in lowercase
         
     | 
| 
      
 113 
     | 
    
         
            +
                # This is a temporary fix. We can use SysInfo for this, upload
         
     | 
| 
      
 114 
     | 
    
         
            +
                # it, execute it directly, parse the output.
         
     | 
| 
      
 115 
     | 
    
         
            +
                def ostype
         
     | 
| 
      
 116 
     | 
    
         
            +
                  return @ostype if @ostype # simple cache
         
     | 
| 
      
 117 
     | 
    
         
            +
                  os = self.uname.first rescue nil
         
     | 
| 
      
 118 
     | 
    
         
            +
                  os ||= 'unknown'
         
     | 
| 
      
 119 
     | 
    
         
            +
                  os &&= os.downcase
         
     | 
| 
      
 120 
     | 
    
         
            +
                  @ostype = os
         
     | 
| 
      
 121 
     | 
    
         
            +
                end
         
     | 
| 
      
 122 
     | 
    
         
            +
                
         
     | 
| 
       112 
123 
     | 
    
         
             
                # Returns the hash containing the parsed output of "env" on the 
         
     | 
| 
       113 
124 
     | 
    
         
             
                # remote machine. If the initialize option +:getenv+ was set to 
         
     | 
| 
       114 
125 
     | 
    
         
             
                # false, this will return an empty hash. 
         
     | 
| 
         @@ -117,6 +128,9 @@ module Rye; 
     | 
|
| 
       117 
128 
     | 
    
         
             
                #
         
     | 
| 
       118 
129 
     | 
    
         
             
                #      puts rbox.getenv['HOME']    # => "/home/gloria" (remote)
         
     | 
| 
       119 
130 
     | 
    
         
             
                #
         
     | 
| 
      
 131 
     | 
    
         
            +
                # NOTE: This method should not raise an exception under normal
         
     | 
| 
      
 132 
     | 
    
         
            +
                # circumstances. 
         
     | 
| 
      
 133 
     | 
    
         
            +
                #
         
     | 
| 
       120 
134 
     | 
    
         
             
                def getenv
         
     | 
| 
       121 
135 
     | 
    
         
             
                  if @getenv && @getenv.empty? && self.can?(:env)
         
     | 
| 
       122 
136 
     | 
    
         
             
                    env = self.env rescue []
         
     | 
| 
         @@ -143,7 +157,9 @@ module Rye; 
     | 
|
| 
       143 
157 
     | 
    
         
             
                alias :command? :can?
         
     | 
| 
       144 
158 
     | 
    
         
             
                alias :cmd? :can?
         
     | 
| 
       145 
159 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
                
         
     | 
| 
      
 160 
     | 
    
         
            +
                def Cmd.can?(meth)
         
     | 
| 
      
 161 
     | 
    
         
            +
                  instance_methods.member?(meth)
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
       147 
163 
     | 
    
         | 
| 
       148 
164 
     | 
    
         
             
                #--
         
     | 
| 
       149 
165 
     | 
    
         
             
                # * Consider a lock-down mode using method_added
         
     | 
    
        data/lib/sys.rb
    CHANGED
    
    
    
        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.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              s.version = "0.6.3"
         
     | 
| 
       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.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.3
         
     | 
| 
       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: 2009- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2009-05-02 00:00:00 -04:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     |