sshkit 0.0.23 → 0.0.24
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/CHANGELOG.md +22 -0
- data/EXAMPLES.md +17 -8
- data/lib/sshkit/backends/netssh.rb +10 -7
- data/lib/sshkit/command.rb +2 -0
- data/lib/sshkit/formatters/pretty.rb +2 -2
- data/lib/sshkit/version.rb +1 -1
- metadata +2 -2
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -3,6 +3,28 @@ | |
| 3 3 | 
             
            This file is written in reverse chronological order, newer releases will
         | 
| 4 4 | 
             
            appear at the top.
         | 
| 5 5 |  | 
| 6 | 
            +
            ## 0.0.24
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              * Pretty output now streams stdout and stderr. Previous versions would
         | 
| 9 | 
            +
                append (`+=`) chunks of data written by the remote host to the `Command`
         | 
| 10 | 
            +
                instance, and the `Pretty` formatter would only print stdout/stderr if the
         | 
| 11 | 
            +
                command was `#complete?`. Historically this lead to issues where the
         | 
| 12 | 
            +
                remote process was blocking for input, had written the prompt to stdout,
         | 
| 13 | 
            +
                but it was not visible on the client side.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                Now each time the command is passed to the output stream, the
         | 
| 16 | 
            +
                stdout/stderr are replaced with the lines returned from the remote server
         | 
| 17 | 
            +
                in this chunk. (i.e were yielded to the callback block). Commands now have
         | 
| 18 | 
            +
                attribute accessors for `#full_stdout` and `#full_stderr` which are appended
         | 
| 19 | 
            +
                in the way that `#stdout` and `#stderr` were previously.
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                This should be considered a private API, and one should beware of relying
         | 
| 22 | 
            +
                on `#full_stdout` or `#full_stderr`, they will likely be replaced with a
         | 
| 23 | 
            +
                cleaner soltion eventually.
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              * `upload!` and `download!` now print progress reports at the `Logger::INFO`
         | 
| 26 | 
            +
                 verbosity level.
         | 
| 27 | 
            +
             | 
| 6 28 | 
             
            ## 0.0.23
         | 
| 7 29 |  | 
| 8 30 | 
             
              * Explicitly rely on `net-scp` gem.
         | 
    
        data/EXAMPLES.md
    CHANGED
    
    | @@ -42,14 +42,14 @@ | |
| 42 42 | 
             
                  end
         | 
| 43 43 | 
             
                end
         | 
| 44 44 |  | 
| 45 | 
            -
            The `debug() | 
| 45 | 
            +
            The `debug()`, `info()`, `warn()`, `error()` and `fatal()` honor the current
         | 
| 46 46 | 
             
            log level of `SSHKit.config.output_verbosity`
         | 
| 47 47 |  | 
| 48 48 | 
             
            ## Run a command in a different directory as a different user
         | 
| 49 49 |  | 
| 50 50 | 
             
                on hosts do |host|
         | 
| 51 51 | 
             
                  as 'www-data' do
         | 
| 52 | 
            -
                     | 
| 52 | 
            +
                    within '/var/log' do
         | 
| 53 53 | 
             
                      puts capture(:whoami)
         | 
| 54 54 | 
             
                      puts capture(:pwd)
         | 
| 55 55 | 
             
                    end
         | 
| @@ -70,7 +70,7 @@ have a shell defined, one cannot switch to that user. | |
| 70 70 | 
             
                  upload! '/config/database.yml', '/opt/my_project/shared/databse.yml'
         | 
| 71 71 | 
             
                end
         | 
| 72 72 |  | 
| 73 | 
            -
            **Note:** The `upload!()` method doesn't honor the values of ` | 
| 73 | 
            +
            **Note:** The `upload!()` method doesn't honor the values of `within()`, `as()`
         | 
| 74 74 | 
             
            etc, this will be improved as the library matures, but we're not there yet.
         | 
| 75 75 |  | 
| 76 76 | 
             
            ## Upload a file from a stream
         | 
| @@ -93,14 +93,23 @@ for example | |
| 93 93 | 
             
            This spares one from having to figure out the correct escaping sequences for
         | 
| 94 94 | 
             
            something like "echo(:cat, '...?...', '> /etc/sudoers.d/yolo')".
         | 
| 95 95 |  | 
| 96 | 
            -
            **Note:** The `upload!()` method doesn't honor the values of ` | 
| 96 | 
            +
            **Note:** The `upload!()` method doesn't honor the values of `within()`, `as()`
         | 
| 97 97 | 
             
            etc, this will be improved as the library matures, but we're not there yet.
         | 
| 98 98 |  | 
| 99 | 
            +
            ## Upload a directory of files
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                on hosts do |host|
         | 
| 102 | 
            +
                  upload! '.', '/tmp/mypwd', recursive: true
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            In this case the `recursive: true` option mirrors the same options which are
         | 
| 106 | 
            +
            available to `Net::{SCP,SFTP}`.
         | 
| 107 | 
            +
             | 
| 99 108 | 
             
            ## Run a command with a different effective group ID
         | 
| 100 109 |  | 
| 101 110 | 
             
                on hosts do |host|
         | 
| 102 111 | 
             
                  as user: 'www-data', group: 'project-group' do
         | 
| 103 | 
            -
                     | 
| 112 | 
            +
                    within '/var/log' do
         | 
| 104 113 | 
             
                      execute :touch, 'somefile'
         | 
| 105 114 | 
             
                      execute :ls, '-l'
         | 
| 106 115 | 
             
                    end
         | 
| @@ -116,9 +125,9 @@ scripts for deployment between team members without sharing logins. | |
| 116 125 | 
             
            ## Stack directory nestings
         | 
| 117 126 |  | 
| 118 127 | 
             
                on hosts do
         | 
| 119 | 
            -
                   | 
| 128 | 
            +
                  within "/var" do
         | 
| 120 129 | 
             
                    puts capture(:pwd)
         | 
| 121 | 
            -
                     | 
| 130 | 
            +
                    within :log do
         | 
| 122 131 | 
             
                      puts capture(:pwd)
         | 
| 123 132 | 
             
                    end
         | 
| 124 133 | 
             
                  end
         | 
| @@ -138,7 +147,7 @@ joined according to the expectations of the machine receiving the commands. | |
| 138 147 | 
             
            ## Running a task in the background
         | 
| 139 148 |  | 
| 140 149 | 
             
                on hosts do
         | 
| 141 | 
            -
                   | 
| 150 | 
            +
                  within '/opt/sites/example.com' do
         | 
| 142 151 | 
             
                    background :rails, :server
         | 
| 143 152 | 
             
                  end
         | 
| 144 153 | 
             
                end
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'net/ssh'
         | 
| 2 | 
            +
            require 'net/scp'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module SSHKit
         | 
| 4 5 | 
             
              module Backend
         | 
| @@ -34,18 +35,18 @@ module SSHKit | |
| 34 35 |  | 
| 35 36 | 
             
                  def capture(*args)
         | 
| 36 37 | 
             
                    options = args.extract_options!.merge(verbosity: Logger::DEBUG)
         | 
| 37 | 
            -
                    _execute(*[*args, options]). | 
| 38 | 
            +
                    _execute(*[*args, options]).full_stdout.strip
         | 
| 38 39 | 
             
                  end
         | 
| 39 40 |  | 
| 40 41 | 
             
                  def upload!(local, remote, options = {})
         | 
| 41 | 
            -
                    ssh.scp.upload!(local, remote, options) do
         | 
| 42 | 
            -
                       | 
| 42 | 
            +
                    ssh.scp.upload!(local, remote, options) do |ch, name, sent, total|
         | 
| 43 | 
            +
                      info "Uploading #{name} #{(sent.to_f * 100 / total.to_f).to_i}%"
         | 
| 43 44 | 
             
                    end
         | 
| 44 45 | 
             
                  end
         | 
| 45 46 |  | 
| 46 47 | 
             
                  def download!(remote, local=nil, options = {})
         | 
| 47 | 
            -
                    ssh.scp.download!(remote, local, options) do
         | 
| 48 | 
            -
                       | 
| 48 | 
            +
                    ssh.scp.download!(remote, local, options) do |ch, name, received, total|
         | 
| 49 | 
            +
                      info "Downloading #{name} #{(received.to_f * 100 / total.to_f).to_i}%"
         | 
| 49 50 | 
             
                    end
         | 
| 50 51 | 
             
                  end
         | 
| 51 52 |  | 
| @@ -69,11 +70,13 @@ module SSHKit | |
| 69 70 | 
             
                        chan.request_pty if Netssh.config.pty
         | 
| 70 71 | 
             
                        chan.exec cmd.to_command do |ch, success|
         | 
| 71 72 | 
             
                          chan.on_data do |ch, data|
         | 
| 72 | 
            -
                            cmd.stdout  | 
| 73 | 
            +
                            cmd.stdout = data
         | 
| 74 | 
            +
                            cmd.full_stdout += data
         | 
| 73 75 | 
             
                            output << cmd
         | 
| 74 76 | 
             
                          end
         | 
| 75 77 | 
             
                          chan.on_extended_data do |ch, type, data|
         | 
| 76 | 
            -
                            cmd.stderr  | 
| 78 | 
            +
                            cmd.stderr = data
         | 
| 79 | 
            +
                            cmd.full_stderr += data
         | 
| 77 80 | 
             
                            output << cmd
         | 
| 78 81 | 
             
                          end
         | 
| 79 82 | 
             
                          chan.on_request("exit-status") do |ch, data|
         | 
    
        data/lib/sshkit/command.rb
    CHANGED
    
    | @@ -36,6 +36,7 @@ module SSHKit | |
| 36 36 | 
             
                attr_reader :command, :args, :options, :started_at, :started, :exit_status
         | 
| 37 37 |  | 
| 38 38 | 
             
                attr_accessor :stdout, :stderr
         | 
| 39 | 
            +
                attr_accessor :full_stdout, :full_stderr
         | 
| 39 40 |  | 
| 40 41 | 
             
                # Initialize a new Command object
         | 
| 41 42 | 
             
                #
         | 
| @@ -52,6 +53,7 @@ module SSHKit | |
| 52 53 | 
             
                  @options.symbolize_keys!
         | 
| 53 54 | 
             
                  sanitize_command!
         | 
| 54 55 | 
             
                  @stdout, @stderr = String.new, String.new
         | 
| 56 | 
            +
                  @full_stdout, @full_stderr = String.new, String.new
         | 
| 55 57 | 
             
                end
         | 
| 56 58 |  | 
| 57 59 | 
             
                def complete?
         | 
| @@ -28,13 +28,13 @@ module SSHKit | |
| 28 28 | 
             
                    end
         | 
| 29 29 |  | 
| 30 30 | 
             
                    if SSHKit.config.output_verbosity == Logger::DEBUG
         | 
| 31 | 
            -
                       | 
| 31 | 
            +
                      unless command.stdout.empty?
         | 
| 32 32 | 
             
                        command.stdout.lines.each do |line|
         | 
| 33 33 | 
             
                          original_output << level(Logger::DEBUG) + uuid(command) + c.green("\t" + line)
         | 
| 34 34 | 
             
                        end
         | 
| 35 35 | 
             
                      end
         | 
| 36 36 |  | 
| 37 | 
            -
                       | 
| 37 | 
            +
                      unless command.stderr.empty?
         | 
| 38 38 | 
             
                        command.stderr.lines.each do |line|
         | 
| 39 39 | 
             
                          original_output << level(Logger::DEBUG) + uuid(command) + c.red("\t" + line)
         | 
| 40 40 | 
             
                        end
         | 
    
        data/lib/sshkit/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sshkit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.24
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2013- | 
| 13 | 
            +
            date: 2013-04-04 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: net-ssh
         |