Skip to content

Commit

Permalink
Do not query for the exact facter version
Browse files Browse the repository at this point in the history
This assumes that no exact match can be found in most cases. This saves
a call to Facterdb. Some testing on puppet-nginx this reduced the time
for a dry run by about 1 to 2 seconds, from about ~11 to ~9 seconds.

Actual results will vary on the FacterDB. Note that a new Facter version
will trigger the bad code unless all operating systems are updated so
this is a very likely code path.

It also makes the easier to read.
  • Loading branch information
ekohl committed Nov 9, 2020
1 parent f39009f commit 5452fe9
Showing 1 changed file with 6 additions and 13 deletions.
19 changes: 6 additions & 13 deletions lib/rspec-puppet-facts.rb
Expand Up @@ -118,26 +118,19 @@ def on_supported_os_implementation(opts = {})
# facter data (see FacterDB 0.5.2 for Facter releases 3.8 and 3.9). In this situation we need to
# cycle through and downgrade Facter versions per platform type until we find matching Facter data.
filter.each do |filter_spec|
facter_version_filter = RspecPuppetFacts.facter_version_to_filter(facterversion)
db = FacterDB.get_facts(filter_spec.merge({ :facterversion => facter_version_filter }))
version = FacterDB.get_facts(filter_spec).map { |facts| Gem::Version.new(facts[:facterversion]) }.sort.reverse.detect { |v| v <= facterversion_obj }
next unless version
version = version.to_s

if db.empty?
unless version == facterversion
if RspecPuppetFacts.spec_facts_strict?
raise ArgumentError, "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, aborting"
end

version = FacterDB.get_facts(filter_spec).map { |facts| Gem::Version.new(facts[:facterversion]) }.sort.reverse.detect { |v| v <= facterversion_obj }

next unless version
version = version.to_s
facter_version_filter = "/\\A#{Regexp.escape(version)}/"

unless version == facterversion
RspecPuppetFacts.warning "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, using v#{version} instead"
end
RspecPuppetFacts.warning "No facts were found in the FacterDB for Facter v#{facterversion} on #{filter_spec}, using v#{version} instead"
end

filter_spec[:facterversion] = facter_version_filter
filter_spec[:facterversion] = "/\\A#{Regexp.escape(version)}/"
end

received_facts = FacterDB::get_facts(filter)
Expand Down

0 comments on commit 5452fe9

Please sign in to comment.