Skip to content

Commit f543fe9

Browse files
committed
Run multiple node diffs in parallel
1 parent 1064e8d commit f543fe9

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

lib/octocatalog-diff/cli.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
require_relative 'version'
1212

1313
require 'logger'
14+
require 'parallel'
1415
require 'socket'
1516

1617
module OctocatalogDiff
@@ -117,8 +118,12 @@ def self.cli(argv = ARGV, logger = Logger.new(STDERR), opts = {})
117118

118119
# Compile catalogs and do catalog-diff
119120
node_set = options.delete(:node)
121+
node_set = [node_set] unless node_set.is_a?(Array)
122+
catalog_diff = nil
120123
all_diffs = []
121-
node_set.each do |node|
124+
125+
# run multiple node diffs in parallel
126+
Parallel.map(node_set, in_threads: 4) do |node|
122127
options[:node] = node
123128
catalog_diff = OctocatalogDiff::API::V1.catalog_diff(options.merge(logger: logger))
124129
diffs = catalog_diff.diffs
@@ -133,7 +138,13 @@ def self.cli(argv = ARGV, logger = Logger.new(STDERR), opts = {})
133138

134139
# Return the resulting diff object if requested (generally for testing) or otherwise return exit code
135140
return catalog_diff if opts[:INTEGRATION]
136-
all_diffs.any? ? EXITCODE_SUCCESS_WITH_DIFFS : EXITCODE_SUCCESS_NO_DIFFS
141+
142+
all_diffs.each do |diff|
143+
next unless diff.any?
144+
return EXITCODE_SUCCESS_WITH_DIFFS
145+
end
146+
147+
EXITCODE_SUCCESS_NO_DIFFS
137148
end
138149

139150
# Parse command line options with 'optparse'. Returns a hash with the parsed arguments.

lib/octocatalog-diff/cli/options/hostname.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99

1010
def parse(parser, options)
1111
parser.on('--hostname HOSTNAME', '-n', 'Use PuppetDB facts from last run of hostname') do |hostname|
12-
options[:node] = hostname.split(',')
12+
options[:node] = if hostname.include?(',')
13+
hostname.split(',')
14+
else
15+
hostname
16+
end
1317
end
1418
end
1519
end

octocatalog-diff.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ EOF
2727
s.add_runtime_dependency 'diffy', '>= 3.1.0'
2828
s.add_runtime_dependency 'httparty', '>= 0.11.0'
2929
s.add_runtime_dependency 'hashdiff', '>= 0.3.0'
30+
s.add_runtime_dependency 'parallel', '>= 1.12.0'
3031
s.add_runtime_dependency 'rugged', '>= 0.25.0b2'
3132

3233
s.add_development_dependency 'rspec', '~> 3.4.0'

spec/octocatalog-diff/tests/cli/options/hostname_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
describe '#opt_hostname' do
77
it 'should set options[:node] when hostname is set with short form' do
88
result = run_optparse(['-n', 'octonode.rspec'])
9-
expect(result.fetch(:node, 'key-not-defined')).to eq(%w[octonode.rspec])
9+
expect(result.fetch(:node, 'key-not-defined')).to eq('octonode.rspec')
1010
end
1111

1212
it 'should set multiple nodes when passed a series of nodes' do

0 commit comments

Comments
 (0)