Implement Remote class
This commit is contained in:
parent
3e3547d3be
commit
6e1ba269eb
@ -4,6 +4,7 @@ require 'producer/core/env'
|
|||||||
require 'producer/core/errors'
|
require 'producer/core/errors'
|
||||||
require 'producer/core/recipe'
|
require 'producer/core/recipe'
|
||||||
require 'producer/core/recipe/dsl'
|
require 'producer/core/recipe/dsl'
|
||||||
|
require 'producer/core/remote'
|
||||||
require 'producer/core/task'
|
require 'producer/core/task'
|
||||||
require 'producer/core/task/dsl'
|
require 'producer/core/task/dsl'
|
||||||
require 'producer/core/version'
|
require 'producer/core/version'
|
||||||
|
18
lib/producer/core/remote.rb
Normal file
18
lib/producer/core/remote.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module Producer
|
||||||
|
module Core
|
||||||
|
class Remote
|
||||||
|
require 'etc'
|
||||||
|
require 'net/ssh'
|
||||||
|
|
||||||
|
attr_accessor :hostname
|
||||||
|
|
||||||
|
def initialize(hostname)
|
||||||
|
@hostname = hostname
|
||||||
|
end
|
||||||
|
|
||||||
|
def session
|
||||||
|
@session ||= Net::SSH.start(@hostname, Etc.getlogin)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -19,6 +19,8 @@ Gem::Specification.new do |s|
|
|||||||
s.executables = s.files.grep(/\Abin\//) { |f| File.basename(f) }
|
s.executables = s.files.grep(/\Abin\//) { |f| File.basename(f) }
|
||||||
|
|
||||||
|
|
||||||
|
s.add_dependency 'net-ssh'
|
||||||
|
|
||||||
s.add_development_dependency 'rspec'
|
s.add_development_dependency 'rspec'
|
||||||
s.add_development_dependency 'cucumber'
|
s.add_development_dependency 'cucumber'
|
||||||
s.add_development_dependency 'aruba'
|
s.add_development_dependency 'aruba'
|
||||||
|
32
spec/producer/core/remote_spec.rb
Normal file
32
spec/producer/core/remote_spec.rb
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
module Producer::Core
|
||||||
|
describe Remote do
|
||||||
|
let(:hostname) { 'some_host.example' }
|
||||||
|
subject(:remote) { Remote.new(hostname) }
|
||||||
|
|
||||||
|
describe '#hostname' do
|
||||||
|
it 'returns the assignated hostname' do
|
||||||
|
expect(remote.hostname).to be hostname
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#session' do
|
||||||
|
it 'builds a new SSH session to the remote host' do
|
||||||
|
expect(Net::SSH).to receive(:start).with(hostname, Etc.getlogin)
|
||||||
|
remote.session
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the session' do
|
||||||
|
session = double('SSH session')
|
||||||
|
allow(Net::SSH).to receive(:start) { session }
|
||||||
|
expect(remote.session).to eq session
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'memoizes the session' do
|
||||||
|
allow(Net::SSH).to receive(:start) { Object.new }
|
||||||
|
expect(remote.session).to be remote.session
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user