Facter release notes

These are the new features, resolved issues, and deprecations in this version of Facter.

Facter 4.7.1

Released June 2024 and shipped with Puppet 8.7.0.


  • Facter now accepts new versions of the ffi Ruby gem. An update was implemented to ensure that Facter will remain compatible with new releases of ffi.

Facter 4.7.0

Released April 2024 and shipped with Puppet 8.6.0.


  • Support for OpenBSD. Added support for OpenBSD. This addition contributed by community member buzzdeee. FACT-3163

Resolved issues

  • Re-add Ruby 2.5 support. Added support for Ruby 2.5.
  • Use of cloud provider facts can result in nil dereferences. Patched the two cloud providers' access to metadata to avoid nil dereferences.
  • Evaluate confine block in case-insensitive way. Previously, when a user provided a confine block, Facter would downcase the value when evaluating it. This change retains the existing behavior of evaluating a confine block with a downcased fact value, while adding evaluation with the raw fact value to ensure expected behavior.

Facter 4.6.1

Released March 2024 and shipped with Puppet 8.5.1.

Resolved issues

  • Regression in os.windows facts. In Facter 4.6.0, the value parameter was misnamed, causing incorrect values to be returned. This has been fixed. FACT-3455

Facter 4.6.0

Released February 2024 and shipped with Puppet 8.5.0.

No release notes.

Facter 4.5.2

Released January 2023 and shipped with Puppet 8.4.0.


  • Add ssh {384,521} ecdsa facts. Fixed a regression in Facter 4 that prevented it from reporting on 384 and 521-bit ecdsa ssh keys.

Resolved issues

  • Reported memory usage is wrong on FreeBSD. Corrected memory usage facts on FreeBSD. Community contribution from user smortex.
  • Size calculations for AIX block device and partitions. Facter on AIX incorrectly reported the total size of disks and overcounted the partition size when logical volumes were mirrored to multiple physical volumes. This has been fixed. Community contribution from user loopway.
  • uname resolver does not handle empty results. Fixed an issue where Facter would error when uname did not return valid output.
  • Facter on Solaris 10 does not close socket descriptors, causing puppet run failures. Fixed an issue where Facter would error when many network interfaces were present on a Solaris machine.
  • Not enough os.distro.release information for Amazon Linux. The os.distro.release.full and os.release.full facts now return all version components such as "2023.1.20230912".
  • Cloud fact does not resolve on Amazon Linux 2023. Facter now correctly resolves the cloud fact to aws and virtual fact to kvm when running on Nitro hypervisors.

Facter 4.5.1

Released November 2023 and shipped with Puppet 8.3.1.

Resolved issues

  • Non-hash external fact data in YAML or JSON files causes fatal exceptions in Facter 4. Fixed an issue where an external fact of an invalid data type caused a fatal exception in Facter. FACT-3433
  • New fact error after upgrading v2021.7.5. Fixed an issue where DMI facts caused an error in Solaris non-global zones. FACT-3435

Facter 4.4.3

Released October 2023 and shipped individually.

Resolved issues

  • Required gem not included as runtime dependency A runtime dependency (sys-filesystem) was mistakenly removed in Facter 4.4.2, which caused some filesystem-related facts to cause an error when running Facter as a gem. This dependency has been re-added to Facter. FACT-3423

Facter 4.4.2

Released August 2023 and shipped with Puppet 8.2.0.

Resolved issues

  • Facter 4 reports os.name as "SLES_SAP" on Suse Linux for SAP instead of just "SUSE". This along with FACT-3422 fixed how Facter reads the /etc/os-release file. os.name and os.distro facts work on SLES SAP operating system now. FACT-3162
  • Facter fails on mountpoints fact on Solaris 10 with non-global zones which have NFS mounts. Fixed an issue with the Solaris mountpoint resolver. FACT-3187
  • Error on on Solaris non-global zone after upgrading to PE2021.7.2. Facter guards against nil when determining the primary interface for the networking fact. FACT-3188
  • Don't rescue NoMethodError. When rescuing LoadError and NameErrors, Facter logs a descriptive message at an error level so debugging Facter will be easier and error messages will not be hidden in the debug level. FACT-3207

Facter 4.4.1

Released June 2023 and shipped with Puppet 8.1.0.

Resolved issues

  • Facter on Solaris 10 leak file descriptors, causing Puppet run failures. Facter no longer leaks file descriptors when attempting to resolve network interfaces. FACT-3196
  • Facts with regular expression matching characters in the name of the fact cause Facter 4 to crash. Previously, regex metacharacters were not escaped when parsing names. The fix for FACT-3178 also fixed this issue. FACT-3199
  • Facter trying to resolve augeas version on Windows. Facter no longer tries to resolve the augeas fact on Windows since augeas packages and gems are not shipped for any Windows platforms for Puppet agent packages. FACT-3197
  • facter -p --no-external-facts is unusable. Facter no longer raises when run with the -p and --no-external-facts option. Previously, this occurred because Facter thought the --external-dir option (which cannot be used with --no-external-facts) was also passed in.
  • Facter mixes up Oracle Linux and Red Hat. os.distro.description and os.distro.id facts were previously misreporting Oracle Linux as Red Hat Linux, fixed now. FACT-3180
  • Facter ldom.domainrole.impl fails on Solaris 11, SPARC. Now, when Facter searches for a fact that matches the user query, regex metacharacters, like dots (.), are escaped. Previously, metacharacters were not escaped which resulted in a regex that compared fact names to the user query to resolve and return the wrong fact. FACT-3178
  • Networking facts on AIX incomplete if network device is in down state. On AIX, if the network was in down state, Facter errored out. Now Facter correctly resolves the network information. FACT-3167
  • Facter fails on the /etc/os-release that contains the #. /etc/os-release files can have comments (#) without raising an error. Comments are allowed in these files according to: https://www.man7.org/linux/man-pages/man5/os-release.5.html. FACT-3151
  • gce.project.attributes.sshKeys is a string instead of an array. Facter 4 now correctly returns the value of the gce.project.attributes.sshKeys fact as an array of strings as it did in Facter 3. FACT-3136
  • Processor ISA fact on Linux reports wrong data if the string contains a period. Facter no longer modifies uname -p output when reporting the processors.isa fact on Linux platforms. FACT-3089
  • Facter 4 fails to guard against recursion. Facter 3 guarded against recursive calls to facter inside external facts; this has now been added to Facter 4. If an external fact calls out to facter without specifying the no-external-facts, Facter warns the user and skips falling into calling facter recursively. FACT-2772

Facter 4.4.0

Released April 2023 and shipped with Puppet 8.0.0.


  • Switch to require_relative. Facter now uses require_relative instead of require. FACT-3184

Facter 4.3.1

Released April 2023 and shipped with Puppet 7.24.0.

No release notes.

Facter 4.3.0

Released February 2023 and shipped with Puppet 7.23.0.

We would like to thank the following Puppet community members for their contributions to this release: smortex.

Resolved issues

  • facter.resolve returns a subclass of Hash, not Hash. The facter.resolve API in Facter 4 now returns a Hash instead of a subclass of Hash, as it did in Facter 3. FACT-3179
  • Facter resolves facts multiple times when providers are confined based on facts, especially on Windows. Facter 4 previously did not use any cache information when looking up a fact or value Facter method. This now uses cache information when using the fact or value methods. FACT-3170
  • Facter incorrectly filters IPv6 link-local unicast addresses. Facter now excludes IPv6 link-local unicast addresses (fe80::/10) correctly. Fix contributed by smortex. FACT-3171

Deprecations and removals

  • Drop Ruby 2.3-2.4 support. Dropped support for Ruby 2.3 and 2.4, which went end-of-life in 2019 and 2020 respectively. FACT-3147

Facter 4.2.13

Released October 2022 and shipped with Puppet 7.20.0.

Resolved issues

  • Networking facts generating conversion error: ERROR Facter::InternalFactManager - U+FFFF to CP850 in conversion from UTF-16LE to UTF-8 to CP850. Fixed a bug that prevented Facter from resolving its domain fact on Windows due to invalid strings in unrelated registry values. FACT-3145
  • ec2_metadata is missing on FreeBSD. Restored ec2_metadata fact to Facter 4 on FreeBSD. Contirbuted by Puppet community member raybellis. FACT-3137
  • ipaddress_* and ipaddress6_* facts missing on FreeBSD. Restored the ipaddress legacy facts on FreeBSD. Contributed by Puppet community member smortex. FACT-3130
  • custom-dir is silently skipped if it is not absolute path. Fixed a regression in Facter 4 that prevented the user from specifying a custom directory using a relative path on the command line. Contributed by Puppet community member smortex. FACT-3078

Facter 4.2.12

Released September 2022 and shipped with Puppet 7.19.0.


  • Support for ERB changes introduced in Ruby 3.1. Facter now supports ERB changes introduced in Ruby 3.1. FACT-3102

Resolved issues

  • YAML anchors no longer function properly in Facter 4. Enabled YAML anchors in Facter 4, a feature that was available previously in Facter 3. Additionally, testing was added to ensure Facter continues to behave as expected when handling YAML anchors. FACT-3135
  • Facter 4 Does Not Support Built-In Windows Commands. Facter 3.x special-cased echo for Windows to allow it to run using the built-in for a Windows shell; Facter 4 upgrade neglected to include this special case. This fix adds that special case back in. FACT-3133

Facter 4.2.11

Released August 2022 and shipped with Puppet 7.18.0.


  • Extend cloud.provider fact to Google Compute Engine The cloud.provider fact now returns gce when running on Google Compute Engine. Contributed by Puppet community member natemccurdy. FACT-1557

Resolved issues

  • Facter does not parse UTF-8 encoded facts Fixed an issue where, in the C locale, Facter failed to parse YAML-based external facts when the contents were UTF-8 encoded. FACT-3113
  • Failed to get networking information: "\xE5" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to UTF-16LE Fixed an issue where Facter failed to collect networking information on some Windows hosts due to encoding issues. FACT-3109

Facter 4.2.10

Released May 2022 and shipped with Puppet 7.17.0.

We would like to thank the following Puppet community members for their contributions to this release: kajinamit, nbarrientos.

Resolved issues

  • Facter fails when using cached facts in a read-only filesystem. Facter no longer errors when using cached facts from a read-only filesystem. FACT-3116
  • virt-what-1.22-1 changes virtual=kvm to virtual=redhat. Resolved issue parsing output from virt-what on a KVM system. FACT-3115
  • Windows 11 shows up as Windows 10 21H2. Corrected os.release facts for Windows 11. FACT-3090

Facter 4.2.9

This version was never released.

Facter 4.2.8

Released March 2022 and shipped with Puppet 7.15.0.

Resolved issues

  • fact disks cannot get serial of disks. Updated Facter to use the full path for lsblk, so fact disks can now show serial of disks. FACT-3100

Facter 4.2.7

Released January 2022 and shipped with Puppet 7.14.0.

No release notes.

Facter 4.2.6

Released December 2021 and shipped with Puppet 7.12.0.

We would like to thank the following Puppet community members for their contributions to this release: johanfleury and smortex.

New features

  • Add serial number and WWID to disk fact. Added disks serial number and WWID to the disks fact. FACT-3083

Resolved issues

  • DEBUG Facter::Resolvers::Aix::Mountpoints - Could not resolve mountpoints when running facter mountpoints --debug on AIX. Fixes Facter AIX mountpoint resolver to add correct data to the mountpoint fact when using NFS mountpoints. FACT-3094
  • os.name value changed for OS VirtuozzoLinux. Restored Facter3's value of os.name for VirtuozzoLinux. FACT-3087
  • Facter fails if there are invalid characters in dmidecode. Replaced invalid UTF characters in dmi.rb. FACT-3081
  • Caching not working for some custom facts. When using Facter.value(:fact_name) inside a custom fact, caching did not work properly, as it cached the value from the inner fact instead of the actual fact. Now it correctly caches the required fact, by skipping writing the cachefile when it is not required. FACT-3079
  • Inconsistent values coming from facter-ng output. Fixed Facter 4 output for yaml external facts when the fact value is false. FACT-3077
  • --log-level none throws exception. Before this release, Facter 4 did not accept none as a log level even though it was supported as per --help output. This fix aligns the behaviour with Facter 3 by accepting none as a log level. FACT-3074
  • Facter timezone utf8 problem. This release adds a new timezone resolver specific to Windows which checks the system codepage and uses it for encoding the timezone fact to avoid unwanted characters on non-English OS. FACT-3068

Facter 4.2.5

Released October 2021 and shipped with Puppet 7.12.0.

We would like to thank the following Puppet community members for their contributions to this release: johanfleury and smortex.

New features

  • DisplayVersion fact for Windows. This release adds a new fact called os.windows.display_version. This fact reads the version from the DisplayVersion registry key. FACT-3058
  • Option to show HTTP debug logs. This release adds the --http_debug option to the Facter CLI. This option displays the HTTP debug logs. FACT-3047

Resolved issues

  • Mismatched processor frequencies found on AIX. Previously, Facter added all the processors found in the ODM query, without checking their status. Now if the status is not available, Facter skips the processor. FACT-2955
  • Facter API does not resolve custom facts that match legacy facts. Previously, custom facts with names that partially matched core legacy facts were resolved as expected in the Facter CLI, but not when using the API. In these cases, the Facter::FactManager did not resolve custom facts if core or external facts had results. This release adds a new method to check if the user query matches the name of resolved facts, and then decides whether to resolve the custom facts. FACT-3067
  • Inconsistencies with the Facter::Core::Execution.execute timeout. This release fixes inconsistencies with the Facter::Core::Execution.execute arguments between Facter 3 and Facter 4. The .execute method now accepts a timeout option, and warns when unsupported options are passed in. Contributed by Puppet community members johanfleury and smortex. FACT-3073
  • Windows 2022 detected as Windows 2019. The os.release.full and os.release.major facts now correctly detect Windows 2022 and output 2022, instead of 2019. FACT-3075

Facter 4.2.4

Released September 2021 and shipped with Puppet 7.11.0.

Resolved issues

  • AIX reporting "could not resolve mountpoints" error. This release fixes a faulty regex on AIX that skipped lines with a node substring and resulted in the "could not resolve mountpoints" error. FACT-3060
  • AIX reporting "odd number of arguments for hash". This release fixes a faulty regex on AIX that reported the “odd number of arguments” error when resolving mountpoint facts. FACT-3059
  • Facter Ruby API binding fails to resolve facts from environment variables. This release fixes an issue where environment facts were not downcased before being added to the fact collection. Note that names are always downcased internally and are case-insensitive. FACT-3057
  • Facter unable to get processor speed on macOS 11 arm64. This release fixes an issue with sysctl that resulted in Facter reporting invalid values for the processors fact. FACT-3063

Facter 4.2.3

Released August 2021 and shipped with Puppet 7.10.0.


  • Reduced logs emitted. This release reduces the number of redundant logs emitted by Facter. FACT-3001

Resolved issues

  • The pacman package provider fails in Facter >= 4.1.1. This release fixes the operatingsystem fact on Archlinux and Manjarolinux. FACT-3043

Facter 4.2.2

Released July 2021 and shipped with Puppet 8.7.0.

Resolved issues

  • Incorrect license for lib/facter/custom_facts/core/legacy_facter.rb?. The top level LICENSE file has been changed from MIT to Apache 2.0. FACT-3053

Facter 4.2.1

Released June 2021 and shipped with Puppet 7.8.0.


  • Add flags to the help menu. This release adds the following short flags to the help menu: -v [--version], -p [--puppet] and -h [--help]. FACT-3044
  • Facter retrieves Ec2 metadata using IMDSv2. This release improves the way Facter retrieves ec2_metadata by using IMDSv2 instead of IMDSv1. In this release, Facter automatically uses IMDSv2 to retrieve an AWS token to add to the X-aws-ec2-metadata-token header. FACT-3042

Resolved issues

  • Facter 4 CLI did not accept concatenated short flags. Facter 3 allowed short flags to be combined, such as `-jp` or -jd. In Facter 4, you must declare short flags separately, such as -j -p or -j -d. FACT-3046
  • Ec2 resolver failed because of nil tokens. Facter returned failing Rspec tests if a token was nil before sending an HTTP request. The HTTP request gathers any required data to resolve the Ec2 fact. To solve this issue, Facter now no longer sends HTTP requests if a token is nil.FACT-3050
  • Incorrect use of ffi_lib on Windows. This release fixes how ntdll.dll was loaded on Windows. FACT-3048

Facter 4.2.0

Released June 2021 and shipped with Puppet 7.7.0.

We would like to thank the following Puppet community members for their contributions to this release: ccaviness, b4ldr, ekohl, and lollipopman.

New features

  • New os.macosx.version.patch fact. The os.macosx.version.minor fact has been split into an additional os.macosx.version.patch fact (on macOS 11+). Contributed by Puppet community member ccaviness. FACT-3031
  • New flags key. This release adds a flags key to the networking.interfaces.*.bindings6 fact, which parses the lower 8-bit encoded flags from /proc/net/if_inet6. Note that the higher bit flags (managetempaddr, noprefixroute, mcautojoin, stableprivacy) are not shown in the fact output. Contributed by Puppet community member b4ldr. FACT-2907


  • Ruby 3 added to the test matrix. This release adds support for Ruby 3 and updates the test matrix. Contributed by Puppet community member ekohl. FACT-3029
  • Facter gem on Ruby 3. You can now install the Facter gem on Ruby 3. FACT-3027
  • Improved fact matching and filtering. This release improves the mechanism of fact filtering and matching by unifying the functionality. FACT-3006

Resolved issues

  • Invalid rubysitedir value when Ruby is compiled without sitedir. This release fixes an issue where Facter reported an invalid value for the ruby.sitedir fact — if Ruby was compiled without the sitedir option. FACT-3041
  • Undefined method each_line for nil:NilClass. This release fixes a bug where multi-line commands executed through the Facter::Util::Resolution API were not expanded correctly. FACT-3040
  • Facter executes which lsblk and which blkid for each partition. This release fixes an issue where Facter executed which lsblk and which blkid for each partition. Now these commands are executed once per Facter run, improving performance and log readability. FACT-3035
  • Facter returns TypeError on non-existent indexes. Previously, when accessing array values by indexes, Facter raised a TypeError if a non-existent index was searched. This is now fixed and Facter no longer errors. FACT-3030
  • Facter 4 calls deprecated xen-toolstack script when resolving the xen fact. Previously, Facter called the xen-toolstack script when resolving the xen fact. This script is deprecated, and now Facter only calls it if multiple xen stacks are installed. Contributed by Puppet community member lollipopman. FACT-3023
  • Mountpoint file error. Previously, when a mountpoint file could not be read, or was missing, Facter threw an error, without specifying which mountpoint file had failed. The error is now silent, allowing Facter to continue resolving facts. You can still see the error when running Facter with debug logging enabled. FACT-2928

Facter 4.1.1

Released April 2021 and shipped with Puppet 7.6.1.

We would like to thank the following Puppet community members for their contributions to this release: ananace.


  • The processors fact includes sockets and threads details. This release adds the cores per socket and threads per core information to the processors fact. FACT-2992

Resolved issues

  • Facter 4 user query overwritten when Facter is called outside of setcode in a custom fact file. This release fixes an issue where custom facts failed to resolve because nested Facter calls overwrote user queries. FACT-3025
  • Facter.fact returns an object when the queried fact does not exist. When resolving facts that do not exist, Facter now returns nil, instead of an object of the ResolvedFact type with the value nil. FACT-3024

  • InfiniBand MAC addresses not resolved. Facter can now handle InfiniBand when reporting MAC addresses. Contributed by Puppet community member ananace. FACT-3021

Facter 4.1.0

Released April 2021.

Resolved issues

  • Auto promoting dotted facts to structured facts is incompatible. This release reverts the way Facter 4 treats dots in fact names to the same behaviour as Facter 3. This means that by default, any dot in a custom or external fact name is considered part of the fact name and not a delimiter for structured facts. This fix also adds the force-dot-resolution global setting — which you can set to re-enable the Facter 4 behavior, converting dotted facts to structured facts. FACT-3004

  • Facter cannot autoload the provider from stdlib inside puppetserver REPL shell. Previously, Facter failed to execute the first external command when running under JRuby. This issue only appeared when running puppetserver from source — packaged versions were not affected. This is now fixed. FACT-2999

  • Facter breaks when querying custom facts. Previously, Facter showed misleading values or errors when querying for non-existent facts via CLI and Facter.value. This is now fixed. FACT-2998

  • Domain facts cannot be resolved on travis without the FFI gem. This release fixes an issue that prevented FQDN facts resolving in situations where FFI was not installed. FACT-2997

  • Performance regression networking facts in Facter 4.x. This release fixes an issue with primary interface detection where the default route discarded packages. FACT-2996

  • The selinux fact is not properly detected by Facter 4. Facter 4 now takes the same approach as Facter 3 — checking for both the mounted selinux filesystem and the configuration file. If either are absent, Facter does not fill in the selinux fact. FACT-2994

  • Facter 4.0.52 does not return the fqdn fact. The Linux networking resolver now loads FFI if previous tries of getting the host information have failed. FACT-2989

  • Facter takes 20+ seconds on Windows due to Azure metadata query. Previously, the cloud fact could take over 20 seconds to resolve on Windows because Ruby was not respecting the HTTP connection timeout. Now the fact is only resolved on HyperV machines and a new implementation in the Facter HTTP client avoids long timeouts. FACT-2988

  • Facter 4 outputs hypervisor facts differently on Amazon 7. This release changes the value of hypervisor facts from a boolean to a string, matching the behavior of Facter 3. FACT-3007

  • Facter 4 outputs hypervisors.zone.id facts differently on Solaris. This release changes the value of the hypervisors.zone.id fact from a String to an Integer, matching the behavior of Facter 3. FACT-2987

  • Facter 4 outputs mountpoints facts differently on macOS. This release fixes differences in the mountpoints.options facts on macOS, matching the behavior of Facter 3. FACT-2984

  • Facter 4 outputs mountpoints facts differently on Solaris. This release fixes differences in the mountpoints fact on Solaris, matching the behavior of Facter 3. FACT-2982

  • Facter 4 outputs ldom facts differently on Solaris SPARC. Facter 4 reported boolean values as strings for Solaris LDOM facts. This is now fixed and the values are represented as boolean. FACT-2983

  • Facter 4 outputs uptime facts differently on Windows. This release fixes differences in the uptime fact on Windows, matching the behavior of Facter 3. FACT-2966

  • Facter 4 outputs the processors.speed fact differently on AIX. This release fixes differences in the processors.speed fact on AIX, matching the behavior of Facter 3. FACT-2965

  • Facter 4 outputs MB facts differently to Facter 3. Facter no longer rounds values for MB facts, for example memorysize_mb. FACT-2967

  • Facter 4 outputs virtual facts differently on Amazon 6. The virtual fact is now detected as xen instead of xenhvm on Amazon Linux 6. FACT-2986

  • Facter 4 outputs the hypervisors fact differently on Amazon 7. This release fixes differences in the hypervisors fact on Amazon 7, matching the behavior of Facter 3. FACT-3007

  • Loopback IPv6 IP is not returned correctly. This release fixes the IPv6 address fact on Solaris. FACT-2981

  • Facter ensures core facts are resolved before loading custom facts. This release updates the Facter.value API to resolve facts in a similar way to Facter 3 — loading the fact_name.rb from the configured custom directory, and then loading all core facts, external facts, environmental facts, and custom facts. FACT-2956

  • VLAN interfaces are not properly discovered. VLAN interfaces with a dot in the name were not correctly displayed in the networking fact. This is now fixed and the default networking resolver recognizes interfaces with a dot in the name. FACT-2946

  • Inconsistent handling of date types in custom facts. This release adds Date and Time as supported values for custom facts. FACT-2930

Facter 4.0.52

Released March 2021 and shipped with Puppet 7.5.0.

We would like to thank the following Puppet community members for their contributions to this release: smokris..

New features

  • Azure metadata fact. This release adds the az_metadata fact which provides information on Azure virtual machine instances. For more information, see the Microsoft Azure instance metadata documentation. FACT-1383

  • Azure identification fact. This release adds the cloud.provider fact for Azure identification on Linux and Windows platforms. FACT-1847


  • Dependency to lsb packages are missing The os.distro facts are now resolved without the lsb_release on the following platforms: RHEL, Amazon, SLES. The information is read from the system in the same way. Note that the os.distro.specification fact, which refers to lsb version, is available only if the lsb_release has been installed. FACT-2931

  • Linux networking resolver split into four classes. The Linux networking resolver was too large and has now been split into four classes. The classes are: toSocketParser (gets data from the Ruby Socket library), DHCP (gets all DHCP related data), RoutingTable (gets interface data from the ip route show command, if something can not be retrieved with SocketParser) and the Linux resolver (combines the data from the other classes). FACT-2915

Resolved issues

  • Permission denied error when reading Facter cache during PE 2021 upgrade. Facter 4 no longer loads facter.conf from the default location when running on jRuby. FACT-2959

  • Facter 4 reports lsbmajdistrelease on Ubuntu differently from Facter 3. Previously, the lsbmajdistrelease fact from Facter 4 was not showing the correct value on Ubuntu. This is now fixed and aligns the fact's output with Facter 3. FACT-2952

  • Root of structured core facts cannot be overridden by a custom fact. Previously, the root of structured core facts could not be overridden by a custom fact — because the top-level fact did not exist. This release updates the QueryParser logic to return the root fact — if present in the loaded facts list — and allows redefinition of core facts. FACT-2950

  • Facter tries to load an incompatible libsocket.so on SmartOS. Previously, Facter tried to load an incompatible (32-bit) libsocket.so from a hardcoded path using ffi and failed to retrieve networking facts. Now, the library name is preferred and networking facts can be retrieved on SmartOS. Contributed by Puppet community member smokris. FACT-2947

  • Puppet Server creates another certname during upgrade. Previously, when upgrading Puppet 6 to Puppet 7 on Linux, Facter failed to retrieve the domain using JRuby because the Socket.getaddrinfo calls failed. Now, if any of the Socket method calls fail, Facter can retrieve the information using FFI methods. FACT-2944

  • The puppet facts show command logs error when stdlib is installed. This release fixes an issue where Facter.value did not return the fact value for a legacy fact. This happened when calling a legacy fact from a custom fact or calling other Facter API methods before calling Facter.value. FACT-2937

  • Facter 4 pe-bolt-server raises access denied error if cache is enabled. When Facter is unable to delete the cache files, it now logs a warning message instead of returning error. FACT-2961

  • Facter 4 does not accept the same time units as Facter 3. This release makes the following ttls time units available in Facter 4: ns, nanos, nanoseconds, us, micros, microseconds, ms, milis, milliseconds, s, m, h, d. Note that singular time units are also accepted, for example, mili and nano.FACT-2962
  • The Facter.conf file does not accept singular ttls units. Previously, Facter failed if the ttls unit in the facter.conf file was a plural ("days" and "hours"). Facter now accepts a singular noun ("day" and "hour").

Facter 4.0.51

Released February 2021.

This release includes a resolved issue and minor maintenance changes. For the latest features, see the release notes for Facter 4.0.50.

Resolved issues

  • The facter -p command is now supported. The facter -p command did not work in versions Facter 4.0.50 and earlier. FACT-2818

Facter 4.0.50

Released February 2021 and shipped with Puppet 7.4.0.


  • Networking fact improvements for AIX. The AIX networking resolver now uses FFI to detect networking interfaces and IPs. Previously, VLANs and secondary IPs were not displayed. FACT-2878

  • Improved performance for blocking legacy facts. This release improves the performance of blocking legacy facts by implementing a different mechanism. The new mechanism does not allow legacy groups to be overriden by a group with the same name in fact-groups. If you add a legacy group in fact-groups, it is ignored. The new implementation is faster for use cases involving multiple custom facts that depend on core facts. FACT-2917

Resolved issues

  • Facter::Core::Execution does not set status variables in Facter 4. This release reimplements Open3.popen3 to use Process.wait instead of Process.detach. FACT-2934

  • Facter error message — no implicit conversion of nil into String — when determining processor speed on Linux. Facter now handles processor speed values where log10 is not set (3, 6, 9, 12). FACT-2927

  • Facter fails "closed" if the facter.conf file is invalid. Previously, Facter failed when an invalid config file was provided. Facter now logs a warning message stating that the parsing of the config file failed and continues retrieving facts with the default options. FACT-2924

  • Domain on Windows does not prioritise registry. Facter now prioritises information from registry on Windows, instead of network interface domain names. FACT-2923

  • LinuxMint Tessa not recognized. Previously, the os.release fact was retrieved from the /etc/os-release file, but Facter 3 read other release files based on operating system (OS). Now Facter retrieves os.release from the specific release file for every OS. FACT-2921

Facter 4.0.49

Released January 2021 and shipped with Puppet Platform 7.3.0.

Resolved issues

  • Aggregate facts are broken. Previously, Facter broke when trying to add a debug message for the location where aggregate facts are resolved from. This only happened with aggregate facts that returned an array or hash without having an aggregate block call. FACT-2919

Facter 4.0.48

Released January 2021.


  • Rewritten tests for Linux networking resolver. This release refactors the Linux networking resolver, including fixing the unit tests and adding new ones. FACT-2901

Resolved issues

  • Facter 4.0.x does not return the domain correctly when set in the registry. Previously, Facter did not retrieve the domain correctly on Linux and resulted in a faulty FQDN facts. Facter also failed to retrieve domain facts when Windows did not expose the host's primary DNS suffix. This is now fixed. FACT-2882

  • Legacy group blocks processors core fact. Blocking legacy facts no longer blocks processors core fact. FACT-2911

  • Facter Hocon output format. The --hocon option now functions as intended. FACT-2909

  • Legacy blockdevice vendor and size facts not resolving. This release fixes blockdevice_*_size facts not resolving on AIX, and blockdevice_*_vendor facts not resolving on Linux and Solaris. FACT-2903

  • Facter detects OS family without checking or translating the information. Previously, Facter detected the OS family by reading /etc/os-release without checking or translating the information. This is now fixed and Facter translates the id_like field from /etc/os-release to Facter known families. FACT-2902

Facter 4.0.47

Released December 2020 and shipped with Puppet 7.1.0.

New features

  • Added scope6 fact for per binding. This release adds the scope6 fact under every ipv6 address from the interface.bindings6 fact. FACT-2843
  • Support for AWS IMDSv2. This release updates the EC2 fact to use IMDSv2 to authenticate. To use v2, set the AWS_IMDSv2 environment variable to true. Note that the token is cached for a maximum of 100 seconds.

Resolved issues

  • Facter 4 does not resolve hostname facts. Previously, Facter failed when Socket.getaddrinfo was called, which prevented retrieval of FQDN information. This is now fixed. FACT-2894
  • Gem-based Facter 4 does not log the facts in debug mode. This release adds log messages for resolved fact values. FACT-2883

  • Gem-based Facter 4 does not return the complete FQDN. Previously, domain was not retrieved correctly on Linux based systems and resulted in a faulty FQDN fact. This release uses Ruby Socket methods to retrieve domain correctly. FACT-2882

  • Puppet 7 treats non existent facts differently to Puppet 6. This release excludes custom facts with nil value from to_user_output, values and to_hash Ruby Facter API's. The custom facts with nil value are still returned by value, fact and [] API's. FACT-2881

  • Facts failing on machines with VLANs. With this release, dots in legacy fact names are ignored. They are not used as an indicator of a fact hierarchy because legacy facts cannot compose and have a flat (key - value) structure. FACT-2870

  • Facter 4 changes is_virtual fact from boolean to string. This release fixes a regression that caused the is_virtual to be a string instead of a boolean. FACT-2869

  • External facts are loaded when using puppet lookup for a different node. The load_external API method was missing in Facter 4. This is now fixed. FACT-2859

  • Facter fails when the interface name is not UTF-8. Previously, a pointer used to indicate networking information was being released by the GC too early and the memory was overridden, resulting in inconsistent data. The fix extends the scope of the pointer so that the memory it points to does not release prematurely. FACT-2856

  • Failure when a structured custom fact has the wrong layout. This release adds a log message when custom fact names are incompatible and a fact hierarchy cannot be created. FACT-2851

  • Cannot retrieve local facts error. This release fixes an error thrown on systems with a low file descriptor limit. FACT-2898
  • Dig method fails on Puppet $facts. The Facter 4 API method to_hash returned a different data type to Facter 3. This release ensures the to_hash method returns a Ruby Hash instance. FACT-2897
  • Facter fails when trying to retrieve ssh facts. Facter now skips reading ssh keys it does not recognise. FACT-2896
  • Missing primary interface check on all platforms. Similar to Facter 3, this release adds a final check that detects the primary interface from the IP. Localhost IPs are excluded. FACT-2892
  • Facter 4.0.46 breaks virtual flag. Facter now checks whether the /proc/lve/list file is a regular file, instead of checking if it is executable. FACT-2891
  • Facter 4.0.46 does not load external fact files in lexicographical order. This is now fixed. FACT-2874
  • Secondary interfaces are not reported. Networking.interfaces now display secondary interfaces (with or without the label) and the VLANs.MAC address is correctly displayed for bonded interfaces. If DHCP is not found, use the dhcpcd -U <interface_name> command to search. FACT-2872

Deprecations and removals

Update rake task for generating facts and tests. The scripts used to generate facts were outdated and had never been used. This release removes them. FACT-2298

Facter 4.0.46

Released November 2020 and shipped with Puppet 7.0.0.

New features

  • Operating system hierarchy. Facter 4 introduces a hierarchy for operating systems. The hierarchy allows you to load facts from the child and all parents. If the same fact is present in a child and a parent, the one from the child takes precedence. FACT-2555
  • Rake task for mapping fact name and fact class. To improve the visibility of which facts are loaded for an operating system, Facter 4 has a rake task that prints all facts and the class that resolved that fact. FACT-2557
  • Blocklist. Facter 4 allows you to block facts at a granular level — you can block any fact from the fact hierarchy, for both groups of facts and individual facts. FACT-1976
  • Block legacy facts. Legacy facts are a subtype of core facts and you can now block them, like any core fact, using the blocklist from facter.conf. FACT-2259
  • Block custom facts. Facter 4 allows you to block custom facts. You can add the fact to the blocklist from facter.conf. FACT-2718
  • Block external facts. Facter 4 allows you to block external facts. Blocking external facts is different from blocking core and custom facts — you need to specify the name of the file from which external facts are loaded to blocklist in facter.conf. FACT-2717
  • The puppet facts show command. The facter -p and facter --puppet commands have been replaced with puppet facts show. FACT-2719
  • Group for legacy facts. The legacy group contains all the legacy facts. You can find it in lib/facter/config.rb and can block it in facter.conf. FACT-2296
  • The fact-groups group. You can define your own custom groups in facter.conf using the new fact-groups group. The blocklist and ttls groups from facter.conf accept predefined groups, custom groups or fact names. You must use the file name when using external facts. FACT-2331
  • Define fact groups for blocking or caching. You can define new fact groups in facter.conf, and use the group to block or cache facts. FACT-2515
  • External fact caching. To cache external facts, use the filename of the external fact when setting the ttls in facter.conf. FACT-2619


  • CLI compatible with Facter 3. Facter 4 reimplemented the Facter 3 command line interface using thor gem. FACT-1955
  • Loaded facts based on operating system hierarchy. To improve performance, Facter 4 only loads the files and facts that are needed for the operating system it is running on. FACT-2093
  • Log class name in log messages. Improved logging in Facter 4 prints the class from which the log was generated. FACT-2036
  • Restored --timing option to native facter. The restored --timing and -t arguments allow you to see how much time it took each fact to resolve. FACT-1380
  • (Experimental). Reverted parallel resolution of facts. To improve performance, facts are resolved in parallel on JRuby. FACT-2819
  • Timeout on resolution. You can now specify the timeout attribute in custom fact options. FACT-2643
  • Caching core facts . To cache core facts, add the fact group to facter.conf ttls. Fact values are stored and retrieved on future runs. After the ttls expires, the fact is refreshed. FACT-2486

Resolved issues

  • Fix Ruby 2.7 warning on Facter 4. Facter 4 now supports Ruby 2.7. FACT-2649
  • Facter does not support timeout for shell calls. External commands have a timeout, and if they do not complete in the given time, they are forced stop. The default timeout is 300 seconds. You can now specify a timeout using the limit attribute in Facter::Core::Execution.execute. FACT-2793
  • Fact names are treated as regex and can lead to caching of unwanted facts. The regex used to detect facts has been improved to distinguish between fact groups and legacy facts. FACT-2787
  • Facter uptime shows host uptime inside docker container. Previously, the kernel only reported the host uptime inside a Docker container. You can now see the container uptime. FACT-2737
  • A fact present in two groups does not get cached if the second groups has a ttls. If a fact is present in two groups, and both of them have a ttls defined in facter.conf, the lowest ttls is takes precedence. FACT-2786