nodespec 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/nodespec.rb +2 -2
- data/lib/nodespec/communication_adapters/aws_ec2.rb +2 -2
- data/lib/nodespec/communication_adapters/native_communicator.rb +1 -1
- data/lib/nodespec/communication_adapters/ssh_communicator.rb +2 -2
- data/lib/nodespec/communication_adapters/winrm_communicator.rb +2 -2
- data/lib/nodespec/configuration_binding.rb +28 -20
- data/lib/nodespec/node.rb +0 -4
- data/lib/nodespec/version.rb +1 -1
- data/spec/communication_adapters/aws_ec2_spec.rb +3 -3
- data/spec/communication_adapters/native_communicator_spec.rb +2 -2
- data/spec/communication_adapters/ssh_communicator_spec.rb +8 -16
- data/spec/communication_adapters/winrm_communicator_spec.rb +8 -16
- data/spec/configuration_binding_spec.rb +5 -4
- data/spec/support/{communicator_adapters.rb → communication_adapters.rb} +9 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8247290f8693f24e63078e9d02fade2c040fe5f
|
4
|
+
data.tar.gz: c2e28b72b7015f6646632cbe6a0a7edacc4891bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20acb8ed594cbb3aca4648ddf7f2424c045ca9809e26b11211b08555173e053c15373ecda9c9ff6921416d45c330fea9ded126827e1eda9e53fe5c4342797188
|
7
|
+
data.tar.gz: f5a76255ea11a6d108c828f3f7555dfe91821bda499b13cd1c4b4afba26152fea42b933526f2876eded41b9705807b593acbe37fad674a1c656894a142960fe4
|
data/Gemfile.lock
CHANGED
data/lib/nodespec.rb
CHANGED
@@ -24,9 +24,9 @@ RSpec.configure do |config|
|
|
24
24
|
property[:os] = nil # prevent os caching so we can switch os for any node test
|
25
25
|
config.os = Specinfra::Helper::DetectOs.const_get(node.os).detect if node.os
|
26
26
|
|
27
|
-
Specinfra.configuration.backend = node.backend
|
27
|
+
Specinfra.configuration.backend = node.communicator.backend
|
28
28
|
|
29
|
-
node.communicator.
|
29
|
+
node.communicator.init_session(NodeSpec::ConfigurationBinding.new(config))
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -13,9 +13,9 @@ module NodeSpec
|
|
13
13
|
|
14
14
|
raise "EC2 Instance #{instance_name} is not reachable" unless ec2_instance.exists? && ec2_instance.status == :running
|
15
15
|
if options.has_key?('winrm')
|
16
|
-
WinrmCommunicator.new(ec2_instance.
|
16
|
+
WinrmCommunicator.new(ec2_instance.public_ip_address, options['winrm'])
|
17
17
|
else
|
18
|
-
SshCommunicator.new(ec2_instance.
|
18
|
+
SshCommunicator.new(ec2_instance.public_ip_address, options['ssh'] || {})
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -17,10 +17,10 @@ module NodeSpec
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def init_session(configuration)
|
21
21
|
configuration.unbind_winrm_session
|
22
22
|
|
23
|
-
@session = configuration.bind_ssh_session_for(@host, @ssh_options[:port]) do
|
23
|
+
@session = configuration.bind_ssh_session_for({host: @host, port: @ssh_options[:port]}) do
|
24
24
|
msg = "\nConnecting to #{@host}"
|
25
25
|
msg << ":#{@ssh_options[:port]}" if @ssh_options[:port]
|
26
26
|
msg << " as #{@user}..."
|
@@ -29,10 +29,10 @@ module NodeSpec
|
|
29
29
|
@options = @options.inject({}) {|h,(k,v)| h[k.to_sym] = v; h}
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def init_session(configuration)
|
33
33
|
configuration.unbind_ssh_session
|
34
34
|
|
35
|
-
@session = configuration.bind_winrm_session_for(@host, @endpoint) do
|
35
|
+
@session = configuration.bind_winrm_session_for({host: @host, endpoint: @endpoint}) do
|
36
36
|
RuntimeGemLoader.require_or_fail('winrm') do
|
37
37
|
verbose_puts "\nConnecting to #{@endpoint}..."
|
38
38
|
WinRM::WinRMWebService.new(@endpoint, @transport, @options)
|
@@ -4,31 +4,24 @@ module NodeSpec
|
|
4
4
|
class ConfigurationBinding
|
5
5
|
include VerboseOutput
|
6
6
|
|
7
|
+
BACKEND_ACTIONS = {
|
8
|
+
ssh: {
|
9
|
+
diff_session: lambda { |ssh, params| ssh.host != params[:host] || ssh.options[:port] != params[:port] },
|
10
|
+
bind_attributes: lambda { |ssh, config| config.ssh_options = ssh.options }
|
11
|
+
},
|
12
|
+
winrm: {
|
13
|
+
diff_session: lambda { |winrm, params| winrm.endpoint != params[:endpoint] }
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
7
17
|
def initialize(configuration)
|
8
18
|
@configuration = configuration
|
9
19
|
end
|
10
20
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
unbind_ssh_session
|
15
|
-
current_session = yield
|
16
|
-
@configuration.ssh = current_session
|
17
|
-
@configuration.ssh_options = current_session.options
|
18
|
-
@configuration.host = current_session.host
|
19
|
-
end
|
20
|
-
current_session
|
21
|
-
end
|
22
|
-
|
23
|
-
def bind_winrm_session_for(host, endpoint)
|
24
|
-
current_session = @configuration.winrm
|
25
|
-
if current_session.nil? || current_session.endpoint != endpoint
|
26
|
-
unbind_winrm_session
|
27
|
-
current_session = yield
|
28
|
-
@configuration.winrm = current_session
|
29
|
-
@configuration.host = host
|
21
|
+
BACKEND_ACTIONS.keys.each do |backend|
|
22
|
+
define_method("bind_#{backend}_session_for") do |params, &block|
|
23
|
+
bind_session_for(backend, params, &block)
|
30
24
|
end
|
31
|
-
current_session
|
32
25
|
end
|
33
26
|
|
34
27
|
def unbind_ssh_session
|
@@ -42,7 +35,22 @@ module NodeSpec
|
|
42
35
|
end
|
43
36
|
|
44
37
|
def unbind_winrm_session
|
38
|
+
verbose_puts "\nClosing connection to #{@configuration.winrm.endpoint}" if @configuration.winrm
|
45
39
|
@configuration.winrm = @configuration.host = nil
|
46
40
|
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def bind_session_for(backend, params)
|
45
|
+
current_session = @configuration.send(backend)
|
46
|
+
if current_session.nil? || BACKEND_ACTIONS[backend][:diff_session].call(current_session, params)
|
47
|
+
send("unbind_#{backend}_session")
|
48
|
+
current_session = yield
|
49
|
+
@configuration.send("#{backend}=", current_session)
|
50
|
+
@configuration.host = params[:host]
|
51
|
+
BACKEND_ACTIONS[backend][:bind_attributes].call(current_session, @configuration) if BACKEND_ACTIONS[backend][:bind_attributes]
|
52
|
+
end
|
53
|
+
current_session
|
54
|
+
end
|
47
55
|
end
|
48
56
|
end
|
data/lib/nodespec/node.rb
CHANGED
@@ -15,10 +15,6 @@ module NodeSpec
|
|
15
15
|
@communicator = CommunicationAdapters.get_communicator(@name, adapter_name, opts)
|
16
16
|
end
|
17
17
|
|
18
|
-
def backend
|
19
|
-
@communicator.backend
|
20
|
-
end
|
21
|
-
|
22
18
|
[:create_directory, :create_file].each do |met|
|
23
19
|
define_method(met) do |*args|
|
24
20
|
path_argument = args.shift
|
data/lib/nodespec/version.rb
CHANGED
@@ -17,12 +17,12 @@ module NodeSpec
|
|
17
17
|
before do
|
18
18
|
allow(ec2_instance).to receive(:exists?).ordered.and_return(true)
|
19
19
|
allow(ec2_instance).to receive(:status).ordered.and_return(:running)
|
20
|
-
allow(ec2_instance).to receive(:
|
20
|
+
allow(ec2_instance).to receive(:public_ip_address).ordered.and_return('ip_address')
|
21
21
|
end
|
22
22
|
|
23
23
|
%w[ssh winrm].each do |connection|
|
24
24
|
describe "#{connection} communicator" do
|
25
|
-
include_context "new_#{connection}_communicator", '
|
25
|
+
include_context "new_#{connection}_communicator", 'ip_address', 'foo' => 'bar'
|
26
26
|
|
27
27
|
it 'returns communicator with the instance name from the node name' do
|
28
28
|
expect(AwsEc2.communicator_for('test-instance', connection => {'foo' => 'bar'})).to eq("#{connection} communicator")
|
@@ -35,7 +35,7 @@ module NodeSpec
|
|
35
35
|
end
|
36
36
|
|
37
37
|
describe 'openssh default connection' do
|
38
|
-
include_context "new_ssh_communicator", '
|
38
|
+
include_context "new_ssh_communicator", 'ip_address', {}
|
39
39
|
|
40
40
|
it 'returns an ssh communicator' do
|
41
41
|
expect(AwsEc2.communicator_for('test-instance')).to eq("ssh communicator")
|
@@ -21,13 +21,13 @@ module NodeSpec
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
describe '#
|
24
|
+
describe '#init_session' do
|
25
25
|
let(:configuration) {double('configuration')}
|
26
26
|
|
27
27
|
it 'unbinds other sessions' do
|
28
28
|
expect(configuration).to receive(:unbind_ssh_session)
|
29
29
|
expect(configuration).to receive(:unbind_winrm_session)
|
30
|
-
subject.
|
30
|
+
subject.init_session(configuration)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -10,30 +10,22 @@ module NodeSpec
|
|
10
10
|
before do
|
11
11
|
expect(configuration).to receive(:unbind_winrm_session)
|
12
12
|
allow(Net::SSH).to receive(:start).with(hostname, 'testuser', options).and_return('session')
|
13
|
-
allow(configuration).to receive(:bind_ssh_session_for) do |
|
14
|
-
expect(host).to eq hostname
|
15
|
-
expect(port).to eq port
|
13
|
+
allow(configuration).to receive(:bind_ssh_session_for) do |params, &block|
|
14
|
+
expect(params[:host]).to eq hostname
|
15
|
+
expect(params[:port]).to eq options[:port]
|
16
16
|
block.call
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
it 'returns a session' do
|
23
|
-
subject.bind_to(configuration)
|
24
|
-
|
25
|
-
expect(subject.session).to eq('session')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'binding the session' do
|
21
|
+
describe 'init the session' do
|
30
22
|
context 'default options' do
|
31
23
|
subject {SshCommunicator.new('test.host.name')}
|
32
24
|
before do
|
33
25
|
allow(Net::SSH).to receive(:configuration_for).and_return({someoption: 'somevalue', user: 'testuser'})
|
34
26
|
end
|
35
27
|
include_context 'creating new session', 'test.host.name', someoption: 'somevalue', user: 'testuser'
|
36
|
-
include_examples '
|
28
|
+
include_examples 'initializing communicator session'
|
37
29
|
end
|
38
30
|
|
39
31
|
context 'custom options' do
|
@@ -42,17 +34,17 @@ module NodeSpec
|
|
42
34
|
allow(Net::SSH).to receive(:configuration_for).and_return({someoption: 'somevalue', port: 22, user: 'testuser'})
|
43
35
|
end
|
44
36
|
include_context 'creating new session', 'test.host.name', someoption: 'somevalue', port: 1234, user: 'testuser', password: 'testpassword', keys: 'testkeys'
|
45
|
-
include_examples '
|
37
|
+
include_examples 'initializing communicator session'
|
46
38
|
end
|
47
39
|
|
48
40
|
context 'same session' do
|
49
41
|
subject {SshCommunicator.new('test.host.name', 'port' => 1234, 'user' => 'testuser')}
|
50
42
|
before do
|
51
43
|
expect(configuration).to receive(:unbind_winrm_session)
|
52
|
-
allow(configuration).to receive(:bind_ssh_session_for).with('test.host.name', 1234).and_return('session')
|
44
|
+
allow(configuration).to receive(:bind_ssh_session_for).with({host: 'test.host.name', port: 1234}).and_return('session')
|
53
45
|
end
|
54
46
|
|
55
|
-
include_examples '
|
47
|
+
include_examples 'initializing communicator session'
|
56
48
|
end
|
57
49
|
end
|
58
50
|
|
@@ -10,43 +10,35 @@ module NodeSpec
|
|
10
10
|
before do
|
11
11
|
expect(configuration).to receive(:unbind_ssh_session)
|
12
12
|
allow(WinRM::WinRMWebService).to receive(:new).with("http://#{hostname}:#{port}/wsman", transport, options).and_return('session')
|
13
|
-
allow(configuration).to receive(:bind_winrm_session_for) do |
|
14
|
-
expect(host).to eq hostname
|
15
|
-
expect(endpoint).to eq "http://#{hostname}:#{port}/wsman"
|
13
|
+
allow(configuration).to receive(:bind_winrm_session_for) do |params, &block|
|
14
|
+
expect(params[:host]).to eq hostname
|
15
|
+
expect(params[:endpoint]).to eq "http://#{hostname}:#{port}/wsman"
|
16
16
|
block.call
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
it 'returns a session' do
|
23
|
-
subject.bind_to(configuration)
|
24
|
-
|
25
|
-
expect(subject.session).to eq('session')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe 'binding the session' do
|
21
|
+
describe 'init the session' do
|
30
22
|
context 'default port and transport' do
|
31
23
|
subject {WinrmCommunicator.new('test.host.name', 'foo' => 'bar')}
|
32
24
|
include_context 'creating new session', 'test.host.name', 5985, :plaintext, {foo: 'bar', disable_sspi: true}
|
33
|
-
include_examples '
|
25
|
+
include_examples 'initializing communicator session'
|
34
26
|
end
|
35
27
|
|
36
28
|
context 'custom port and transport' do
|
37
29
|
subject {WinrmCommunicator.new('test.host.name', 'port' => 1234, 'transport' => 'test_transport', 'foo' => 'bar')}
|
38
30
|
include_context 'creating new session', 'test.host.name', 1234, :test_transport, {foo: 'bar'}
|
39
|
-
include_examples '
|
31
|
+
include_examples 'initializing communicator session'
|
40
32
|
end
|
41
33
|
|
42
34
|
context 'same session' do
|
43
35
|
subject {WinrmCommunicator.new('test.host.name', 'foo' => 'bar')}
|
44
36
|
before do
|
45
37
|
expect(configuration).to receive(:unbind_ssh_session)
|
46
|
-
allow(configuration).to receive(:bind_winrm_session_for).with('test.host.name', "http://test.host.name:5985/wsman").and_return('session')
|
38
|
+
allow(configuration).to receive(:bind_winrm_session_for).with({host: 'test.host.name', endpoint: "http://test.host.name:5985/wsman"}).and_return('session')
|
47
39
|
end
|
48
40
|
|
49
|
-
include_examples '
|
41
|
+
include_examples 'initializing communicator session'
|
50
42
|
end
|
51
43
|
end
|
52
44
|
|
@@ -17,7 +17,7 @@ module NodeSpec
|
|
17
17
|
expect(configuration).to receive(:ssh_options=).with({port: 1234})
|
18
18
|
expect(configuration).to receive(:host=).with('test.host.name')
|
19
19
|
|
20
|
-
session = subject.bind_ssh_session_for('test.host.name', 1234) {new_session}
|
20
|
+
session = subject.bind_ssh_session_for({host: 'test.host.name', port: 1234}) {new_session}
|
21
21
|
expect(session).to be(new_session)
|
22
22
|
end
|
23
23
|
end
|
@@ -75,7 +75,7 @@ module NodeSpec
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'does not change the exisintg session' do
|
78
|
-
session = subject.bind_ssh_session_for('test.host.name', 1234) {new_session}
|
78
|
+
session = subject.bind_ssh_session_for({host: 'test.host.name', port: 1234}) {new_session}
|
79
79
|
expect(session).to be(existing_session)
|
80
80
|
end
|
81
81
|
end
|
@@ -104,7 +104,7 @@ module NodeSpec
|
|
104
104
|
expect(configuration).to receive(:winrm=).with(new_session)
|
105
105
|
expect(configuration).to receive(:host=).with('test.host.name')
|
106
106
|
|
107
|
-
session = subject.bind_winrm_session_for('test.host.name', 'test.endpoint') {new_session}
|
107
|
+
session = subject.bind_winrm_session_for({host: 'test.host.name', endpoint: 'test.endpoint'}) {new_session}
|
108
108
|
expect(session).to be(new_session)
|
109
109
|
end
|
110
110
|
end
|
@@ -147,7 +147,7 @@ module NodeSpec
|
|
147
147
|
end
|
148
148
|
|
149
149
|
it 'does not change the exisintg session' do
|
150
|
-
session = subject.bind_winrm_session_for('test.host.name', 'test.endpoint') {new_session}
|
150
|
+
session = subject.bind_winrm_session_for({host: 'test.host.name', endpoint: 'test.endpoint'}) {new_session}
|
151
151
|
expect(session).to be(existing_session)
|
152
152
|
end
|
153
153
|
end
|
@@ -155,6 +155,7 @@ module NodeSpec
|
|
155
155
|
|
156
156
|
describe '#unbind_winrm_session' do
|
157
157
|
before do
|
158
|
+
expect(configuration).to receive(:winrm)
|
158
159
|
expect(configuration).to receive(:winrm=).with(nil)
|
159
160
|
expect(configuration).to receive(:host=).with(nil)
|
160
161
|
end
|
@@ -20,4 +20,12 @@ shared_examples 'new_communicator' do |adapter_clazz, connection|
|
|
20
20
|
it 'returns communicator with the host name from the options' do
|
21
21
|
expect(adapter_clazz.communicator_for('test_node', 'host' => 'test.host.name', 'foo' => 'bar')).to eq("#{connection} communicator")
|
22
22
|
end
|
23
|
-
end
|
23
|
+
end
|
24
|
+
|
25
|
+
shared_examples 'initializing communicator session' do
|
26
|
+
it 'returns a session' do
|
27
|
+
subject.init_session(configuration)
|
28
|
+
|
29
|
+
expect(subject.session).to eq('session')
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nodespec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Silvio Montanari
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -207,7 +207,7 @@ files:
|
|
207
207
|
- spec/runtime_gem_loader_spec.rb
|
208
208
|
- spec/spec_helper.rb
|
209
209
|
- spec/support/backend.rb
|
210
|
-
- spec/support/
|
210
|
+
- spec/support/communication_adapters.rb
|
211
211
|
- spec/support/init_with_current_node.rb
|
212
212
|
- spec/support/local_command.rb
|
213
213
|
- spec/support/node_command.rb
|
@@ -263,7 +263,7 @@ test_files:
|
|
263
263
|
- spec/runtime_gem_loader_spec.rb
|
264
264
|
- spec/spec_helper.rb
|
265
265
|
- spec/support/backend.rb
|
266
|
-
- spec/support/
|
266
|
+
- spec/support/communication_adapters.rb
|
267
267
|
- spec/support/init_with_current_node.rb
|
268
268
|
- spec/support/local_command.rb
|
269
269
|
- spec/support/node_command.rb
|