pd-blender 0.2 → 0.3
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.
- checksums.yaml +4 -4
- data/blender.gemspec +1 -0
- data/lib/blender/drivers/ssh_multi.rb +5 -10
- data/lib/blender/scheduler/dsl.rb +5 -1
- data/lib/blender/tasks/ssh.rb +10 -0
- data/lib/blender/version.rb +1 -1
- data/spec/blender/drivers/ssh_multi_spec.rb +17 -11
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66bca7b99c5bdc6aafb60b4cb78c73896624805d
|
4
|
+
data.tar.gz: 6b68caf3373bf8b783e1dba94a8d763928a5c637
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8531cd51967ca49ba82cff42c50c25adff603d5bc829c5ec47e490ea8665918366a7c5570aa2f9909f3b211d5159cdf28c8aa8e1f4b5c0a8c008fa3847a0ced
|
7
|
+
data.tar.gz: d81fafc0386a9829a03fd200ec2269e4a0c17cfa52050aabd57d7380361ca2a6af9d736cc5f34152ffc79cc09a0f581676d83056aee8f9a28bae153023c4b609
|
data/blender.gemspec
CHANGED
@@ -19,6 +19,7 @@ require 'net/ssh'
|
|
19
19
|
require 'blender/exceptions'
|
20
20
|
require 'blender/drivers/ssh'
|
21
21
|
require 'blender/drivers/ssh_exec'
|
22
|
+
require 'net/ssh/multi'
|
22
23
|
|
23
24
|
module Blender
|
24
25
|
module Driver
|
@@ -27,25 +28,19 @@ module Blender
|
|
27
28
|
def execute(tasks, hosts)
|
28
29
|
Log.debug("SSH execution tasks [#{tasks.size}]")
|
29
30
|
Log.debug("SSH on hosts [#{hosts.join("\n")}]")
|
30
|
-
session = create_session(hosts)
|
31
31
|
Array(tasks).each do |task|
|
32
|
+
session = create_session(hosts, task.metadata[:concurrency])
|
32
33
|
cmd = run_command(task.command, session)
|
33
34
|
if cmd.exitstatus != 0 and !task.metadata[:ignore_failure]
|
34
35
|
raise ExecutionFailed, cmd.stderr
|
35
36
|
end
|
37
|
+
session.loop
|
36
38
|
end
|
37
|
-
session.loop
|
38
|
-
end
|
39
|
-
|
40
|
-
def concurrency
|
41
|
-
@config[:concurrency]
|
42
39
|
end
|
43
40
|
|
44
41
|
private
|
45
42
|
|
46
|
-
def create_session(hosts)
|
47
|
-
user = @config[:user] || ENV['USER']
|
48
|
-
ssh_config = { password: @config[:password]}
|
43
|
+
def create_session(hosts, concurrency)
|
49
44
|
error_handler = lambda do |server|
|
50
45
|
if config[:ignore_on_failure]
|
51
46
|
$!.backtrace.each { |l| Blender::Log.debug(l) }
|
@@ -58,7 +53,7 @@ module Blender
|
|
58
53
|
on_error: error_handler
|
59
54
|
)
|
60
55
|
hosts.each do |h|
|
61
|
-
s.use(user + '@' + h)
|
56
|
+
s.use(user + '@' + h, config)
|
62
57
|
end
|
63
58
|
s
|
64
59
|
end
|
@@ -116,7 +116,11 @@ module Blender
|
|
116
116
|
def ssh_task(name, &block)
|
117
117
|
task = build_task(name, :ssh)
|
118
118
|
task.instance_eval(&block) if block_given?
|
119
|
-
|
119
|
+
if task.metadata[:concurrency] == 1
|
120
|
+
append_task(:ssh, task)
|
121
|
+
else
|
122
|
+
append_task(:ssh_multi, task)
|
123
|
+
end
|
120
124
|
end
|
121
125
|
|
122
126
|
def scp_upload(name, &block)
|
data/lib/blender/tasks/ssh.rb
CHANGED
@@ -20,6 +20,16 @@ require 'blender/tasks/ssh'
|
|
20
20
|
module Blender
|
21
21
|
module Task
|
22
22
|
class Ssh < Blender::Task::Base
|
23
|
+
def concurrency(n)
|
24
|
+
@metadata[:concurrency] = n
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_metadata
|
28
|
+
{
|
29
|
+
ignore_failure: false,
|
30
|
+
concurrency: 1
|
31
|
+
}
|
32
|
+
end
|
23
33
|
end
|
24
34
|
end
|
25
35
|
end
|
data/lib/blender/version.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Blender::Driver::SshMulti do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
)
|
12
|
-
|
13
|
-
|
14
|
-
|
4
|
+
it '#DSL' do
|
5
|
+
hosts = %w(a b c d)
|
6
|
+
channel = double('channel').as_null_object
|
7
|
+
session = double('session', open_channel: channel, loop: true)
|
8
|
+
hosts.each do |h|
|
9
|
+
expect(session).to receive(:use).with('foo@'+h, password: 'bar')
|
10
|
+
end
|
11
|
+
expect(Net::SSH::Multi).to receive(:start).and_return(session)
|
12
|
+
sched = Blender::Scheduler.new('test')
|
13
|
+
sched.config(:ssh_multi, user: 'foo', password: 'bar')
|
14
|
+
sched.strategy :per_task
|
15
|
+
sched.ssh_task 'run' do
|
16
|
+
execute 'sudo /usr/local/sbin/chef-client-cron'
|
17
|
+
members(hosts)
|
18
|
+
concurrency 2
|
19
|
+
end
|
20
|
+
sched.run
|
15
21
|
end
|
16
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pd-blender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ranjib Dey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: net-ssh-multi
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: net-scp
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|