facter 4.0.43 → 4.0.49
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 +4 -4
- data/lib/docs/generate.rb +32 -0
- data/lib/docs/template.erb +34 -0
- data/lib/facter.rb +65 -9
- data/lib/facter/config.rb +385 -0
- data/lib/facter/custom_facts/core/aggregate.rb +7 -0
- data/lib/facter/custom_facts/core/execution.rb +28 -4
- data/lib/facter/custom_facts/core/execution/base.rb +33 -33
- data/lib/facter/custom_facts/util/collection.rb +1 -2
- data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
- data/lib/facter/custom_facts/util/fact.rb +39 -3
- data/lib/facter/custom_facts/util/loader.rb +1 -1
- data/lib/facter/custom_facts/util/parser.rb +17 -3
- data/lib/facter/custom_facts/util/resolution.rb +2 -2
- data/lib/facter/facts/aix/disks.rb +1 -1
- data/lib/facter/facts/aix/interfaces.rb +1 -0
- data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
- data/lib/facter/facts/aix/memory/system/available.rb +1 -1
- data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/system/total.rb +1 -1
- data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/system/used.rb +1 -1
- data/lib/facter/facts/aix/processors/speed.rb +1 -1
- data/lib/facter/facts/aix/ssh.rb +1 -1
- data/lib/facter/facts/aix/sshalgorithmkey.rb +1 -1
- data/lib/facter/facts/aix/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/bsd/processors/speed.rb +1 -1
- data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
- data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
- data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
- data/lib/facter/facts/freebsd/ssh.rb +1 -1
- data/lib/facter/facts/freebsd/sshalgorithmkey.rb +1 -1
- data/lib/facter/facts/freebsd/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/freebsd/virtual.rb +22 -0
- data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
- data/lib/facter/facts/linux/disks.rb +1 -1
- data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
- data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
- data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
- data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
- data/lib/facter/facts/linux/interfaces.rb +1 -0
- data/lib/facter/facts/linux/is_virtual.rb +2 -2
- data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
- data/lib/facter/facts/linux/memory/system/available.rb +1 -1
- data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/system/total.rb +1 -1
- data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/system/used.rb +1 -1
- data/lib/facter/facts/linux/os/family.rb +4 -2
- data/lib/facter/facts/linux/processors/speed.rb +1 -1
- data/lib/facter/facts/linux/ssh.rb +1 -1
- data/lib/facter/facts/linux/sshalgorithmkey.rb +1 -1
- data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/linux/virtual.rb +1 -1
- data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
- data/lib/facter/facts/macosx/interfaces.rb +1 -0
- data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
- data/lib/facter/facts/macosx/processors/speed.rb +1 -1
- data/lib/facter/facts/macosx/ssh.rb +1 -1
- data/lib/facter/facts/macosx/sshalgorithmkey.rb +1 -1
- data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/rhel/os/release.rb +1 -1
- data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
- data/lib/facter/facts/solaris/disks.rb +1 -1
- data/lib/facter/facts/solaris/hypervisors/ldom.rb +3 -0
- data/lib/facter/facts/solaris/interfaces.rb +1 -0
- data/lib/facter/facts/solaris/is_virtual.rb +2 -2
- data/lib/facter/facts/solaris/ldom.rb +34 -4
- data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
- data/lib/facter/facts/solaris/processors/speed.rb +1 -1
- data/lib/facter/facts/solaris/ssh.rb +1 -1
- data/lib/facter/facts/solaris/sshalgorithmkey.rb +1 -1
- data/lib/facter/facts/solaris/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/solaris/virtual.rb +1 -1
- data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
- data/lib/facter/facts/windows/interfaces.rb +1 -0
- data/lib/facter/facts/windows/memory/system/available.rb +1 -1
- data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/windows/memory/system/total.rb +1 -1
- data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/windows/memory/system/used.rb +1 -1
- data/lib/facter/facts/windows/networking/fqdn.rb +1 -1
- data/lib/facter/facts/windows/os/release.rb +1 -1
- data/lib/facter/framework/benchmarking/timer.rb +4 -2
- data/lib/facter/framework/cli/cli.rb +20 -6
- data/lib/facter/framework/config/fact_groups.rb +10 -8
- data/lib/facter/framework/core/cache_manager.rb +62 -17
- data/lib/facter/framework/core/fact/internal/core_fact.rb +6 -1
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +38 -4
- data/lib/facter/framework/core/fact_augmenter.rb +1 -1
- data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -2
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +17 -1
- data/lib/facter/framework/core/fact_manager.rb +15 -3
- data/lib/facter/framework/core/file_loader.rb +6 -2
- data/lib/facter/framework/core/options/config_file_options.rb +16 -5
- data/lib/facter/framework/core/options/option_store.rb +42 -20
- data/lib/facter/framework/detector/os_detector.rb +1 -0
- data/lib/facter/framework/detector/os_hierarchy.rb +5 -9
- data/lib/facter/framework/logging/logger.rb +3 -3
- data/lib/facter/models/fact_collection.rb +11 -1
- data/lib/facter/models/loaded_fact.rb +2 -1
- data/lib/facter/resolvers/aio_agent_version.rb +2 -2
- data/lib/facter/resolvers/aix/{architecture_resolver.rb → architecture.rb} +19 -4
- data/lib/facter/resolvers/aix/disks.rb +6 -5
- data/lib/facter/resolvers/aix/{filesystem_resolver.rb → filesystem.rb} +2 -2
- data/lib/facter/resolvers/aix/{hardware_resolver.rb → hardware.rb} +4 -3
- data/lib/facter/resolvers/aix/{load_averages_resolver.rb → load_averages.rb} +2 -1
- data/lib/facter/resolvers/aix/memory.rb +4 -3
- data/lib/facter/resolvers/aix/mountpoints.rb +6 -5
- data/lib/facter/resolvers/aix/{networking_resolver.rb → networking.rb} +4 -3
- data/lib/facter/resolvers/aix/nim.rb +1 -1
- data/lib/facter/resolvers/aix/os_level.rb +1 -1
- data/lib/facter/resolvers/aix/partitions.rb +7 -6
- data/lib/facter/resolvers/aix/processors.rb +5 -4
- data/lib/facter/resolvers/aix/serialnumber.rb +2 -2
- data/lib/facter/resolvers/{augeas_resolver.rb → augeas.rb} +8 -2
- data/lib/facter/resolvers/base_resolver.rb +14 -4
- data/lib/facter/resolvers/bsd/processors.rb +13 -8
- data/lib/facter/resolvers/cloud.rb +2 -2
- data/lib/facter/resolvers/containers.rb +5 -4
- data/lib/facter/resolvers/debian_version.rb +2 -2
- data/lib/facter/resolvers/{disk_resolver.rb → disk.rb} +17 -6
- data/lib/facter/resolvers/{dmi_resolver.rb → dmi.rb} +3 -2
- data/lib/facter/resolvers/dmi_decode.rb +1 -1
- data/lib/facter/resolvers/ec2.rb +5 -2
- data/lib/facter/resolvers/{eos_release_resolver.rb → eos_release.rb} +2 -2
- data/lib/facter/resolvers/{facterversion_resolver.rb → facterversion.rb} +1 -1
- data/lib/facter/resolvers/{filesystems_resolver.rb → filesystems.rb} +5 -2
- data/lib/facter/resolvers/{fips_enabled_resolver.rb → fips_enabled.rb} +5 -2
- data/lib/facter/resolvers/freebsd/{dmi_resolver.rb → dmi.rb} +1 -1
- data/lib/facter/resolvers/freebsd/{freebsd_version_resolver.rb → freebsd_version.rb} +9 -7
- data/lib/facter/resolvers/freebsd/{geom_resolver.rb → geom.rb} +15 -22
- data/lib/facter/resolvers/freebsd/processors.rb +13 -8
- data/lib/facter/resolvers/freebsd/{swap_memory_resolver.rb → swap_memory.rb} +5 -3
- data/lib/facter/resolvers/freebsd/{system_memory_resolver.rb → system_memory.rb} +4 -2
- data/lib/facter/resolvers/freebsd/virtual.rb +45 -0
- data/lib/facter/resolvers/gce.rb +3 -2
- data/lib/facter/resolvers/hostname.rb +92 -0
- data/lib/facter/resolvers/{identity_resolver.rb → identity.rb} +2 -1
- data/lib/facter/resolvers/linux/docker_uptime.rb +3 -2
- data/lib/facter/resolvers/linux/load_averages.rb +3 -2
- data/lib/facter/resolvers/load_averages.rb +5 -3
- data/lib/facter/resolvers/{lpar_resolver.rb → lpar.rb} +1 -1
- data/lib/facter/resolvers/{lsb_release_resolver.rb → lsb_release.rb} +1 -1
- data/lib/facter/resolvers/lspci.rb +1 -1
- data/lib/facter/resolvers/macosx/{dmi_resolver.rb → dmi.rb} +1 -1
- data/lib/facter/resolvers/macosx/{filesystems_resolver.rb → filesystems.rb} +1 -1
- data/lib/facter/resolvers/macosx/{load_averages_resolver.rb → load_averages.rb} +2 -1
- data/lib/facter/resolvers/macosx/{mountpoints_resolver.rb → mountpoints.rb} +9 -8
- data/lib/facter/resolvers/macosx/{processor_resolver.rb → processor.rb} +2 -1
- data/lib/facter/resolvers/macosx/{swap_memory_resolver.rb → swap_memory.rb} +2 -1
- data/lib/facter/resolvers/macosx/{system_memory_resolver.rb → system_memory.rb} +2 -1
- data/lib/facter/resolvers/macosx/{system_profiler_resolver.rb → system_profiler.rb} +4 -6
- data/lib/facter/resolvers/{memory_resolver.rb → memory.rb} +4 -2
- data/lib/facter/resolvers/mountpoints.rb +90 -0
- data/lib/facter/resolvers/{networking_resolver.rb → networking.rb} +9 -6
- data/lib/facter/resolvers/networking_linux.rb +296 -0
- data/lib/facter/resolvers/open_vz.rb +2 -4
- data/lib/facter/resolvers/{os_release_resolver.rb → os_release.rb} +2 -2
- data/lib/facter/resolvers/partitions.rb +67 -63
- data/lib/facter/resolvers/{path_resolver.rb → path.rb} +1 -1
- data/lib/facter/resolvers/{processors_resolver.rb → processors.rb} +6 -3
- data/lib/facter/resolvers/{redhat_release_resolver.rb → redhat_release.rb} +2 -2
- data/lib/facter/resolvers/{ruby_resolver.rb → ruby.rb} +1 -1
- data/lib/facter/resolvers/{selinux_resolver.rb → selinux.rb} +4 -4
- data/lib/facter/resolvers/solaris/disks.rb +2 -2
- data/lib/facter/resolvers/solaris/dmi.rb +3 -1
- data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
- data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
- data/lib/facter/resolvers/solaris/ipaddress.rb +2 -1
- data/lib/facter/resolvers/solaris/ldom.rb +1 -3
- data/lib/facter/resolvers/solaris/memory.rb +4 -3
- data/lib/facter/resolvers/solaris/mountpoints.rb +13 -12
- data/lib/facter/resolvers/solaris/networking.rb +50 -43
- data/lib/facter/resolvers/solaris/os_release.rb +7 -5
- data/lib/facter/resolvers/solaris/processors.rb +2 -1
- data/lib/facter/resolvers/solaris/zone.rb +1 -1
- data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
- data/lib/facter/resolvers/{ssh_resolver.rb → ssh.rb} +12 -8
- data/lib/facter/resolvers/{suse_release_resolver.rb → suse_release.rb} +2 -2
- data/lib/facter/resolvers/{sw_vers_resolver.rb → sw_vers.rb} +2 -2
- data/lib/facter/resolvers/{timezone_resolver.rb → timezone.rb} +1 -1
- data/lib/facter/resolvers/{uname_resolver.rb → uname.rb} +1 -1
- data/lib/facter/resolvers/{uptime_resolver.rb → uptime.rb} +3 -3
- data/lib/facter/resolvers/virt_what.rb +1 -1
- data/lib/facter/resolvers/vmware.rb +1 -1
- data/lib/facter/resolvers/windows/aio_agent_version.rb +2 -2
- data/lib/facter/resolvers/windows/{dmi_bios_resolver.rb → dmi_bios.rb} +2 -2
- data/lib/facter/resolvers/windows/{dmi_computersystem_resolver.rb → dmi_computersystem.rb} +2 -2
- data/lib/facter/resolvers/windows/{fips_resolver.rb → fips.rb} +2 -1
- data/lib/facter/resolvers/windows/{hardware_architecture_resolver.rb → hardware_architecture.rb} +2 -1
- data/lib/facter/resolvers/windows/{identity_resolver.rb → identity.rb} +2 -1
- data/lib/facter/resolvers/windows/{kernel_resolver.rb → kernel.rb} +3 -1
- data/lib/facter/resolvers/windows/{memory_resolver.rb → memory.rb} +7 -1
- data/lib/facter/resolvers/windows/{netkvm_resolver.rb → netkvm.rb} +2 -1
- data/lib/facter/resolvers/windows/{networking_resolver.rb → networking.rb} +18 -4
- data/lib/facter/resolvers/windows/{processors_resolver.rb → processors.rb} +3 -2
- data/lib/facter/resolvers/windows/{product_release_resolver.rb → product_release.rb} +2 -1
- data/lib/facter/resolvers/windows/ssh.rb +5 -3
- data/lib/facter/resolvers/windows/{system32_resolver.rb → system32.rb} +3 -1
- data/lib/facter/resolvers/windows/{uptime_resolver.rb → uptime.rb} +3 -2
- data/lib/facter/resolvers/windows/{virtualization_resolver.rb → virtualization.rb} +3 -2
- data/lib/facter/resolvers/windows/{win_os_description_resolver.rb → win_os_description.rb} +4 -2
- data/lib/facter/resolvers/{wpar_resolver.rb → wpar.rb} +1 -1
- data/lib/facter/resolvers/xen.rb +2 -2
- data/lib/facter/resolvers/zfs.rb +2 -1
- data/lib/facter/resolvers/zpool.rb +2 -1
- data/lib/facter/util/aix/info_extractor.rb +24 -0
- data/lib/facter/util/aix/odm_query.rb +46 -0
- data/lib/facter/util/api_debugger.rb +33 -29
- data/lib/facter/util/facts/facts_utils.rb +30 -0
- data/lib/facter/util/facts/unit_converter.rb +61 -0
- data/lib/facter/util/facts/uptime_parser.rb +128 -0
- data/lib/facter/util/facts/virtual_detector.rb +90 -0
- data/lib/facter/util/facts/windows_release_finder.rb +55 -0
- data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
- data/lib/facter/util/resolvers/aws_token.rb +37 -0
- data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
- data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
- data/lib/facter/util/resolvers/fingerprint.rb +15 -0
- data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
- data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
- data/lib/facter/util/resolvers/networking/networking.rb +109 -0
- data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
- data/lib/facter/util/resolvers/ssh.rb +17 -0
- data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
- data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
- data/lib/facter/{framework/utils → util}/utils.rb +0 -0
- data/lib/facter/util/windows/win32ole.rb +30 -0
- data/lib/facter/version.rb +1 -1
- metadata +106 -119
- data/lib/facter/fact_groups.conf +0 -308
- data/lib/facter/facts/aix/puppet_version.rb +0 -15
- data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
- data/lib/facter/facts/linux/puppet_version.rb +0 -15
- data/lib/facter/facts/macosx/puppet_version.rb +0 -15
- data/lib/facter/facts/solaris/puppet_version.rb +0 -15
- data/lib/facter/facts/windows/puppet_version.rb +0 -15
- data/lib/facter/facts_utils/facts_utils.rb +0 -12
- data/lib/facter/facts_utils/unit_converter.rb +0 -59
- data/lib/facter/facts_utils/uptime_parser.rb +0 -124
- data/lib/facter/facts_utils/virtual_detector.rb +0 -78
- data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
- data/lib/facter/os_hierarchy.json +0 -36
- data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
- data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
- data/lib/facter/resolvers/hostname_resolver.rb +0 -44
- data/lib/facter/resolvers/mountpoints_resolver.rb +0 -62
- data/lib/facter/resolvers/networking_linux_resolver.rb +0 -159
- data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
- data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
- data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
- data/lib/facter/resolvers/utils/networking.rb +0 -86
- data/lib/facter/resolvers/utils/ssh.rb +0 -13
- data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
- data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
|
@@ -24,6 +24,13 @@ module Facter
|
|
|
24
24
|
# @api public
|
|
25
25
|
attr_reader :name
|
|
26
26
|
|
|
27
|
+
# @!attribute [r] fact_type
|
|
28
|
+
#
|
|
29
|
+
# @return [Symbol] The fact type of the aggregate resolution
|
|
30
|
+
#
|
|
31
|
+
# @api private
|
|
32
|
+
attr_reader :fact_type
|
|
33
|
+
|
|
27
34
|
# @!attribute [r] deps
|
|
28
35
|
#
|
|
29
36
|
# @return [LegacyFacter::Core::DirectedGraph]
|
|
@@ -98,16 +98,19 @@ module Facter
|
|
|
98
98
|
# Execute a command and return the output of that program.
|
|
99
99
|
# @param command [String] Command to run
|
|
100
100
|
#
|
|
101
|
-
# @param options [Hash] Hash with options for the
|
|
101
|
+
# @param options [Hash] Hash with options for the command
|
|
102
102
|
#
|
|
103
|
-
#
|
|
103
|
+
# Options accepted values :on_fail How to behave when the command could
|
|
104
104
|
# not be run. Specifying :raise will raise an error, anything else will
|
|
105
105
|
# return that object on failure. Default is :raise.
|
|
106
|
+
# :logger Optional logger used to log the command's stderr.
|
|
107
|
+
# :time_limit Optional time out for the specified command. If no time_limit is passed,
|
|
108
|
+
# a default of 300 seconds is used.
|
|
106
109
|
#
|
|
107
110
|
# @raise [Facter::Core::Execution::ExecutionFailure] If the command does
|
|
108
|
-
# not exist or could not be executed
|
|
111
|
+
# not exist or could not be executed and :on_fail is set to :raise
|
|
109
112
|
#
|
|
110
|
-
# @return [String] the output of the program, or the value of :on_fail if
|
|
113
|
+
# @return [String] the output of the program, or the value of :on_fail (if it's different than :raise) if
|
|
111
114
|
# command execution failed and :on_fail was specified.
|
|
112
115
|
#
|
|
113
116
|
# @api public
|
|
@@ -115,6 +118,27 @@ module Facter
|
|
|
115
118
|
@@impl.execute(command, options)
|
|
116
119
|
end
|
|
117
120
|
|
|
121
|
+
# Execute a command and return the stdout and stderr of that program.
|
|
122
|
+
# @param command [String] Command to run
|
|
123
|
+
#
|
|
124
|
+
# @param on_fail[Object] How to behave when the command could
|
|
125
|
+
# not be run. Specifying :raise will raise an error, anything else will
|
|
126
|
+
# return that object on failure. Default is :raise.
|
|
127
|
+
# @param logger Optional logger used to log the command's stderr.
|
|
128
|
+
# @param time_limit Optional time out for the specified command. If no time_limit is passed,
|
|
129
|
+
# a default of 300 seconds is used.
|
|
130
|
+
#
|
|
131
|
+
# @raise [Facter::Core::Execution::ExecutionFailure] If the command does
|
|
132
|
+
# not exist or could not be executed and :on_fail is set to :raise
|
|
133
|
+
#
|
|
134
|
+
# @return [String, String] the stdout and stderr of the program, or the value of
|
|
135
|
+
# :on_fail if command execution failed and :on_fail was specified.
|
|
136
|
+
#
|
|
137
|
+
# @api private
|
|
138
|
+
def execute_command(command, on_fail = nil, logger = nil, time_limit = nil)
|
|
139
|
+
@@impl.execute_command(command, on_fail, logger, time_limit)
|
|
140
|
+
end
|
|
141
|
+
|
|
118
142
|
class ExecutionFailure < StandardError; end
|
|
119
143
|
end
|
|
120
144
|
end
|
|
@@ -4,7 +4,7 @@ module Facter
|
|
|
4
4
|
module Core
|
|
5
5
|
module Execution
|
|
6
6
|
class Base
|
|
7
|
-
STDERR_MESSAGE = 'Command %s
|
|
7
|
+
STDERR_MESSAGE = 'Command %s completed with the following stderr message: %s'
|
|
8
8
|
|
|
9
9
|
def initialize
|
|
10
10
|
@log = Log.new(self)
|
|
@@ -57,39 +57,11 @@ module Facter
|
|
|
57
57
|
return on_fail
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
execute_command(expanded_command, on_fail, logger, time_limit)
|
|
60
|
+
out, = execute_command(expanded_command, on_fail, logger, time_limit)
|
|
61
|
+
out
|
|
61
62
|
end
|
|
62
63
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def extract_options(options)
|
|
66
|
-
on_fail = options.fetch(:on_fail, :raise)
|
|
67
|
-
expand = options.fetch(:expand, true)
|
|
68
|
-
logger = options[:logger]
|
|
69
|
-
time_limit = options[:limit].to_i
|
|
70
|
-
time_limit = time_limit.positive? ? time_limit : nil
|
|
71
|
-
|
|
72
|
-
[on_fail, expand, logger, time_limit]
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def log_stderr(msg, command, logger)
|
|
76
|
-
return if !msg || msg.empty?
|
|
77
|
-
|
|
78
|
-
if logger
|
|
79
|
-
logger.debug(format(STDERR_MESSAGE, command, msg.strip))
|
|
80
|
-
else
|
|
81
|
-
file_name = command.split('/').last
|
|
82
|
-
logger = Facter::Log.new(file_name)
|
|
83
|
-
logger.warn(format(STDERR_MESSAGE, command, msg.strip))
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def builtin_command?(command)
|
|
88
|
-
output, _status = Open3.capture2("type #{command}")
|
|
89
|
-
output.chomp =~ /builtin/ ? true : false
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def execute_command(command, on_fail, logger = nil, time_limit = nil)
|
|
64
|
+
def execute_command(command, on_fail = nil, logger = nil, time_limit = nil)
|
|
93
65
|
time_limit ||= 300
|
|
94
66
|
begin
|
|
95
67
|
# Set LC_ALL and LANG to force i18n to C for the duration of this exec;
|
|
@@ -128,7 +100,35 @@ module Facter
|
|
|
128
100
|
"Failed while executing '#{command}': #{e.message}"
|
|
129
101
|
end
|
|
130
102
|
|
|
131
|
-
out.strip
|
|
103
|
+
[out.strip, stderr]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
def extract_options(options)
|
|
109
|
+
on_fail = options.fetch(:on_fail, :raise)
|
|
110
|
+
expand = options.fetch(:expand, true)
|
|
111
|
+
logger = options[:logger]
|
|
112
|
+
time_limit = options[:limit].to_i
|
|
113
|
+
time_limit = time_limit.positive? ? time_limit : nil
|
|
114
|
+
|
|
115
|
+
[on_fail, expand, logger, time_limit]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def log_stderr(msg, command, logger)
|
|
119
|
+
return if !msg || msg.empty?
|
|
120
|
+
|
|
121
|
+
unless logger
|
|
122
|
+
file_name = command.split('/').last
|
|
123
|
+
logger = Facter::Log.new(file_name)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
logger.debug(format(STDERR_MESSAGE, command, msg.strip))
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def builtin_command?(command)
|
|
130
|
+
output, _status = Open3.capture2("type #{command}")
|
|
131
|
+
output.chomp =~ /builtin/ ? true : false
|
|
132
132
|
end
|
|
133
133
|
end
|
|
134
134
|
end
|
|
@@ -115,8 +115,7 @@ module LegacyFacter
|
|
|
115
115
|
internal_loader.load_all unless @loaded
|
|
116
116
|
@loaded = true
|
|
117
117
|
|
|
118
|
-
custom_facts = @facts.select { |_k, v| v.options[:fact_type] == :custom }
|
|
119
|
-
@custom_facts = Facter::Utils.deep_copy(custom_facts.keys)
|
|
118
|
+
@custom_facts = @facts.select { |_k, v| v.options[:fact_type] == :custom }
|
|
120
119
|
end
|
|
121
120
|
|
|
122
121
|
def load(name)
|
|
@@ -109,7 +109,7 @@ module LegacyFacter
|
|
|
109
109
|
|
|
110
110
|
def entries
|
|
111
111
|
dirs = @directories.select { |directory| File.directory?(directory) }.map do |directory|
|
|
112
|
-
Dir.entries(directory).map { |directory_entry| File.join(directory, directory_entry) }
|
|
112
|
+
Dir.entries(directory).map { |directory_entry| File.join(directory, directory_entry) }.sort.reverse!
|
|
113
113
|
end
|
|
114
114
|
dirs.flatten.select { |f| should_parse?(f) }
|
|
115
115
|
rescue Errno::ENOENT
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
module Facter
|
|
10
10
|
module Util
|
|
11
11
|
class Fact
|
|
12
|
+
# The location from where fact is resolved
|
|
13
|
+
# @return [String]
|
|
14
|
+
attr_reader :location
|
|
15
|
+
|
|
12
16
|
# The name of the fact
|
|
13
17
|
# @return [String]
|
|
14
18
|
attr_reader :name
|
|
@@ -43,6 +47,8 @@ module Facter
|
|
|
43
47
|
@used_resolution_weight = 0
|
|
44
48
|
|
|
45
49
|
@value = nil
|
|
50
|
+
|
|
51
|
+
@log = Facter::Log.new(self)
|
|
46
52
|
end
|
|
47
53
|
|
|
48
54
|
# Adds a new {Facter::Util::Resolution resolution}. This requires a
|
|
@@ -56,6 +62,10 @@ module Facter
|
|
|
56
62
|
# @api private
|
|
57
63
|
def add(options = {}, &block)
|
|
58
64
|
@options = Facter::Utils.deep_copy(@options.merge(options))
|
|
65
|
+
|
|
66
|
+
@location = options[:file]
|
|
67
|
+
@location ||= block.source_location if block_given?
|
|
68
|
+
|
|
59
69
|
define_resolution(nil, options, &block)
|
|
60
70
|
end
|
|
61
71
|
|
|
@@ -155,7 +165,7 @@ module Facter
|
|
|
155
165
|
@searching
|
|
156
166
|
end
|
|
157
167
|
|
|
158
|
-
# Lock our searching process, so we never
|
|
168
|
+
# Lock our searching process, so we never get stuck in recursion.
|
|
159
169
|
def searching
|
|
160
170
|
raise "Caught recursion on #{@name}" if searching?
|
|
161
171
|
|
|
@@ -173,7 +183,24 @@ module Facter
|
|
|
173
183
|
end
|
|
174
184
|
|
|
175
185
|
def sort_by_weight(resolutions)
|
|
176
|
-
|
|
186
|
+
# sort resolutions:
|
|
187
|
+
# - descending by weight
|
|
188
|
+
# - multiple facts have the same weight but different types, the :external fact take precedence
|
|
189
|
+
# - multiple facts with the same weight and type, the order is preserved.
|
|
190
|
+
# note: sort_by with index is slower than .sort
|
|
191
|
+
# we cannot use .sort because it is not stable: https://bugs.ruby-lang.org/issues/1089
|
|
192
|
+
# solution from: https://bugs.ruby-lang.org/issues/1089#note-10
|
|
193
|
+
|
|
194
|
+
# rubocop:disable Style/NestedTernaryOperator
|
|
195
|
+
idx = 0
|
|
196
|
+
resolutions.sort_by do |x|
|
|
197
|
+
[
|
|
198
|
+
-x.weight,
|
|
199
|
+
x.respond_to?(:fact_type) ? x.fact_type == :external ? 0 : 1 : 1,
|
|
200
|
+
idx += 1
|
|
201
|
+
]
|
|
202
|
+
end
|
|
203
|
+
# rubocop:enable Style/NestedTernaryOperator
|
|
177
204
|
end
|
|
178
205
|
|
|
179
206
|
def find_first_real_value(resolutions)
|
|
@@ -184,11 +211,20 @@ module Facter
|
|
|
184
211
|
break
|
|
185
212
|
end
|
|
186
213
|
@used_resolution_weight = resolve.weight
|
|
187
|
-
|
|
214
|
+
next if value.nil?
|
|
215
|
+
|
|
216
|
+
log_fact_path(resolve)
|
|
217
|
+
|
|
218
|
+
return value
|
|
188
219
|
end
|
|
189
220
|
nil
|
|
190
221
|
end
|
|
191
222
|
|
|
223
|
+
def log_fact_path(resolve)
|
|
224
|
+
fact = resolve.fact
|
|
225
|
+
@log.debug("#{resolve.fact_type} fact #{fact.name} got resolved from: #{fact.location}")
|
|
226
|
+
end
|
|
227
|
+
|
|
192
228
|
def announce_when_no_suitable_resolution(resolutions)
|
|
193
229
|
return unless resolutions.empty?
|
|
194
230
|
|
|
@@ -143,7 +143,7 @@ module LegacyFacter
|
|
|
143
143
|
# match it.
|
|
144
144
|
next if fact && (env_name != fact)
|
|
145
145
|
|
|
146
|
-
LegacyFacter.add(Regexp.last_match(1), fact_type: :external) do
|
|
146
|
+
LegacyFacter.add(Regexp.last_match(1), fact_type: :external, is_env: true) do
|
|
147
147
|
has_weight 1_000_000
|
|
148
148
|
setcode { value }
|
|
149
149
|
end
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
module LegacyFacter
|
|
9
9
|
module Util
|
|
10
10
|
module Parser
|
|
11
|
+
STDERR_MESSAGE = 'Command %s completed with the following stderr message: %s'
|
|
12
|
+
|
|
11
13
|
@parsers = []
|
|
12
14
|
|
|
13
15
|
# For support mutliple extensions you can pass an array of extensions as
|
|
@@ -75,6 +77,15 @@ module LegacyFacter
|
|
|
75
77
|
res = KeyValuePairOutputFormat.parse output unless res.is_a?(Hash)
|
|
76
78
|
res
|
|
77
79
|
end
|
|
80
|
+
|
|
81
|
+
def log_stderr(msg, command, file)
|
|
82
|
+
return if !msg || msg.empty?
|
|
83
|
+
|
|
84
|
+
file_name = file.split('/').last
|
|
85
|
+
logger = Facter::Log.new(file_name)
|
|
86
|
+
|
|
87
|
+
logger.warn(format(STDERR_MESSAGE, command, msg.strip))
|
|
88
|
+
end
|
|
78
89
|
end
|
|
79
90
|
|
|
80
91
|
module KeyValuePairOutputFormat
|
|
@@ -139,7 +150,9 @@ module LegacyFacter
|
|
|
139
150
|
|
|
140
151
|
class ScriptParser < Base
|
|
141
152
|
def parse_results
|
|
142
|
-
|
|
153
|
+
stdout, stderr = Facter::Core::Execution.execute_command(quote(filename))
|
|
154
|
+
log_stderr(stderr, filename, filename)
|
|
155
|
+
parse_executable_output(stdout)
|
|
143
156
|
end
|
|
144
157
|
|
|
145
158
|
private
|
|
@@ -172,8 +185,9 @@ module LegacyFacter
|
|
|
172
185
|
|
|
173
186
|
shell_command =
|
|
174
187
|
"\"#{powershell}\" -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -File \"#{filename}\""
|
|
175
|
-
|
|
176
|
-
|
|
188
|
+
stdout, stderr = Facter::Core::Execution.execute_command(shell_command)
|
|
189
|
+
log_stderr(stderr, shell_command, filename)
|
|
190
|
+
parse_executable_output(stdout)
|
|
177
191
|
end
|
|
178
192
|
end
|
|
179
193
|
|
|
@@ -51,7 +51,7 @@ module Facter
|
|
|
51
51
|
# @return [Facter::Util::Fact] Associated fact with this resolution.
|
|
52
52
|
#
|
|
53
53
|
# @api private
|
|
54
|
-
attr_reader :fact
|
|
54
|
+
attr_reader :fact, :last_evaluated, :file
|
|
55
55
|
|
|
56
56
|
# Create a new resolution mechanism.
|
|
57
57
|
#
|
|
@@ -110,7 +110,7 @@ module Facter
|
|
|
110
110
|
#
|
|
111
111
|
# @api private
|
|
112
112
|
def options(options)
|
|
113
|
-
accepted_options = %i[name value timeout weight fact_type file]
|
|
113
|
+
accepted_options = %i[name value timeout weight fact_type file is_env]
|
|
114
114
|
|
|
115
115
|
accepted_options.each do |option_name|
|
|
116
116
|
instance_variable_set("@#{option_name}", options.delete(option_name)) if options.key?(option_name)
|
|
@@ -11,7 +11,7 @@ module Facts
|
|
|
11
11
|
def call_the_resolver
|
|
12
12
|
fact_value = Facter::Resolvers::Aix::Memory.resolve(:swap)
|
|
13
13
|
if fact_value
|
|
14
|
-
fact_value = Facter::
|
|
14
|
+
fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:available_bytes])
|
|
15
15
|
end
|
|
16
16
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
17
17
|
end
|
|
@@ -13,7 +13,7 @@ module Facts
|
|
|
13
13
|
fact_value = fact_value[:available_bytes] if fact_value
|
|
14
14
|
|
|
15
15
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
|
|
16
|
-
Facter::ResolvedFact.new(ALIASES, Facter::
|
|
16
|
+
Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -11,7 +11,7 @@ module Facts
|
|
|
11
11
|
def call_the_resolver
|
|
12
12
|
fact_value = Facter::Resolvers::Aix::Memory.resolve(:swap)
|
|
13
13
|
if fact_value
|
|
14
|
-
fact_value = Facter::
|
|
14
|
+
fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:total_bytes])
|
|
15
15
|
end
|
|
16
16
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
17
17
|
end
|
|
@@ -13,7 +13,7 @@ module Facts
|
|
|
13
13
|
fact_value = fact_value[:total_bytes] if fact_value
|
|
14
14
|
|
|
15
15
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
|
|
16
|
-
Facter::ResolvedFact.new(ALIASES, Facter::
|
|
16
|
+
Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -10,7 +10,7 @@ module Facts
|
|
|
10
10
|
def call_the_resolver
|
|
11
11
|
fact_value = Facter::Resolvers::Aix::Memory.resolve(:swap)
|
|
12
12
|
if fact_value
|
|
13
|
-
fact_value = Facter::
|
|
13
|
+
fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:used_bytes])
|
|
14
14
|
end
|
|
15
15
|
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
|
16
16
|
end
|
|
@@ -11,7 +11,7 @@ module Facts
|
|
|
11
11
|
def call_the_resolver
|
|
12
12
|
fact_value = Facter::Resolvers::Aix::Memory.resolve(:system)
|
|
13
13
|
if fact_value
|
|
14
|
-
fact_value = Facter::
|
|
14
|
+
fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:available_bytes])
|
|
15
15
|
end
|
|
16
16
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
17
17
|
end
|
|
@@ -13,7 +13,7 @@ module Facts
|
|
|
13
13
|
fact_value = fact_value[:available_bytes] if fact_value
|
|
14
14
|
|
|
15
15
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
|
|
16
|
-
Facter::ResolvedFact.new(ALIASES, Facter::
|
|
16
|
+
Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -11,7 +11,7 @@ module Facts
|
|
|
11
11
|
def call_the_resolver
|
|
12
12
|
fact_value = Facter::Resolvers::Aix::Memory.resolve(:system)
|
|
13
13
|
if fact_value
|
|
14
|
-
fact_value = Facter::
|
|
14
|
+
fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:total_bytes])
|
|
15
15
|
end
|
|
16
16
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
17
17
|
end
|
|
@@ -13,7 +13,7 @@ module Facts
|
|
|
13
13
|
fact_value = fact_value[:total_bytes] if fact_value
|
|
14
14
|
|
|
15
15
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
|
|
16
|
-
Facter::ResolvedFact.new(ALIASES, Facter::
|
|
16
|
+
Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -10,7 +10,7 @@ module Facts
|
|
|
10
10
|
def call_the_resolver
|
|
11
11
|
fact_value = Facter::Resolvers::Aix::Memory.resolve(:system)
|
|
12
12
|
if fact_value
|
|
13
|
-
fact_value = Facter::
|
|
13
|
+
fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:used_bytes])
|
|
14
14
|
end
|
|
15
15
|
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
|
16
16
|
end
|