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 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