Use SSH user name configured for a given target:

When a user is configured for the targeted host name, use it for SSH
authentification instead of the name of current user logged in.

* Modify Remote#user_name to use configured user name.
This commit is contained in:
Thibault Jouan 2013-08-31 07:09:26 +00:00
parent 768a6755de
commit 85a47df547
5 changed files with 50 additions and 3 deletions

View File

@ -0,0 +1,22 @@
Feature: SSH settings
Background:
Given a recipe with:
"""
target 'some_host.example'
puts env.remote.user_name
"""
Scenario: uses current user login name as SSH user name by default
When I successfully execute the recipe
Then the output must contain my current login name
Scenario: uses configured SSH user name for a given host
Given an SSH config with:
"""
Host some_host.example
User some_user
"""
When I successfully execute the recipe
Then the output must contain "some_user"

View File

@ -0,0 +1,5 @@
# FIXME: our monkey patch currently prevent us from using `must' in step
# definitions.
Then(/^the output should contain my current login name$/) do
assert_partial_output(Etc.getlogin, all_output)
end

View File

@ -0,0 +1,6 @@
# FIXME: current home directory shouldn't be changed here, maybe we should use
# a tag for features needing a fake home directory.
Given(/^an SSH config with:$/) do |config|
ENV['HOME'] = File.expand_path current_dir
write_file '.ssh/config', config
end

View File

@ -19,7 +19,7 @@ module Producer
end end
def user_name def user_name
Etc.getlogin config[:user] || Etc.getlogin
end end
def fs def fs

View File

@ -48,10 +48,24 @@ module Producer::Core
end end
describe '#user_name' do describe '#user_name' do
context 'ssh config has an entry for user' do
let(:config_user_name) { 'my_user_name' }
before do
allow(Net::SSH::Config).to receive(:for) { { user: config_user_name } }
end
it 'returns the configured value' do
expect(remote.user_name).to eq config_user_name
end
end
context 'ssh config has no entry for user' do
it 'returns the name of the user currently logged in' do it 'returns the name of the user currently logged in' do
expect(remote.user_name).to eq Etc.getlogin expect(remote.user_name).to eq Etc.getlogin
end end
end end
end
describe '#fs' do describe '#fs' do
it 'builds a new FS' do it 'builds a new FS' do