Skip to content

Commit

Permalink
Add include_legacy_facts setting
Browse files Browse the repository at this point in the history
When set to false (the default for Puppet 8+), all legacy facts are
pruned before the catalog is compiled.
  • Loading branch information
alexjfisher committed Apr 27, 2023
1 parent f4c5c71 commit b2f1bb1
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 2 deletions.
1 change: 1 addition & 0 deletions lib/rspec-puppet.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def self.current_example
c.add_setting :fixture_hiera_configs, default: {}
c.add_setting :use_fixture_spec_hiera, default: false
c.add_setting :fallback_to_default_hiera, default: true
c.add_setting :include_legacy_facts, default: Gem::Version.new(Puppet::PUPPETVERSION) < Gem::Version.new('8.0.0')

c.instance_eval do
def trusted_server_facts
Expand Down
6 changes: 4 additions & 2 deletions lib/rspec-puppet/adapters.rb
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ def settings_map
%i[environmentpath environmentpath],
%i[hiera_config hiera_config],
%i[strict_variables strict_variables],
%i[manifest manifest]
%i[manifest manifest],
%i[include_legacy_facts include_legacy_facts]
)
end

Expand Down Expand Up @@ -270,7 +271,8 @@ def setup_puppet(example_group)
def settings_map
super.push(
%i[basemodulepath basemodulepath],
%i[vendormoduledir vendormoduledir]
%i[vendormoduledir vendormoduledir],
%i[include_legacy_facts include_legacy_facts]
)
end

Expand Down
130 changes: 130 additions & 0 deletions lib/rspec-puppet/legacy_facts.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
module RspecPuppet
# 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 [String] fact Fact name
def self.legacy_fact?(fact)
legacy_facts.include?(fact.to_sym) or fact.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
5 changes: 5 additions & 0 deletions lib/rspec-puppet/support.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
require 'rspec-puppet/adapters'
require 'rspec-puppet/raw_string'
require 'rspec-puppet/sensitive'
require 'rspec-puppet/legacy_facts'

module RSpec::Puppet
module Support
Expand Down Expand Up @@ -285,6 +286,10 @@ def facts_hash(node)
# Facter currently supports lower case facts. Bug FACT-777 has been submitted to support case sensitive
# facts.
result_facts.transform_keys(&:downcase)

# Prune legacy facts wherever they came from (rspec-puppet, rspec-puppet-facts, default_facts etc.)
result_facts.delete_if { |fact, _value| RspecPuppet::LegacyFacts.legacy_fact?(fact) } unless RSpec.configuration.include_legacy_facts
result_facts
end

def node_params_hash
Expand Down

0 comments on commit b2f1bb1

Please sign in to comment.