ridley-connectors 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/ridley-connectors/bootstrap_context.rb +1 -1
- data/lib/ridley-connectors/command_context.rb +1 -1
- data/lib/ridley-connectors/host_commander.rb +19 -2
- data/lib/ridley-connectors/resources/node_resource.rb +14 -8
- data/lib/ridley-connectors/version.rb +1 -1
- data/lib/ridley-connectors.rb +17 -4
- data/ridley-connectors.gemspec +1 -1
- data/spec/unit/ridley-connectors/host_commander_spec.rb +38 -0
- data/spec/unit/ridley-connectors/resources/node_resource_spec.rb +15 -11
- 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: e90348caa597256c09723c5a29428f75187dbb81
|
4
|
+
data.tar.gz: 3c6de11adb749a25c8873e3a061f6a1e33512010
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7af3ff66ae8b1d47e67c8d10d382246432a550a8ef88f3c3c92fdf35619956554e3beb135ad40ba6759eb42be70eca5b656e24ea74a99e329ab141a1ee2913cc
|
7
|
+
data.tar.gz: a36958116a5abd3ea500eb33e73a7dbacde1efefd36426238a0dcabdc40c50cefc4a0a3384d8a9aea4b25fbc2d4fce4c76f444d139d133f5b671919cbf1e1f6f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## v.2.1.0
|
2
|
+
|
3
|
+
* [#21](https://github.com/RiotGames/ridley-connectors/pull/21) Fix bootstrappers and pathing to files moved from Ridley
|
4
|
+
* [#22](https://github.com/RiotGames/ridley-connectors/pull/22) Added a new option to allow connector_for to pick a connector more intelligently
|
5
|
+
|
1
6
|
## v.2.0.1
|
2
7
|
|
3
8
|
* [#18](https://github.com/RiotGames/ridley-connectors/pull/18) Move more connector-specific code out of ridley and into ridley-connectors
|
@@ -28,7 +28,7 @@ module Ridley
|
|
28
28
|
# @return [Pathname]
|
29
29
|
def template_file(filename = nil)
|
30
30
|
return @template_file if filename.nil?
|
31
|
-
@template_file = Ridley.scripts.join("#{filename}.erb")
|
31
|
+
@template_file = Ridley::Connectors.scripts.join("#{filename}.erb")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -26,6 +26,9 @@ module Ridley
|
|
26
26
|
PORT_CHECK_TIMEOUT = 3
|
27
27
|
RETRY_COUNT = 3
|
28
28
|
|
29
|
+
DEFAULT_WINDOWS_CONNECTOR = "winrm"
|
30
|
+
DEFAULT_LINUX_CONNECTOR = "ssh"
|
31
|
+
|
29
32
|
CONNECTOR_PORT_ERRORS = [
|
30
33
|
Errno::ETIMEDOUT, Timeout::Error, SocketError,
|
31
34
|
Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::EADDRNOTAVAIL,
|
@@ -60,6 +63,8 @@ module Ridley
|
|
60
63
|
# * :user (String) a user that will login to each node and perform the bootstrap command on
|
61
64
|
# * :password (String) the password for the user that will perform the bootstrap (required)
|
62
65
|
# * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
|
66
|
+
# @option options [String] :connector
|
67
|
+
# a connector type to prefer
|
63
68
|
#
|
64
69
|
# @return [HostConnector::Response]
|
65
70
|
def run(host, command, options = {})
|
@@ -102,6 +107,8 @@ module Ridley
|
|
102
107
|
# * :user (String) a user that will login to each node and perform the bootstrap command on
|
103
108
|
# * :password (String) the password for the user that will perform the bootstrap (required)
|
104
109
|
# * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
|
110
|
+
# @option options [String] :connector
|
111
|
+
# a connector type to prefer
|
105
112
|
#
|
106
113
|
# @return [HostConnector::Response]
|
107
114
|
def chef_client(host, options = {})
|
@@ -125,6 +132,8 @@ module Ridley
|
|
125
132
|
# * :user (String) a user that will login to each node and perform the bootstrap command on
|
126
133
|
# * :password (String) the password for the user that will perform the bootstrap (required)
|
127
134
|
# * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
|
135
|
+
# @option options [String] :connector
|
136
|
+
# a connector type to prefer
|
128
137
|
#
|
129
138
|
# @return [HostConnector::Response]
|
130
139
|
def put_secret(host, secret, options = {})
|
@@ -148,6 +157,8 @@ module Ridley
|
|
148
157
|
# * :user (String) a user that will login to each node and perform the bootstrap command on
|
149
158
|
# * :password (String) the password for the user that will perform the bootstrap (required)
|
150
159
|
# * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
|
160
|
+
# @option options [String] :connector
|
161
|
+
# a connector type to prefer
|
151
162
|
#
|
152
163
|
# @return [HostConnector::Response]
|
153
164
|
def ruby_script(host, command_lines, options = {})
|
@@ -173,6 +184,8 @@ module Ridley
|
|
173
184
|
# * :user (String) a user that will login to each node and perform the bootstrap command on
|
174
185
|
# * :password (String) the password for the user that will perform the bootstrap (required)
|
175
186
|
# * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
|
187
|
+
# @option options [String] :connector
|
188
|
+
# a connector type to prefer
|
176
189
|
#
|
177
190
|
# @return [HostConnector::Response]
|
178
191
|
def uninstall_chef(host, options = {})
|
@@ -188,6 +201,8 @@ module Ridley
|
|
188
201
|
# * :timeout (Float) [5.0] timeout value for testing SSH connection
|
189
202
|
# @option options [Hash] :winrm
|
190
203
|
# * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
|
204
|
+
# @option options [String] :connector
|
205
|
+
# a connector type to prefer
|
191
206
|
# @param block [Proc]
|
192
207
|
# an optional block that is yielded the best HostConnector
|
193
208
|
#
|
@@ -199,10 +214,12 @@ module Ridley
|
|
199
214
|
options[:winrm][:port] ||= HostConnector::WinRM::DEFAULT_PORT
|
200
215
|
options[:retries] ||= RETRY_COUNT
|
201
216
|
|
202
|
-
|
217
|
+
connector = options[:connector]
|
218
|
+
|
219
|
+
if (connector == DEFAULT_WINDOWS_CONNECTOR || connector.nil?) && connector_port_open?(host, options[:winrm][:port], options[:winrm][:timeout], options[:retries])
|
203
220
|
options.delete(:ssh)
|
204
221
|
winrm
|
205
|
-
elsif connector_port_open?(host, options[:ssh][:port], options[:ssh][:timeout], options[:retries])
|
222
|
+
elsif (connector == DEFAULT_LINUX_CONNECTOR || connector.nil?) && connector_port_open?(host, options[:ssh][:port], options[:ssh][:timeout], options[:retries])
|
206
223
|
options.delete(:winrm)
|
207
224
|
ssh
|
208
225
|
else
|
@@ -95,10 +95,12 @@ module Ridley
|
|
95
95
|
# host.
|
96
96
|
#
|
97
97
|
# @param [String] host
|
98
|
+
# @option options [String] :connector
|
99
|
+
# a connectory type to prefer
|
98
100
|
#
|
99
101
|
# @return [HostConnector::Response]
|
100
|
-
def chef_run(host)
|
101
|
-
host_commander.chef_client(host, ssh: ssh, winrm: winrm)
|
102
|
+
def chef_run(host, options = {})
|
103
|
+
host_commander.chef_client(host, ssh: ssh, winrm: winrm, connector: options[:connector])
|
102
104
|
rescue Errors::HostConnectionError => ex
|
103
105
|
abort(ex)
|
104
106
|
end
|
@@ -107,10 +109,12 @@ module Ridley
|
|
107
109
|
# the given host.
|
108
110
|
#
|
109
111
|
# @param [String] host
|
112
|
+
# @option options [String] :connector
|
113
|
+
# a connectory type to prefer
|
110
114
|
#
|
111
115
|
# @return [HostConnector::Response]
|
112
|
-
def put_secret(host)
|
113
|
-
host_commander.put_secret(host, encrypted_data_bag_secret, ssh: ssh, winrm: winrm)
|
116
|
+
def put_secret(host, options = {})
|
117
|
+
host_commander.put_secret(host, encrypted_data_bag_secret, ssh: ssh, winrm: winrm, connector: options[:connector])
|
114
118
|
end
|
115
119
|
|
116
120
|
# Executes an arbitrary ruby script using the best worker available
|
@@ -118,10 +122,12 @@ module Ridley
|
|
118
122
|
#
|
119
123
|
# @param [String] host
|
120
124
|
# @param [Array<String>] command_lines
|
125
|
+
# @option options [String] :connector
|
126
|
+
# a connectory type to prefer
|
121
127
|
#
|
122
128
|
# @return [HostConnector::Response]
|
123
|
-
def ruby_script(host, command_lines)
|
124
|
-
host_commander.ruby_script(host, command_lines, ssh: ssh, winrm: winrm)
|
129
|
+
def ruby_script(host, command_lines, options = {})
|
130
|
+
host_commander.ruby_script(host, command_lines, ssh: ssh, winrm: winrm, connector: options[:connector])
|
125
131
|
end
|
126
132
|
|
127
133
|
# Executes the given command on a node using the best worker
|
@@ -131,8 +137,8 @@ module Ridley
|
|
131
137
|
# @param [String] command
|
132
138
|
#
|
133
139
|
# @return [HostConnector::Response]
|
134
|
-
def run(host, command)
|
135
|
-
host_commander.run(host, command, ssh: ssh, winrm: winrm)
|
140
|
+
def run(host, command, options = {})
|
141
|
+
host_commander.run(host, command, ssh: ssh, winrm: winrm, connector: options[:connector])
|
136
142
|
end
|
137
143
|
alias_method :execute_command, :run
|
138
144
|
|
data/lib/ridley-connectors.rb
CHANGED
@@ -3,10 +3,23 @@ require 'celluloid/io'
|
|
3
3
|
require 'ridley'
|
4
4
|
|
5
5
|
module Ridley
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module Connectors
|
7
|
+
class << self
|
8
|
+
|
9
|
+
# @return [Pathname]
|
10
|
+
def root
|
11
|
+
@root ||= Pathname.new(File.expand_path('../', File.dirname(__FILE__)))
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Pathname]
|
15
|
+
def scripts
|
16
|
+
root.join('scripts')
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Pathname]
|
20
|
+
def bootstrappers
|
21
|
+
root.join('bootstrappers')
|
22
|
+
end
|
10
23
|
end
|
11
24
|
end
|
12
25
|
|
data/ridley-connectors.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_dependency 'celluloid-io', '~> 0.16.0.pre'
|
22
22
|
s.add_dependency 'erubis'
|
23
23
|
s.add_dependency 'net-ssh'
|
24
|
-
s.add_dependency 'ridley', '~> 3.
|
24
|
+
s.add_dependency 'ridley', '~> 3.1'
|
25
25
|
s.add_dependency 'winrm', '~> 1.1.0'
|
26
26
|
|
27
27
|
s.add_development_dependency 'buff-ruby_engine', '~> 0.1'
|
@@ -208,5 +208,43 @@ describe Ridley::HostCommander do
|
|
208
208
|
subject.should_receive(:winrm)
|
209
209
|
subject.connector_for(host, winrm: nil, ssh: nil)
|
210
210
|
end
|
211
|
+
|
212
|
+
context "when a connector of winrm is given" do
|
213
|
+
let(:options) do
|
214
|
+
{ ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3, connector: "winrm" }
|
215
|
+
end
|
216
|
+
let(:winrm) { double }
|
217
|
+
|
218
|
+
it "should return winrm if winrm is open" do
|
219
|
+
subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything).and_return(true)
|
220
|
+
subject.stub(:winrm).and_return(winrm)
|
221
|
+
expect(subject.connector_for(host, options)).to eql(winrm)
|
222
|
+
end
|
223
|
+
|
224
|
+
it "should return nil if winrm is closed" do
|
225
|
+
subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything).and_return(false)
|
226
|
+
expect(subject.connector_for(host, options)).to be_nil
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context "when a connector of ssh is given" do
|
231
|
+
let(:options) do
|
232
|
+
{ ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3, connector: "ssh" }
|
233
|
+
end
|
234
|
+
let(:ssh) { double }
|
235
|
+
|
236
|
+
it "should return ssh if ssh is open" do
|
237
|
+
subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::SSH::DEFAULT_PORT, anything, anything).and_return(true)
|
238
|
+
subject.stub(:ssh).and_return(ssh)
|
239
|
+
subject.should_not_receive(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything)
|
240
|
+
expect(subject.connector_for(host, options)).to eql(ssh)
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should return nil if ssh is closed" do
|
244
|
+
subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::SSH::DEFAULT_PORT, anything, anything).and_return(false)
|
245
|
+
subject.should_not_receive(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything)
|
246
|
+
expect(subject.connector_for(host, options)).to be_nil
|
247
|
+
end
|
248
|
+
end
|
211
249
|
end
|
212
250
|
end
|
@@ -11,9 +11,11 @@ describe Ridley::NodeResource do
|
|
11
11
|
encrypted_data_bag_secret: double('encrypted_data_bag_secret'),
|
12
12
|
ssh: double('ssh'),
|
13
13
|
winrm: double('winrm'),
|
14
|
-
chef_version: double('chef_version')
|
14
|
+
chef_version: double('chef_version'),
|
15
|
+
connector: nil
|
15
16
|
}
|
16
17
|
end
|
18
|
+
|
17
19
|
let(:instance) do
|
18
20
|
inst = described_class.new(double, options)
|
19
21
|
inst.stub(host_commander: host_commander)
|
@@ -21,21 +23,23 @@ describe Ridley::NodeResource do
|
|
21
23
|
end
|
22
24
|
|
23
25
|
describe "#bootstrap" do
|
26
|
+
let(:bootstrap_options) { options.delete(:connector); options }
|
27
|
+
|
24
28
|
it "sends the message #bootstrap to the instance's host_commander" do
|
25
|
-
host_commander.should_receive(:bootstrap).with(host,
|
29
|
+
host_commander.should_receive(:bootstrap).with(host, bootstrap_options)
|
26
30
|
instance.bootstrap(host)
|
27
31
|
end
|
28
32
|
|
29
33
|
it "passes pre-configured options to #bootstrap" do
|
30
|
-
host_commander.should_receive(:bootstrap).with(host,
|
34
|
+
host_commander.should_receive(:bootstrap).with(host, bootstrap_options)
|
31
35
|
instance.bootstrap(host)
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
35
39
|
describe "#chef_run" do
|
36
40
|
it "sends the message #chef_client to the instance's host_commander" do
|
37
|
-
host_commander.should_receive(:chef_client).with(host, ssh: instance.ssh, winrm: instance.winrm)
|
38
|
-
instance.chef_run(host)
|
41
|
+
host_commander.should_receive(:chef_client).with(host, ssh: instance.ssh, winrm: instance.winrm, connector: nil)
|
42
|
+
instance.chef_run(host, options)
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
@@ -43,8 +47,8 @@ describe Ridley::NodeResource do
|
|
43
47
|
let(:secret) { options[:encrypted_data_bag_secret] }
|
44
48
|
|
45
49
|
it "sends the message #put_secret to the instance's host_commander" do
|
46
|
-
host_commander.should_receive(:put_secret).with(host, secret, options.slice(:ssh, :winrm))
|
47
|
-
instance.put_secret(host)
|
50
|
+
host_commander.should_receive(:put_secret).with(host, secret, options.slice(:ssh, :winrm, :connector))
|
51
|
+
instance.put_secret(host, options)
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -52,8 +56,8 @@ describe Ridley::NodeResource do
|
|
52
56
|
let(:command_lines) { ["puts 'hello'", "puts 'there'"] }
|
53
57
|
|
54
58
|
it "sends the message #ruby_script to the instance's host_commander" do
|
55
|
-
host_commander.should_receive(:ruby_script).with(host, command_lines, ssh: instance.ssh, winrm: instance.winrm)
|
56
|
-
instance.ruby_script(host, command_lines)
|
59
|
+
host_commander.should_receive(:ruby_script).with(host, command_lines, ssh: instance.ssh, winrm: instance.winrm, connector: nil)
|
60
|
+
instance.ruby_script(host, command_lines, options)
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
@@ -61,8 +65,8 @@ describe Ridley::NodeResource do
|
|
61
65
|
let(:command) { "echo 'hello winrm_connectorld'" }
|
62
66
|
|
63
67
|
it "sends the message #run to the instance's host_commander" do
|
64
|
-
host_commander.should_receive(:run).with(host, command, ssh: instance.ssh, winrm: instance.winrm)
|
65
|
-
instance.run(host, command)
|
68
|
+
host_commander.should_receive(:run).with(host, command, ssh: instance.ssh, winrm: instance.winrm, connector: nil)
|
69
|
+
instance.run(host, command, options)
|
66
70
|
end
|
67
71
|
end
|
68
72
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridley-connectors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Winsor
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: celluloid
|
@@ -73,14 +73,14 @@ dependencies:
|
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '3.
|
76
|
+
version: '3.1'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - ~>
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '3.
|
83
|
+
version: '3.1'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: winrm
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|