pd-blender 0.2 → 0.3

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: 5d2a8ce92f7b3b1e822aef383d7b8877be17b289
4
- data.tar.gz: d6e102dfd4f9d92ef2c2a6e619f490597846bc05
3
+ metadata.gz: 66bca7b99c5bdc6aafb60b4cb78c73896624805d
4
+ data.tar.gz: 6b68caf3373bf8b783e1dba94a8d763928a5c637
5
5
  SHA512:
6
- metadata.gz: 540d5d79754dc7edaca79ad4882a73e2f16badd2dd2dcc3a2cdff5da055d722993b783536c4a9bb9b0f8b5b0098ef56adf351e5437e39234915353f98dd0b83b
7
- data.tar.gz: 0a8af7f7576af424751136e9f4aee4709e3c9376e58f43ef4eb649d5d2ddd332f3b6526e513a60367ad69e388365f1e8bce2a75c35ce98e7969bc80f0d8392f6
6
+ metadata.gz: a8531cd51967ca49ba82cff42c50c25adff603d5bc829c5ec47e490ea8665918366a7c5570aa2f9909f3b211d5159cdf28c8aa8e1f4b5c0a8c008fa3847a0ced
7
+ data.tar.gz: d81fafc0386a9829a03fd200ec2269e4a0c17cfa52050aabd57d7380361ca2a6af9d736cc5f34152ffc79cc09a0f581676d83056aee8f9a28bae153023c4b609
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency 'mixlib-shellout'
25
25
  spec.add_dependency 'mixlib-log'
26
26
  spec.add_dependency 'net-ssh'
27
+ spec.add_dependency 'net-ssh-multi'
27
28
  spec.add_dependency 'net-scp'
28
29
  spec.add_dependency 'rufus-scheduler'
29
30
 
@@ -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
- append_task(:ssh, task)
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)
@@ -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
@@ -16,5 +16,5 @@
16
16
  # limitations under the License.
17
17
 
18
18
  module Blender
19
- VERSION = '0.2'
19
+ VERSION = '0.3'
20
20
  end
@@ -1,16 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Blender::Driver::SshMulti do
4
- let(:driver) {described_class.new(events: Object.new, concurrency: 10)}
5
- let(:job) do
6
- Blender::Job.new(
7
- 101,
8
- nil,
9
- %w{h1 h2 h3 h4 h5},
10
- Array.new(1){|n| create_task("t#{n}")}
11
- )
12
- end
13
- it '#concurrency' do
14
- expect(driver.concurrency).to eq(10)
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.2'
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-05 00:00:00.000000000 Z
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