facter 4.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- data/.github/actions/presuite.rb +109 -0
- data/.github/workflows/acceptance_tests.yml +67 -0
- data/.github/workflows/checks.yaml +71 -0
- data/.github/workflows/unit_tests.yaml +41 -0
- data/.gitignore +57 -0
- data/.jrubyrc +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +165 -0
- data/.rubocop_todo.yml +236 -0
- data/.rubycritic.yml +4 -0
- data/CHANGELOG.md +175 -0
- data/CODEOWNERS +2 -0
- data/CONTRIBUTING.md +93 -0
- data/Gemfile +12 -0
- data/LICENSE +21 -0
- data/README.md +50 -0
- data/Rakefile +71 -0
- data/VERSION +1 -0
- data/agent/facter-ng.gemspec +48 -0
- data/agent/lib/facter-ng.rb +7 -0
- data/bin/facter +6 -0
- data/check.sh +12 -0
- data/config/config.rb +6 -0
- data/custom_facts/my_custom_fact.rb +9 -0
- data/custom_facts/my_custom_os_fact.rb +8 -0
- data/docs/diagrams/facter_user_interaction.png +0 -0
- data/external_facts/my_external_fact.txt +1 -0
- data/fact_groups.conf +169 -0
- data/facter.conf +25 -0
- data/facter.gemspec +50 -0
- data/lib/custom_facts/core/aggregate.rb +206 -0
- data/lib/custom_facts/core/directed_graph.rb +47 -0
- data/lib/custom_facts/core/execution.rb +129 -0
- data/lib/custom_facts/core/execution/base.rb +100 -0
- data/lib/custom_facts/core/execution/posix.rb +55 -0
- data/lib/custom_facts/core/execution/windows.rb +70 -0
- data/lib/custom_facts/core/file_loader.rb +30 -0
- data/lib/custom_facts/core/legacy_facter.rb +208 -0
- data/lib/custom_facts/core/logging.rb +203 -0
- data/lib/custom_facts/core/resolvable.rb +103 -0
- data/lib/custom_facts/core/suitable.rb +110 -0
- data/lib/custom_facts/util/collection.rb +187 -0
- data/lib/custom_facts/util/composite_loader.rb +18 -0
- data/lib/custom_facts/util/config.rb +96 -0
- data/lib/custom_facts/util/confine.rb +70 -0
- data/lib/custom_facts/util/directory_loader.rb +85 -0
- data/lib/custom_facts/util/fact.rb +217 -0
- data/lib/custom_facts/util/loader.rb +155 -0
- data/lib/custom_facts/util/normalization.rb +95 -0
- data/lib/custom_facts/util/nothing_loader.rb +12 -0
- data/lib/custom_facts/util/parser.rb +193 -0
- data/lib/custom_facts/util/resolution.rb +166 -0
- data/lib/custom_facts/util/unix_root.rb +11 -0
- data/lib/custom_facts/util/values.rb +109 -0
- data/lib/custom_facts/util/windows_root.rb +11 -0
- data/lib/custom_facts/version.rb +85 -0
- data/lib/facter.rb +377 -0
- data/lib/facts/aix/augeas/version.rb +19 -0
- data/lib/facts/aix/facterversion.rb +15 -0
- data/lib/facts/aix/filesystems.rb +14 -0
- data/lib/facts/aix/hypervisors/lpar.rb +20 -0
- data/lib/facts/aix/hypervisors/wpar.rb +19 -0
- data/lib/facts/aix/identity/gid.rb +16 -0
- data/lib/facts/aix/identity/group.rb +18 -0
- data/lib/facts/aix/identity/privileged.rb +16 -0
- data/lib/facts/aix/identity/uid.rb +16 -0
- data/lib/facts/aix/identity/user.rb +17 -0
- data/lib/facts/aix/kernel.rb +15 -0
- data/lib/facts/aix/kernelmajversion.rb +16 -0
- data/lib/facts/aix/kernelrelease.rb +15 -0
- data/lib/facts/aix/kernelversion.rb +16 -0
- data/lib/facts/aix/load_averages.rb +14 -0
- data/lib/facts/aix/mountpoints.rb +15 -0
- data/lib/facts/aix/networking/domain.rb +17 -0
- data/lib/facts/aix/networking/fqdn.rb +17 -0
- data/lib/facts/aix/networking/hostname.rb +17 -0
- data/lib/facts/aix/networking/ip.rb +18 -0
- data/lib/facts/aix/networking/primary.rb +17 -0
- data/lib/facts/aix/nim_type.rb +15 -0
- data/lib/facts/aix/os/architecture.rb +18 -0
- data/lib/facts/aix/os/family.rb +18 -0
- data/lib/facts/aix/os/hardware.rb +18 -0
- data/lib/facts/aix/os/name.rb +18 -0
- data/lib/facts/aix/os/release.rb +21 -0
- data/lib/facts/aix/partitions.rb +15 -0
- data/lib/facts/aix/path.rb +14 -0
- data/lib/facts/aix/processors/count.rb +17 -0
- data/lib/facts/aix/processors/isa.rb +18 -0
- data/lib/facts/aix/processors/models.rb +16 -0
- data/lib/facts/aix/processors/speed.rb +17 -0
- data/lib/facts/aix/puppet_version.rb +15 -0
- data/lib/facts/aix/ruby/platform.rb +17 -0
- data/lib/facts/aix/ruby/sitedir.rb +17 -0
- data/lib/facts/aix/ruby/version.rb +17 -0
- data/lib/facts/aix/ssh.rb +34 -0
- data/lib/facts/aix/system_uptime/days.rb +17 -0
- data/lib/facts/aix/system_uptime/hours.rb +17 -0
- data/lib/facts/aix/system_uptime/seconds.rb +17 -0
- data/lib/facts/aix/system_uptime/uptime.rb +17 -0
- data/lib/facts/aix/timezone.rb +14 -0
- data/lib/facts/bsd/bsd_example_fact.rb +14 -0
- data/lib/facts/bsd/kernelmajversion.rb +16 -0
- data/lib/facts/bsd/kernelversion.rb +14 -0
- data/lib/facts/bsd/load_averages.rb +14 -0
- data/lib/facts/bsd/os/family.rb +18 -0
- data/lib/facts/debian/architecture.rb +20 -0
- data/lib/facts/debian/lsbdistcodename.rb +16 -0
- data/lib/facts/debian/lsbdistdescription.rb +16 -0
- data/lib/facts/debian/lsbdistid.rb +16 -0
- data/lib/facts/debian/os/distro/codename.rb +30 -0
- data/lib/facts/debian/os/distro/description.rb +19 -0
- data/lib/facts/debian/os/distro/id.rb +19 -0
- data/lib/facts/debian/os/distro/release.rb +33 -0
- data/lib/facts/debian/os/release.rb +36 -0
- data/lib/facts/freebsd/os/release.rb +43 -0
- data/lib/facts/linux/augeas/version.rb +19 -0
- data/lib/facts/linux/dhcp_servers.rb +27 -0
- data/lib/facts/linux/disks.rb +15 -0
- data/lib/facts/linux/dmi/bios/release_date.rb +19 -0
- data/lib/facts/linux/dmi/bios/vendor.rb +19 -0
- data/lib/facts/linux/dmi/bios/version.rb +19 -0
- data/lib/facts/linux/dmi/board/manufacturer.rb +19 -0
- data/lib/facts/linux/dmi/board/product.rb +19 -0
- data/lib/facts/linux/dmi/board/serial_number.rb +19 -0
- data/lib/facts/linux/dmi/chassis/asset_tag.rb +19 -0
- data/lib/facts/linux/dmi/chassis/type.rb +19 -0
- data/lib/facts/linux/dmi/manufacturer.rb +17 -0
- data/lib/facts/linux/dmi/product/name.rb +19 -0
- data/lib/facts/linux/dmi/product/serial_number.rb +19 -0
- data/lib/facts/linux/dmi/product/uuid.rb +19 -0
- data/lib/facts/linux/facterversion.rb +15 -0
- data/lib/facts/linux/filesystems.rb +14 -0
- data/lib/facts/linux/fips_enabled.rb +14 -0
- data/lib/facts/linux/hypervisors.rb +18 -0
- data/lib/facts/linux/identity/gid.rb +16 -0
- data/lib/facts/linux/identity/group.rb +18 -0
- data/lib/facts/linux/identity/privileged.rb +16 -0
- data/lib/facts/linux/identity/uid.rb +16 -0
- data/lib/facts/linux/identity/user.rb +17 -0
- data/lib/facts/linux/interfaces.rb +16 -0
- data/lib/facts/linux/ipaddress6_interfaces.rb +20 -0
- data/lib/facts/linux/ipaddress_interfaces.rb +20 -0
- data/lib/facts/linux/kernel.rb +15 -0
- data/lib/facts/linux/kernelmajversion.rb +24 -0
- data/lib/facts/linux/kernelrelease.rb +14 -0
- data/lib/facts/linux/kernelversion.rb +15 -0
- data/lib/facts/linux/load_averages.rb +14 -0
- data/lib/facts/linux/lsbdistrelease.rb +23 -0
- data/lib/facts/linux/macaddress_interfaces.rb +20 -0
- data/lib/facts/linux/memory/swap/available.rb +20 -0
- data/lib/facts/linux/memory/swap/available_bytes.rb +21 -0
- data/lib/facts/linux/memory/swap/capacity.rb +18 -0
- data/lib/facts/linux/memory/swap/total.rb +20 -0
- data/lib/facts/linux/memory/swap/total_bytes.rb +20 -0
- data/lib/facts/linux/memory/swap/used.rb +19 -0
- data/lib/facts/linux/memory/swap/used_bytes.rb +18 -0
- data/lib/facts/linux/memory/system/available.rb +21 -0
- data/lib/facts/linux/memory/system/available_bytes.rb +21 -0
- data/lib/facts/linux/memory/system/capacity.rb +18 -0
- data/lib/facts/linux/memory/system/total.rb +20 -0
- data/lib/facts/linux/memory/system/total_bytes.rb +20 -0
- data/lib/facts/linux/memory/system/used.rb +19 -0
- data/lib/facts/linux/memory/system/used_bytes.rb +18 -0
- data/lib/facts/linux/mountpoints.rb +21 -0
- data/lib/facts/linux/mtu_interfaces.rb +20 -0
- data/lib/facts/linux/netmask6_interfaces.rb +20 -0
- data/lib/facts/linux/netmask_interfaces.rb +20 -0
- data/lib/facts/linux/network6_interfaces.rb +20 -0
- data/lib/facts/linux/network_interfaces.rb +20 -0
- data/lib/facts/linux/networking/dhcp.rb +20 -0
- data/lib/facts/linux/networking/domain.rb +17 -0
- data/lib/facts/linux/networking/fqdn.rb +17 -0
- data/lib/facts/linux/networking/hostname.rb +17 -0
- data/lib/facts/linux/networking/interfaces.rb +16 -0
- data/lib/facts/linux/networking/ip.rb +21 -0
- data/lib/facts/linux/networking/ip6.rb +21 -0
- data/lib/facts/linux/networking/mac.rb +21 -0
- data/lib/facts/linux/networking/mtu.rb +20 -0
- data/lib/facts/linux/networking/netmask.rb +21 -0
- data/lib/facts/linux/networking/netmask6.rb +21 -0
- data/lib/facts/linux/networking/network.rb +21 -0
- data/lib/facts/linux/networking/network6.rb +21 -0
- data/lib/facts/linux/networking/primary.rb +17 -0
- data/lib/facts/linux/networking/scope6.rb +20 -0
- data/lib/facts/linux/os/architecture.rb +20 -0
- data/lib/facts/linux/os/distro/codename.rb +21 -0
- data/lib/facts/linux/os/distro/description.rb +21 -0
- data/lib/facts/linux/os/distro/id.rb +21 -0
- data/lib/facts/linux/os/distro/release.rb +31 -0
- data/lib/facts/linux/os/distro/specification.rb +21 -0
- data/lib/facts/linux/os/family.rb +20 -0
- data/lib/facts/linux/os/hardware.rb +18 -0
- data/lib/facts/linux/os/name.rb +18 -0
- data/lib/facts/linux/os/release.rb +20 -0
- data/lib/facts/linux/os/selinux/config_mode.rb +21 -0
- data/lib/facts/linux/os/selinux/config_policy.rb +21 -0
- data/lib/facts/linux/os/selinux/current_mode.rb +21 -0
- data/lib/facts/linux/os/selinux/enabled.rb +21 -0
- data/lib/facts/linux/os/selinux/enforced.rb +21 -0
- data/lib/facts/linux/os/selinux/policy_version.rb +21 -0
- data/lib/facts/linux/partitions.rb +26 -0
- data/lib/facts/linux/path.rb +15 -0
- data/lib/facts/linux/processor.rb +20 -0
- data/lib/facts/linux/processors/count.rb +17 -0
- data/lib/facts/linux/processors/isa.rb +26 -0
- data/lib/facts/linux/processors/models.rb +16 -0
- data/lib/facts/linux/processors/physicalcount.rb +17 -0
- data/lib/facts/linux/puppet_version.rb +15 -0
- data/lib/facts/linux/ruby/platform.rb +18 -0
- data/lib/facts/linux/ruby/sitedir.rb +18 -0
- data/lib/facts/linux/ruby/version.rb +18 -0
- data/lib/facts/linux/scope6_interfaces.rb +26 -0
- data/lib/facts/linux/ssh.rb +26 -0
- data/lib/facts/linux/sshalgorithmkey.rb +17 -0
- data/lib/facts/linux/sshfp_algorithm.rb +20 -0
- data/lib/facts/linux/system_uptime/days.rb +18 -0
- data/lib/facts/linux/system_uptime/hours.rb +18 -0
- data/lib/facts/linux/system_uptime/seconds.rb +18 -0
- data/lib/facts/linux/system_uptime/uptime.rb +18 -0
- data/lib/facts/linux/timezone.rb +14 -0
- data/lib/facts/linux/virtual.rb +23 -0
- data/lib/facts/macosx/augeas/version.rb +19 -0
- data/lib/facts/macosx/dmi/product/name.rb +19 -0
- data/lib/facts/macosx/facterversion.rb +15 -0
- data/lib/facts/macosx/filesystems.rb +14 -0
- data/lib/facts/macosx/identity/gid.rb +16 -0
- data/lib/facts/macosx/identity/group.rb +18 -0
- data/lib/facts/macosx/identity/privileged.rb +16 -0
- data/lib/facts/macosx/identity/uid.rb +16 -0
- data/lib/facts/macosx/identity/user.rb +17 -0
- data/lib/facts/macosx/interfaces.rb +15 -0
- data/lib/facts/macosx/is_virtual.rb +30 -0
- data/lib/facts/macosx/kernel.rb +14 -0
- data/lib/facts/macosx/kernelmajversion.rb +15 -0
- data/lib/facts/macosx/kernelrelease.rb +14 -0
- data/lib/facts/macosx/kernelversion.rb +14 -0
- data/lib/facts/macosx/load_averages.rb +14 -0
- data/lib/facts/macosx/memory/swap/available.rb +21 -0
- data/lib/facts/macosx/memory/swap/available_bytes.rb +20 -0
- data/lib/facts/macosx/memory/swap/capacity.rb +18 -0
- data/lib/facts/macosx/memory/swap/encrypted.rb +19 -0
- data/lib/facts/macosx/memory/swap/total.rb +21 -0
- data/lib/facts/macosx/memory/swap/total_bytes.rb +20 -0
- data/lib/facts/macosx/memory/swap/used.rb +20 -0
- data/lib/facts/macosx/memory/swap/used_bytes.rb +18 -0
- data/lib/facts/macosx/memory/system/available.rb +21 -0
- data/lib/facts/macosx/memory/system/available_bytes.rb +20 -0
- data/lib/facts/macosx/memory/system/capacity.rb +18 -0
- data/lib/facts/macosx/memory/system/total.rb +21 -0
- data/lib/facts/macosx/memory/system/total_bytes.rb +20 -0
- data/lib/facts/macosx/memory/system/used.rb +20 -0
- data/lib/facts/macosx/memory/system/used_bytes.rb +18 -0
- data/lib/facts/macosx/mountpoints.rb +16 -0
- data/lib/facts/macosx/networking/domain.rb +17 -0
- data/lib/facts/macosx/networking/fqdn.rb +17 -0
- data/lib/facts/macosx/networking/hostname.rb +17 -0
- data/lib/facts/macosx/networking/ip.rb +18 -0
- data/lib/facts/macosx/networking/mac.rb +18 -0
- data/lib/facts/macosx/os/architecture.rb +17 -0
- data/lib/facts/macosx/os/family.rb +18 -0
- data/lib/facts/macosx/os/hardware.rb +17 -0
- data/lib/facts/macosx/os/macosx/build.rb +19 -0
- data/lib/facts/macosx/os/macosx/product.rb +19 -0
- data/lib/facts/macosx/os/macosx/version.rb +25 -0
- data/lib/facts/macosx/os/name.rb +18 -0
- data/lib/facts/macosx/os/release.rb +26 -0
- data/lib/facts/macosx/path.rb +15 -0
- data/lib/facts/macosx/processors/count.rb +17 -0
- data/lib/facts/macosx/processors/isa.rb +17 -0
- data/lib/facts/macosx/processors/models.rb +21 -0
- data/lib/facts/macosx/processors/physicalcount.rb +17 -0
- data/lib/facts/macosx/processors/speed.rb +17 -0
- data/lib/facts/macosx/puppet_version.rb +15 -0
- data/lib/facts/macosx/ruby/platform.rb +17 -0
- data/lib/facts/macosx/ruby/sitedir.rb +17 -0
- data/lib/facts/macosx/ruby/version.rb +18 -0
- data/lib/facts/macosx/ssh.rb +26 -0
- data/lib/facts/macosx/sshalgorithmkey.rb +17 -0
- data/lib/facts/macosx/sshfp_algorithm.rb +20 -0
- data/lib/facts/macosx/system_profiler/boot_mode.rb +17 -0
- data/lib/facts/macosx/system_profiler/boot_rom_version.rb +17 -0
- data/lib/facts/macosx/system_profiler/boot_volume.rb +17 -0
- data/lib/facts/macosx/system_profiler/computer_name.rb +17 -0
- data/lib/facts/macosx/system_profiler/cores.rb +17 -0
- data/lib/facts/macosx/system_profiler/hardware_uuid.rb +17 -0
- data/lib/facts/macosx/system_profiler/kernel_version.rb +17 -0
- data/lib/facts/macosx/system_profiler/l2_cache_per_core.rb +17 -0
- data/lib/facts/macosx/system_profiler/l3_cache.rb +17 -0
- data/lib/facts/macosx/system_profiler/memory.rb +17 -0
- data/lib/facts/macosx/system_profiler/model_identifier.rb +17 -0
- data/lib/facts/macosx/system_profiler/model_name.rb +17 -0
- data/lib/facts/macosx/system_profiler/processor_name.rb +17 -0
- data/lib/facts/macosx/system_profiler/processor_speed.rb +17 -0
- data/lib/facts/macosx/system_profiler/processors.rb +17 -0
- data/lib/facts/macosx/system_profiler/secure_virtual_memory.rb +17 -0
- data/lib/facts/macosx/system_profiler/serial_number.rb +17 -0
- data/lib/facts/macosx/system_profiler/smc_version.rb +17 -0
- data/lib/facts/macosx/system_profiler/system_version.rb +17 -0
- data/lib/facts/macosx/system_profiler/uptime.rb +17 -0
- data/lib/facts/macosx/system_profiler/username.rb +17 -0
- data/lib/facts/macosx/system_uptime/days.rb +17 -0
- data/lib/facts/macosx/system_uptime/hours.rb +17 -0
- data/lib/facts/macosx/system_uptime/seconds.rb +17 -0
- data/lib/facts/macosx/system_uptime/uptime.rb +17 -0
- data/lib/facts/macosx/timezone.rb +14 -0
- data/lib/facts/rhel/os/distro/codename.rb +21 -0
- data/lib/facts/rhel/os/distro/description.rb +21 -0
- data/lib/facts/rhel/os/distro/id.rb +21 -0
- data/lib/facts/rhel/os/distro/release.rb +31 -0
- data/lib/facts/rhel/os/family.rb +16 -0
- data/lib/facts/rhel/os/name.rb +19 -0
- data/lib/facts/rhel/os/release.rb +36 -0
- data/lib/facts/sles/os/distro/codename.rb +21 -0
- data/lib/facts/sles/os/distro/description.rb +21 -0
- data/lib/facts/sles/os/distro/id.rb +21 -0
- data/lib/facts/sles/os/distro/release.rb +31 -0
- data/lib/facts/sles/os/family.rb +16 -0
- data/lib/facts/sles/os/release.rb +29 -0
- data/lib/facts/solaris/augeas/version.rb +19 -0
- data/lib/facts/solaris/facterversion.rb +14 -0
- data/lib/facts/solaris/filesystems.rb +14 -0
- data/lib/facts/solaris/identity/gid.rb +16 -0
- data/lib/facts/solaris/identity/group.rb +18 -0
- data/lib/facts/solaris/identity/privileged.rb +16 -0
- data/lib/facts/solaris/identity/uid.rb +16 -0
- data/lib/facts/solaris/identity/user.rb +17 -0
- data/lib/facts/solaris/kernel.rb +14 -0
- data/lib/facts/solaris/kernelmajversion.rb +16 -0
- data/lib/facts/solaris/kernelrelease.rb +14 -0
- data/lib/facts/solaris/kernelversion.rb +14 -0
- data/lib/facts/solaris/mountpoints.rb +21 -0
- data/lib/facts/solaris/networking/domain.rb +17 -0
- data/lib/facts/solaris/networking/fqdn.rb +17 -0
- data/lib/facts/solaris/networking/hostname.rb +17 -0
- data/lib/facts/solaris/networking/ip.rb +18 -0
- data/lib/facts/solaris/os/architecture.rb +18 -0
- data/lib/facts/solaris/os/family.rb +16 -0
- data/lib/facts/solaris/os/hardware.rb +18 -0
- data/lib/facts/solaris/os/name.rb +19 -0
- data/lib/facts/solaris/os/release.rb +22 -0
- data/lib/facts/solaris/path.rb +14 -0
- data/lib/facts/solaris/processors/count.rb +17 -0
- data/lib/facts/solaris/processors/isa.rb +17 -0
- data/lib/facts/solaris/processors/models.rb +21 -0
- data/lib/facts/solaris/processors/physicalcount.rb +17 -0
- data/lib/facts/solaris/processors/speed.rb +17 -0
- data/lib/facts/solaris/puppet_version.rb +15 -0
- data/lib/facts/solaris/ruby/platform.rb +18 -0
- data/lib/facts/solaris/ruby/sitedir.rb +17 -0
- data/lib/facts/solaris/ruby/version.rb +17 -0
- data/lib/facts/solaris/solaris_zones/current.rb +18 -0
- data/lib/facts/solaris/solaris_zones/zone.rb +62 -0
- data/lib/facts/solaris/ssh.rb +26 -0
- data/lib/facts/solaris/system_uptime/days.rb +18 -0
- data/lib/facts/solaris/system_uptime/hours.rb +18 -0
- data/lib/facts/solaris/system_uptime/seconds.rb +18 -0
- data/lib/facts/solaris/system_uptime/uptime.rb +18 -0
- data/lib/facts/solaris/timezone.rb +14 -0
- data/lib/facts/solaris/zfs_featurenumbers.rb +14 -0
- data/lib/facts/solaris/zfs_version.rb +14 -0
- data/lib/facts/solaris/zpool_featureflags.rb +14 -0
- data/lib/facts/solaris/zpool_featurenumbers.rb +14 -0
- data/lib/facts/solaris/zpool_version.rb +14 -0
- data/lib/facts/ubuntu/os/distro/release.rb +31 -0
- data/lib/facts/ubuntu/os/release.rb +20 -0
- data/lib/facts/windows/augeas/version.rb +19 -0
- data/lib/facts/windows/dhcp_servers.rb +26 -0
- data/lib/facts/windows/dmi/manufacturer.rb +18 -0
- data/lib/facts/windows/dmi/product/name.rb +20 -0
- data/lib/facts/windows/dmi/product/serial_number.rb +20 -0
- data/lib/facts/windows/dmi/product/uuid.rb +20 -0
- data/lib/facts/windows/facterversion.rb +15 -0
- data/lib/facts/windows/fips_enabled.rb +15 -0
- data/lib/facts/windows/hypervisors/hyperv.rb +24 -0
- data/lib/facts/windows/hypervisors/kvm.rb +36 -0
- data/lib/facts/windows/hypervisors/virtualbox.rb +37 -0
- data/lib/facts/windows/hypervisors/vmware.rb +24 -0
- data/lib/facts/windows/hypervisors/xen.rb +23 -0
- data/lib/facts/windows/identity/privileged.rb +17 -0
- data/lib/facts/windows/identity/user.rb +18 -0
- data/lib/facts/windows/interfaces.rb +15 -0
- data/lib/facts/windows/ipaddress6_interfaces.rb +20 -0
- data/lib/facts/windows/ipaddress_interfaces.rb +20 -0
- data/lib/facts/windows/kernel.rb +15 -0
- data/lib/facts/windows/kernelmajversion.rb +15 -0
- data/lib/facts/windows/kernelrelease.rb +15 -0
- data/lib/facts/windows/kernelversion.rb +15 -0
- data/lib/facts/windows/macaddress_interfaces.rb +20 -0
- data/lib/facts/windows/memory/system/available.rb +21 -0
- data/lib/facts/windows/memory/system/available_bytes.rb +21 -0
- data/lib/facts/windows/memory/system/capacity.rb +19 -0
- data/lib/facts/windows/memory/system/total.rb +21 -0
- data/lib/facts/windows/memory/system/total_bytes.rb +21 -0
- data/lib/facts/windows/memory/system/used.rb +20 -0
- data/lib/facts/windows/memory/system/used_bytes.rb +19 -0
- data/lib/facts/windows/mtu_interfaces.rb +20 -0
- data/lib/facts/windows/netmask6_interfaces.rb +20 -0
- data/lib/facts/windows/netmask_interfaces.rb +20 -0
- data/lib/facts/windows/network6_interfaces.rb +20 -0
- data/lib/facts/windows/network_interfaces.rb +20 -0
- data/lib/facts/windows/networking/dhcp.rb +17 -0
- data/lib/facts/windows/networking/domain.rb +18 -0
- data/lib/facts/windows/networking/fqdn.rb +22 -0
- data/lib/facts/windows/networking/hostname.rb +18 -0
- data/lib/facts/windows/networking/interfaces.rb +17 -0
- data/lib/facts/windows/networking/ip.rb +18 -0
- data/lib/facts/windows/networking/ip6.rb +18 -0
- data/lib/facts/windows/networking/mac.rb +18 -0
- data/lib/facts/windows/networking/mtu.rb +17 -0
- data/lib/facts/windows/networking/netmask.rb +18 -0
- data/lib/facts/windows/networking/netmask6.rb +18 -0
- data/lib/facts/windows/networking/network.rb +18 -0
- data/lib/facts/windows/networking/network6.rb +18 -0
- data/lib/facts/windows/networking/primary.rb +17 -0
- data/lib/facts/windows/networking/scope6.rb +17 -0
- data/lib/facts/windows/os/architecture.rb +18 -0
- data/lib/facts/windows/os/family.rb +18 -0
- data/lib/facts/windows/os/hardware.rb +18 -0
- data/lib/facts/windows/os/name.rb +18 -0
- data/lib/facts/windows/os/release.rb +35 -0
- data/lib/facts/windows/os/windows/edition_id.rb +20 -0
- data/lib/facts/windows/os/windows/installation_type.rb +20 -0
- data/lib/facts/windows/os/windows/product_name.rb +20 -0
- data/lib/facts/windows/os/windows/release_id.rb +20 -0
- data/lib/facts/windows/os/windows/system32.rb +20 -0
- data/lib/facts/windows/path.rb +15 -0
- data/lib/facts/windows/processor.rb +20 -0
- data/lib/facts/windows/processors/count.rb +18 -0
- data/lib/facts/windows/processors/isa.rb +18 -0
- data/lib/facts/windows/processors/models.rb +17 -0
- data/lib/facts/windows/processors/physicalcount.rb +18 -0
- data/lib/facts/windows/puppet_version.rb +15 -0
- data/lib/facts/windows/ruby/platform.rb +18 -0
- data/lib/facts/windows/ruby/sitedir.rb +18 -0
- data/lib/facts/windows/ruby/version.rb +18 -0
- data/lib/facts/windows/scope6_interfaces.rb +20 -0
- data/lib/facts/windows/ssh.rb +27 -0
- data/lib/facts/windows/system_uptime/days.rb +18 -0
- data/lib/facts/windows/system_uptime/hours.rb +18 -0
- data/lib/facts/windows/system_uptime/seconds.rb +18 -0
- data/lib/facts/windows/system_uptime/uptime.rb +18 -0
- data/lib/facts/windows/timezone.rb +15 -0
- data/lib/facts/windows/virtualization/is_virtual.rb +17 -0
- data/lib/facts/windows/virtualization/virtual.rb +17 -0
- data/lib/facts_utils/unit_converter.rb +59 -0
- data/lib/facts_utils/uptime_parser.rb +124 -0
- data/lib/facts_utils/windows_release_finder.rb +51 -0
- data/lib/framework/cli/cli.rb +140 -0
- data/lib/framework/cli/cli_launcher.rb +19 -0
- data/lib/framework/config/config_reader.rb +50 -0
- data/lib/framework/config/fact_groups.rb +56 -0
- data/lib/framework/core/cache_manager.rb +129 -0
- data/lib/framework/core/fact/external/external_fact_manager.rb +31 -0
- data/lib/framework/core/fact/internal/core_fact.rb +15 -0
- data/lib/framework/core/fact/internal/internal_fact_manager.rb +54 -0
- data/lib/framework/core/fact_augmenter.rb +37 -0
- data/lib/framework/core/fact_filter.rb +27 -0
- data/lib/framework/core/fact_loaders/class_discoverer.rb +32 -0
- data/lib/framework/core/fact_loaders/external_fact_loader.rb +45 -0
- data/lib/framework/core/fact_loaders/fact_loader.rb +72 -0
- data/lib/framework/core/fact_loaders/internal_fact_loader.rb +53 -0
- data/lib/framework/core/fact_manager.rb +64 -0
- data/lib/framework/core/file_loader.rb +58 -0
- data/lib/framework/core/options.rb +64 -0
- data/lib/framework/core/options/config_file_options.rb +92 -0
- data/lib/framework/core/options/option_store.rb +174 -0
- data/lib/framework/core/options/options_validator.rb +83 -0
- data/lib/framework/core/session_cache.rb +19 -0
- data/lib/framework/detector/os_detector.rb +73 -0
- data/lib/framework/detector/os_hierarchy.rb +53 -0
- data/lib/framework/formatters/formatter_factory.rb +13 -0
- data/lib/framework/formatters/formatter_helper.rb +39 -0
- data/lib/framework/formatters/hocon_fact_formatter.rb +50 -0
- data/lib/framework/formatters/json_fact_formatter.rb +35 -0
- data/lib/framework/formatters/legacy_fact_formatter.rb +91 -0
- data/lib/framework/formatters/yaml_fact_formatter.rb +64 -0
- data/lib/framework/logging/logger.rb +126 -0
- data/lib/framework/logging/logger_helper.rb +19 -0
- data/lib/framework/parsers/query_parser.rb +99 -0
- data/lib/framework/utils/utils.rb +37 -0
- data/lib/models/fact_collection.rb +45 -0
- data/lib/models/loaded_fact.rb +13 -0
- data/lib/models/resolved_fact.rb +28 -0
- data/lib/models/searched_fact.rb +15 -0
- data/lib/resolvers/agent_resolver.rb +23 -0
- data/lib/resolvers/aix/architecture_resolver.rb +39 -0
- data/lib/resolvers/aix/ffi/ffi_helper.rb +35 -0
- data/lib/resolvers/aix/filesystem_resolver.rb +34 -0
- data/lib/resolvers/aix/hardware_resolver.rb +39 -0
- data/lib/resolvers/aix/load_averages_resolver.rb +28 -0
- data/lib/resolvers/aix/mountpoints.rb +69 -0
- data/lib/resolvers/aix/networking_resolver.rb +34 -0
- data/lib/resolvers/aix/nim.rb +31 -0
- data/lib/resolvers/aix/os_level_resolver.rb +26 -0
- data/lib/resolvers/aix/partitions.rb +83 -0
- data/lib/resolvers/aix/processors.rb +80 -0
- data/lib/resolvers/aix/utils/odm_query.rb +42 -0
- data/lib/resolvers/augeas_resolver.rb +24 -0
- data/lib/resolvers/base_resolver.rb +33 -0
- data/lib/resolvers/bsd/ffi/ffi_helper.rb +25 -0
- data/lib/resolvers/bsd/load_averages_resolver.rb +26 -0
- data/lib/resolvers/debian_version.rb +29 -0
- data/lib/resolvers/disk_resolver.rb +54 -0
- data/lib/resolvers/dmi_resolver.rb +59 -0
- data/lib/resolvers/docker_lxc.rb +49 -0
- data/lib/resolvers/eos_release_resolver.rb +33 -0
- data/lib/resolvers/facterversion_resolver.rb +23 -0
- data/lib/resolvers/filesystems_resolver.rb +34 -0
- data/lib/resolvers/fips_enabled_resolver.rb +27 -0
- data/lib/resolvers/freebsd/freebsd_version_resolver.rb +37 -0
- data/lib/resolvers/hostname_resolver.rb +45 -0
- data/lib/resolvers/identity_resolver.rb +31 -0
- data/lib/resolvers/load_averages_resolver.rb +27 -0
- data/lib/resolvers/lpar_resolver.rb +31 -0
- data/lib/resolvers/lsb_release_resolver.rb +49 -0
- data/lib/resolvers/macosx/dmi_resolver.rb +28 -0
- data/lib/resolvers/macosx/filesystems_resolver.rb +32 -0
- data/lib/resolvers/macosx/ipaddress_resolver.rb +52 -0
- data/lib/resolvers/macosx/load_averages_resolver.rb +26 -0
- data/lib/resolvers/macosx/mountpoints_resolver.rb +61 -0
- data/lib/resolvers/macosx/processor_resolver.rb +58 -0
- data/lib/resolvers/macosx/swap_memory_resolver.rb +42 -0
- data/lib/resolvers/macosx/system_memory_resolver.rb +45 -0
- data/lib/resolvers/macosx/system_profiler_resolver.rb +62 -0
- data/lib/resolvers/memory_resolver.rb +59 -0
- data/lib/resolvers/mountpoints_resolver.rb +62 -0
- data/lib/resolvers/networking_linux_resolver.rb +163 -0
- data/lib/resolvers/os_level_resolver.rb +29 -0
- data/lib/resolvers/os_release_resolver.rb +67 -0
- data/lib/resolvers/partitions.rb +110 -0
- data/lib/resolvers/path_resolver.rb +22 -0
- data/lib/resolvers/processors_resolver.rb +63 -0
- data/lib/resolvers/puppet_version_resolver.rb +27 -0
- data/lib/resolvers/redhat_release_resolver.rb +55 -0
- data/lib/resolvers/ruby_resolver.rb +25 -0
- data/lib/resolvers/selinux_resolver.rb +69 -0
- data/lib/resolvers/solaris/filesystems_resolver.rb +32 -0
- data/lib/resolvers/solaris/ipaddress_resolver.rb +39 -0
- data/lib/resolvers/solaris/processors.rb +36 -0
- data/lib/resolvers/solaris/solaris_os_release_resolver.rb +42 -0
- data/lib/resolvers/solaris/solaris_zone_name.rb +28 -0
- data/lib/resolvers/solaris/zfs_resolver.rb +34 -0
- data/lib/resolvers/solaris/zone_resolver.rb +48 -0
- data/lib/resolvers/solaris/zpool_resolver.rb +36 -0
- data/lib/resolvers/ssh_resolver.rb +37 -0
- data/lib/resolvers/suse_release_resolver.rb +35 -0
- data/lib/resolvers/sw_vers_resolver.rb +30 -0
- data/lib/resolvers/timezone_resolver.rb +22 -0
- data/lib/resolvers/uname_resolver.rb +42 -0
- data/lib/resolvers/uptime_resolver.rb +57 -0
- data/lib/resolvers/utils/filesystem_helper.rb +41 -0
- data/lib/resolvers/utils/fingerprint.rb +11 -0
- data/lib/resolvers/utils/ssh.rb +13 -0
- data/lib/resolvers/utils/ssh_helper.rb +27 -0
- data/lib/resolvers/windows/dmi_bios_resolver.rb +41 -0
- data/lib/resolvers/windows/dmi_computersystem_resolver.rb +40 -0
- data/lib/resolvers/windows/ffi/ffi.rb +65 -0
- data/lib/resolvers/windows/ffi/hardware_ffi.rb +17 -0
- data/lib/resolvers/windows/ffi/identity_ffi.rb +15 -0
- data/lib/resolvers/windows/ffi/ip_adapter_addresses_lh.rb +161 -0
- data/lib/resolvers/windows/ffi/kernel_ffi.rb +14 -0
- data/lib/resolvers/windows/ffi/memory_ffi.rb +12 -0
- data/lib/resolvers/windows/ffi/network_utils.rb +65 -0
- data/lib/resolvers/windows/ffi/networking_ffi.rb +34 -0
- data/lib/resolvers/windows/ffi/os_version_info_ex.rb +17 -0
- data/lib/resolvers/windows/ffi/performance_information.rb +20 -0
- data/lib/resolvers/windows/ffi/system32_ffi.rb +18 -0
- data/lib/resolvers/windows/ffi/system_info.rb +30 -0
- data/lib/resolvers/windows/fips_resolver.rb +32 -0
- data/lib/resolvers/windows/hardware_architecture_resolver.rb +64 -0
- data/lib/resolvers/windows/identity_resolver.rb +57 -0
- data/lib/resolvers/windows/kernel_resolver.rb +42 -0
- data/lib/resolvers/windows/memory_resolver.rb +60 -0
- data/lib/resolvers/windows/netkvm_resolver.rb +33 -0
- data/lib/resolvers/windows/networking_resolver.rb +180 -0
- data/lib/resolvers/windows/processors_resolver.rb +64 -0
- data/lib/resolvers/windows/product_release_resolver.rb +36 -0
- data/lib/resolvers/windows/ssh.rb +47 -0
- data/lib/resolvers/windows/system32_resolver.rb +45 -0
- data/lib/resolvers/windows/uptime_resolver.rb +77 -0
- data/lib/resolvers/windows/utils/win32ole.rb +24 -0
- data/lib/resolvers/windows/virtualization_resolver.rb +66 -0
- data/lib/resolvers/windows/win_os_description_resolver.rb +31 -0
- data/lib/resolvers/wpar_resolver.rb +34 -0
- data/lib/util/api_debugger.rb +43 -0
- data/lib/util/file_helper.rb +33 -0
- data/os_hierarchy.json +37 -0
- data/tasks/commits.rake +31 -0
- data/tasks/create_fact.rake +19 -0
- data/tasks/fact_generator/fact.erb +14 -0
- data/tasks/fact_generator/fact_creator.rb +105 -0
- data/tasks/fact_generator/fact_spec.erb +18 -0
- data/tasks/fact_generator/facts.json +358 -0
- data/tasks/fact_generator/path.rb +10 -0
- data/tasks/fact_list_generator.rake +26 -0
- metadata +799 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# A restricting tag for fact resolution mechanisms. The tag must be true
|
|
4
|
+
# for the resolution mechanism to be suitable.
|
|
5
|
+
|
|
6
|
+
module LegacyFacter
|
|
7
|
+
module Util
|
|
8
|
+
class Confine
|
|
9
|
+
attr_accessor :fact, :values
|
|
10
|
+
|
|
11
|
+
include LegacyFacter::Util::Values
|
|
12
|
+
|
|
13
|
+
# Add the restriction. Requires the fact name, an operator, and the value
|
|
14
|
+
# we're comparing to.
|
|
15
|
+
#
|
|
16
|
+
# @param fact [Symbol] Name of the fact
|
|
17
|
+
# @param values [Array] One or more values to match against.
|
|
18
|
+
# They can be any type that provides a === method.
|
|
19
|
+
# @param block [Proc] Alternatively a block can be supplied as a check. The fact
|
|
20
|
+
# value will be passed as the argument to the block. If the block returns
|
|
21
|
+
# true then the fact will be enabled, otherwise it will be disabled.
|
|
22
|
+
def initialize(fact = nil, *values, &block)
|
|
23
|
+
raise ArgumentError, 'The fact name must be provided' unless fact || block_given?
|
|
24
|
+
raise ArgumentError, 'One or more values or a block must be provided' if values.empty? && !block_given?
|
|
25
|
+
|
|
26
|
+
@fact = fact
|
|
27
|
+
@values = values
|
|
28
|
+
@block = block
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def to_s
|
|
32
|
+
return @block.to_s if @block
|
|
33
|
+
|
|
34
|
+
format("'%<fact>s' '%<values>s'", fact: @fact, values: @values.join(','))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Evaluate the fact, returning true or false.
|
|
38
|
+
# if we have a block paramter then we only evaluate that instead
|
|
39
|
+
def true?
|
|
40
|
+
if @block && !@fact
|
|
41
|
+
begin
|
|
42
|
+
return !!@block.call
|
|
43
|
+
rescue StandardError => e
|
|
44
|
+
LegacyFacter.debug "Confine raised #{e.class} #{e}"
|
|
45
|
+
return false
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
unless (fact = Facter[@fact])
|
|
50
|
+
LegacyFacter.debug format('No fact for %<fact>s', fact: @fact)
|
|
51
|
+
return false
|
|
52
|
+
end
|
|
53
|
+
value = convert(fact.value)
|
|
54
|
+
|
|
55
|
+
return false if value.nil?
|
|
56
|
+
|
|
57
|
+
if @block
|
|
58
|
+
begin
|
|
59
|
+
return !!@block.call(value)
|
|
60
|
+
rescue StandardError => e
|
|
61
|
+
LegacyFacter.debug "Confine raised #{e.class} #{e}"
|
|
62
|
+
return false
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
@values.any? { |v| convert(v) === value }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# A Facter plugin that loads external facts.
|
|
4
|
+
#
|
|
5
|
+
# Default Unix Directories:
|
|
6
|
+
# /opt/puppetlabs/custom_facts/facts.d, /etc/custom_facts/facts.d, /etc/puppetlabs/custom_facts/facts.d
|
|
7
|
+
#
|
|
8
|
+
# Beginning with Facter 3, only /opt/puppetlabs/custom_facts/facts.d will be a default external fact
|
|
9
|
+
# directory in Unix.
|
|
10
|
+
#
|
|
11
|
+
# Default Windows Direcotires:
|
|
12
|
+
# C:\ProgramData\Puppetlabs\custom_facts\facts.d (2008)
|
|
13
|
+
# C:\Documents and Settings\All Users\Application Data\Puppetlabs\custom_facts\facts.d (2003)
|
|
14
|
+
#
|
|
15
|
+
# Can also load from command-line specified directory
|
|
16
|
+
#
|
|
17
|
+
# Facts can be in the form of JSON, YAML or Text files
|
|
18
|
+
# and any executable that returns key=value pairs.
|
|
19
|
+
|
|
20
|
+
require 'yaml'
|
|
21
|
+
|
|
22
|
+
module LegacyFacter
|
|
23
|
+
module Util
|
|
24
|
+
class DirectoryLoader
|
|
25
|
+
class NoSuchDirectoryError < RuntimeError
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# This value makes it highly likely that external facts will take
|
|
29
|
+
# precedence over all other facts
|
|
30
|
+
EXTERNAL_FACT_WEIGHT = 10_000
|
|
31
|
+
|
|
32
|
+
# Directory for fact loading
|
|
33
|
+
attr_reader :directory
|
|
34
|
+
|
|
35
|
+
def initialize(dir, weight = nil)
|
|
36
|
+
@directory = dir
|
|
37
|
+
@weight = weight || EXTERNAL_FACT_WEIGHT
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.loader_for(dir)
|
|
41
|
+
raise NoSuchDirectoryError unless File.directory?(dir)
|
|
42
|
+
|
|
43
|
+
LegacyFacter::Util::DirectoryLoader.new(dir)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.default_loader
|
|
47
|
+
loaders = LegacyFacter::Util::Config.external_facts_dirs.collect do |dir|
|
|
48
|
+
LegacyFacter::Util::DirectoryLoader.new(dir)
|
|
49
|
+
end
|
|
50
|
+
LegacyFacter::Util::CompositeLoader.new(loaders)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Load facts from files in fact directory using the relevant parser classes to
|
|
54
|
+
# parse them.
|
|
55
|
+
def load(collection)
|
|
56
|
+
weight = @weight
|
|
57
|
+
entries.each do |file|
|
|
58
|
+
parser = LegacyFacter::Util::Parser.parser_for(file)
|
|
59
|
+
next if parser.nil?
|
|
60
|
+
|
|
61
|
+
data = parser.results
|
|
62
|
+
if data == false
|
|
63
|
+
LegacyFacter.warn "Could not interpret fact file #{file}"
|
|
64
|
+
elsif (data == {}) || data.nil?
|
|
65
|
+
LegacyFacter.warn "Fact file #{file} was parsed but returned an empty data set"
|
|
66
|
+
else
|
|
67
|
+
data.each { |p, v| collection.add(p, value: v, fact_type: :external) { has_weight(weight) } }
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
def entries
|
|
75
|
+
Dir.entries(directory).find_all { |f| should_parse?(f) }.sort.map { |f| File.join(directory, f) }
|
|
76
|
+
rescue Errno::ENOENT
|
|
77
|
+
[]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def should_parse?(file)
|
|
81
|
+
file !~ /^\./
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This class represents a fact. Each fact has a name and multiple
|
|
4
|
+
# {Facter::Util::Resolution resolutions}.
|
|
5
|
+
#
|
|
6
|
+
# Create facts using {Facter.add}
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
module Facter
|
|
10
|
+
module Util
|
|
11
|
+
class Fact
|
|
12
|
+
# The name of the fact
|
|
13
|
+
# @return [String]
|
|
14
|
+
attr_reader :name
|
|
15
|
+
|
|
16
|
+
# @return [String]
|
|
17
|
+
# @deprecated
|
|
18
|
+
attr_accessor :ldapname
|
|
19
|
+
|
|
20
|
+
# Fact options e.g. fact_type
|
|
21
|
+
attr_accessor :options
|
|
22
|
+
|
|
23
|
+
# Weight of the resolution that was used to obtain the fact value
|
|
24
|
+
attr_accessor :used_resolution_weight
|
|
25
|
+
|
|
26
|
+
# Creates a new fact, with no resolution mechanisms. See {Facter.add}
|
|
27
|
+
# for the public API for creating facts.
|
|
28
|
+
# @param name [String] the fact name
|
|
29
|
+
# @param options [Hash] optional parameters
|
|
30
|
+
# @option options [String] :ldapname set the ldapname property on the fact
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
def initialize(name, options = {})
|
|
34
|
+
@name = name.to_s.downcase.intern
|
|
35
|
+
|
|
36
|
+
@options = Facter::Utils.deep_copy(options)
|
|
37
|
+
extract_ldapname_option!(options)
|
|
38
|
+
|
|
39
|
+
@ldapname ||= @name.to_s
|
|
40
|
+
|
|
41
|
+
@resolves = []
|
|
42
|
+
@searching = false
|
|
43
|
+
@used_resolution_weight = 0
|
|
44
|
+
|
|
45
|
+
@value = nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Adds a new {Facter::Util::Resolution resolution}. This requires a
|
|
49
|
+
# block, which will then be evaluated in the context of the new
|
|
50
|
+
# resolution.
|
|
51
|
+
#
|
|
52
|
+
# @param options [Hash] A hash of options to set on the resolution
|
|
53
|
+
#
|
|
54
|
+
# @return [Facter::Util::Resolution]
|
|
55
|
+
#
|
|
56
|
+
# @api private
|
|
57
|
+
def add(options = {}, &block)
|
|
58
|
+
@options = Facter::Utils.deep_copy(@options.merge(options))
|
|
59
|
+
define_resolution(nil, options, &block)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Define a new named resolution or return an existing resolution with
|
|
63
|
+
# the given name.
|
|
64
|
+
#
|
|
65
|
+
# @param resolution_name [String] The name of the resolve to define or look up
|
|
66
|
+
# @param options [Hash] A hash of options to set on the resolution
|
|
67
|
+
# @return [Facter::Util::Resolution]
|
|
68
|
+
#
|
|
69
|
+
# @api public
|
|
70
|
+
def define_resolution(resolution_name, options = {}, &block)
|
|
71
|
+
resolution_type = options.delete(:type) || :simple
|
|
72
|
+
|
|
73
|
+
resolve = create_or_return_resolution(resolution_name, resolution_type)
|
|
74
|
+
|
|
75
|
+
resolve.options(options) unless options.empty?
|
|
76
|
+
resolve.evaluate(&block) if block
|
|
77
|
+
|
|
78
|
+
resolve
|
|
79
|
+
rescue StandardError => e
|
|
80
|
+
LegacyFacter
|
|
81
|
+
.log_exception(e, "Unable to add resolve #{resolution_name.inspect} for fact #{@name}: #{e.message}")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Retrieve an existing resolution by name
|
|
85
|
+
#
|
|
86
|
+
# @param name [String]
|
|
87
|
+
#
|
|
88
|
+
# @return [Facter::Util::Resolution, nil] The resolution if exists, nil if
|
|
89
|
+
# it doesn't exist or name is nil
|
|
90
|
+
def resolution(name)
|
|
91
|
+
return nil if name.nil?
|
|
92
|
+
|
|
93
|
+
@resolves.find { |resolve| resolve.name == name }
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Flushes any cached values.
|
|
97
|
+
#
|
|
98
|
+
# @return [void]
|
|
99
|
+
#
|
|
100
|
+
# @api private
|
|
101
|
+
def flush
|
|
102
|
+
@resolves.each(&:flush)
|
|
103
|
+
@value = nil
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Returns the value for this fact. This searches all resolutions by
|
|
107
|
+
# suitability and weight (see {Facter::Util::Resolution}). If no
|
|
108
|
+
# suitable resolution is found, it returns nil.
|
|
109
|
+
#
|
|
110
|
+
# @api public
|
|
111
|
+
def value
|
|
112
|
+
return @value if @value
|
|
113
|
+
|
|
114
|
+
if @resolves.empty?
|
|
115
|
+
LegacyFacter.debug format('No resolves for %<name>s', name: @name)
|
|
116
|
+
return nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
searching do
|
|
120
|
+
suitable_resolutions = sort_by_weight(find_suitable_resolutions(@resolves))
|
|
121
|
+
@value = find_first_real_value(suitable_resolutions)
|
|
122
|
+
|
|
123
|
+
announce_when_no_suitable_resolution(suitable_resolutions)
|
|
124
|
+
announce_when_no_value_found(@value)
|
|
125
|
+
|
|
126
|
+
@value
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# @api private
|
|
131
|
+
# @deprecated
|
|
132
|
+
def extract_ldapname_option!(options)
|
|
133
|
+
return unless options[:ldapname]
|
|
134
|
+
|
|
135
|
+
LegacyFacter.warnonce('ldapname is deprecated and will be removed in a future version')
|
|
136
|
+
self.ldapname = options.delete(:ldapname)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
private
|
|
140
|
+
|
|
141
|
+
# Are we in the midst of a search?
|
|
142
|
+
def searching?
|
|
143
|
+
@searching
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Lock our searching process, so we never ge stuck in recursion.
|
|
147
|
+
def searching
|
|
148
|
+
raise "Caught recursion on #{@name}" if searching?
|
|
149
|
+
|
|
150
|
+
# If we've gotten this far, we're not already searching, so go ahead and do so.
|
|
151
|
+
@searching = true
|
|
152
|
+
begin
|
|
153
|
+
yield
|
|
154
|
+
ensure
|
|
155
|
+
@searching = false
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def find_suitable_resolutions(resolutions)
|
|
160
|
+
resolutions.find_all(&:suitable?)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def sort_by_weight(resolutions)
|
|
164
|
+
resolutions.sort { |a, b| b <=> a }
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def find_first_real_value(resolutions)
|
|
168
|
+
resolutions.each do |resolve|
|
|
169
|
+
begin
|
|
170
|
+
value = resolve.value
|
|
171
|
+
rescue Facter::ResolveCustomFactError
|
|
172
|
+
break
|
|
173
|
+
end
|
|
174
|
+
@used_resolution_weight = resolve.weight
|
|
175
|
+
return value unless value.nil?
|
|
176
|
+
end
|
|
177
|
+
nil
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def announce_when_no_suitable_resolution(resolutions)
|
|
181
|
+
return unless resolutions.empty?
|
|
182
|
+
|
|
183
|
+
LegacyFacter.debug format('Found no suitable resolves of %<resolver_length> for %<name>s',
|
|
184
|
+
resolver_length: @resolves.length, name: @name)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def announce_when_no_value_found(value)
|
|
188
|
+
LegacyFacter.debug(format('value for %<name>s is still nil', name: @name)) if value.nil?
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def create_or_return_resolution(resolution_name, resolution_type)
|
|
192
|
+
resolve = resolution(resolution_name)
|
|
193
|
+
|
|
194
|
+
if resolve
|
|
195
|
+
if resolution_type != resolve.resolution_type
|
|
196
|
+
raise ArgumentError, "Cannot return resolution #{resolution_name} with type" \
|
|
197
|
+
" #{resolution_type}; already defined as #{resolve.resolution_type}"
|
|
198
|
+
end
|
|
199
|
+
else
|
|
200
|
+
case resolution_type
|
|
201
|
+
when :simple
|
|
202
|
+
resolve = Facter::Util::Resolution.new(resolution_name, self)
|
|
203
|
+
when :aggregate
|
|
204
|
+
resolve = Facter::Core::Aggregate.new(resolution_name, self)
|
|
205
|
+
else
|
|
206
|
+
raise ArgumentError,
|
|
207
|
+
"Expected resolution type to be one of (:simple, :aggregate) but was #{resolution_type}"
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
@resolves << resolve
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
resolve
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Load facts on demand.
|
|
4
|
+
module LegacyFacter
|
|
5
|
+
module Util
|
|
6
|
+
class Loader
|
|
7
|
+
def initialize(environment_vars = ENV)
|
|
8
|
+
@loaded = []
|
|
9
|
+
@environment_vars = environment_vars
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Load all resolutions for a single fact.
|
|
13
|
+
#
|
|
14
|
+
# @api public
|
|
15
|
+
# @param name [Symbol]
|
|
16
|
+
def load(fact)
|
|
17
|
+
# Now load from the search path
|
|
18
|
+
shortname = fact.to_s.downcase
|
|
19
|
+
load_env(shortname)
|
|
20
|
+
|
|
21
|
+
filename = shortname + '.rb'
|
|
22
|
+
|
|
23
|
+
paths = search_path
|
|
24
|
+
paths&.each do |dir|
|
|
25
|
+
# Load individual files
|
|
26
|
+
file = File.join(dir, filename)
|
|
27
|
+
|
|
28
|
+
load_file(file) if FileTest.file?(file)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Load all facts from all directories.
|
|
33
|
+
#
|
|
34
|
+
# @api public
|
|
35
|
+
def load_all
|
|
36
|
+
return if defined?(@loaded_all)
|
|
37
|
+
|
|
38
|
+
load_env
|
|
39
|
+
|
|
40
|
+
paths = search_path
|
|
41
|
+
paths&.each do |dir|
|
|
42
|
+
# dir is already an absolute path
|
|
43
|
+
Dir.glob(File.join(dir, '*.rb')).each do |path|
|
|
44
|
+
# exclude dirs that end with .rb
|
|
45
|
+
load_file(path) if FileTest.file?(path)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@loaded_all = true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# List directories to search for fact files.
|
|
53
|
+
#
|
|
54
|
+
# Search paths are gathered from the following sources:
|
|
55
|
+
#
|
|
56
|
+
# 1. $LOAD_PATH entries are expanded to absolute paths
|
|
57
|
+
# 2. ENV['FACTERLIB'] is split and used verbatim
|
|
58
|
+
# 3. Entries from Facter.search_path are used verbatim
|
|
59
|
+
#
|
|
60
|
+
# A warning will be generated for paths in Facter.search_path that are not
|
|
61
|
+
# absolute directories.
|
|
62
|
+
#
|
|
63
|
+
# @api public
|
|
64
|
+
# @return [Array<String>]
|
|
65
|
+
def search_path
|
|
66
|
+
search_paths = []
|
|
67
|
+
search_paths += $LOAD_PATH.map { |path| File.expand_path('facter', path) }
|
|
68
|
+
|
|
69
|
+
if @environment_vars.include?('FACTERLIB')
|
|
70
|
+
search_paths += @environment_vars['FACTERLIB'].split(File::PATH_SEPARATOR)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
search_paths.delete_if { |path| !valid_search_path?(path) }
|
|
74
|
+
|
|
75
|
+
Facter::Options.custom_dir.each do |path|
|
|
76
|
+
if valid_search_path?(path)
|
|
77
|
+
search_paths << path
|
|
78
|
+
else
|
|
79
|
+
LegacyFacter.warn "Excluding #{path} from search path. Fact file paths must be an absolute directory"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
search_paths.delete_if { |path| !File.directory?(path) }
|
|
84
|
+
|
|
85
|
+
search_paths.uniq
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
# Validate that the given path is valid, ie it is an absolute path.
|
|
91
|
+
#
|
|
92
|
+
# @api private
|
|
93
|
+
# @param path [String]
|
|
94
|
+
# @return [Boolean]
|
|
95
|
+
def valid_search_path?(path)
|
|
96
|
+
Pathname.new(path).absolute?
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Load a file and record is paths to prevent duplicate loads.
|
|
100
|
+
#
|
|
101
|
+
# @api private
|
|
102
|
+
# @params file [String] The *absolute path* to the file to load
|
|
103
|
+
def load_file(file)
|
|
104
|
+
return if @loaded.include? file
|
|
105
|
+
|
|
106
|
+
# We have to specify Kernel.load, because we have a load method.
|
|
107
|
+
begin
|
|
108
|
+
# Store the file path so we don't try to reload it
|
|
109
|
+
@loaded << file
|
|
110
|
+
kernel_load(file)
|
|
111
|
+
rescue ScriptError => e
|
|
112
|
+
# Don't store the path if the file can't be loaded
|
|
113
|
+
# in case it's loadable later on.
|
|
114
|
+
@loaded.delete(file)
|
|
115
|
+
Facter.log_exception(e, "Error loading fact #{file}: #{e.message}")
|
|
116
|
+
rescue StandardError => e
|
|
117
|
+
Facter.log_exception(e, "error while resolving custom facts in #{file} #{e.message}")
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Load and execute the Ruby program specified in the file. This exists
|
|
122
|
+
# for testing purposes.
|
|
123
|
+
#
|
|
124
|
+
# @api private
|
|
125
|
+
# @return [Boolean]
|
|
126
|
+
def kernel_load(file)
|
|
127
|
+
Kernel.load(file)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Load facts from the environment. If no name is provided,
|
|
131
|
+
# all will be loaded.
|
|
132
|
+
def load_env(fact = nil)
|
|
133
|
+
# Load from the environment, if possible
|
|
134
|
+
@environment_vars.each do |name, value|
|
|
135
|
+
# Skip anything that doesn't match our regex.
|
|
136
|
+
next unless name =~ /^facter_?(\w+)$/i
|
|
137
|
+
|
|
138
|
+
env_name = Regexp.last_match(1)
|
|
139
|
+
|
|
140
|
+
# If a fact name was specified, skip anything that doesn't
|
|
141
|
+
# match it.
|
|
142
|
+
next if fact && (env_name != fact)
|
|
143
|
+
|
|
144
|
+
LegacyFacter.add(Regexp.last_match(1)) do
|
|
145
|
+
has_weight 1_000_000
|
|
146
|
+
setcode { value }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Short-cut, if we are only looking for one value.
|
|
150
|
+
break if fact
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|