facter 4.0.28
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 +139 -0
- data/.github/workflows/acceptance_tests.yml +65 -0
- data/.github/workflows/checks.yaml +54 -0
- data/.github/workflows/coverage.yaml +33 -0
- data/.github/workflows/unit_tests.yaml +43 -0
- data/.gitignore +57 -0
- data/.jrubyrc +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +170 -0
- data/.rubocop_todo.yml +236 -0
- data/.rubycritic.yml +4 -0
- data/CHANGELOG.md +239 -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 +72 -0
- data/VERSION +1 -0
- data/acceptance/.beaker.yml +15 -0
- data/acceptance/.gitignore +12 -0
- data/acceptance/Gemfile +24 -0
- data/acceptance/Rakefile +2 -0
- data/acceptance/bin/ci-bootstrap-from-artifacts.sh +55 -0
- data/acceptance/config/aio/options.rb +6 -0
- data/acceptance/config/git/options.rb +3 -0
- data/acceptance/config/nodes/aix-53-power.yaml +7 -0
- data/acceptance/config/nodes/aix-61-power.yaml +7 -0
- data/acceptance/config/nodes/aix-71-power.yaml +7 -0
- data/acceptance/config/nodes/huaweios-6-powerpc.yaml +7 -0
- data/acceptance/config/nodes/solaris-10-sparc.yaml +9 -0
- data/acceptance/config/nodes/solaris-11-sparc.yaml +9 -0
- data/acceptance/lib/facter/acceptance/base_fact_utils.rb +565 -0
- data/acceptance/lib/facter/acceptance/user_fact_utils.rb +132 -0
- data/acceptance/lib/helper.rb +3 -0
- data/acceptance/lib/puppet/acceptance/common_utils.rb +10 -0
- data/acceptance/lib/puppet/acceptance/git_utils.rb +19 -0
- data/acceptance/lib/puppet/acceptance/install_utils.rb +58 -0
- data/acceptance/setup/aio/pre-suite/001_run_with_facter_ng.rb +75 -0
- data/acceptance/tests/custom_facts/cached_custom_fact.rb +82 -0
- data/acceptance/tests/custom_facts/conflicts_with_builtin_fact.rb +106 -0
- data/acceptance/tests/custom_facts/custom_fact_with_10001_weight_overrides_external_fact.rb +30 -0
- data/acceptance/tests/custom_facts/expand_command.rb +30 -0
- data/acceptance/tests/custom_facts/having_multiple_facts_in_one_file.rb +40 -0
- data/acceptance/tests/custom_facts/not_expand_command.rb +30 -0
- data/acceptance/tests/custom_facts/using_win32ole_should_not_hang.rb +33 -0
- data/acceptance/tests/custom_facts/weighted_cached_custom_facts.rb +94 -0
- data/acceptance/tests/custom_facts/windows_not_expand_command.rb +30 -0
- data/acceptance/tests/external_facts/env_var_overrides_external_fact.rb +46 -0
- data/acceptance/tests/external_facts/external_dir_overrides_default_external_fact.rb +34 -0
- data/acceptance/tests/external_facts/external_fact_overrides_custom_fact.rb +29 -0
- data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_10000_weight_or_less.rb +30 -0
- data/acceptance/tests/external_facts/external_fact_overrides_custom_fact_with_confine.rb +35 -0
- data/acceptance/tests/external_facts/external_fact_stderr_messages_output_to_stderr.rb +49 -0
- data/acceptance/tests/external_facts/external_facts_only_run_once.rb +43 -0
- data/acceptance/tests/external_facts/fact_directory_precedence.rb +109 -0
- data/acceptance/tests/external_facts/handle_same_filename_in_different_dirs.rb +59 -0
- data/acceptance/tests/external_facts/non_root_users_default_external_fact_directory.rb +142 -0
- data/acceptance/tests/external_facts/root_uses_default_external_fact_dir.rb +34 -0
- data/acceptance/tests/external_facts/structured_executable_facts.rb +139 -0
- data/acceptance/tests/facter_returns_success_on_non_existent_fact.rb +9 -0
- data/acceptance/tests/facts/dmi.rb +51 -0
- data/acceptance/tests/facts/facterversion.rb +11 -0
- data/acceptance/tests/facts/identity.rb +52 -0
- data/acceptance/tests/facts/mountpoints_fact.rb +12 -0
- data/acceptance/tests/facts/networking_facts.rb +93 -0
- data/acceptance/tests/facts/nim_type.rb +12 -0
- data/acceptance/tests/facts/non_root_users_without_errors.rb +32 -0
- data/acceptance/tests/facts/operatingsystem_detection_after_clear_on_ubuntu.rb +26 -0
- data/acceptance/tests/facts/os_processors_and_kernel.rb +20 -0
- data/acceptance/tests/facts/osx_numeric_hostname.rb +23 -0
- data/acceptance/tests/facts/partitions.rb +37 -0
- data/acceptance/tests/facts/productname.rb +15 -0
- data/acceptance/tests/facts/ruby.rb +59 -0
- data/acceptance/tests/facts/ssh_key.rb +59 -0
- data/acceptance/tests/facts/validate_file_system_size_bytes.rb +37 -0
- data/acceptance/tests/facts/verify_tmpfs_file_system.rb +54 -0
- data/acceptance/tests/facts/windows_os.rb +64 -0
- data/acceptance/tests/load_libfacter.rb +66 -0
- data/acceptance/tests/no_errors_on_stderr.rb +10 -0
- data/acceptance/tests/options/color.rb +16 -0
- data/acceptance/tests/options/config.rb +27 -0
- data/acceptance/tests/options/config_file/blocklist.rb +35 -0
- data/acceptance/tests/options/config_file/blocklist_from_puppet_facts.rb +40 -0
- data/acceptance/tests/options/config_file/custom_dir_overridden_by_cli_custom_dir.rb +56 -0
- data/acceptance/tests/options/config_file/custom_facts.rb +42 -0
- data/acceptance/tests/options/config_file/custom_facts_list.rb +56 -0
- data/acceptance/tests/options/config_file/debug.rb +34 -0
- data/acceptance/tests/options/config_file/debug_override_config_file.rb +34 -0
- data/acceptance/tests/options/config_file/default_file_location.rb +37 -0
- data/acceptance/tests/options/config_file/external_dir_conflicts_with_cli_no_external_facts.rb +37 -0
- data/acceptance/tests/options/config_file/external_dir_overridden_by_cli_external_dir.rb +40 -0
- data/acceptance/tests/options/config_file/external_facts.rb +37 -0
- data/acceptance/tests/options/config_file/external_facts_list.rb +43 -0
- data/acceptance/tests/options/config_file/load_from_ruby.rb +73 -0
- data/acceptance/tests/options/config_file/log_level.rb +35 -0
- data/acceptance/tests/options/config_file/no_custom_facts_and_custom_dir.rb +43 -0
- data/acceptance/tests/options/config_file/no_custom_facts_and_facterlib.rb +43 -0
- data/acceptance/tests/options/config_file/no_custom_facts_and_load_path.rb +49 -0
- data/acceptance/tests/options/config_file/no_external_facts.rb +38 -0
- data/acceptance/tests/options/config_file/no_external_facts_and_external_dir.rb +34 -0
- data/acceptance/tests/options/config_file/no_ruby_disables_custom_facts.rb +52 -0
- data/acceptance/tests/options/config_file/no_ruby_disables_ruby_facts.rb +34 -0
- data/acceptance/tests/options/config_file/trace.rb +48 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_json_output.rb +92 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_text_output.rb +74 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_execution_resolver_with_yaml_output.rb +88 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_json_resolver.rb +79 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_text_resolver.rb +78 -0
- data/acceptance/tests/options/config_file/ttls_cached_external_yaml_resolver.rb +78 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_clear_by_empty_ttls_cache_list.rb +71 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_creates_json_cache_file.rb +48 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_do_not_read_the_old_cached_value.rb +58 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_expire_facts_refresh_the_cached_value.rb +61 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_read_from_the_cached_value.rb +57 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_corrupt_are_refreshed.rb +53 -0
- data/acceptance/tests/options/config_file/ttls_cached_facts_that_are_empty_return_an_empty_value.rb +53 -0
- data/acceptance/tests/options/config_file/ttls_puppet_facts_creates_json_for_cached_facts.rb +45 -0
- data/acceptance/tests/options/config_file/ttls_puppet_facts_honors_cached_facts.rb +54 -0
- data/acceptance/tests/options/config_file/verbose.rb +34 -0
- data/acceptance/tests/options/custom_facts.rb +34 -0
- data/acceptance/tests/options/custom_facts_facterlib.rb +33 -0
- data/acceptance/tests/options/custom_facts_list.rb +48 -0
- data/acceptance/tests/options/custom_facts_load_path.rb +42 -0
- data/acceptance/tests/options/debug.rb +12 -0
- data/acceptance/tests/options/external_facts.rb +28 -0
- data/acceptance/tests/options/external_facts_list.rb +35 -0
- data/acceptance/tests/options/help.rb +13 -0
- data/acceptance/tests/options/json.rb +43 -0
- data/acceptance/tests/options/list_block_groups.rb +15 -0
- data/acceptance/tests/options/list_block_groups_facter_4.rb +15 -0
- data/acceptance/tests/options/list_cache_groups.rb +65 -0
- data/acceptance/tests/options/log_level.rb +13 -0
- data/acceptance/tests/options/no_block.rb +34 -0
- data/acceptance/tests/options/no_cache_should_not_cache_facts.rb +43 -0
- data/acceptance/tests/options/no_cache_should_not_load_cached_facts.rb +58 -0
- data/acceptance/tests/options/no_cache_should_not_refresh_cached_facts.rb +63 -0
- data/acceptance/tests/options/no_color.rb +16 -0
- data/acceptance/tests/options/no_custom_facts.rb +34 -0
- data/acceptance/tests/options/no_custom_facts_and_custom_dir.rb +19 -0
- data/acceptance/tests/options/no_custom_facts_and_facterlib.rb +34 -0
- data/acceptance/tests/options/no_custom_facts_and_load_path.rb +43 -0
- data/acceptance/tests/options/no_external_facts.rb +28 -0
- data/acceptance/tests/options/no_external_facts_and_external_dir.rb +19 -0
- data/acceptance/tests/options/no_ruby.rb +44 -0
- data/acceptance/tests/options/puppet_facts.rb +37 -0
- data/acceptance/tests/options/show_legacy.rb +18 -0
- data/acceptance/tests/options/strict.rb +11 -0
- data/acceptance/tests/options/trace.rb +36 -0
- data/acceptance/tests/options/verbose.rb +12 -0
- data/acceptance/tests/options/version.rb +12 -0
- data/acceptance/tests/options/yaml.rb +43 -0
- data/acceptance/tests/ticket_1123_facter_with_invalid_locale.rb +23 -0
- data/acceptance/tests/ticket_1238_hostname_fqdn.rb +57 -0
- data/agent/facter-ng.gemspec +48 -0
- data/agent/lib/facter-ng.rb +7 -0
- data/bin/facter +12 -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 +182 -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 +112 -0
- data/lib/custom_facts/util/fact.rb +226 -0
- data/lib/custom_facts/util/loader.rb +157 -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 +381 -0
- data/lib/facts/aix/aio_agent_version.rb +14 -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/bsd/processors/count.rb +17 -0
- data/lib/facts/bsd/processors/models.rb +23 -0
- data/lib/facts/bsd/processors/speed.rb +17 -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/disks.rb +15 -0
- data/lib/facts/freebsd/os/release.rb +43 -0
- data/lib/facts/freebsd/partitions.rb +15 -0
- data/lib/facts/freebsd/processors/count.rb +17 -0
- data/lib/facts/freebsd/processors/models.rb +23 -0
- data/lib/facts/freebsd/processors/speed.rb +17 -0
- data/lib/facts/linux/aio_agent_version.rb +14 -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/ec2_metadata.rb +47 -0
- data/lib/facts/linux/ec2_userdata.rb +47 -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/is_virtual.rb +64 -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 +58 -0
- data/lib/facts/macosx/aio_agent_version.rb +14 -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/dhcp.rb +17 -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/interfaces.rb +21 -0
- data/lib/facts/macosx/networking/ip.rb +21 -0
- data/lib/facts/macosx/networking/ip6.rb +21 -0
- data/lib/facts/macosx/networking/mac.rb +21 -0
- data/lib/facts/macosx/networking/mtu.rb +20 -0
- data/lib/facts/macosx/networking/netmask.rb +21 -0
- data/lib/facts/macosx/networking/netmask6.rb +21 -0
- data/lib/facts/macosx/networking/network.rb +21 -0
- data/lib/facts/macosx/networking/network6.rb +21 -0
- data/lib/facts/macosx/networking/primary.rb +17 -0
- data/lib/facts/macosx/networking/scope6.rb +20 -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/aio_agent_version.rb +14 -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/aio_agent_version.rb +14 -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/ec2_metadata.rb +23 -0
- data/lib/facts/windows/ec2_userdata.rb +23 -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/hypervisors.rb +10 -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 +59 -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 +153 -0
- data/lib/framework/core/fact/external/external_fact_manager.rb +32 -0
- data/lib/framework/core/fact/internal/core_fact.rb +15 -0
- data/lib/framework/core/fact/internal/internal_fact_manager.rb +65 -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 +46 -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 +94 -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 +115 -0
- data/lib/framework/utils/utils.rb +37 -0
- data/lib/models/fact_collection.rb +45 -0
- data/lib/models/loaded_fact.rb +15 -0
- data/lib/models/resolved_fact.rb +28 -0
- data/lib/models/searched_fact.rb +16 -0
- data/lib/resolvers/aio_agent_version.rb +24 -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 +56 -0
- data/lib/resolvers/bsd/load_averages_resolver.rb +26 -0
- data/lib/resolvers/bsd/processors.rb +47 -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/ec2.rb +77 -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/ffi/ffi_helper.rb +42 -0
- data/lib/resolvers/freebsd/freebsd_version_resolver.rb +37 -0
- data/lib/resolvers/freebsd/geom_resolver.rb +109 -0
- data/lib/resolvers/freebsd/processors.rb +44 -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/lspci.rb +35 -0
- data/lib/resolvers/macosx/dmi_resolver.rb +28 -0
- data/lib/resolvers/macosx/filesystems_resolver.rb +32 -0
- data/lib/resolvers/macosx/load_averages_resolver.rb +26 -0
- data/lib/resolvers/macosx/mountpoints_resolver.rb +61 -0
- data/lib/resolvers/macosx/networking.rb +110 -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 +141 -0
- data/lib/resolvers/open_vz.rb +45 -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/networking.rb +70 -0
- data/lib/resolvers/utils/ssh.rb +13 -0
- data/lib/resolvers/utils/ssh_helper.rb +27 -0
- data/lib/resolvers/virt_what.rb +64 -0
- data/lib/resolvers/vmware.rb +29 -0
- data/lib/resolvers/windows/aio_agent_version.rb +56 -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/resolvers/xen.rb +26 -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 +976 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LegacyFacter
|
|
4
|
+
module Util
|
|
5
|
+
# A util module for custom_facts containing helper methods
|
|
6
|
+
module Values
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
class DeepFreezeError < StandardError; end
|
|
10
|
+
|
|
11
|
+
# Duplicate and deeply freeze a given data structure
|
|
12
|
+
#
|
|
13
|
+
# @param value [Object] The structure to freeze
|
|
14
|
+
# @return [void]
|
|
15
|
+
def deep_freeze(value)
|
|
16
|
+
case value
|
|
17
|
+
when Numeric, Symbol, TrueClass, FalseClass, NilClass
|
|
18
|
+
# These are immutable values, we can safely ignore them
|
|
19
|
+
value
|
|
20
|
+
when String
|
|
21
|
+
value.dup.freeze
|
|
22
|
+
when Array
|
|
23
|
+
value.map do |entry|
|
|
24
|
+
deep_freeze(entry)
|
|
25
|
+
end.freeze
|
|
26
|
+
when Hash
|
|
27
|
+
value.each_with_object({}) do |(key, val), hash|
|
|
28
|
+
hash[deep_freeze(key)] = deep_freeze(val)
|
|
29
|
+
end.freeze
|
|
30
|
+
else
|
|
31
|
+
raise DeepFreezeError, "Cannot deep freeze #{value}:#{value.class}"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class DeepMergeError < StandardError; end
|
|
36
|
+
|
|
37
|
+
# Perform a deep merge of two nested data structures.
|
|
38
|
+
#
|
|
39
|
+
# @param left [Object]
|
|
40
|
+
# @param right [Object]
|
|
41
|
+
# @param path [Array<String>] The traversal path followed when merging nested hashes
|
|
42
|
+
#
|
|
43
|
+
# @return [Object] The merged data structure.
|
|
44
|
+
def deep_merge(left, right, path = [])
|
|
45
|
+
ret = nil
|
|
46
|
+
|
|
47
|
+
if left.is_a?(Hash) && right.is_a?(Hash)
|
|
48
|
+
ret = left.merge(right) do |key, left_val, right_val|
|
|
49
|
+
path.push(key)
|
|
50
|
+
merged = deep_merge(left_val, right_val, path)
|
|
51
|
+
path.pop
|
|
52
|
+
merged
|
|
53
|
+
end
|
|
54
|
+
elsif left.is_a?(Array) && right.is_a?(Array)
|
|
55
|
+
ret = left.dup.concat(right)
|
|
56
|
+
elsif right.nil?
|
|
57
|
+
ret = left
|
|
58
|
+
elsif left.nil?
|
|
59
|
+
ret = right
|
|
60
|
+
elsif left.nil? && right.nil?
|
|
61
|
+
ret = nil
|
|
62
|
+
else
|
|
63
|
+
msg = "Cannot merge #{left.inspect}:#{left.class} and #{right.inspect}:#{right.class}"
|
|
64
|
+
unless path.empty?
|
|
65
|
+
msg << ' at root'
|
|
66
|
+
msg << path.map { |part| "[#{part.inspect}]" }.join
|
|
67
|
+
end
|
|
68
|
+
raise DeepMergeError, msg
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
ret
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def convert(value)
|
|
75
|
+
value = value.to_s if value.is_a?(Symbol)
|
|
76
|
+
value = value.downcase if value.is_a?(String)
|
|
77
|
+
value
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Flatten the given data structure to something that's suitable to return
|
|
81
|
+
# as flat facts.
|
|
82
|
+
#
|
|
83
|
+
# @param path [String] The fact path to be prefixed to the given value.
|
|
84
|
+
# @param structure [Object] The data structure to flatten. Nested hashes
|
|
85
|
+
# will be recursively flattened, everything else will be returned as-is.
|
|
86
|
+
#
|
|
87
|
+
# @return [Hash] The given data structure prefixed with the given path
|
|
88
|
+
def flatten_structure(path, structure)
|
|
89
|
+
results = {}
|
|
90
|
+
|
|
91
|
+
if structure.is_a? Hash
|
|
92
|
+
structure.each_pair do |name, value|
|
|
93
|
+
new_path = "#{path}_#{name}".gsub(%r{\-|/}, '_')
|
|
94
|
+
results.merge! flatten_structure(new_path, value)
|
|
95
|
+
end
|
|
96
|
+
elsif structure.is_a? Array
|
|
97
|
+
structure.each_with_index do |value, index|
|
|
98
|
+
new_path = "#{path}_#{index}"
|
|
99
|
+
results.merge! flatten_structure(new_path, value)
|
|
100
|
+
end
|
|
101
|
+
else
|
|
102
|
+
results[path] = structure
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
results
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LegacyFacter
|
|
4
|
+
FACTERVERSION = '2.5.5' unless defined? FACTERVERSION
|
|
5
|
+
|
|
6
|
+
# Returns the running version of Facter.
|
|
7
|
+
#
|
|
8
|
+
# @comment The intent is that software external to Facter be able to
|
|
9
|
+
# determine the Facter version with no side-effects. The expected
|
|
10
|
+
# use is:
|
|
11
|
+
#
|
|
12
|
+
# require 'custom_facts/version'
|
|
13
|
+
# version = Facter.version
|
|
14
|
+
#
|
|
15
|
+
# This function has the following ordering precedence. This precedence list
|
|
16
|
+
# is designed to facilitate automated packaging tasks by simply writing to
|
|
17
|
+
# the VERSION file in the same directory as this source file.
|
|
18
|
+
#
|
|
19
|
+
# 1. If a version has been explicitly assigned using the Facter.version=
|
|
20
|
+
# method, return that version.
|
|
21
|
+
# 2. If there is a VERSION file, read the contents, trim any
|
|
22
|
+
# trailing whitespace, and return that version string.
|
|
23
|
+
# 3. Return the value of the Facter::FACTERVERSION constant hard-coded into
|
|
24
|
+
# the source code.
|
|
25
|
+
#
|
|
26
|
+
# If there is no VERSION file, the method must return the version string of
|
|
27
|
+
# the nearest parent version that is an officially released version. That is
|
|
28
|
+
# to say, if a branch named 3.1.x contains 25 patches on top of the most
|
|
29
|
+
# recent official release of 3.1.1, then the version method must return the
|
|
30
|
+
# string "3.1.1" if no "VERSION" file is present.
|
|
31
|
+
#
|
|
32
|
+
# By design the version identifier is _not_ intended to vary during the life of
|
|
33
|
+
# a process. There is no guarantee provided that writing to the VERSION file
|
|
34
|
+
# while a Puppet process is running will cause the version string to be
|
|
35
|
+
# updated. On the contrary, the contents of the VERSION are cached to reduce
|
|
36
|
+
# filesystem accesses.
|
|
37
|
+
#
|
|
38
|
+
# The VERSION file is intended to be used by package maintainers who may be
|
|
39
|
+
# applying patches or otherwise changing the software version in a manner
|
|
40
|
+
# that warrants a different software version identifier. The VERSION file is
|
|
41
|
+
# intended to be managed and owned by the release process and packaging
|
|
42
|
+
# related tasks, and as such should not reside in version control. The
|
|
43
|
+
# FACTERVERSION constant is intended to be version controlled in history.
|
|
44
|
+
#
|
|
45
|
+
# Ideally, this behavior will allow package maintainers to precisely specify
|
|
46
|
+
# the version of the software they're packaging as in the following example:
|
|
47
|
+
#
|
|
48
|
+
# $ git describe > lib/custom_facts/VERSION
|
|
49
|
+
# $ ruby -r custom_facts -e 'puts Facter.version'
|
|
50
|
+
# 1.6.14-6-g66f2c99
|
|
51
|
+
#
|
|
52
|
+
# @api public
|
|
53
|
+
#
|
|
54
|
+
# @return [String] containing the custom_facts version, e.g. "1.6.14"
|
|
55
|
+
def self.version
|
|
56
|
+
version_file = File.join(File.dirname(__FILE__), 'VERSION')
|
|
57
|
+
return @version if @version
|
|
58
|
+
|
|
59
|
+
if (version = read_version_file(version_file))
|
|
60
|
+
@version = version
|
|
61
|
+
end
|
|
62
|
+
@version ||= FACTERVERSION
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Sets the Facter version
|
|
66
|
+
#
|
|
67
|
+
# @return [void]
|
|
68
|
+
#
|
|
69
|
+
# @api private
|
|
70
|
+
def self.version=(version)
|
|
71
|
+
@version = version
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# This reads the content of the "VERSION" file that lives in the
|
|
75
|
+
# same directory as this source code file.
|
|
76
|
+
#
|
|
77
|
+
# @api private
|
|
78
|
+
#
|
|
79
|
+
# @return [String] the version -- for example: "1.6.14-6-gea42046" or nil if the VERSION
|
|
80
|
+
# file does not exist.
|
|
81
|
+
def self.read_version_file(path)
|
|
82
|
+
Util::FileHelper.safe_read(path).chomp
|
|
83
|
+
end
|
|
84
|
+
private_class_method :read_version_file
|
|
85
|
+
end
|
data/lib/facter.rb
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require_relative 'util/api_debugger' if ENV['API_DEBUG']
|
|
5
|
+
|
|
6
|
+
ROOT_DIR = Pathname.new(File.expand_path('..', __dir__)) unless defined?(ROOT_DIR)
|
|
7
|
+
|
|
8
|
+
require "#{ROOT_DIR}/lib/framework/core/file_loader"
|
|
9
|
+
require "#{ROOT_DIR}/lib/framework/core/options/options_validator"
|
|
10
|
+
|
|
11
|
+
module Facter
|
|
12
|
+
class ResolveCustomFactError < StandardError; end
|
|
13
|
+
|
|
14
|
+
Options.init
|
|
15
|
+
Log.output(STDOUT)
|
|
16
|
+
@already_searched = {}
|
|
17
|
+
@trace = false
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
def clear_messages
|
|
21
|
+
logger.debug('clear_messages is not implemented')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Alias method for Facter.fact()
|
|
25
|
+
# @param name [string] fact name
|
|
26
|
+
#
|
|
27
|
+
# @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
|
|
28
|
+
# is found.
|
|
29
|
+
#
|
|
30
|
+
# @api public
|
|
31
|
+
def [](name)
|
|
32
|
+
fact(name)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Add custom facts to fact collection
|
|
36
|
+
# @param name [String] Custom fact name
|
|
37
|
+
# @param options = {} [Hash] optional parameters for the fact - attributes
|
|
38
|
+
# of {Facter::Util::Fact} and {Facter::Util::Resolution} can be
|
|
39
|
+
# supplied here
|
|
40
|
+
# @param block [Proc] a block defining a fact resolution
|
|
41
|
+
#
|
|
42
|
+
# @return [Facter::Util::Fact] the fact object, which includes any previously
|
|
43
|
+
# defined resolutions
|
|
44
|
+
#
|
|
45
|
+
# @api public
|
|
46
|
+
def add(name, options = {}, &block)
|
|
47
|
+
options[:fact_type] = :custom
|
|
48
|
+
LegacyFacter.add(name, options, &block)
|
|
49
|
+
LegacyFacter.collection.invalidate_custom_facts
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Clears all cached values and removes all facts from memory.
|
|
53
|
+
#
|
|
54
|
+
# @return [nil]
|
|
55
|
+
#
|
|
56
|
+
# @api public
|
|
57
|
+
def clear
|
|
58
|
+
@already_searched = {}
|
|
59
|
+
LegacyFacter.clear
|
|
60
|
+
Options[:custom_dir] = []
|
|
61
|
+
LegacyFacter.collection.invalidate_custom_facts
|
|
62
|
+
LegacyFacter.collection.reload_custom_facts
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def core_value(user_query)
|
|
66
|
+
user_query = user_query.to_s
|
|
67
|
+
resolved_facts = Facter::FactManager.instance.resolve_core([user_query])
|
|
68
|
+
fact_collection = FactCollection.new.build_fact_collection!(resolved_facts)
|
|
69
|
+
splitted_user_query = Facter::Utils.split_user_query(user_query)
|
|
70
|
+
fact_collection.dig(*splitted_user_query)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Prints out a debug message when debug option is set to true
|
|
74
|
+
# @param msg [String] Message to be printed out
|
|
75
|
+
#
|
|
76
|
+
# @return [nil]
|
|
77
|
+
#
|
|
78
|
+
# @api public
|
|
79
|
+
def debug(msg)
|
|
80
|
+
return unless debugging?
|
|
81
|
+
|
|
82
|
+
logger.debug(msg)
|
|
83
|
+
nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def on_message(&block)
|
|
87
|
+
Facter::Log.on_message(&block)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Check whether debuging is enabled
|
|
91
|
+
#
|
|
92
|
+
# @return [bool]
|
|
93
|
+
#
|
|
94
|
+
# @api public
|
|
95
|
+
def debugging?
|
|
96
|
+
Options[:debug]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Enable or disable debugging
|
|
100
|
+
# @param debug_bool [bool] State which debugging should have
|
|
101
|
+
#
|
|
102
|
+
# @return [type] [description]
|
|
103
|
+
#
|
|
104
|
+
# @api public
|
|
105
|
+
def debugging(debug_bool)
|
|
106
|
+
Facter::Options[:debug] = debug_bool
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Returns a fact object by name. If you use this, you still have to
|
|
110
|
+
# call {Facter::Util::Fact#value `value`} on it to retrieve the actual
|
|
111
|
+
# value.
|
|
112
|
+
#
|
|
113
|
+
# @param name [String] the name of the fact
|
|
114
|
+
#
|
|
115
|
+
# @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
|
|
116
|
+
# is found.
|
|
117
|
+
#
|
|
118
|
+
# @api public
|
|
119
|
+
def fact(user_query)
|
|
120
|
+
user_query = user_query.to_s
|
|
121
|
+
resolve_fact(user_query)
|
|
122
|
+
|
|
123
|
+
@already_searched[user_query]
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Reset search paths for custom and external facts
|
|
127
|
+
# If config file is set custom and external facts will be reloaded
|
|
128
|
+
#
|
|
129
|
+
# @return [nil]
|
|
130
|
+
#
|
|
131
|
+
# @api public
|
|
132
|
+
def reset
|
|
133
|
+
LegacyFacter.reset
|
|
134
|
+
Options[:custom_dir] = []
|
|
135
|
+
Options[:external_dir] = []
|
|
136
|
+
nil
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Register directories to be searched for custom facts. The registered directories
|
|
140
|
+
# must be absolute paths or they will be ignored.
|
|
141
|
+
#
|
|
142
|
+
# @param dirs [Array<String>] An array of searched directories
|
|
143
|
+
#
|
|
144
|
+
# @return [void]
|
|
145
|
+
#
|
|
146
|
+
# @api public
|
|
147
|
+
def search(*dirs)
|
|
148
|
+
Options[:custom_dir] += dirs
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Registers directories to be searched for external facts.
|
|
152
|
+
#
|
|
153
|
+
# @param dirs [Array<String>] An array of searched directories
|
|
154
|
+
#
|
|
155
|
+
# @return [void]
|
|
156
|
+
#
|
|
157
|
+
# @api public
|
|
158
|
+
def search_external(dirs)
|
|
159
|
+
Options[:external_dir] += dirs
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Returns the registered search directories.for external facts.
|
|
163
|
+
#
|
|
164
|
+
# @return [Array<String>] An array of searched directories
|
|
165
|
+
#
|
|
166
|
+
# @api public
|
|
167
|
+
def search_external_path
|
|
168
|
+
Options.external_dir
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Returns the registered search directories for custom facts.
|
|
172
|
+
#
|
|
173
|
+
# @return [Array<String>] An array of the directories searched
|
|
174
|
+
#
|
|
175
|
+
# @api public
|
|
176
|
+
def search_path
|
|
177
|
+
Options.custom_dir
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Gets a hash mapping fact names to their values
|
|
181
|
+
# The hash contains core facts, legacy facts, custom facts and external facts (all facts that can be resolved).
|
|
182
|
+
#
|
|
183
|
+
# @return [FactCollection] the hash of fact names and values
|
|
184
|
+
#
|
|
185
|
+
# @api public
|
|
186
|
+
def to_hash
|
|
187
|
+
log_blocked_facts
|
|
188
|
+
|
|
189
|
+
resolved_facts = Facter::FactManager.instance.resolve_facts
|
|
190
|
+
Facter::SessionCache.invalidate_all_caches
|
|
191
|
+
Facter::FactCollection.new.build_fact_collection!(resolved_facts)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Check whether printing stack trace is enabled
|
|
195
|
+
#
|
|
196
|
+
# @return [bool]
|
|
197
|
+
#
|
|
198
|
+
# @api public
|
|
199
|
+
def trace?
|
|
200
|
+
@trace
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Enable or disable trace
|
|
204
|
+
# @param debug_bool [bool] Set trace on debug state
|
|
205
|
+
#
|
|
206
|
+
# @return [type] [description]
|
|
207
|
+
#
|
|
208
|
+
# @api public
|
|
209
|
+
def trace(bool)
|
|
210
|
+
@trace = bool
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# Gets the value for a fact. Returns `nil` if no such fact exists.
|
|
214
|
+
#
|
|
215
|
+
# @param name [String] the fact name
|
|
216
|
+
# @return [String] the value of the fact, or nil if no fact is found
|
|
217
|
+
#
|
|
218
|
+
# @api public
|
|
219
|
+
def value(user_query)
|
|
220
|
+
user_query = user_query.to_s
|
|
221
|
+
resolve_fact(user_query)
|
|
222
|
+
@already_searched[user_query]&.value
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Returns Facter version
|
|
226
|
+
#
|
|
227
|
+
# @return [String] Current version
|
|
228
|
+
#
|
|
229
|
+
# @api public
|
|
230
|
+
def version
|
|
231
|
+
version_file = ::File.join(ROOT_DIR, 'VERSION')
|
|
232
|
+
::File.read(version_file).strip
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Gets a hash mapping fact names to their values
|
|
236
|
+
#
|
|
237
|
+
# @return [Array] the hash of fact names and values
|
|
238
|
+
#
|
|
239
|
+
# @api private
|
|
240
|
+
def to_user_output(cli_options, *args)
|
|
241
|
+
init_cli_options(cli_options, args)
|
|
242
|
+
logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
|
|
243
|
+
log_blocked_facts
|
|
244
|
+
resolved_facts = Facter::FactManager.instance.resolve_facts(args)
|
|
245
|
+
SessionCache.invalidate_all_caches
|
|
246
|
+
fact_formatter = Facter::FormatterFactory.build(Facter::Options.get)
|
|
247
|
+
|
|
248
|
+
status = error_check(resolved_facts)
|
|
249
|
+
|
|
250
|
+
[fact_formatter.format(resolved_facts), status || 0]
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def log_exception(exception, message = :default)
|
|
254
|
+
arr = []
|
|
255
|
+
if message == :default
|
|
256
|
+
arr << exception.message
|
|
257
|
+
elsif message
|
|
258
|
+
arr << message
|
|
259
|
+
end
|
|
260
|
+
if @trace
|
|
261
|
+
arr << 'backtrace:'
|
|
262
|
+
arr.concat(exception.backtrace)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
logger.error(arr.flatten.join("\n"))
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
private
|
|
269
|
+
|
|
270
|
+
def logger
|
|
271
|
+
@logger ||= Log.new(self)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def init_cli_options(options, args)
|
|
275
|
+
options = options.map { |(k, v)| [k.to_sym, v] }.to_h
|
|
276
|
+
Facter::Options.init_from_cli(options, args)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def add_fact_to_searched_facts(user_query, value)
|
|
280
|
+
@already_searched[user_query] ||= ResolvedFact.new(user_query, value)
|
|
281
|
+
@already_searched[user_query].value = value
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
# Returns a ResolvedFact and saves the result in @already_searched array that is used as a global collection.
|
|
285
|
+
# @param user_query [String] Fact that needs resolution
|
|
286
|
+
#
|
|
287
|
+
# @return [ResolvedFact]
|
|
288
|
+
def resolve_fact(user_query)
|
|
289
|
+
user_query = user_query.to_s
|
|
290
|
+
resolved_facts = Facter::FactManager.instance.resolve_facts([user_query])
|
|
291
|
+
SessionCache.invalidate_all_caches
|
|
292
|
+
# we must make a distinction between custom facts that return nil and nil facts
|
|
293
|
+
# Nil facts should not be packaged as ResolvedFacts! (add_fact_to_searched_facts packages facts)
|
|
294
|
+
resolved_facts = resolved_facts.reject { |fact| fact.type == :nil }
|
|
295
|
+
fact_collection = FactCollection.new.build_fact_collection!(resolved_facts)
|
|
296
|
+
splitted_user_query = Facter::Utils.split_user_query(user_query)
|
|
297
|
+
|
|
298
|
+
begin
|
|
299
|
+
value = fact_collection.value(*splitted_user_query)
|
|
300
|
+
add_fact_to_searched_facts(user_query, value)
|
|
301
|
+
rescue KeyError
|
|
302
|
+
nil
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
# Returns exit status when user query contains facts that do
|
|
307
|
+
# not exist
|
|
308
|
+
#
|
|
309
|
+
# @param dirs [Array] Arguments sent to CLI
|
|
310
|
+
# @param dirs [Array] List of resolved facts
|
|
311
|
+
#
|
|
312
|
+
# @return [Integer, nil] Will return status 1 if user query contains
|
|
313
|
+
# facts that are not found or resolved, otherwise it will return nil
|
|
314
|
+
#
|
|
315
|
+
# @api private
|
|
316
|
+
def error_check(resolved_facts)
|
|
317
|
+
if Options[:strict]
|
|
318
|
+
missing_names = resolved_facts.select { |fact| fact.type == :nil }.map(&:user_query)
|
|
319
|
+
|
|
320
|
+
if missing_names.count.positive?
|
|
321
|
+
status = 1
|
|
322
|
+
log_errors(missing_names)
|
|
323
|
+
else
|
|
324
|
+
status = nil
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
status
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
# Prints out blocked facts before to_hash or to_user_output is called
|
|
332
|
+
#
|
|
333
|
+
# @return [nil]
|
|
334
|
+
#
|
|
335
|
+
# @api private
|
|
336
|
+
def log_blocked_facts
|
|
337
|
+
block_list = Options[:block_list]
|
|
338
|
+
return unless block_list.any? && Facter::Options[:block]
|
|
339
|
+
|
|
340
|
+
logger.debug("blocking collection of #{block_list.join("\s")} facts")
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
# Used for printing errors regarding CLI user input validation
|
|
344
|
+
#
|
|
345
|
+
# @param missing_names [Array] List of facts that were requested
|
|
346
|
+
# but not found
|
|
347
|
+
#
|
|
348
|
+
# @return [nil]
|
|
349
|
+
#
|
|
350
|
+
# @api private
|
|
351
|
+
def log_errors(missing_names)
|
|
352
|
+
missing_names.each do |missing_name|
|
|
353
|
+
logger.error("fact \"#{missing_name}\" does not exist.", true)
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# Proxy method that catches not yet implemented method calls
|
|
358
|
+
#
|
|
359
|
+
# @param name [type] [description]
|
|
360
|
+
# @param *args [type] [description]
|
|
361
|
+
# @param &block [type] [description]
|
|
362
|
+
#
|
|
363
|
+
# @return [type] [description]
|
|
364
|
+
#
|
|
365
|
+
# @api private
|
|
366
|
+
def method_missing(name, *args, &block)
|
|
367
|
+
logger.error(
|
|
368
|
+
"--#{name}-- not implemented but required \n" \
|
|
369
|
+
'with params: ' \
|
|
370
|
+
"#{args.inspect} \n" \
|
|
371
|
+
'with block: ' \
|
|
372
|
+
"#{block.inspect} \n" \
|
|
373
|
+
"called by: \n" \
|
|
374
|
+
"#{caller} \n"
|
|
375
|
+
)
|
|
376
|
+
nil
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
prepend ApiDebugger if ENV['API_DEBUG']
|
|
380
|
+
end
|
|
381
|
+
end
|