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,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'timeout'
|
|
4
|
+
|
|
5
|
+
# The resolvable mixin defines behavior for evaluating and returning fact
|
|
6
|
+
# resolutions.
|
|
7
|
+
#
|
|
8
|
+
# Classes including this mixin should implement a #name method describing
|
|
9
|
+
# the value being resolved and a #resolve_value that actually executes the code
|
|
10
|
+
# to resolve the value.
|
|
11
|
+
module LegacyFacter
|
|
12
|
+
module Core
|
|
13
|
+
module Resolvable
|
|
14
|
+
# The timeout, in seconds, for evaluating this resolution.
|
|
15
|
+
# @return [Integer]
|
|
16
|
+
# @api public
|
|
17
|
+
attr_accessor :timeout
|
|
18
|
+
attr_reader :logger
|
|
19
|
+
|
|
20
|
+
# Return the timeout period for resolving a value.
|
|
21
|
+
# (see #timeout)
|
|
22
|
+
# @return [Numeric]
|
|
23
|
+
# @comment requiring 'timeout' stdlib class causes Object#timeout to be
|
|
24
|
+
# defined which delegates to Timeout.timeout. This method may potentially
|
|
25
|
+
# overwrite the #timeout attr_reader on this class, so we define #limit to
|
|
26
|
+
# avoid conflicts.
|
|
27
|
+
def limit
|
|
28
|
+
@timeout || 0
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
##
|
|
32
|
+
# on_flush accepts a block and executes the block when the resolution's value
|
|
33
|
+
# is flushed. This makes it possible to model a single, expensive system
|
|
34
|
+
# call inside of a Ruby object and then define multiple dynamic facts which
|
|
35
|
+
# resolve by sending messages to the model instance. If one of the dynamic
|
|
36
|
+
# facts is flushed then it can, in turn, flush the data stored in the model
|
|
37
|
+
# instance to keep all of the dynamic facts in sync without making multiple,
|
|
38
|
+
# expensive, system calls.
|
|
39
|
+
#
|
|
40
|
+
# Please see the Solaris zones fact for an example of how this feature may be
|
|
41
|
+
# used.
|
|
42
|
+
#
|
|
43
|
+
# @see Facter::Util::Fact#flush
|
|
44
|
+
# @see Facter::Util::Resolution#flush
|
|
45
|
+
#
|
|
46
|
+
# @api public
|
|
47
|
+
def on_flush(&block)
|
|
48
|
+
@on_flush_block = block
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# flush executes the block, if any, stored by the {on_flush} method
|
|
53
|
+
#
|
|
54
|
+
# @see Facter::Util::Fact#flush
|
|
55
|
+
# @see Facter::Util::Resolution#on_flush
|
|
56
|
+
#
|
|
57
|
+
# @api private
|
|
58
|
+
def flush
|
|
59
|
+
@on_flush_block&.call
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def value
|
|
63
|
+
result = nil
|
|
64
|
+
|
|
65
|
+
with_timing do
|
|
66
|
+
Timeout.timeout(limit) do
|
|
67
|
+
result = resolve_value
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
LegacyFacter::Util::Normalization.normalize(result)
|
|
72
|
+
rescue Timeout::Error => e
|
|
73
|
+
Facter.log_exception(e, "Timed out after #{limit} seconds while resolving #{qualified_name}")
|
|
74
|
+
|
|
75
|
+
nil
|
|
76
|
+
rescue LegacyFacter::Util::Normalization::NormalizationError => e
|
|
77
|
+
Facter.log_exception(e, "Fact resolution #{qualified_name} resolved to an invalid value: #{e.message}")
|
|
78
|
+
|
|
79
|
+
nil
|
|
80
|
+
rescue StandardError => e
|
|
81
|
+
Facter.log_exception(e, "Error while resolving custom fact #{qualified_name}: #{e.message}")
|
|
82
|
+
|
|
83
|
+
raise Facter::ResolveCustomFactError
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def with_timing
|
|
89
|
+
starttime = Time.now.to_f
|
|
90
|
+
|
|
91
|
+
yield
|
|
92
|
+
|
|
93
|
+
finishtime = Time.now.to_f
|
|
94
|
+
ms = (finishtime - starttime) * 1000
|
|
95
|
+
LegacyFacter.show_time format('%<qn>s: %<ms>.2fms', qn: qualified_name, ms: ms)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def qualified_name
|
|
99
|
+
"fact='#{@fact.name}', resolution='#{@name || '<anonymous>'}'"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# The Suitable mixin provides mechanisms for confining objects to run on
|
|
4
|
+
# certain platforms and determining the run precedence of these objects.
|
|
5
|
+
#
|
|
6
|
+
# Classes that include the Suitable mixin should define a `#confines` method
|
|
7
|
+
# that returns an Array of zero or more Facter::Util::Confine objects.
|
|
8
|
+
module LegacyFacter
|
|
9
|
+
module Core
|
|
10
|
+
module Suitable
|
|
11
|
+
# Sets the weight of this resolution. If multiple suitable resolutions
|
|
12
|
+
# are found, the one with the highest weight will be used. If weight
|
|
13
|
+
# is not given, the number of confines set on a resolution will be
|
|
14
|
+
# used as its weight (so that the most specific resolution is used).
|
|
15
|
+
#
|
|
16
|
+
# @param weight [Integer] the weight of this resolution
|
|
17
|
+
#
|
|
18
|
+
# @return [void]
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
def has_weight(weight)
|
|
22
|
+
@weight = weight
|
|
23
|
+
self
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Sets the conditions for this resolution to be used. This method accepts
|
|
27
|
+
# multiple forms of arguments to determine suitability.
|
|
28
|
+
#
|
|
29
|
+
# @return [void]
|
|
30
|
+
#
|
|
31
|
+
# @api public
|
|
32
|
+
#
|
|
33
|
+
# @overload confine(confines)
|
|
34
|
+
# Confine a fact to a specific fact value or values. This form takes a
|
|
35
|
+
# hash of fact names and values. Every fact must match the values given for
|
|
36
|
+
# that fact, otherwise this resolution will not be considered suitable. The
|
|
37
|
+
# values given for a fact can be an array, in which case the value of the
|
|
38
|
+
# fact must be in the array for it to match.
|
|
39
|
+
# @param [Hash{String,Symbol=>String,Array<String>}] confines set of facts identified by the hash keys whose
|
|
40
|
+
# fact value must match the argument value.
|
|
41
|
+
# @example Confining to Linux
|
|
42
|
+
# Facter.add(:powerstates) do
|
|
43
|
+
# # This resolution only makes sense on linux systems
|
|
44
|
+
# confine :kernel => "Linux"
|
|
45
|
+
# setcode do
|
|
46
|
+
# File.read('/sys/power/states')
|
|
47
|
+
# end
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
# @overload confine(confines, &block)
|
|
51
|
+
# Confine a fact to a block with the value of a specified fact yielded to
|
|
52
|
+
# the block.
|
|
53
|
+
# @param [String,Symbol] confines the fact name whose value should be
|
|
54
|
+
# yielded to the block
|
|
55
|
+
# @param [Proc] block determines the suitability of the fact. If the block
|
|
56
|
+
# evaluates to `false` or `nil` then the confined fact will not be
|
|
57
|
+
# evaluated.
|
|
58
|
+
# @yield [value] the value of the fact identified by {confines}
|
|
59
|
+
# @example Confine the fact to a host with an ipaddress in a specific
|
|
60
|
+
# subnet
|
|
61
|
+
# confine :ipaddress do |addr|
|
|
62
|
+
# require 'ipaddr'
|
|
63
|
+
# IPAddr.new('192.168.0.0/16').include? addr
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# @overload confine(&block)
|
|
67
|
+
# Confine a fact to a block. The fact will be evaluated only if the block
|
|
68
|
+
# evaluates to something other than `false` or `nil`.
|
|
69
|
+
# @param [Proc] block determines the suitability of the fact. If the block
|
|
70
|
+
# evaluates to `false` or `nil` then the confined fact will not be
|
|
71
|
+
# evaluated.
|
|
72
|
+
# @example Confine the fact to systems with a specific file.
|
|
73
|
+
# confine { File.readable? '/bin/foo' }
|
|
74
|
+
def confine(confines = nil, &block)
|
|
75
|
+
case confines
|
|
76
|
+
when Hash
|
|
77
|
+
confines.each do |fact, values|
|
|
78
|
+
@confines.push LegacyFacter::Util::Confine.new(fact, *values)
|
|
79
|
+
end
|
|
80
|
+
else
|
|
81
|
+
if block
|
|
82
|
+
if confines
|
|
83
|
+
@confines.push LegacyFacter::Util::Confine.new(confines, &block)
|
|
84
|
+
else
|
|
85
|
+
@confines.push LegacyFacter::Util::Confine.new(&block)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Returns the importance of this resolution. If the weight was not
|
|
92
|
+
# given, the number of confines is used instead (so that a more
|
|
93
|
+
# specific resolution wins over a less specific one).
|
|
94
|
+
#
|
|
95
|
+
# @return [Integer] the weight of this resolution
|
|
96
|
+
#
|
|
97
|
+
# @api private
|
|
98
|
+
def weight
|
|
99
|
+
@weight || @confines.length
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Is this resolution mechanism suitable on the system in question?
|
|
103
|
+
#
|
|
104
|
+
# @api private
|
|
105
|
+
def suitable?
|
|
106
|
+
@confines.all?(&:true?)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Manage which facts exist and how we access them. Largely just a wrapper
|
|
4
|
+
# around a hash of facts.
|
|
5
|
+
#
|
|
6
|
+
# @api private
|
|
7
|
+
module LegacyFacter
|
|
8
|
+
module Util
|
|
9
|
+
class Collection
|
|
10
|
+
def initialize(internal_loader, external_loader)
|
|
11
|
+
@facts = {}
|
|
12
|
+
@internal_loader = internal_loader
|
|
13
|
+
@external_loader = external_loader
|
|
14
|
+
@loaded = false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Return a fact object by name.
|
|
18
|
+
def [](name)
|
|
19
|
+
value(name)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Define a new fact or extend an existing fact.
|
|
23
|
+
#
|
|
24
|
+
# @param name [Symbol] The name of the fact to define
|
|
25
|
+
# @param options [Hash] A hash of options to set on the fact
|
|
26
|
+
#
|
|
27
|
+
# @return [Facter::Util::Fact] The fact that was defined
|
|
28
|
+
def define_fact(name, options = {}, &block)
|
|
29
|
+
fact = create_or_return_fact(name, options)
|
|
30
|
+
|
|
31
|
+
fact.instance_eval(&block) if block_given?
|
|
32
|
+
|
|
33
|
+
fact
|
|
34
|
+
rescue StandardError => e
|
|
35
|
+
Facter.log_exception(e, "Unable to add fact #{name}: #{e}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Add a resolution mechanism for a named fact. This does not distinguish
|
|
39
|
+
# between adding a new fact and adding a new way to resolve a fact.
|
|
40
|
+
#
|
|
41
|
+
# @param name [Symbol] The name of the fact to define
|
|
42
|
+
# @param options [Hash] A hash of options to set on the fact and resolution
|
|
43
|
+
#
|
|
44
|
+
# @return [Facter::Util::Fact] The fact that was defined
|
|
45
|
+
def add(name, options = {}, &block)
|
|
46
|
+
fact = create_or_return_fact(name, options)
|
|
47
|
+
|
|
48
|
+
fact.add(options, &block)
|
|
49
|
+
|
|
50
|
+
fact
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
include Enumerable
|
|
54
|
+
|
|
55
|
+
# Iterate across all of the facts.
|
|
56
|
+
def each
|
|
57
|
+
load_all
|
|
58
|
+
@facts.each do |name, fact|
|
|
59
|
+
value = fact.value
|
|
60
|
+
yield name.to_s, value unless value.nil?
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Return a fact by name.
|
|
65
|
+
def fact(name)
|
|
66
|
+
name = canonicalize(name)
|
|
67
|
+
|
|
68
|
+
# Try to load the fact if necessary
|
|
69
|
+
load(name) unless @facts[name]
|
|
70
|
+
|
|
71
|
+
# Try HARDER
|
|
72
|
+
internal_loader.load_all unless @facts[name]
|
|
73
|
+
|
|
74
|
+
if @facts.empty?
|
|
75
|
+
LegacyFacter.warnonce("No facts loaded from #{internal_loader.search_path.join(File::PATH_SEPARATOR)}")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
@facts[name]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Flush all cached values.
|
|
82
|
+
def flush
|
|
83
|
+
@facts.each { |_name, fact| fact.flush }
|
|
84
|
+
@external_facts_loaded = nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Return a list of all of the facts.
|
|
88
|
+
def list
|
|
89
|
+
load_all
|
|
90
|
+
@facts.keys
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Build a hash of external facts
|
|
94
|
+
def external_facts
|
|
95
|
+
return @external_facts unless @external_facts.nil?
|
|
96
|
+
|
|
97
|
+
load_external_facts
|
|
98
|
+
external_facts = @facts.select { |_k, v| v.options[:fact_type] == :external }
|
|
99
|
+
@external_facts = Facter::Utils.deep_copy(external_facts.keys)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def invalidate_custom_facts
|
|
103
|
+
@valid_custom_facts = false
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def reload_custom_facts
|
|
107
|
+
@loaded = false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Builds a hash of custom facts
|
|
111
|
+
def custom_facts
|
|
112
|
+
return @custom_facts if @valid_custom_facts
|
|
113
|
+
|
|
114
|
+
@valid_custom_facts = true
|
|
115
|
+
|
|
116
|
+
internal_loader.load_all unless @loaded
|
|
117
|
+
@loaded = true
|
|
118
|
+
|
|
119
|
+
custom_facts = @facts.select { |_k, v| v.options[:fact_type] == :custom }
|
|
120
|
+
@custom_facts = Facter::Utils.deep_copy(custom_facts.keys)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def load(name)
|
|
124
|
+
internal_loader.load(name)
|
|
125
|
+
load_external_facts
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Load all known facts.
|
|
129
|
+
def load_all
|
|
130
|
+
internal_loader.load_all
|
|
131
|
+
load_external_facts
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
attr_reader :internal_loader
|
|
135
|
+
|
|
136
|
+
attr_reader :external_loader
|
|
137
|
+
|
|
138
|
+
# Return a hash of all of our facts.
|
|
139
|
+
def to_hash
|
|
140
|
+
@facts.each_with_object({}) do |ary, h|
|
|
141
|
+
value = ary[1].value
|
|
142
|
+
unless value.nil?
|
|
143
|
+
# For backwards compatibility, convert the fact name to a string.
|
|
144
|
+
h[ary[0].to_s] = value
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def value(name)
|
|
150
|
+
fact = fact(name)
|
|
151
|
+
fact_value = fact&.value
|
|
152
|
+
return Facter.core_value(name) if fact_value.nil?
|
|
153
|
+
|
|
154
|
+
core_value = Facter.core_value(name) if fact.used_resolution_weight <= 0
|
|
155
|
+
core_value.nil? ? fact_value : core_value
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
private
|
|
159
|
+
|
|
160
|
+
def create_or_return_fact(name, options)
|
|
161
|
+
name = canonicalize(name)
|
|
162
|
+
|
|
163
|
+
fact = @facts[name]
|
|
164
|
+
|
|
165
|
+
if fact.nil?
|
|
166
|
+
fact = Facter::Util::Fact.new(name, options)
|
|
167
|
+
@facts[name] = fact
|
|
168
|
+
else
|
|
169
|
+
fact.extract_ldapname_option!(options)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
fact
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def canonicalize(name)
|
|
176
|
+
name.to_s.downcase.to_sym
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def load_external_facts
|
|
180
|
+
return if @external_facts_loaded
|
|
181
|
+
|
|
182
|
+
@external_facts_loaded = true
|
|
183
|
+
external_loader.load(self)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# A composite loader that allows for more than one
|
|
4
|
+
# default directory loader
|
|
5
|
+
|
|
6
|
+
module LegacyFacter
|
|
7
|
+
module Util
|
|
8
|
+
class CompositeLoader
|
|
9
|
+
def initialize(loaders)
|
|
10
|
+
@loaders = loaders
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def load(collection)
|
|
14
|
+
@loaders.each { |loader| loader.load(collection) }
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rbconfig'
|
|
4
|
+
|
|
5
|
+
# A module to return config related data
|
|
6
|
+
#
|
|
7
|
+
module LegacyFacter
|
|
8
|
+
module Util
|
|
9
|
+
module Config
|
|
10
|
+
def self.ext_fact_loader
|
|
11
|
+
@ext_fact_loader || LegacyFacter::Util::DirectoryLoader.default_loader
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.ext_fact_loader=(loader)
|
|
15
|
+
@ext_fact_loader = loader
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.mac?
|
|
19
|
+
RbConfig::CONFIG['host_os'] =~ /darwin/i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns true if OS is windows
|
|
23
|
+
def self.windows?
|
|
24
|
+
RbConfig::CONFIG['host_os'] =~ /mswin|win32|dos|mingw|cygwin/i
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.windows_data_dir
|
|
28
|
+
ENV['ProgramData'] || ENV['APPDATA'] if LegacyFacter::Util::Config.windows?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.external_facts_dirs
|
|
32
|
+
Facter::Options.external_dir
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.facts_cache_dir
|
|
36
|
+
@facts_cache_dir ||= setup_default_cache_dir
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.setup_default_ext_facts_dirs
|
|
40
|
+
if LegacyFacter::Util::Root.root?
|
|
41
|
+
windows_dir = windows_data_dir
|
|
42
|
+
Facter::Options[:default_external_dir] = if windows_dir
|
|
43
|
+
[File.join(windows_dir, 'PuppetLabs', 'facter', 'facts.d')]
|
|
44
|
+
else
|
|
45
|
+
[
|
|
46
|
+
'/etc/puppetlabs/facter/facts.d',
|
|
47
|
+
'/etc/facter/facts.d/',
|
|
48
|
+
'/opt/puppetlabs/facter/facts.d'
|
|
49
|
+
]
|
|
50
|
+
end
|
|
51
|
+
elsif ENV['HOME']
|
|
52
|
+
Facter::Options[:default_external_dir] =
|
|
53
|
+
[File.join(ENV['HOME'], '.facter', 'facts.d'),
|
|
54
|
+
File.join(ENV['HOME'], '.puppetlabs', 'opt', 'facter', 'facts.d')]
|
|
55
|
+
else
|
|
56
|
+
Facter::Options[:default_external_dir] = []
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if LegacyFacter::Util::Config.windows?
|
|
61
|
+
require_relative 'windows_root'
|
|
62
|
+
else
|
|
63
|
+
require_relative 'unix_root'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
setup_default_ext_facts_dirs
|
|
67
|
+
|
|
68
|
+
def self.override_binary_dir=(dir)
|
|
69
|
+
@override_binary_dir = dir
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def self.override_binary_dir
|
|
73
|
+
@override_binary_dir
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def self.setup_default_cache_dir
|
|
77
|
+
windows_dir = windows_data_dir
|
|
78
|
+
@facts_cache_dir = if windows_dir
|
|
79
|
+
File.join(windows_dir, 'PuppetLabs', 'facter', 'cache', 'cached_facts')
|
|
80
|
+
else
|
|
81
|
+
'/opt/puppetlabs/facter/cache/cached_facts'
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def self.setup_default_override_binary_dir
|
|
86
|
+
@override_binary_dir = if LegacyFacter::Util::Config.windows?
|
|
87
|
+
nil
|
|
88
|
+
else
|
|
89
|
+
'/opt/puppetlabs/puppet/bin'
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
setup_default_override_binary_dir
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|