facter 4.0.47 → 4.0.52

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.
Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docs/generate_cli.rb +7 -0
  3. data/lib/facter.rb +76 -43
  4. data/lib/facter/config.rb +21 -9
  5. data/lib/facter/custom_facts/core/aggregate.rb +16 -0
  6. data/lib/facter/custom_facts/core/execution/base.rb +3 -2
  7. data/lib/facter/custom_facts/core/execution/popen3.rb +47 -0
  8. data/lib/facter/custom_facts/core/resolvable.rb +11 -0
  9. data/lib/facter/custom_facts/util/fact.rb +22 -3
  10. data/lib/facter/custom_facts/util/resolution.rb +3 -1
  11. data/lib/facter/facts/aix/disks.rb +1 -1
  12. data/lib/facter/facts/aix/ssh.rb +1 -1
  13. data/lib/facter/facts/aix/sshalgorithmkey.rb +1 -1
  14. data/lib/facter/facts/aix/sshfp_algorithm.rb +1 -1
  15. data/lib/facter/facts/alpine/os/release.rb +29 -0
  16. data/lib/facter/facts/amzn/lsbdistcodename.rb +16 -0
  17. data/lib/facter/facts/amzn/lsbdistdescription.rb +16 -0
  18. data/lib/facter/facts/amzn/lsbdistid.rb +16 -0
  19. data/lib/facter/facts/amzn/os/distro/codename.rb +24 -0
  20. data/lib/facter/facts/amzn/os/distro/description.rb +21 -0
  21. data/lib/facter/facts/amzn/os/distro/id.rb +21 -0
  22. data/lib/facter/facts/amzn/os/distro/release.rb +32 -0
  23. data/lib/facter/facts/amzn/os/release.rb +29 -0
  24. data/lib/facter/facts/devuan/os/distro/release.rb +36 -0
  25. data/lib/facter/facts/devuan/os/release.rb +29 -0
  26. data/lib/facter/facts/freebsd/ssh.rb +1 -1
  27. data/lib/facter/facts/freebsd/sshalgorithmkey.rb +1 -1
  28. data/lib/facter/facts/freebsd/sshfp_algorithm.rb +1 -1
  29. data/lib/facter/facts/gentoo/os/release.rb +29 -0
  30. data/lib/facter/facts/linux/az_metadata.rb +27 -0
  31. data/lib/facter/facts/linux/cloud/provider.rb +17 -0
  32. data/lib/facter/facts/linux/dhcp_servers.rb +2 -2
  33. data/lib/facter/facts/linux/disks.rb +1 -1
  34. data/lib/facter/facts/linux/interfaces.rb +1 -1
  35. data/lib/facter/facts/linux/ipaddress6_interfaces.rb +1 -1
  36. data/lib/facter/facts/linux/ipaddress_interfaces.rb +1 -1
  37. data/lib/facter/facts/linux/macaddress_interfaces.rb +1 -1
  38. data/lib/facter/facts/linux/mtu_interfaces.rb +1 -1
  39. data/lib/facter/facts/linux/netmask6_interfaces.rb +1 -1
  40. data/lib/facter/facts/linux/netmask_interfaces.rb +1 -1
  41. data/lib/facter/facts/linux/network6_interfaces.rb +1 -1
  42. data/lib/facter/facts/linux/network_interfaces.rb +1 -1
  43. data/lib/facter/facts/linux/networking/dhcp.rb +1 -1
  44. data/lib/facter/facts/linux/networking/domain.rb +1 -1
  45. data/lib/facter/facts/linux/networking/fqdn.rb +1 -1
  46. data/lib/facter/facts/linux/networking/hostname.rb +1 -1
  47. data/lib/facter/facts/linux/networking/interfaces.rb +1 -1
  48. data/lib/facter/facts/linux/networking/ip.rb +1 -1
  49. data/lib/facter/facts/linux/networking/ip6.rb +1 -1
  50. data/lib/facter/facts/linux/networking/mac.rb +1 -1
  51. data/lib/facter/facts/linux/networking/mtu.rb +1 -1
  52. data/lib/facter/facts/linux/networking/netmask.rb +1 -1
  53. data/lib/facter/facts/linux/networking/netmask6.rb +1 -1
  54. data/lib/facter/facts/linux/networking/network.rb +1 -1
  55. data/lib/facter/facts/linux/networking/network6.rb +1 -1
  56. data/lib/facter/facts/linux/networking/primary.rb +1 -1
  57. data/lib/facter/facts/linux/networking/scope6.rb +1 -1
  58. data/lib/facter/facts/linux/os/family.rb +4 -2
  59. data/lib/facter/facts/linux/scope6_interfaces.rb +1 -1
  60. data/lib/facter/facts/linux/ssh.rb +1 -1
  61. data/lib/facter/facts/linux/sshalgorithmkey.rb +1 -1
  62. data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
  63. data/lib/facter/facts/linuxmint/os/name.rb +18 -0
  64. data/lib/facter/facts/linuxmint/os/release.rb +35 -0
  65. data/lib/facter/facts/macosx/ssh.rb +1 -1
  66. data/lib/facter/facts/macosx/sshalgorithmkey.rb +1 -1
  67. data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
  68. data/lib/facter/facts/mageia/os/release.rb +36 -0
  69. data/lib/facter/facts/meego/os/release.rb +29 -0
  70. data/lib/facter/facts/oel/os/release.rb +29 -0
  71. data/lib/facter/facts/ol/os/release.rb +29 -0
  72. data/lib/facter/facts/openwrt/os/release.rb +35 -0
  73. data/lib/facter/facts/ovs/os/release.rb +29 -0
  74. data/lib/facter/facts/photon/os/release.rb +45 -0
  75. data/lib/facter/facts/rhel/lsbdistcodename.rb +16 -0
  76. data/lib/facter/facts/rhel/lsbdistdescription.rb +16 -0
  77. data/lib/facter/facts/rhel/lsbdistid.rb +16 -0
  78. data/lib/facter/facts/rhel/os/distro/codename.rb +2 -4
  79. data/lib/facter/facts/rhel/os/distro/description.rb +2 -4
  80. data/lib/facter/facts/rhel/os/distro/id.rb +2 -4
  81. data/lib/facter/facts/rhel/os/distro/release.rb +13 -12
  82. data/lib/facter/facts/rhel/os/release.rb +1 -8
  83. data/lib/facter/facts/slackware/os/release.rb +35 -0
  84. data/lib/facter/facts/sles/lsbdistcodename.rb +16 -0
  85. data/lib/facter/facts/sles/lsbdistdescription.rb +16 -0
  86. data/lib/facter/facts/sles/lsbdistid.rb +16 -0
  87. data/lib/facter/facts/sles/os/distro/codename.rb +3 -4
  88. data/lib/facter/facts/sles/os/distro/description.rb +2 -5
  89. data/lib/facter/facts/sles/os/distro/id.rb +6 -5
  90. data/lib/facter/facts/sles/os/distro/release.rb +17 -12
  91. data/lib/facter/facts/solaris/disks.rb +1 -1
  92. data/lib/facter/facts/solaris/ssh.rb +1 -1
  93. data/lib/facter/facts/solaris/sshalgorithmkey.rb +1 -1
  94. data/lib/facter/facts/solaris/sshfp_algorithm.rb +1 -1
  95. data/lib/facter/facts/ubuntu/lsbdistrelease.rb +2 -2
  96. data/lib/facter/facts/windows/az_metadata.rb +27 -0
  97. data/lib/facter/facts/windows/cloud/provider.rb +17 -0
  98. data/lib/facter/facts/windows/networking/fqdn.rb +1 -1
  99. data/lib/facter/framework/cli/cli.rb +6 -8
  100. data/lib/facter/framework/config/config_reader.rb +9 -0
  101. data/lib/facter/framework/config/fact_groups.rb +28 -2
  102. data/lib/facter/framework/core/cache_manager.rb +5 -1
  103. data/lib/facter/framework/core/fact_filter.rb +3 -3
  104. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +0 -4
  105. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +2 -1
  106. data/lib/facter/framework/core/fact_manager.rb +5 -3
  107. data/lib/facter/framework/core/options.rb +1 -2
  108. data/lib/facter/framework/core/options/option_store.rb +11 -5
  109. data/lib/facter/framework/detector/os_detector.rb +8 -0
  110. data/lib/facter/framework/logging/logger.rb +4 -4
  111. data/lib/facter/framework/parsers/query_parser.rb +13 -6
  112. data/lib/facter/resolvers/aio_agent_version.rb +1 -1
  113. data/lib/facter/resolvers/aix/{architecture_resolver.rb → architecture.rb} +1 -1
  114. data/lib/facter/resolvers/aix/disks.rb +1 -1
  115. data/lib/facter/resolvers/aix/ffi/ffi.rb +63 -0
  116. data/lib/facter/resolvers/aix/ffi/ffi_helper.rb +146 -20
  117. data/lib/facter/resolvers/aix/ffi/structs.rb +69 -0
  118. data/lib/facter/resolvers/aix/{filesystem_resolver.rb → filesystem.rb} +1 -1
  119. data/lib/facter/resolvers/aix/{hardware_resolver.rb → hardware.rb} +1 -1
  120. data/lib/facter/resolvers/aix/{load_averages_resolver.rb → load_averages.rb} +2 -2
  121. data/lib/facter/resolvers/aix/memory.rb +1 -1
  122. data/lib/facter/resolvers/aix/mountpoints.rb +1 -1
  123. data/lib/facter/resolvers/aix/{networking_resolver.rb → networking.rb} +9 -16
  124. data/lib/facter/resolvers/aix/nim.rb +1 -1
  125. data/lib/facter/resolvers/aix/os_level.rb +1 -1
  126. data/lib/facter/resolvers/aix/partitions.rb +1 -1
  127. data/lib/facter/resolvers/aix/processors.rb +1 -1
  128. data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
  129. data/lib/facter/resolvers/{augeas_resolver.rb → augeas.rb} +1 -1
  130. data/lib/facter/resolvers/az.rb +39 -0
  131. data/lib/facter/resolvers/base_resolver.rb +4 -4
  132. data/lib/facter/resolvers/bsd/processors.rb +1 -1
  133. data/lib/facter/resolvers/containers.rb +1 -1
  134. data/lib/facter/resolvers/debian_version.rb +1 -1
  135. data/lib/facter/resolvers/{disk_resolver.rb → disk.rb} +1 -1
  136. data/lib/facter/resolvers/{dmi_resolver.rb → dmi.rb} +1 -1
  137. data/lib/facter/resolvers/dmi_decode.rb +1 -1
  138. data/lib/facter/resolvers/ec2.rb +1 -1
  139. data/lib/facter/resolvers/{eos_release_resolver.rb → eos_release.rb} +1 -1
  140. data/lib/facter/resolvers/{facterversion_resolver.rb → facterversion.rb} +1 -1
  141. data/lib/facter/resolvers/{filesystems_resolver.rb → filesystems.rb} +1 -1
  142. data/lib/facter/resolvers/{fips_enabled_resolver.rb → fips_enabled.rb} +1 -1
  143. data/lib/facter/resolvers/freebsd/{dmi_resolver.rb → dmi.rb} +1 -1
  144. data/lib/facter/resolvers/freebsd/{freebsd_version_resolver.rb → freebsd_version.rb} +1 -1
  145. data/lib/facter/resolvers/freebsd/{geom_resolver.rb → geom.rb} +1 -1
  146. data/lib/facter/resolvers/freebsd/processors.rb +1 -1
  147. data/lib/facter/resolvers/freebsd/{swap_memory_resolver.rb → swap_memory.rb} +1 -1
  148. data/lib/facter/resolvers/freebsd/{system_memory_resolver.rb → system_memory.rb} +1 -1
  149. data/lib/facter/resolvers/freebsd/{virtual_resolver.rb → virtual.rb} +1 -1
  150. data/lib/facter/resolvers/gce.rb +1 -1
  151. data/lib/facter/resolvers/{hostname_resolver.rb → hostname.rb} +1 -1
  152. data/lib/facter/resolvers/{identity_resolver.rb → identity.rb} +1 -1
  153. data/lib/facter/resolvers/linux/docker_uptime.rb +1 -1
  154. data/lib/facter/resolvers/linux/hostname.rb +115 -0
  155. data/lib/facter/resolvers/linux/load_averages.rb +1 -1
  156. data/lib/facter/resolvers/linux/networking.rb +106 -0
  157. data/lib/facter/resolvers/load_averages.rb +1 -1
  158. data/lib/facter/resolvers/{lpar_resolver.rb → lpar.rb} +1 -1
  159. data/lib/facter/resolvers/{lsb_release_resolver.rb → lsb_release.rb} +1 -1
  160. data/lib/facter/resolvers/lspci.rb +1 -1
  161. data/lib/facter/resolvers/macosx/{dmi_resolver.rb → dmi.rb} +1 -1
  162. data/lib/facter/resolvers/macosx/{filesystems_resolver.rb → filesystems.rb} +1 -1
  163. data/lib/facter/resolvers/macosx/{load_averages_resolver.rb → load_averages.rb} +1 -1
  164. data/lib/facter/resolvers/macosx/{mountpoints_resolver.rb → mountpoints.rb} +1 -1
  165. data/lib/facter/resolvers/macosx/{processor_resolver.rb → processor.rb} +1 -1
  166. data/lib/facter/resolvers/macosx/{swap_memory_resolver.rb → swap_memory.rb} +1 -1
  167. data/lib/facter/resolvers/macosx/{system_memory_resolver.rb → system_memory.rb} +1 -1
  168. data/lib/facter/resolvers/macosx/{system_profiler_resolver.rb → system_profiler.rb} +1 -1
  169. data/lib/facter/resolvers/{memory_resolver.rb → memory.rb} +1 -1
  170. data/lib/facter/resolvers/{mountpoints_resolver.rb → mountpoints.rb} +1 -1
  171. data/lib/facter/resolvers/{networking_resolver.rb → networking.rb} +1 -1
  172. data/lib/facter/resolvers/open_vz.rb +1 -1
  173. data/lib/facter/resolvers/{os_release_resolver.rb → os_release.rb} +1 -1
  174. data/lib/facter/resolvers/partitions.rb +1 -1
  175. data/lib/facter/resolvers/{path_resolver.rb → path.rb} +1 -1
  176. data/lib/facter/resolvers/{processors_resolver.rb → processors.rb} +1 -1
  177. data/lib/facter/resolvers/redhat_release.rb +71 -0
  178. data/lib/facter/resolvers/release_from_first_line.rb +41 -0
  179. data/lib/facter/resolvers/{ruby_resolver.rb → ruby.rb} +1 -1
  180. data/lib/facter/resolvers/{selinux_resolver.rb → selinux.rb} +1 -1
  181. data/lib/facter/resolvers/solaris/disks.rb +1 -1
  182. data/lib/facter/resolvers/solaris/dmi.rb +1 -1
  183. data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
  184. data/lib/facter/resolvers/solaris/ffi/functions.rb +1 -1
  185. data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
  186. data/lib/facter/resolvers/solaris/ipaddress.rb +1 -1
  187. data/lib/facter/resolvers/solaris/ldom.rb +1 -1
  188. data/lib/facter/resolvers/solaris/memory.rb +1 -1
  189. data/lib/facter/resolvers/solaris/mountpoints.rb +1 -1
  190. data/lib/facter/resolvers/solaris/networking.rb +1 -1
  191. data/lib/facter/resolvers/solaris/os_release.rb +1 -1
  192. data/lib/facter/resolvers/solaris/processors.rb +1 -1
  193. data/lib/facter/resolvers/solaris/zone.rb +1 -1
  194. data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
  195. data/lib/facter/resolvers/specific_release_file.rb +35 -0
  196. data/lib/facter/resolvers/{ssh_resolver.rb → ssh.rb} +2 -2
  197. data/lib/facter/resolvers/{suse_release_resolver.rb → suse_release.rb} +1 -1
  198. data/lib/facter/resolvers/{sw_vers_resolver.rb → sw_vers.rb} +1 -1
  199. data/lib/facter/resolvers/{timezone_resolver.rb → timezone.rb} +1 -1
  200. data/lib/facter/resolvers/{uname_resolver.rb → uname.rb} +1 -1
  201. data/lib/facter/resolvers/{uptime_resolver.rb → uptime.rb} +1 -1
  202. data/lib/facter/resolvers/virt_what.rb +1 -1
  203. data/lib/facter/resolvers/vmware.rb +1 -1
  204. data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
  205. data/lib/facter/resolvers/windows/{dmi_bios_resolver.rb → dmi_bios.rb} +1 -1
  206. data/lib/facter/resolvers/windows/{dmi_computersystem_resolver.rb → dmi_computersystem.rb} +1 -1
  207. data/lib/facter/resolvers/windows/ffi/network_utils.rb +1 -2
  208. data/lib/facter/resolvers/windows/{fips_resolver.rb → fips.rb} +1 -1
  209. data/lib/facter/resolvers/windows/{hardware_architecture_resolver.rb → hardware_architecture.rb} +1 -1
  210. data/lib/facter/resolvers/windows/{identity_resolver.rb → identity.rb} +1 -1
  211. data/lib/facter/resolvers/windows/{kernel_resolver.rb → kernel.rb} +1 -1
  212. data/lib/facter/resolvers/windows/{memory_resolver.rb → memory.rb} +1 -1
  213. data/lib/facter/resolvers/windows/{netkvm_resolver.rb → netkvm.rb} +1 -1
  214. data/lib/facter/resolvers/windows/{networking_resolver.rb → networking.rb} +19 -2
  215. data/lib/facter/resolvers/windows/{processors_resolver.rb → processors.rb} +1 -1
  216. data/lib/facter/resolvers/windows/{product_release_resolver.rb → product_release.rb} +1 -1
  217. data/lib/facter/resolvers/windows/ssh.rb +1 -1
  218. data/lib/facter/resolvers/windows/{system32_resolver.rb → system32.rb} +1 -1
  219. data/lib/facter/resolvers/windows/{uptime_resolver.rb → uptime.rb} +1 -1
  220. data/lib/facter/resolvers/windows/{virtualization_resolver.rb → virtualization.rb} +1 -1
  221. data/lib/facter/resolvers/windows/{win_os_description_resolver.rb → win_os_description.rb} +1 -1
  222. data/lib/facter/resolvers/{wpar_resolver.rb → wpar.rb} +1 -1
  223. data/lib/facter/resolvers/xen.rb +1 -1
  224. data/lib/facter/resolvers/zfs.rb +1 -1
  225. data/lib/facter/resolvers/zpool.rb +1 -1
  226. data/lib/facter/templates/man.erb +8 -0
  227. data/lib/facter/util/facts/facts_utils.rb +33 -0
  228. data/lib/facter/util/facts/unit_converter.rb +11 -4
  229. data/lib/facter/util/linux/dhcp.rb +86 -0
  230. data/lib/facter/util/linux/routing_table.rb +60 -0
  231. data/lib/facter/util/linux/socket_parser.rb +114 -0
  232. data/lib/facter/util/resolvers/ffi/hostname.rb +70 -0
  233. data/lib/facter/util/utils.rb +0 -4
  234. data/lib/facter/version.rb +1 -1
  235. metadata +124 -83
  236. data/lib/facter/facts/linux/cloud.rb +0 -15
  237. data/lib/facter/resolvers/cloud.rb +0 -39
  238. data/lib/facter/resolvers/networking_linux_resolver.rb +0 -258
  239. data/lib/facter/resolvers/redhat_release_resolver.rb +0 -55
  240. data/lib/facter/util/resolvers/networking.rb +0 -90
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87e1b483df51f967d4e88c90f67ddfef304184d235d08746500c61619c56dee2
4
- data.tar.gz: d573d4d221bc71e512c36a2f8218b0d70512ace56cb0eaa37dba3a9eee27bcde
3
+ metadata.gz: 778d4d972d3e950f98d4fd8dbd4100e7b2a0c168369949b234d7088ddeba539f
4
+ data.tar.gz: 50303cfdfcf434c38d3d9539c35362f190dd84b82a8f85227d804a876b5a4ce3
5
5
  SHA512:
6
- metadata.gz: 49f5a8c11e45cdc6e9550e6fa50335700b8c43c048b46b1f091ea4b4a1f66588865a36c2ca1b447bea72c80a1548ca37d6f998eca4187047c6f2e95b2daf87d5
7
- data.tar.gz: b6b21071a59dbfedc1499b6464e2556aa272f9fc99feb1674c6961a1a3a564570e9a7df127ad80140703ee320f73b1e41c82deec41dfb4160814544f1a0ae2d4
6
+ metadata.gz: 38f84ef3e3699e3bed3b348ae07562f9423121011659ef9ebac4395a157eb06bd110a64e7481f82331e8f65e908936df826c630f57f879ba79686bee0878ac5a
7
+ data.tar.gz: bf2a8b2d1d1e23a0d0ba22f21d2b8e228bc238f2eededc1ab4474dff9e0d5f13094ec2c5990f24916a563b28fd75bfa2d745bd728d2f6cda9b31283116d9df34
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'facter/framework/cli/cli_launcher'
4
+
5
+ cli = Facter::Cli.new([])
6
+
7
+ puts cli.man
data/lib/facter.rb CHANGED
@@ -27,21 +27,51 @@ module Facter
27
27
  require 'facter/framework/cli/cli_launcher'
28
28
 
29
29
  args = args_as_string.split(' ')
30
-
31
30
  Facter::OptionsValidator.validate(args)
32
31
  processed_arguments = CliLauncher.prepare_arguments(args, nil)
33
-
34
32
  cli = Facter::Cli.new([], processed_arguments)
33
+ cli_options = cli.options.dup
34
+
35
+ # config file options
36
+ config_file = cli_options.delete(:config)
37
+ if config_file
38
+ Facter::OptionStore.set(:config, config_file)
39
+ Facter::ConfigFileOptions.init(config_file)
40
+ Facter::Options.store(ConfigFileOptions.get)
41
+ end
42
+
43
+ # user provided options
44
+ cli_options[:show_legacy] ||= false
45
+ Facter::Options.store(cli_options)
46
+
47
+ queried_facts(cli.args)
48
+ end
35
49
 
36
- if cli.args.include?(:version)
37
- cli.invoke(:version, [])
38
- elsif cli.args.include?('--list-cache-groups')
39
- cli.invoke(:list_cache_groups, [])
40
- elsif cli.args.include?('--list-block-groups')
41
- cli.invoke(:list_block_groups, [])
50
+ # Method used by cli to set puppet paths
51
+ # in order to retrieve puppet custom and external facts
52
+ #
53
+ # @return nil
54
+ #
55
+ # @api private
56
+ def puppet_facts
57
+ require 'puppet'
58
+
59
+ # don't allow puppet logger to be injected in Facter
60
+ Options[:allow_external_loggers] = false
61
+
62
+ Puppet.initialize_settings
63
+ $LOAD_PATH << Puppet[:libdir] unless $LOAD_PATH.include?(Puppet[:libdir])
64
+ Facter.reset
65
+ Facter.search_external([Puppet[:pluginfactdest]])
66
+ if Puppet.respond_to? :initialize_facts
67
+ Puppet.initialize_facts
42
68
  else
43
- cli.invoke(:arg_parser)
69
+ Facter.add(:puppetversion) do
70
+ setcode { Puppet.version.to_s }
71
+ end
44
72
  end
73
+ rescue LoadError => e
74
+ logger.error("Could not load puppet gem, got #{e}")
45
75
  end
46
76
 
47
77
  # Alias method for Facter.fact()
@@ -89,10 +119,10 @@ module Facter
89
119
  nil
90
120
  end
91
121
 
92
- # Gets the value for a core fact, external or custom facts are
93
- # not returned with this call. Returns `nil` if no such fact exists.
122
+ # Retrieves the value of a core fact. External or custom facts are
123
+ # not returned with this call. Returns `nil` if no such fact exists.
94
124
  #
95
- # @return [FactCollection] hash with fact names and values
125
+ # @return [FactCollection] A hash with fact names and values
96
126
  #
97
127
  # @api private
98
128
  def core_value(user_query)
@@ -177,14 +207,29 @@ module Facter
177
207
  Facter::Options[:debug] = debug_bool
178
208
  end
179
209
 
210
+ # Enable sequential resolving of facts
211
+ #
212
+ # @return [bool]
213
+ #
214
+ # @api public
180
215
  def enable_sequential
181
216
  Facter::Options[:sequential] = true
182
217
  end
183
218
 
219
+ # Disable sequential resolving of facts
220
+ #
221
+ # @return [bool]
222
+ #
223
+ # @api public
184
224
  def disable_sequential
185
225
  Facter::Options[:sequential] = false
186
226
  end
187
227
 
228
+ # Check if facts are resolved sequentially or not
229
+ #
230
+ # @return [bool]
231
+ #
232
+ # @api public
188
233
  def sequential?
189
234
  Facter::Options[:sequential]
190
235
  end
@@ -322,10 +367,10 @@ module Facter
322
367
  Options.custom_dir
323
368
  end
324
369
 
325
- # Gets a hash mapping fact names to their values
326
- # The hash contains core facts, legacy facts, custom facts and external facts (all facts that can be resolved).
370
+ # Retrieves a fact's value. Returns `nil` if no such fact exists.
327
371
  #
328
- # @return [FactCollection] hash with fact names and values
372
+ # @param user_query [String] the fact name
373
+ # @return [String] the value of the fact, or nil if no fact is found
329
374
  #
330
375
  # @api public
331
376
  def to_hash
@@ -369,30 +414,6 @@ module Facter
369
414
  @already_searched[user_query]&.value
370
415
  end
371
416
 
372
- # Gets the values for multiple facts.
373
- #
374
- # @param options [Hash] parameters for the fact - attributes
375
- # of {Facter::Util::Fact} and {Facter::Util::Resolution} can be
376
- # supplied here
377
- # @param user_queries [Array] the fact names
378
- #
379
- # @return [FactCollection] hash with fact names and values
380
- #
381
- # @api public
382
- def values(options, user_queries)
383
- init_cli_options(options, user_queries)
384
- Options[:show_legacy] = true
385
- log_blocked_facts
386
- resolved_facts = Facter::FactManager.instance.resolve_facts(user_queries)
387
- resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
388
-
389
- if user_queries.count.zero?
390
- Facter::FactCollection.new.build_fact_collection!(resolved_facts)
391
- else
392
- FormatterHelper.retrieve_facts_to_display_for_user_query(user_queries, resolved_facts)
393
- end
394
- end
395
-
396
417
  # Returns Facter version
397
418
  #
398
419
  # @return [String] Current version
@@ -408,7 +429,7 @@ module Facter
408
429
  #
409
430
  # @api private
410
431
  def to_user_output(cli_options, *args)
411
- init_cli_options(cli_options, args)
432
+ init_cli_options(cli_options)
412
433
  logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
413
434
  logger.debug("Facter version: #{Facter::VERSION}")
414
435
  log_blocked_facts
@@ -434,7 +455,7 @@ module Facter
434
455
  nil
435
456
  end
436
457
 
437
- # Returns a list with the names of all solved facts
458
+ # Returns a list with the names of all resolved facts
438
459
  # @return [Array] the list with all the fact names
439
460
  #
440
461
  # @api public
@@ -470,6 +491,18 @@ module Facter
470
491
 
471
492
  private
472
493
 
494
+ def queried_facts(user_query)
495
+ log_blocked_facts
496
+ resolved_facts = Facter::FactManager.instance.resolve_facts(user_query)
497
+ resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
498
+
499
+ if user_query.count.zero?
500
+ Facter::FactCollection.new.build_fact_collection!(resolved_facts)
501
+ else
502
+ FormatterHelper.retrieve_facts_to_display_for_user_query(user_query, resolved_facts)
503
+ end
504
+ end
505
+
473
506
  def resolve_facts_for_user_query(user_query)
474
507
  resolved_facts = Facter::FactManager.instance.resolve_facts(user_query)
475
508
  user_querie = resolved_facts.uniq(&:user_query).map(&:user_query).first
@@ -496,9 +529,9 @@ module Facter
496
529
  @logger ||= Log.new(self)
497
530
  end
498
531
 
499
- def init_cli_options(options, args)
532
+ def init_cli_options(options)
500
533
  options = options.map { |(k, v)| [k.to_sym, v] }.to_h
501
- Facter::Options.init_from_cli(options, args)
534
+ Facter::Options.init_from_cli(options)
502
535
  end
503
536
 
504
537
  def add_fact_to_searched_facts(user_query, value)
data/lib/facter/config.rb CHANGED
@@ -7,10 +7,13 @@ module Facter
7
7
  {
8
8
  'Linux' => [
9
9
  {
10
- 'Debian' => %w[
11
- Elementary
12
- Ubuntu
13
- Raspbian
10
+ 'Debian' => [
11
+ 'Elementary',
12
+ { 'Ubuntu' => [
13
+ 'Linuxmint'
14
+ ] },
15
+ 'Raspbian',
16
+ 'Devuan'
14
17
  ]
15
18
  },
16
19
  {
@@ -20,13 +23,23 @@ module Facter
20
23
  Centos
21
24
  Ol
22
25
  Scientific
26
+ Meego
27
+ Oel
28
+ Ovs
23
29
  ]
24
30
  },
25
31
  {
26
- 'Sles' => [
27
- 'Opensuse'
32
+ 'Sles' => %w[
33
+ Opensuse
34
+ Sled
28
35
  ]
29
- }
36
+ },
37
+ 'Gentoo',
38
+ 'Alpine',
39
+ 'Photon',
40
+ 'Slackware',
41
+ 'Mageia',
42
+ 'Openwrt'
30
43
  ]
31
44
  },
32
45
  {
@@ -312,8 +325,7 @@ module Facter
312
325
  'operatingsystemrelease',
313
326
  'osfamily',
314
327
  'physicalprocessorcount',
315
- 'processor.*',
316
- 'processor*',
328
+ 'processor[0-9]+.*',
317
329
  'processorcount',
318
330
  'productname',
319
331
  'rubyplatform',
@@ -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]
@@ -46,6 +53,15 @@ module Facter
46
53
  # @api private
47
54
  attr_reader :fact
48
55
 
56
+ # Create a new aggregated resolution mechanism.
57
+ #
58
+ # @param name [String] The name of the resolution.
59
+ # @param fact [Facter::Fact] The fact to which this
60
+ # resolution will be added.
61
+ #
62
+ # @return [Facter::Util::Resolution] The created resolution
63
+ #
64
+ # @api private
49
65
  def initialize(name, fact)
50
66
  @name = name
51
67
  @fact = fact
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'popen3'
4
+
3
5
  module Facter
4
6
  module Core
5
7
  module Execution
@@ -70,8 +72,7 @@ module Facter
70
72
  opts = { 'LC_ALL' => 'C', 'LANG' => 'C' }
71
73
  require 'timeout'
72
74
  @log.debug("Executing command: #{command}")
73
- out, stderr = Open3.popen3(opts, command.to_s) do |_, stdout, stderr, wait_thr|
74
- pid = wait_thr.pid
75
+ out, stderr = Popen3.popen3e(opts, command.to_s) do |_, stdout, stderr, pid|
75
76
  stdout_messages = +''
76
77
  stderr_messages = +''
77
78
  out_reader = Thread.new { stdout.read }
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Because Open3 uses Process.detach the env $? is not set so
5
+ # this class reimplements Open3.popen3 with Process.wait instead.
6
+ # [FACT-2934] When calling Facter::Core::Execution, $? and $CHILD_STATUS
7
+ # ruby env variables should be set.
8
+ #
9
+
10
+ module Facter
11
+ module Core
12
+ module Execution
13
+ class Popen3
14
+ def self.popen_rune(cmd, opts, child_io, parent_io) # :nodoc:
15
+ pid = spawn(*cmd, opts)
16
+ child_io.each(&:close)
17
+ result = [*parent_io, pid]
18
+ if defined? yield
19
+ begin
20
+ return yield(*result)
21
+ ensure
22
+ parent_io.each(&:close)
23
+ Process.wait(pid)
24
+ end
25
+ end
26
+ result
27
+ end
28
+
29
+ def self.popen3e(*cmd, &block)
30
+ opts = if cmd.last.is_a? Hash
31
+ cmd.pop.dup
32
+ else
33
+ {}
34
+ end
35
+ in_r, in_w = IO.pipe
36
+ opts[:in] = in_r
37
+ in_w.sync = true
38
+ out_r, out_w = IO.pipe
39
+ opts[:out] = out_w
40
+ err_r, err_w = IO.pipe
41
+ opts[:err] = err_w
42
+ popen_rune(cmd, opts, [in_r, out_w, err_w], [in_w, out_r, err_r], &block)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -59,6 +59,17 @@ module LegacyFacter
59
59
  @on_flush_block&.call
60
60
  end
61
61
 
62
+ # Resolves the fact's value or loggs an error if the value
63
+ # couldn't be resolved.
64
+ #
65
+ # @raise Facter::ResolveCustomFactError if an error was raised
66
+ # (except Timeout::Error or Narmalization::NarmalizationError
67
+ # in which case an error message is logged and the execution
68
+ # isn't suspended).
69
+ #
70
+ # @return value (hash, string, int, array, etc) or nil
71
+ #
72
+ # @api private
62
73
  def value
63
74
  result = nil
64
75
 
@@ -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
@@ -33,7 +37,7 @@ module Facter
33
37
  def initialize(name, options = {})
34
38
  @name = name.to_s.downcase.intern
35
39
 
36
- @options = Facter::Utils.deep_copy(options)
40
+ @options = options.dup
37
41
  extract_ldapname_option!(options)
38
42
 
39
43
  @ldapname ||= @name.to_s
@@ -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
@@ -55,7 +61,11 @@ module Facter
55
61
  #
56
62
  # @api private
57
63
  def add(options = {}, &block)
58
- @options = Facter::Utils.deep_copy(@options.merge(options))
64
+ @options = @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
 
@@ -201,11 +211,20 @@ module Facter
201
211
  break
202
212
  end
203
213
  @used_resolution_weight = resolve.weight
204
- return value unless value.nil?
214
+ next if value.nil?
215
+
216
+ log_fact_path(resolve)
217
+
218
+ return value
205
219
  end
206
220
  nil
207
221
  end
208
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
+
209
228
  def announce_when_no_suitable_resolution(resolutions)
210
229
  return unless resolutions.empty?
211
230