facter 4.0.47 → 4.0.52

Sign up to get free protection for your applications and to get access to all the features.
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