Skip to content

Commit

Permalink
Fix SSHKit backend for SSHKit v1.9.0
Browse files Browse the repository at this point in the history
  • Loading branch information
eagletmt committed Apr 7, 2016
1 parent 7470e8e commit f79bd71
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 23 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ See [example](example) directory.
See [example/sshkit.rb](example/sshkit.rb) .

### With Capistrano
sshkit must be v1.9.0 or later due to [SSHKit::Backend::ConnectionPool API change](https://github.com/capistrano/sshkit/releases/tag/v1.9.0.rc1).

```ruby
require 'sshkit/backends/libssh'
Expand Down
2 changes: 2 additions & 0 deletions example/sshkit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
SSHKit.config.output = SSHKit::Formatter::Pretty.new($stdout)
SSHKit.config.output_verbosity = :debug

include SSHKit::DSL

on %w[barkhorn rossmann], in: :parallel do |host|
date = capture(:date)
puts "#{host}: #{date}"
Expand Down
40 changes: 18 additions & 22 deletions lib/sshkit/backends/libssh.rb
Original file line number Diff line number Diff line change
Expand Up @@ -175,30 +175,26 @@ def download_file(scp, local)
end
end

def with_session
def with_session(&block)
host.ssh_options = Libssh.config.ssh_options.merge(host.ssh_options || {})
entry = self.class.pool.checkout(String(host.hostname), host.username, host.netssh_options) do |hostname, username, ssh_options|
LibSSH::Session.new.tap do |session|
session.host = hostname
username = ssh_options.fetch(:user, username)
if username
session.user = username
end
configure_session(session, ssh_options)
session.connect
if session.server_known != LibSSH::SERVER_KNOWN_OK
raise 'unknown host'
end
if session.userauth_publickey_auto != LibSSH::AUTH_SUCCESS
raise 'authorization failed'
end
end
end
self.class.pool.with(method(:create_session), String(host.hostname), host.username, host.netssh_options, &block)
end

begin
yield entry.connection
ensure
self.class.pool.checkin(entry)
def create_session(hostname, username, ssh_options)
LibSSH::Session.new.tap do |session|
session.host = hostname
username = ssh_options.fetch(:user, username)
if username
session.user = username
end
configure_session(session, ssh_options)
session.connect
if session.server_known != LibSSH::SERVER_KNOWN_OK
raise 'unknown host'
end
if session.userauth_publickey_auto != LibSSH::AUTH_SUCCESS
raise 'authorization failed'
end
end
end

Expand Down
2 changes: 1 addition & 1 deletion libssh.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'rake-compiler'
spec.add_development_dependency 'rspec', '>= 3.0.0'
spec.add_development_dependency 'rubocop', '>= 0.36.0'
spec.add_development_dependency 'sshkit'
spec.add_development_dependency 'sshkit', '>= 1.9.0'
spec.add_development_dependency 'yard'
end

0 comments on commit f79bd71

Please sign in to comment.