Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Add option to suppress legacy facts #143

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/rspec-puppet-facts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
require 'facter'
require 'facterdb'
require 'json'
require 'rspec-puppet-facts/legacy_facts'

# The purpose of this module is to simplify the Puppet
# module's RSpec tests by looping through all supported
Expand Down Expand Up @@ -171,6 +172,7 @@ def on_supported_os_implementation(opts = {})
os = "#{facts[:operatingsystem].downcase}-#{operatingsystemmajrelease}-#{facts[:hardwaremodel]}"
next unless os.start_with? RspecPuppetFacts.spec_facts_os_filter if RspecPuppetFacts.spec_facts_os_filter
facts.merge! RspecPuppetFacts.common_facts
facts.delete_if { |fact, _value| RspecPuppetFacts::LegacyFacts.legacy_fact?(fact) } if RSpec.configuration.prune_legacy_facts
os_facts_hash[os] = RspecPuppetFacts.with_custom_facts(os, facts)
end

Expand Down
130 changes: 130 additions & 0 deletions lib/rspec-puppet-facts/legacy_facts.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
module RspecPuppetFacts
# This module contains lists of all legacy facts
module LegacyFacts
# Used to determine if a fact is a legacy fact or not
#
# @return [Boolean] Is the fact a legacy fact
# @param [Symbol] fact Fact name
def self.legacy_fact?(fact)
legacy_facts.include?(fact) or fact.to_s.match(Regexp.union(legacy_fact_regexes))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps we can store the union in a cache somewhere.

In Ruby it's common to use || and I think this could use match? since you don't need the actual result.

Suggested change
legacy_facts.include?(fact) or fact.to_s.match(Regexp.union(legacy_fact_regexes))
legacy_facts.include?(fact) || fact.to_s.match?(Regexp.union(legacy_fact_regexes))

end

# @api private
def self.legacy_fact_regexes
[
/\Ablockdevice_(?<devicename>.+)_model\Z/,
/\Ablockdevice_(?<devicename>.+)_size\Z/,
/\Ablockdevice_(?<devicename>.+)_vendor\Z/,
/\Aipaddress6_(?<interface>.+)\Z/,
/\Aipaddress_(?<interface>.+)\Z/,
/\Amacaddress_(?<interface>.+)\Z/,
/\Amtu_(?<interface>.+)\Z/,
/\Anetmask6_(?<interface>.+)\Z/,
/\Anetmask_(?<interface>.+)\Z/,
/\Anetwork6_(?<interface>.+)\Z/,
/\Anetwork_(?<interface>.+)\Z/,
/\Ascope6_(?<interface>.+)\Z/,
/\Aldom_(?<name>.+)\Z/,
/\Aprocessor\d+\Z/,
/\Asp_(?<name>.+)\Z/,
/\Assh(?<algorithm>.+)key\Z/,
/\Asshfp_(?<algorithm>.+)\Z/,
/\Azone_(?<name>.+)_brand\Z/,
/\Azone_(?<name>.+)_id\Z/,
/\Azone_(?<name>.+)_iptype\Z/,
/\Azone_(?<name>.+)_name\Z/,
/\Azone_(?<name>.+)_path\Z/,
/\Azone_(?<name>.+)_status\Z/,
/\Azone_(?<name>.+)_uuid\Z/
]
end

# @api private
def self.legacy_facts
%i[
architecture
augeasversion
blockdevices
bios_release_date
bios_vendor
bios_version
boardassettag
boardmanufacturer
boardproductname
boardserialnumber
chassisassettag
chassistype
dhcp_servers
domain
fqdn
gid
hardwareisa
hardwaremodel
hostname
id
interfaces
ipaddress
ipaddress6
lsbdistcodename
lsbdistdescription
lsbdistid
lsbdistrelease
lsbmajdistrelease
lsbminordistrelease
lsbrelease
macaddress
macosx_buildversion
macosx_productname
macosx_productversion
macosx_productversion_major
macosx_productversion_minor
macosx_productversion_patch
manufacturer
memoryfree
memoryfree_mb
memorysize
memorysize_mb
netmask
netmask6
network
network6
operatingsystem
operatingsystemmajrelease
operatingsystemrelease
osfamily
physicalprocessorcount
processorcount
productname
rubyplatform
rubysitedir
rubyversion
scope6
selinux
selinux_config_mode
selinux_config_policy
selinux_current_mode
selinux_enforced
selinux_policyversion
serialnumber
swapencrypted
swapfree
swapfree_mb
swapsize
swapsize_mb
windows_edition_id
windows_installation_type
windows_product_name
windows_release_id
system32
uptime
uptime_days
uptime_hours
uptime_seconds
uuid
xendomains
zonename
zones
]
end
end
end