sshkit 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/lib/sshkit/all.rb +6 -1
- data/lib/sshkit/coordinator.rb +38 -0
- data/lib/sshkit/dsl.rb +1 -1
- data/lib/sshkit/runners/abstract.rb +24 -0
- data/lib/sshkit/runners/group.rb +21 -0
- data/lib/sshkit/{connection_manager.rb → runners/parallel.rb} +0 -43
- data/lib/sshkit/runners/sequential.rb +21 -0
- data/lib/sshkit/version.rb +1 -1
- data/test/functional/{test_connection_manager.rb → test_coordinator.rb} +1 -1
- data/test/unit/{test_connection_manager.rb → test_coordinator.rb} +8 -8
- metadata +10 -6
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
This file is written in reverse chronological order, newer releases will
|
4
4
|
appear at the top.
|
5
5
|
|
6
|
+
## 0.0.4
|
7
|
+
|
8
|
+
* Rename the ConnectionManager class to Coordinator, connections are handled
|
9
|
+
in the backend, if it needs to create some connections.
|
10
|
+
|
6
11
|
## 0.0.3
|
7
12
|
|
8
13
|
* Refactor the runner classes into an abstract heirarchy.
|
data/Gemfile.lock
CHANGED
data/lib/sshkit/all.rb
CHANGED
@@ -6,13 +6,18 @@ require_relative 'host'
|
|
6
6
|
|
7
7
|
require_relative 'command'
|
8
8
|
require_relative 'configuration'
|
9
|
-
require_relative '
|
9
|
+
require_relative 'coordinator'
|
10
10
|
|
11
11
|
require_relative 'formatters/abstract'
|
12
12
|
require_relative 'formatters/black_hole'
|
13
13
|
require_relative 'formatters/pretty'
|
14
14
|
require_relative 'formatters/dot'
|
15
15
|
|
16
|
+
require_relative 'runners/abstract'
|
17
|
+
require_relative 'runners/sequential'
|
18
|
+
require_relative 'runners/parallel'
|
19
|
+
require_relative 'runners/group'
|
20
|
+
|
16
21
|
require_relative 'backends/abstract'
|
17
22
|
require_relative 'backends/printer'
|
18
23
|
require_relative 'backends/netssh'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module SSHKit
|
2
|
+
|
3
|
+
class Coordinator
|
4
|
+
|
5
|
+
attr_accessor :hosts
|
6
|
+
|
7
|
+
def initialize(raw_hosts)
|
8
|
+
@raw_hosts = Array(raw_hosts)
|
9
|
+
raise NoValidHosts unless Array(raw_hosts).any?
|
10
|
+
resolve_hosts!
|
11
|
+
end
|
12
|
+
|
13
|
+
def each(options={}, &block)
|
14
|
+
options = default_options.merge(options)
|
15
|
+
case options[:in]
|
16
|
+
when :parallel then Runner::Parallel
|
17
|
+
when :sequence then Runner::Sequential
|
18
|
+
when :groups then Runner::Group
|
19
|
+
else
|
20
|
+
raise RuntimeError, "Don't know how to handle run style #{options[:in].inspect}"
|
21
|
+
end.new(hosts, &block).execute
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_accessor :cooldown
|
27
|
+
|
28
|
+
def default_options
|
29
|
+
{ in: :parallel }
|
30
|
+
end
|
31
|
+
|
32
|
+
def resolve_hosts!
|
33
|
+
@hosts = @raw_hosts.collect { |rh| rh.is_a?(Host) ? rh : Host.new(rh) }.uniq
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/lib/sshkit/dsl.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module SSHKit
|
2
|
+
|
3
|
+
module Runner
|
4
|
+
|
5
|
+
class Abstract
|
6
|
+
|
7
|
+
attr_reader :hosts, :block
|
8
|
+
|
9
|
+
def initialize(hosts, &block)
|
10
|
+
@hosts = Array(hosts)
|
11
|
+
@block = block
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def backend(host, &block)
|
17
|
+
SSHKit.config.backend.new(host, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module SSHKit
|
2
|
+
|
3
|
+
module Runner
|
4
|
+
|
5
|
+
class Group < Sequential
|
6
|
+
attr_writer :group_size
|
7
|
+
def execute
|
8
|
+
hosts.each_slice(group_size).collect do |group_hosts|
|
9
|
+
Parallel.new(group_hosts, &block).execute
|
10
|
+
sleep wait_interval
|
11
|
+
end.flatten
|
12
|
+
end
|
13
|
+
private
|
14
|
+
def group_size
|
15
|
+
@group_size ||= 2
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'timeout'
|
2
|
-
|
3
1
|
module SSHKit
|
4
2
|
|
5
3
|
module Runner
|
@@ -64,44 +62,3 @@ module SSHKit
|
|
64
62
|
end
|
65
63
|
|
66
64
|
end
|
67
|
-
|
68
|
-
module SSHKit
|
69
|
-
|
70
|
-
NoValidHosts = Class.new(StandardError)
|
71
|
-
|
72
|
-
class ConnectionManager
|
73
|
-
|
74
|
-
attr_accessor :hosts
|
75
|
-
|
76
|
-
def initialize(raw_hosts)
|
77
|
-
@raw_hosts = Array(raw_hosts)
|
78
|
-
raise NoValidHosts unless Array(raw_hosts).any?
|
79
|
-
resolve_hosts!
|
80
|
-
end
|
81
|
-
|
82
|
-
def each(options={}, &block)
|
83
|
-
options = default_options.merge(options)
|
84
|
-
case options[:in]
|
85
|
-
when :parallel then Runner::Parallel
|
86
|
-
when :sequence then Runner::Sequential
|
87
|
-
when :groups then Runner::Group
|
88
|
-
else
|
89
|
-
raise RuntimeError, "Don't know how to handle run style #{options[:in].inspect}"
|
90
|
-
end.new(hosts, &block).execute
|
91
|
-
end
|
92
|
-
|
93
|
-
private
|
94
|
-
|
95
|
-
attr_accessor :cooldown
|
96
|
-
|
97
|
-
def default_options
|
98
|
-
{ in: :parallel }
|
99
|
-
end
|
100
|
-
|
101
|
-
def resolve_hosts!
|
102
|
-
@hosts = @raw_hosts.collect { |rh| rh.is_a?(Host) ? rh : Host.new(rh) }.uniq
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module SSHKit
|
2
|
+
|
3
|
+
module Runner
|
4
|
+
|
5
|
+
class Sequential < Abstract
|
6
|
+
attr_writer :wait_interval
|
7
|
+
def execute
|
8
|
+
hosts.each do |host|
|
9
|
+
backend(host, &block).run
|
10
|
+
sleep wait_interval
|
11
|
+
end
|
12
|
+
end
|
13
|
+
private
|
14
|
+
def wait_interval
|
15
|
+
@wait_interval ||= 2
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/sshkit/version.rb
CHANGED
@@ -3,7 +3,7 @@ require 'helper'
|
|
3
3
|
|
4
4
|
module SSHKit
|
5
5
|
|
6
|
-
class
|
6
|
+
class TestCoordinator < UnitTest
|
7
7
|
|
8
8
|
def setup
|
9
9
|
@s = String.new
|
@@ -23,17 +23,17 @@ module SSHKit
|
|
23
23
|
def test_connection_manager_handles_a_single_argument
|
24
24
|
h = Host.new('1.example.com')
|
25
25
|
Host.expects(:new).with('1.example.com').once().returns(h)
|
26
|
-
|
26
|
+
Coordinator.new '1.example.com'
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_connection_manager_resolves_hosts
|
30
30
|
h = Host.new('n.example.com')
|
31
31
|
Host.expects(:new).times(3).returns(h)
|
32
|
-
|
32
|
+
Coordinator.new %w{1.example.com 2.example.com 3.example.com}
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_connection_manager_removes_duplicates_after_resolving_hosts
|
36
|
-
cm =
|
36
|
+
cm = Coordinator.new %w{user@1.example.com:22 user@1.example.com}
|
37
37
|
assert_equal ['user@1.example.com:22'], cm.hosts.map(&:to_s)
|
38
38
|
end
|
39
39
|
|
@@ -43,7 +43,7 @@ module SSHKit
|
|
43
43
|
end
|
44
44
|
String.new.tap do |str|
|
45
45
|
SSHKit.capture_output str do
|
46
|
-
|
46
|
+
Coordinator.new(%w{1.example.com}).each &spy
|
47
47
|
end
|
48
48
|
assert_equal "echo 1.example.com", str.strip
|
49
49
|
end
|
@@ -51,7 +51,7 @@ module SSHKit
|
|
51
51
|
|
52
52
|
def test_the_connection_manaager_runs_things_in_parallel_by_default
|
53
53
|
SSHKit.capture_output @s do
|
54
|
-
|
54
|
+
Coordinator.new(%w{1.example.com 2.example.com}).each &block_to_run
|
55
55
|
end
|
56
56
|
assert_equal 2, results.length
|
57
57
|
assert_equal *results.map(&:to_i)
|
@@ -59,7 +59,7 @@ module SSHKit
|
|
59
59
|
|
60
60
|
def test_the_connection_manager_can_run_things_in_sequence
|
61
61
|
SSHKit.capture_output @s do
|
62
|
-
|
62
|
+
Coordinator.new(%w{1.example.com 2.example.com}).each in: :sequence, &block_to_run
|
63
63
|
end
|
64
64
|
assert_equal 2, results.length
|
65
65
|
assert_operator results.first.to_i, :<, results.last.to_i
|
@@ -67,7 +67,7 @@ module SSHKit
|
|
67
67
|
|
68
68
|
def test_the_connection_manager_can_run_things_in_groups
|
69
69
|
SSHKit.capture_output @s do
|
70
|
-
|
70
|
+
Coordinator.new(%w{1.example.com 2.example.com 3.example.com
|
71
71
|
4.example.com 5.example.com 6.example.com}).each in: :groups, &block_to_run
|
72
72
|
end
|
73
73
|
assert_equal 6, results.length
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sshkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -245,16 +245,20 @@ files:
|
|
245
245
|
- lib/sshkit/backends/printer.rb
|
246
246
|
- lib/sshkit/command.rb
|
247
247
|
- lib/sshkit/configuration.rb
|
248
|
-
- lib/sshkit/
|
248
|
+
- lib/sshkit/coordinator.rb
|
249
249
|
- lib/sshkit/dsl.rb
|
250
250
|
- lib/sshkit/formatters/abstract.rb
|
251
251
|
- lib/sshkit/formatters/black_hole.rb
|
252
252
|
- lib/sshkit/formatters/dot.rb
|
253
253
|
- lib/sshkit/formatters/pretty.rb
|
254
254
|
- lib/sshkit/host.rb
|
255
|
+
- lib/sshkit/runners/abstract.rb
|
256
|
+
- lib/sshkit/runners/group.rb
|
257
|
+
- lib/sshkit/runners/parallel.rb
|
258
|
+
- lib/sshkit/runners/sequential.rb
|
255
259
|
- lib/sshkit/version.rb
|
256
260
|
- sshkit.gemspec
|
257
|
-
- test/functional/
|
261
|
+
- test/functional/test_coordinator.rb
|
258
262
|
- test/functional/test_ssh_server_comes_up_for_functional_tests.rb
|
259
263
|
- test/helper.rb
|
260
264
|
- test/integration/backends/test_netssh.rb
|
@@ -263,7 +267,7 @@ files:
|
|
263
267
|
- test/unit/core_ext/test_string.rb
|
264
268
|
- test/unit/test_command.rb
|
265
269
|
- test/unit/test_configuration.rb
|
266
|
-
- test/unit/
|
270
|
+
- test/unit/test_coordinator.rb
|
267
271
|
- test/unit/test_host.rb
|
268
272
|
homepage: http://wacku.github.com/sshkit
|
269
273
|
licenses: []
|
@@ -290,7 +294,7 @@ signing_key:
|
|
290
294
|
specification_version: 3
|
291
295
|
summary: SSHKit makes it easy to write structured, testable SSH commands in Ruby
|
292
296
|
test_files:
|
293
|
-
- test/functional/
|
297
|
+
- test/functional/test_coordinator.rb
|
294
298
|
- test/functional/test_ssh_server_comes_up_for_functional_tests.rb
|
295
299
|
- test/helper.rb
|
296
300
|
- test/integration/backends/test_netssh.rb
|
@@ -299,6 +303,6 @@ test_files:
|
|
299
303
|
- test/unit/core_ext/test_string.rb
|
300
304
|
- test/unit/test_command.rb
|
301
305
|
- test/unit/test_configuration.rb
|
302
|
-
- test/unit/
|
306
|
+
- test/unit/test_coordinator.rb
|
303
307
|
- test/unit/test_host.rb
|
304
308
|
has_rdoc:
|