ridley-connectors 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6fd45d75b75804bf01b13a5126297aacfd5fc455
4
- data.tar.gz: 63e286faecab868eed92362d49771c1c591aad96
3
+ metadata.gz: 599c5217df3e7254b4578d86c7ea5d2cff2642d2
4
+ data.tar.gz: dd25c405a8e4d04d49841830d2d052ed4149a126
5
5
  SHA512:
6
- metadata.gz: 49691e61efceb7a88fc5a4a5617b4f8364e9e074ef3d86079aedf2a7f3fa9f89d5ca59a4152f77a9be3ecc2f1d6e03512411f8d2f757d36a921843ae27fae55e
7
- data.tar.gz: aabf718fdde84bdb5a210038ac319bcf53a56dc638ae39c642ab42ae7f6e65083f8d65b6a225f97fac4a4f1467b10870146e6bb4f3c389e953381c2b1d60d293
6
+ metadata.gz: 586525058a7a8db6d445f7a613a70099b6751b9d3d4958f631e680b70b58f69b97fb2ba90ec773145c4e2c063b9be9ed795e073571eacaeef009c82f04e0e907
7
+ data.tar.gz: b66f344b598132790cf6b927f54af4763100a27e9bc358ac79d50b3e549152b5af9145fad8ced11c99672ff76f13bacc21c60cc4bd72530db4d262c5ecbe47bf
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v.1.7.0
2
+
3
+ * [#15](https://github.com/RiotGames/ridley-connectors/pull/15) Add retries to ssh and winrm connections
4
+
1
5
  ## v.1.6.0
2
6
  * [#14](https://github.com/RiotGames/ridley-connectors/pull/14) Create
3
7
  a pool of WinRM / SSH actors, configurable with options(:connector\_pool\_size)
@@ -19,6 +19,7 @@ module Ridley
19
19
  include Ridley::Logging
20
20
 
21
21
  PORT_CHECK_TIMEOUT = 3
22
+ RETRY_COUNT = 3
22
23
 
23
24
  finalizer :finalize_callback
24
25
 
@@ -181,11 +182,12 @@ module Ridley
181
182
  options[:winrm] ||= Hash.new
182
183
  options[:ssh][:port] ||= HostConnector::SSH::DEFAULT_PORT
183
184
  options[:winrm][:port] ||= HostConnector::WinRM::DEFAULT_PORT
185
+ options[:retries] ||= RETRY_COUNT
184
186
 
185
- if connector_port_open?(host, options[:winrm][:port])
187
+ if connector_port_open?(host, options[:winrm][:port], options[:winrm][:timeout], options[:retries])
186
188
  options.delete(:ssh)
187
189
  winrm
188
- elsif connector_port_open?(host, options[:ssh][:port], options[:ssh][:timeout])
190
+ elsif connector_port_open?(host, options[:ssh][:port], options[:ssh][:timeout], options[:retries])
189
191
  options.delete(:winrm)
190
192
  ssh
191
193
  else
@@ -214,14 +216,21 @@ module Ridley
214
216
  # the port to attempt to connect on
215
217
  # @param [Float] wait_time ({PORT_CHECK_TIMEOUT})
216
218
  # the number of seconds to wait
219
+ # @param [Int] retries ({RETRY_COUNT})
220
+ # the number of times to retry the connection before counting it unavailable
217
221
  #
218
222
  # @return [Boolean]
219
- def connector_port_open?(host, port, wait_time = nil)
220
- defer {
221
- Timeout.timeout(wait_time || PORT_CHECK_TIMEOUT) { Celluloid::IO::TCPSocket.new(host, port).close; true }
222
- }
223
- rescue Errno::ETIMEDOUT, Timeout::Error, SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::EADDRNOTAVAIL => ex
224
- false
223
+ def connector_port_open?(host, port, wait_time = nil, retries = RETRY_COUNT)
224
+ @retry_count = retries
225
+ begin
226
+ defer {
227
+ Timeout.timeout(wait_time || PORT_CHECK_TIMEOUT) { Celluloid::IO::TCPSocket.new(host, port).close; true }
228
+ }
229
+ rescue Errno::ETIMEDOUT, Timeout::Error, SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::EADDRNOTAVAIL => ex
230
+ @retry_count -= 1
231
+ retry if @retry_count > 0
232
+ false
233
+ end
225
234
  end
226
235
 
227
236
  def finalize_callback
@@ -1,5 +1,5 @@
1
1
  module Ridley
2
2
  module Connectors
3
- VERSION = '1.6.0'
3
+ VERSION = '1.7.0'
4
4
  end
5
5
  end
@@ -7,13 +7,13 @@ describe Ridley::HostCommander do
7
7
  describe "#run" do
8
8
  let(:command) { "ls" }
9
9
  let(:options) do
10
- { ssh: { port: 22 }, winrm: { port: 5985 } }
10
+ { ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3 }
11
11
  end
12
12
 
13
13
  context "when communicating to a unix node" do
14
14
  before do
15
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(false)
16
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(true)
15
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(false)
16
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(true)
17
17
  end
18
18
 
19
19
  it "sends a #run message to the ssh host connector" do
@@ -24,8 +24,8 @@ describe Ridley::HostCommander do
24
24
 
25
25
  context "when communicating to a windows node" do
26
26
  before do
27
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(true)
28
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(false)
27
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(true)
28
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(false)
29
29
  end
30
30
 
31
31
  it "sends a #run message to the ssh host connector" do
@@ -38,13 +38,13 @@ describe Ridley::HostCommander do
38
38
 
39
39
  describe "#bootstrap" do
40
40
  let(:options) do
41
- { ssh: { port: 22 }, winrm: { port: 5985 } }
41
+ { ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3 }
42
42
  end
43
43
 
44
44
  context "when communicating to a unix node" do
45
45
  before do
46
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(false)
47
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(true)
46
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(false)
47
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(true)
48
48
  end
49
49
 
50
50
  it "sends a #bootstrap message to the ssh host connector" do
@@ -56,8 +56,8 @@ describe Ridley::HostCommander do
56
56
 
57
57
  context "when communicating to a windows node" do
58
58
  before do
59
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(true)
60
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(false)
59
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(true)
60
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(false)
61
61
  end
62
62
 
63
63
  it "sends a #bootstrap message to the winrm host connector" do
@@ -70,13 +70,13 @@ describe Ridley::HostCommander do
70
70
 
71
71
  describe "#chef_client" do
72
72
  let(:options) do
73
- { ssh: { port: 22 }, winrm: { port: 5985 } }
73
+ { ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3 }
74
74
  end
75
75
 
76
76
  context "when communicating to a unix node" do
77
77
  before do
78
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(false)
79
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(true)
78
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(false)
79
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(true)
80
80
  end
81
81
 
82
82
  it "sends a #chef_client message to the ssh host connector" do
@@ -88,8 +88,8 @@ describe Ridley::HostCommander do
88
88
 
89
89
  context "when communicating to a windows node" do
90
90
  before do
91
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(true)
92
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(false)
91
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(true)
92
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(false)
93
93
  end
94
94
 
95
95
  it "sends a #chef_client message to the ssh host connector" do
@@ -103,13 +103,13 @@ describe Ridley::HostCommander do
103
103
  describe "#put_secret" do
104
104
  let(:secret) { "something_secret" }
105
105
  let(:options) do
106
- { ssh: { port: 22 }, winrm: { port: 5985 } }
106
+ { ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3 }
107
107
  end
108
108
 
109
109
  context "when communicating to a unix node" do
110
110
  before do
111
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(false)
112
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(true)
111
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(false)
112
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(true)
113
113
  end
114
114
 
115
115
  it "sends a #put_secret message to the ssh host connector" do
@@ -121,8 +121,8 @@ describe Ridley::HostCommander do
121
121
 
122
122
  context "when communicating to a windows node" do
123
123
  before do
124
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(true)
125
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(false)
124
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(true)
125
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(false)
126
126
  end
127
127
 
128
128
  it "sends a #put_secret message to the ssh host connector" do
@@ -136,13 +136,13 @@ describe Ridley::HostCommander do
136
136
  describe "#ruby_script" do
137
137
  let(:command_lines) { ["line one"] }
138
138
  let(:options) do
139
- { ssh: { port: 22 }, winrm: { port: 5985 } }
139
+ { ssh: { port: 22, timeout: 3 }, winrm: { port: 5985, timeout: 3 }, retries: 3 }
140
140
  end
141
141
 
142
142
  context "when communicating to a unix node" do
143
143
  before do
144
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(false)
145
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(true)
144
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(false)
145
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(true)
146
146
  end
147
147
 
148
148
  it "sends a #ruby_script message to the ssh host connector" do
@@ -154,8 +154,8 @@ describe Ridley::HostCommander do
154
154
 
155
155
  context "when communicating to a windows node" do
156
156
  before do
157
- subject.stub(:connector_port_open?).with(host, options[:winrm][:port]).and_return(true)
158
- subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything).and_return(false)
157
+ subject.stub(:connector_port_open?).with(host, options[:winrm][:port], anything, anything).and_return(true)
158
+ subject.stub(:connector_port_open?).with(host, options[:ssh][:port], anything, anything).and_return(false)
159
159
  end
160
160
 
161
161
  it "sends a #ruby_script message to the ssh host connector" do
@@ -168,20 +168,20 @@ describe Ridley::HostCommander do
168
168
 
169
169
  describe "#connector_for" do
170
170
  it "should return winrm if winrm is open" do
171
- subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT).and_return(true)
171
+ subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything).and_return(true)
172
172
  subject.should_receive(:winrm)
173
173
  subject.connector_for(host)
174
174
  end
175
175
 
176
- it "should return winrm if winrm is open" do
177
- subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT).and_return(false)
178
- subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::SSH::DEFAULT_PORT, nil).and_return(true)
176
+ it "should return ssh if winrm is closed" do
177
+ subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything).and_return(false)
178
+ subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::SSH::DEFAULT_PORT, anything, anything).and_return(true)
179
179
  subject.should_receive(:ssh)
180
180
  subject.connector_for(host)
181
181
  end
182
182
 
183
183
  it "should still set the default ports if an explicit nil is passed in" do
184
- subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT).and_return(true)
184
+ subject.stub(:connector_port_open?).with(host, Ridley::HostConnector::WinRM::DEFAULT_PORT, anything, anything).and_return(true)
185
185
  subject.should_receive(:winrm)
186
186
  subject.connector_for(host, winrm: nil, ssh: nil)
187
187
  end
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: 1.6.0
4
+ version: 1.7.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-03-26 00:00:00.000000000 Z
12
+ date: 2014-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: celluloid