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,55 @@
|
|
|
1
|
+
module Facter
|
|
2
|
+
module Core
|
|
3
|
+
module Execution
|
|
4
|
+
class Posix < Facter::Core::Execution::Base
|
|
5
|
+
DEFAULT_SEARCH_PATHS = ['/sbin', '/usr/sbin'].freeze
|
|
6
|
+
|
|
7
|
+
def search_paths
|
|
8
|
+
# Make sure custom_facts is usable even for non-root users. Most commands
|
|
9
|
+
# in /sbin (like ifconfig) can be run as non privileged users as
|
|
10
|
+
# long as they do not modify anything - which we do not do with custom_facts
|
|
11
|
+
ENV['PATH'].split(File::PATH_SEPARATOR) + DEFAULT_SEARCH_PATHS
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def which(bin)
|
|
15
|
+
if absolute_path?(bin)
|
|
16
|
+
return bin if File.executable?(bin) && FileTest.file?(bin)
|
|
17
|
+
else
|
|
18
|
+
search_paths.each do |dir|
|
|
19
|
+
dest = File.join(dir, bin)
|
|
20
|
+
return dest if File.executable?(dest) && FileTest.file?(dest)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
ABSOLUTE_PATH_REGEX = %r{^/}.freeze
|
|
27
|
+
|
|
28
|
+
def absolute_path?(path)
|
|
29
|
+
!!(path =~ ABSOLUTE_PATH_REGEX)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
DOUBLE_QUOTED_COMMAND = /^"(.+?)"(?:\s+(.*))?/.freeze
|
|
33
|
+
SINGLE_QUOTED_COMMAND = /^'(.+?)'(?:\s+(.*))?/.freeze
|
|
34
|
+
|
|
35
|
+
def expand_command(command)
|
|
36
|
+
exe = nil
|
|
37
|
+
args = nil
|
|
38
|
+
|
|
39
|
+
if (match = (command.match(DOUBLE_QUOTED_COMMAND) || command.match(SINGLE_QUOTED_COMMAND)))
|
|
40
|
+
exe, args = match.captures
|
|
41
|
+
else
|
|
42
|
+
exe, args = command.split(/ /, 2)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
return unless exe && (expanded = which(exe))
|
|
46
|
+
|
|
47
|
+
expanded = "'#{expanded}'" if expanded =~ /\s/
|
|
48
|
+
expanded << " #{args}" if args
|
|
49
|
+
|
|
50
|
+
expanded
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Facter
|
|
2
|
+
module Core
|
|
3
|
+
module Execution
|
|
4
|
+
class Windows < Facter::Core::Execution::Base
|
|
5
|
+
def search_paths
|
|
6
|
+
ENV['PATH'].split(File::PATH_SEPARATOR)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
DEFAULT_COMMAND_EXTENSIONS = %w[.COM .EXE .BAT .CMD].freeze
|
|
10
|
+
|
|
11
|
+
def which(bin)
|
|
12
|
+
if absolute_path?(bin)
|
|
13
|
+
return bin if File.executable?(bin)
|
|
14
|
+
else
|
|
15
|
+
search_paths.each do |dir|
|
|
16
|
+
dest = File.join(dir, bin)
|
|
17
|
+
dest.gsub!(File::SEPARATOR, File::ALT_SEPARATOR)
|
|
18
|
+
if File.extname(dest).empty?
|
|
19
|
+
exts = ENV['PATHEXT']
|
|
20
|
+
exts = exts ? exts.split(File::PATH_SEPARATOR) : DEFAULT_COMMAND_EXTENSIONS
|
|
21
|
+
exts.each do |ext|
|
|
22
|
+
destext = dest + ext
|
|
23
|
+
return destext if File.executable?(destext)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
return dest if File.executable?(dest)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
slash = '[\\\\/]'
|
|
33
|
+
name = '[^\\\\/]+'
|
|
34
|
+
ABSOLUTE_PATH_REGEX =
|
|
35
|
+
/^(([A-Z]:#{slash})|(#{slash}#{slash}#{name}#{slash}#{name})|(#{slash}#{slash}\?#{slash}#{name}))/i.freeze
|
|
36
|
+
|
|
37
|
+
def absolute_path?(path)
|
|
38
|
+
!!(path =~ ABSOLUTE_PATH_REGEX)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
DOUBLE_QUOTED_COMMAND = /^"(.+?)"(?:\s+(.*))?/.freeze
|
|
42
|
+
|
|
43
|
+
def expand_command(command)
|
|
44
|
+
exe = nil
|
|
45
|
+
args = nil
|
|
46
|
+
|
|
47
|
+
if (match = command.match(DOUBLE_QUOTED_COMMAND))
|
|
48
|
+
exe, args = match.captures
|
|
49
|
+
else
|
|
50
|
+
exe, args = command.split(/ /, 2)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
return unless exe && (expanded = which(exe))
|
|
54
|
+
|
|
55
|
+
expanded = "\"#{expanded}\"" if expanded =~ /\s+/
|
|
56
|
+
expanded << " #{args}" if args
|
|
57
|
+
|
|
58
|
+
expanded
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def execute(command, options = {})
|
|
62
|
+
expand = options.fetch(:expand, true)
|
|
63
|
+
raise ArgumentError.new, 'Unsupported argument on Windows expand with value false' unless expand
|
|
64
|
+
|
|
65
|
+
super(command, options)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "#{ROOT_DIR}/lib/custom_facts/version"
|
|
4
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/logging"
|
|
5
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/legacy_facter"
|
|
6
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/fact"
|
|
7
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/collection"
|
|
8
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/fact"
|
|
9
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/loader"
|
|
10
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/execution/base"
|
|
11
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/execution/windows"
|
|
12
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/execution/posix"
|
|
13
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/values"
|
|
14
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/confine"
|
|
15
|
+
|
|
16
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/config"
|
|
17
|
+
|
|
18
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/normalization"
|
|
19
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/execution"
|
|
20
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/resolvable"
|
|
21
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/suitable"
|
|
22
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/resolution"
|
|
23
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/directed_graph"
|
|
24
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/resolvable"
|
|
25
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/aggregate"
|
|
26
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/composite_loader"
|
|
27
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/parser"
|
|
28
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/directory_loader"
|
|
29
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/nothing_loader"
|
|
30
|
+
require "#{ROOT_DIR}/lib/custom_facts/util/nothing_loader"
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Facter - Host Fact Detection and Reporting
|
|
4
|
+
#
|
|
5
|
+
# Copyright 2011 Puppet Labs Inc
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require 'pathname'
|
|
20
|
+
|
|
21
|
+
ROOT_DIR = Pathname.new(File.expand_path('../../../', __dir__)) unless defined?(ROOT_DIR)
|
|
22
|
+
require "#{ROOT_DIR}/lib/custom_facts/core/file_loader"
|
|
23
|
+
|
|
24
|
+
# Functions as a hash of 'facts' about your system system, such as MAC
|
|
25
|
+
# address, IP address, architecture, etc.
|
|
26
|
+
#
|
|
27
|
+
# @example Retrieve a fact
|
|
28
|
+
# puts Facter['operatingsystem'].value
|
|
29
|
+
#
|
|
30
|
+
# @example Retrieve all facts
|
|
31
|
+
# Facter.to_hash
|
|
32
|
+
# => { "kernel"=>"Linux", "uptime_days"=>0, "ipaddress"=>"10.0.0.1" }
|
|
33
|
+
#
|
|
34
|
+
# @api public
|
|
35
|
+
module LegacyFacter
|
|
36
|
+
# Most core functionality of custom_facts is implemented in `Facter::Util`.
|
|
37
|
+
# @api public
|
|
38
|
+
|
|
39
|
+
include Comparable
|
|
40
|
+
include Enumerable
|
|
41
|
+
|
|
42
|
+
extend LegacyFacter::Core::Logging
|
|
43
|
+
|
|
44
|
+
# module methods
|
|
45
|
+
|
|
46
|
+
# Accessor for the collection object which holds all the facts
|
|
47
|
+
# @return [LegacyFacter::Util::Collection] the collection of facts
|
|
48
|
+
#
|
|
49
|
+
# @api private
|
|
50
|
+
def self.collection
|
|
51
|
+
unless defined?(@collection) && @collection
|
|
52
|
+
@collection = LegacyFacter::Util::Collection.new(
|
|
53
|
+
LegacyFacter::Util::Loader.new,
|
|
54
|
+
LegacyFacter::Util::Config.ext_fact_loader
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
@collection
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Returns whether the JSON "feature" is available.
|
|
61
|
+
#
|
|
62
|
+
# @api private
|
|
63
|
+
def self.json?
|
|
64
|
+
require 'json'
|
|
65
|
+
true
|
|
66
|
+
rescue LoadError
|
|
67
|
+
false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Returns a fact object by name. If you use this, you still have to
|
|
71
|
+
# call {Facter::Util::Fact#value `value`} on it to retrieve the actual
|
|
72
|
+
# value.
|
|
73
|
+
#
|
|
74
|
+
# @param name [String] the name of the fact
|
|
75
|
+
#
|
|
76
|
+
# @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
|
|
77
|
+
# is found.
|
|
78
|
+
#
|
|
79
|
+
# @api public
|
|
80
|
+
def self.[](name)
|
|
81
|
+
collection.fact(name)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# (see [])
|
|
85
|
+
def self.fact(name)
|
|
86
|
+
collection.fact(name)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Flushes cached values for all facts. This does not cause code to be
|
|
90
|
+
# reloaded; it only clears the cached results.
|
|
91
|
+
#
|
|
92
|
+
# @return [void]
|
|
93
|
+
#
|
|
94
|
+
# @api public
|
|
95
|
+
def self.flush
|
|
96
|
+
collection.flush
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Lists all fact names
|
|
100
|
+
#
|
|
101
|
+
# @return [Array<String>] array of fact names
|
|
102
|
+
#
|
|
103
|
+
# @api public
|
|
104
|
+
def self.list
|
|
105
|
+
collection.list
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Gets the value for a fact. Returns `nil` if no such fact exists.
|
|
109
|
+
#
|
|
110
|
+
# @param name [String] the fact name
|
|
111
|
+
# @return [Object, nil] the value of the fact, or nil if no fact is
|
|
112
|
+
# found
|
|
113
|
+
#
|
|
114
|
+
# @api public
|
|
115
|
+
def self.value(name)
|
|
116
|
+
collection.value(name)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Gets a hash mapping fact names to their values
|
|
120
|
+
#
|
|
121
|
+
# @return [Hash{String => Object}] the hash of fact names and values
|
|
122
|
+
#
|
|
123
|
+
# @api public
|
|
124
|
+
def self.to_hash
|
|
125
|
+
collection.load_all
|
|
126
|
+
collection.to_hash
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Define a new fact or extend an existing fact.
|
|
130
|
+
#
|
|
131
|
+
# @param name [Symbol] The name of the fact to define
|
|
132
|
+
# @param options [Hash] A hash of options to set on the fact
|
|
133
|
+
#
|
|
134
|
+
# @return [Facter::Util::Fact] The fact that was defined
|
|
135
|
+
#
|
|
136
|
+
# @api public
|
|
137
|
+
# @see {Facter::Util::Collection#define_fact}
|
|
138
|
+
def self.define_fact(name, options = {}, &block)
|
|
139
|
+
collection.define_fact(name, options, &block)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Adds a {Facter::Util::Resolution resolution} mechanism for a named
|
|
143
|
+
# fact. This does not distinguish between adding a new fact and adding
|
|
144
|
+
# a new way to resolve a fact.
|
|
145
|
+
#
|
|
146
|
+
# @overload add(name, options = {}, { || ... })
|
|
147
|
+
# @param name [String] the fact name
|
|
148
|
+
# @param options [Hash] optional parameters for the fact - attributes
|
|
149
|
+
# of {Facter::Util::Fact} and {Facter::Util::Resolution} can be
|
|
150
|
+
# supplied here
|
|
151
|
+
# @option options [Integer] :timeout set the
|
|
152
|
+
# {Facter::Util::Resolution#timeout timeout} for this resolution
|
|
153
|
+
# @param block [Proc] a block defining a fact resolution
|
|
154
|
+
#
|
|
155
|
+
# @return [Facter::Util::Fact] the fact object, which includes any previously
|
|
156
|
+
# defined resolutions
|
|
157
|
+
#
|
|
158
|
+
# @api public
|
|
159
|
+
def self.add(name, options = {}, &block)
|
|
160
|
+
collection.add(name, options, &block)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Iterates over fact names and values
|
|
164
|
+
#
|
|
165
|
+
# @yieldparam [String] name the fact name
|
|
166
|
+
# @yieldparam [String] value the current value of the fact
|
|
167
|
+
#
|
|
168
|
+
# @return [void]
|
|
169
|
+
#
|
|
170
|
+
# @api public
|
|
171
|
+
def self.each
|
|
172
|
+
# Make sure all facts are loaded.
|
|
173
|
+
collection.load_all
|
|
174
|
+
|
|
175
|
+
collection.each do |*args|
|
|
176
|
+
yield(*args)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Clears all cached values and removes all facts from memory.
|
|
181
|
+
#
|
|
182
|
+
# @return [void]
|
|
183
|
+
#
|
|
184
|
+
# @api public
|
|
185
|
+
def self.clear
|
|
186
|
+
LegacyFacter.flush
|
|
187
|
+
LegacyFacter.reset
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Removes all facts from memory. Use this when the fact code has
|
|
191
|
+
# changed on disk and needs to be reloaded.
|
|
192
|
+
#
|
|
193
|
+
# @return [void]
|
|
194
|
+
#
|
|
195
|
+
# @api public
|
|
196
|
+
def self.reset
|
|
197
|
+
@collection = nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Loads all facts.
|
|
201
|
+
#
|
|
202
|
+
# @return [void]
|
|
203
|
+
#
|
|
204
|
+
# @api public
|
|
205
|
+
def self.loadfacts
|
|
206
|
+
collection.load_all
|
|
207
|
+
end
|
|
208
|
+
end
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LegacyFacter
|
|
4
|
+
module Core
|
|
5
|
+
module Logging
|
|
6
|
+
extend self
|
|
7
|
+
|
|
8
|
+
# @api private
|
|
9
|
+
GREEN = "\e[0;32m"
|
|
10
|
+
# @api private
|
|
11
|
+
RESET = "\e[0m"
|
|
12
|
+
|
|
13
|
+
RED = "\e[31m"
|
|
14
|
+
|
|
15
|
+
# @api private
|
|
16
|
+
@@debug = false
|
|
17
|
+
# @api private
|
|
18
|
+
@@timing = false
|
|
19
|
+
# @api private
|
|
20
|
+
@@trace = false
|
|
21
|
+
|
|
22
|
+
# @api private
|
|
23
|
+
@@warn_messages = {}
|
|
24
|
+
# @api private
|
|
25
|
+
@@debug_messages = {}
|
|
26
|
+
|
|
27
|
+
# @api private
|
|
28
|
+
@@message_callback = nil
|
|
29
|
+
|
|
30
|
+
# Used to register a callback that is called when a message is logged.
|
|
31
|
+
# If a block is given, Facter will not log messages.
|
|
32
|
+
# If a block is not given, Facter will resume logging messages.
|
|
33
|
+
# @param block [Proc] the callback to call when a message is logged.
|
|
34
|
+
# The first argument to the callback will be a symbol representing a level. The supported
|
|
35
|
+
# levels are: :trace, :debug, :info, :warn, :error, and :fatal.
|
|
36
|
+
# The second argument to the callback will be a string containing the message
|
|
37
|
+
# that was logged.
|
|
38
|
+
# @api public
|
|
39
|
+
def on_message(&block)
|
|
40
|
+
@@message_callback = block
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Prints a debug message if debugging is turned on
|
|
44
|
+
#
|
|
45
|
+
# @param msg [String] the debug message
|
|
46
|
+
# @return [void]
|
|
47
|
+
def debug(msg)
|
|
48
|
+
return unless debugging?
|
|
49
|
+
|
|
50
|
+
if msg.nil? || msg.empty?
|
|
51
|
+
invoker = caller(1..1).first.slice(/.*:\d+/)
|
|
52
|
+
self.warn "#{self.class}#debug invoked with invalid message #{msg.inspect}:#{msg.class} at #{invoker}"
|
|
53
|
+
elsif @@message_callback
|
|
54
|
+
@@message_callback.call(:debug, msg)
|
|
55
|
+
else
|
|
56
|
+
puts GREEN + msg + RESET
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Prints a debug message only once.
|
|
61
|
+
#
|
|
62
|
+
# @note Uniqueness is based on the string, not the specific location
|
|
63
|
+
# of the method call.
|
|
64
|
+
#
|
|
65
|
+
# @param msg [String] the debug message
|
|
66
|
+
# @return [void]
|
|
67
|
+
def debugonce(msg)
|
|
68
|
+
return unless msg && !msg.empty? && @@debug_messages[msg].nil?
|
|
69
|
+
|
|
70
|
+
@@debug_messages[msg] = true
|
|
71
|
+
debug(msg)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Prints a warning message. The message is only printed if debugging
|
|
75
|
+
# is enabled.
|
|
76
|
+
#
|
|
77
|
+
# @param msg [String] the warning message to be printed
|
|
78
|
+
#
|
|
79
|
+
# @return [void]
|
|
80
|
+
def warn(msg)
|
|
81
|
+
if msg.nil? || msg.empty?
|
|
82
|
+
invoker = caller(1..1).first.slice(/.*:\d+/)
|
|
83
|
+
msg = "#{self.class}#debug invoked with invalid message #{msg.inspect}:#{msg.class} at #{invoker}"
|
|
84
|
+
end
|
|
85
|
+
if @@message_callback
|
|
86
|
+
@@message_callback.call(:warn, msg)
|
|
87
|
+
else
|
|
88
|
+
Kernel.warn msg
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Prints a warning message only once per process. Each unique string
|
|
93
|
+
# is printed once.
|
|
94
|
+
#
|
|
95
|
+
# @note Unlike {warn} the message will be printed even if debugging is
|
|
96
|
+
# not turned on. This behavior is likely to change and should not be
|
|
97
|
+
# relied on.
|
|
98
|
+
#
|
|
99
|
+
# @param msg [String] the warning message to be printed
|
|
100
|
+
#
|
|
101
|
+
# @return [void]
|
|
102
|
+
def warnonce(msg)
|
|
103
|
+
return unless @@warn_messages[msg].nil?
|
|
104
|
+
|
|
105
|
+
self.warn(msg)
|
|
106
|
+
@@warn_messages[msg] = true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def log_exception(exception, message = :default)
|
|
110
|
+
self.warn(format_exception(exception, message, @@trace))
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def format_exception(exception, message, trace)
|
|
114
|
+
arr = []
|
|
115
|
+
|
|
116
|
+
if message == :default
|
|
117
|
+
arr << exception.message
|
|
118
|
+
elsif message
|
|
119
|
+
arr << message
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if trace
|
|
123
|
+
arr << 'backtrace:'
|
|
124
|
+
arr.concat(exception.backtrace)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
"#{RED}#{arr.flatten.join("\n")}#{RESET}"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Print an exception message, and optionally a backtrace if trace is set
|
|
131
|
+
|
|
132
|
+
# Print timing information
|
|
133
|
+
#
|
|
134
|
+
# @param string [String] the time to print
|
|
135
|
+
# @return [void]
|
|
136
|
+
#
|
|
137
|
+
# @api private
|
|
138
|
+
def show_time(string)
|
|
139
|
+
return unless string && timing?
|
|
140
|
+
|
|
141
|
+
if @@message_callback
|
|
142
|
+
@@message_callback.call(:info, string)
|
|
143
|
+
else
|
|
144
|
+
$stderr.puts "#{GREEN}#{string}#{RESET}"
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Enable or disable logging of debug messages
|
|
149
|
+
#
|
|
150
|
+
# @param bool [true, false]
|
|
151
|
+
# @return [void]
|
|
152
|
+
#
|
|
153
|
+
# @api private
|
|
154
|
+
def debugging(bool)
|
|
155
|
+
@@debug = bool
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Is debugging enabled?
|
|
159
|
+
#
|
|
160
|
+
# @return [true, false]
|
|
161
|
+
#
|
|
162
|
+
# @api private
|
|
163
|
+
def debugging?
|
|
164
|
+
@@debug
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Enable or disable logging of timing information
|
|
168
|
+
#
|
|
169
|
+
# @param bool [true, false]
|
|
170
|
+
# @return [void]
|
|
171
|
+
#
|
|
172
|
+
# @api private
|
|
173
|
+
def timing(bool)
|
|
174
|
+
@@timing = bool
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Returns whether timing output is turned on
|
|
178
|
+
#
|
|
179
|
+
# @api private
|
|
180
|
+
def timing?
|
|
181
|
+
@@timing
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def trace(bool)
|
|
185
|
+
@@trace = bool
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def trace?
|
|
189
|
+
@@trace
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Clears the seen state of debug and warning messages. See {debugonce} and {warnonce}.
|
|
193
|
+
#
|
|
194
|
+
# @return [void]
|
|
195
|
+
#
|
|
196
|
+
# @api private
|
|
197
|
+
def clear_messages
|
|
198
|
+
@@debug_messages.clear
|
|
199
|
+
@@warn_messages.clear
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
end
|