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.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docs/generate.rb +32 -0
  3. data/lib/docs/template.erb +34 -0
  4. data/lib/facter.rb +65 -9
  5. data/lib/facter/config.rb +385 -0
  6. data/lib/facter/custom_facts/core/aggregate.rb +7 -0
  7. data/lib/facter/custom_facts/core/execution.rb +28 -4
  8. data/lib/facter/custom_facts/core/execution/base.rb +33 -33
  9. data/lib/facter/custom_facts/util/collection.rb +1 -2
  10. data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
  11. data/lib/facter/custom_facts/util/fact.rb +39 -3
  12. data/lib/facter/custom_facts/util/loader.rb +1 -1
  13. data/lib/facter/custom_facts/util/parser.rb +17 -3
  14. data/lib/facter/custom_facts/util/resolution.rb +2 -2
  15. data/lib/facter/facts/aix/disks.rb +1 -1
  16. data/lib/facter/facts/aix/interfaces.rb +1 -0
  17. data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
  18. data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
  19. data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
  20. data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
  21. data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
  22. data/lib/facter/facts/aix/memory/system/available.rb +1 -1
  23. data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
  24. data/lib/facter/facts/aix/memory/system/total.rb +1 -1
  25. data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
  26. data/lib/facter/facts/aix/memory/system/used.rb +1 -1
  27. data/lib/facter/facts/aix/processors/speed.rb +1 -1
  28. data/lib/facter/facts/aix/ssh.rb +1 -1
  29. data/lib/facter/facts/aix/sshalgorithmkey.rb +1 -1
  30. data/lib/facter/facts/aix/sshfp_algorithm.rb +1 -1
  31. data/lib/facter/facts/bsd/processors/speed.rb +1 -1
  32. data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
  33. data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
  34. data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
  35. data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
  36. data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
  37. data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
  38. data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
  39. data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
  40. data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
  41. data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
  42. data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
  43. data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
  44. data/lib/facter/facts/freebsd/ssh.rb +1 -1
  45. data/lib/facter/facts/freebsd/sshalgorithmkey.rb +1 -1
  46. data/lib/facter/facts/freebsd/sshfp_algorithm.rb +1 -1
  47. data/lib/facter/facts/freebsd/virtual.rb +22 -0
  48. data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
  49. data/lib/facter/facts/linux/disks.rb +1 -1
  50. data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
  51. data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
  52. data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
  53. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
  54. data/lib/facter/facts/linux/interfaces.rb +1 -0
  55. data/lib/facter/facts/linux/is_virtual.rb +2 -2
  56. data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
  57. data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
  58. data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
  59. data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
  60. data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
  61. data/lib/facter/facts/linux/memory/system/available.rb +1 -1
  62. data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
  63. data/lib/facter/facts/linux/memory/system/total.rb +1 -1
  64. data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
  65. data/lib/facter/facts/linux/memory/system/used.rb +1 -1
  66. data/lib/facter/facts/linux/os/family.rb +4 -2
  67. data/lib/facter/facts/linux/processors/speed.rb +1 -1
  68. data/lib/facter/facts/linux/ssh.rb +1 -1
  69. data/lib/facter/facts/linux/sshalgorithmkey.rb +1 -1
  70. data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
  71. data/lib/facter/facts/linux/virtual.rb +1 -1
  72. data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
  73. data/lib/facter/facts/macosx/interfaces.rb +1 -0
  74. data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
  75. data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
  76. data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
  77. data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
  78. data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
  79. data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
  80. data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
  81. data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
  82. data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
  83. data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
  84. data/lib/facter/facts/macosx/processors/speed.rb +1 -1
  85. data/lib/facter/facts/macosx/ssh.rb +1 -1
  86. data/lib/facter/facts/macosx/sshalgorithmkey.rb +1 -1
  87. data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
  88. data/lib/facter/facts/rhel/os/release.rb +1 -1
  89. data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
  90. data/lib/facter/facts/solaris/disks.rb +1 -1
  91. data/lib/facter/facts/solaris/hypervisors/ldom.rb +3 -0
  92. data/lib/facter/facts/solaris/interfaces.rb +1 -0
  93. data/lib/facter/facts/solaris/is_virtual.rb +2 -2
  94. data/lib/facter/facts/solaris/ldom.rb +34 -4
  95. data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
  96. data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
  97. data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
  98. data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
  99. data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
  100. data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
  101. data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
  102. data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
  103. data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
  104. data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
  105. data/lib/facter/facts/solaris/processors/speed.rb +1 -1
  106. data/lib/facter/facts/solaris/ssh.rb +1 -1
  107. data/lib/facter/facts/solaris/sshalgorithmkey.rb +1 -1
  108. data/lib/facter/facts/solaris/sshfp_algorithm.rb +1 -1
  109. data/lib/facter/facts/solaris/virtual.rb +1 -1
  110. data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
  111. data/lib/facter/facts/windows/interfaces.rb +1 -0
  112. data/lib/facter/facts/windows/memory/system/available.rb +1 -1
  113. data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
  114. data/lib/facter/facts/windows/memory/system/total.rb +1 -1
  115. data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
  116. data/lib/facter/facts/windows/memory/system/used.rb +1 -1
  117. data/lib/facter/facts/windows/networking/fqdn.rb +1 -1
  118. data/lib/facter/facts/windows/os/release.rb +1 -1
  119. data/lib/facter/framework/benchmarking/timer.rb +4 -2
  120. data/lib/facter/framework/cli/cli.rb +20 -6
  121. data/lib/facter/framework/config/fact_groups.rb +10 -8
  122. data/lib/facter/framework/core/cache_manager.rb +62 -17
  123. data/lib/facter/framework/core/fact/internal/core_fact.rb +6 -1
  124. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +38 -4
  125. data/lib/facter/framework/core/fact_augmenter.rb +1 -1
  126. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -2
  127. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +17 -1
  128. data/lib/facter/framework/core/fact_manager.rb +15 -3
  129. data/lib/facter/framework/core/file_loader.rb +6 -2
  130. data/lib/facter/framework/core/options/config_file_options.rb +16 -5
  131. data/lib/facter/framework/core/options/option_store.rb +42 -20
  132. data/lib/facter/framework/detector/os_detector.rb +1 -0
  133. data/lib/facter/framework/detector/os_hierarchy.rb +5 -9
  134. data/lib/facter/framework/logging/logger.rb +3 -3
  135. data/lib/facter/models/fact_collection.rb +11 -1
  136. data/lib/facter/models/loaded_fact.rb +2 -1
  137. data/lib/facter/resolvers/aio_agent_version.rb +2 -2
  138. data/lib/facter/resolvers/aix/{architecture_resolver.rb → architecture.rb} +19 -4
  139. data/lib/facter/resolvers/aix/disks.rb +6 -5
  140. data/lib/facter/resolvers/aix/{filesystem_resolver.rb → filesystem.rb} +2 -2
  141. data/lib/facter/resolvers/aix/{hardware_resolver.rb → hardware.rb} +4 -3
  142. data/lib/facter/resolvers/aix/{load_averages_resolver.rb → load_averages.rb} +2 -1
  143. data/lib/facter/resolvers/aix/memory.rb +4 -3
  144. data/lib/facter/resolvers/aix/mountpoints.rb +6 -5
  145. data/lib/facter/resolvers/aix/{networking_resolver.rb → networking.rb} +4 -3
  146. data/lib/facter/resolvers/aix/nim.rb +1 -1
  147. data/lib/facter/resolvers/aix/os_level.rb +1 -1
  148. data/lib/facter/resolvers/aix/partitions.rb +7 -6
  149. data/lib/facter/resolvers/aix/processors.rb +5 -4
  150. data/lib/facter/resolvers/aix/serialnumber.rb +2 -2
  151. data/lib/facter/resolvers/{augeas_resolver.rb → augeas.rb} +8 -2
  152. data/lib/facter/resolvers/base_resolver.rb +14 -4
  153. data/lib/facter/resolvers/bsd/processors.rb +13 -8
  154. data/lib/facter/resolvers/cloud.rb +2 -2
  155. data/lib/facter/resolvers/containers.rb +5 -4
  156. data/lib/facter/resolvers/debian_version.rb +2 -2
  157. data/lib/facter/resolvers/{disk_resolver.rb → disk.rb} +17 -6
  158. data/lib/facter/resolvers/{dmi_resolver.rb → dmi.rb} +3 -2
  159. data/lib/facter/resolvers/dmi_decode.rb +1 -1
  160. data/lib/facter/resolvers/ec2.rb +5 -2
  161. data/lib/facter/resolvers/{eos_release_resolver.rb → eos_release.rb} +2 -2
  162. data/lib/facter/resolvers/{facterversion_resolver.rb → facterversion.rb} +1 -1
  163. data/lib/facter/resolvers/{filesystems_resolver.rb → filesystems.rb} +5 -2
  164. data/lib/facter/resolvers/{fips_enabled_resolver.rb → fips_enabled.rb} +5 -2
  165. data/lib/facter/resolvers/freebsd/{dmi_resolver.rb → dmi.rb} +1 -1
  166. data/lib/facter/resolvers/freebsd/{freebsd_version_resolver.rb → freebsd_version.rb} +9 -7
  167. data/lib/facter/resolvers/freebsd/{geom_resolver.rb → geom.rb} +15 -22
  168. data/lib/facter/resolvers/freebsd/processors.rb +13 -8
  169. data/lib/facter/resolvers/freebsd/{swap_memory_resolver.rb → swap_memory.rb} +5 -3
  170. data/lib/facter/resolvers/freebsd/{system_memory_resolver.rb → system_memory.rb} +4 -2
  171. data/lib/facter/resolvers/freebsd/virtual.rb +45 -0
  172. data/lib/facter/resolvers/gce.rb +3 -2
  173. data/lib/facter/resolvers/hostname.rb +92 -0
  174. data/lib/facter/resolvers/{identity_resolver.rb → identity.rb} +2 -1
  175. data/lib/facter/resolvers/linux/docker_uptime.rb +3 -2
  176. data/lib/facter/resolvers/linux/load_averages.rb +3 -2
  177. data/lib/facter/resolvers/load_averages.rb +5 -3
  178. data/lib/facter/resolvers/{lpar_resolver.rb → lpar.rb} +1 -1
  179. data/lib/facter/resolvers/{lsb_release_resolver.rb → lsb_release.rb} +1 -1
  180. data/lib/facter/resolvers/lspci.rb +1 -1
  181. data/lib/facter/resolvers/macosx/{dmi_resolver.rb → dmi.rb} +1 -1
  182. data/lib/facter/resolvers/macosx/{filesystems_resolver.rb → filesystems.rb} +1 -1
  183. data/lib/facter/resolvers/macosx/{load_averages_resolver.rb → load_averages.rb} +2 -1
  184. data/lib/facter/resolvers/macosx/{mountpoints_resolver.rb → mountpoints.rb} +9 -8
  185. data/lib/facter/resolvers/macosx/{processor_resolver.rb → processor.rb} +2 -1
  186. data/lib/facter/resolvers/macosx/{swap_memory_resolver.rb → swap_memory.rb} +2 -1
  187. data/lib/facter/resolvers/macosx/{system_memory_resolver.rb → system_memory.rb} +2 -1
  188. data/lib/facter/resolvers/macosx/{system_profiler_resolver.rb → system_profiler.rb} +4 -6
  189. data/lib/facter/resolvers/{memory_resolver.rb → memory.rb} +4 -2
  190. data/lib/facter/resolvers/mountpoints.rb +90 -0
  191. data/lib/facter/resolvers/{networking_resolver.rb → networking.rb} +9 -6
  192. data/lib/facter/resolvers/networking_linux.rb +296 -0
  193. data/lib/facter/resolvers/open_vz.rb +2 -4
  194. data/lib/facter/resolvers/{os_release_resolver.rb → os_release.rb} +2 -2
  195. data/lib/facter/resolvers/partitions.rb +67 -63
  196. data/lib/facter/resolvers/{path_resolver.rb → path.rb} +1 -1
  197. data/lib/facter/resolvers/{processors_resolver.rb → processors.rb} +6 -3
  198. data/lib/facter/resolvers/{redhat_release_resolver.rb → redhat_release.rb} +2 -2
  199. data/lib/facter/resolvers/{ruby_resolver.rb → ruby.rb} +1 -1
  200. data/lib/facter/resolvers/{selinux_resolver.rb → selinux.rb} +4 -4
  201. data/lib/facter/resolvers/solaris/disks.rb +2 -2
  202. data/lib/facter/resolvers/solaris/dmi.rb +3 -1
  203. data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
  204. data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
  205. data/lib/facter/resolvers/solaris/ipaddress.rb +2 -1
  206. data/lib/facter/resolvers/solaris/ldom.rb +1 -3
  207. data/lib/facter/resolvers/solaris/memory.rb +4 -3
  208. data/lib/facter/resolvers/solaris/mountpoints.rb +13 -12
  209. data/lib/facter/resolvers/solaris/networking.rb +50 -43
  210. data/lib/facter/resolvers/solaris/os_release.rb +7 -5
  211. data/lib/facter/resolvers/solaris/processors.rb +2 -1
  212. data/lib/facter/resolvers/solaris/zone.rb +1 -1
  213. data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
  214. data/lib/facter/resolvers/{ssh_resolver.rb → ssh.rb} +12 -8
  215. data/lib/facter/resolvers/{suse_release_resolver.rb → suse_release.rb} +2 -2
  216. data/lib/facter/resolvers/{sw_vers_resolver.rb → sw_vers.rb} +2 -2
  217. data/lib/facter/resolvers/{timezone_resolver.rb → timezone.rb} +1 -1
  218. data/lib/facter/resolvers/{uname_resolver.rb → uname.rb} +1 -1
  219. data/lib/facter/resolvers/{uptime_resolver.rb → uptime.rb} +3 -3
  220. data/lib/facter/resolvers/virt_what.rb +1 -1
  221. data/lib/facter/resolvers/vmware.rb +1 -1
  222. data/lib/facter/resolvers/windows/aio_agent_version.rb +2 -2
  223. data/lib/facter/resolvers/windows/{dmi_bios_resolver.rb → dmi_bios.rb} +2 -2
  224. data/lib/facter/resolvers/windows/{dmi_computersystem_resolver.rb → dmi_computersystem.rb} +2 -2
  225. data/lib/facter/resolvers/windows/{fips_resolver.rb → fips.rb} +2 -1
  226. data/lib/facter/resolvers/windows/{hardware_architecture_resolver.rb → hardware_architecture.rb} +2 -1
  227. data/lib/facter/resolvers/windows/{identity_resolver.rb → identity.rb} +2 -1
  228. data/lib/facter/resolvers/windows/{kernel_resolver.rb → kernel.rb} +3 -1
  229. data/lib/facter/resolvers/windows/{memory_resolver.rb → memory.rb} +7 -1
  230. data/lib/facter/resolvers/windows/{netkvm_resolver.rb → netkvm.rb} +2 -1
  231. data/lib/facter/resolvers/windows/{networking_resolver.rb → networking.rb} +18 -4
  232. data/lib/facter/resolvers/windows/{processors_resolver.rb → processors.rb} +3 -2
  233. data/lib/facter/resolvers/windows/{product_release_resolver.rb → product_release.rb} +2 -1
  234. data/lib/facter/resolvers/windows/ssh.rb +5 -3
  235. data/lib/facter/resolvers/windows/{system32_resolver.rb → system32.rb} +3 -1
  236. data/lib/facter/resolvers/windows/{uptime_resolver.rb → uptime.rb} +3 -2
  237. data/lib/facter/resolvers/windows/{virtualization_resolver.rb → virtualization.rb} +3 -2
  238. data/lib/facter/resolvers/windows/{win_os_description_resolver.rb → win_os_description.rb} +4 -2
  239. data/lib/facter/resolvers/{wpar_resolver.rb → wpar.rb} +1 -1
  240. data/lib/facter/resolvers/xen.rb +2 -2
  241. data/lib/facter/resolvers/zfs.rb +2 -1
  242. data/lib/facter/resolvers/zpool.rb +2 -1
  243. data/lib/facter/util/aix/info_extractor.rb +24 -0
  244. data/lib/facter/util/aix/odm_query.rb +46 -0
  245. data/lib/facter/util/api_debugger.rb +33 -29
  246. data/lib/facter/util/facts/facts_utils.rb +30 -0
  247. data/lib/facter/util/facts/unit_converter.rb +61 -0
  248. data/lib/facter/util/facts/uptime_parser.rb +128 -0
  249. data/lib/facter/util/facts/virtual_detector.rb +90 -0
  250. data/lib/facter/util/facts/windows_release_finder.rb +55 -0
  251. data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
  252. data/lib/facter/util/resolvers/aws_token.rb +37 -0
  253. data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
  254. data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
  255. data/lib/facter/util/resolvers/fingerprint.rb +15 -0
  256. data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
  257. data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
  258. data/lib/facter/util/resolvers/networking/networking.rb +109 -0
  259. data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
  260. data/lib/facter/util/resolvers/ssh.rb +17 -0
  261. data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
  262. data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
  263. data/lib/facter/{framework/utils → util}/utils.rb +0 -0
  264. data/lib/facter/util/windows/win32ole.rb +30 -0
  265. data/lib/facter/version.rb +1 -1
  266. metadata +106 -119
  267. data/lib/facter/fact_groups.conf +0 -308
  268. data/lib/facter/facts/aix/puppet_version.rb +0 -15
  269. data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
  270. data/lib/facter/facts/linux/puppet_version.rb +0 -15
  271. data/lib/facter/facts/macosx/puppet_version.rb +0 -15
  272. data/lib/facter/facts/solaris/puppet_version.rb +0 -15
  273. data/lib/facter/facts/windows/puppet_version.rb +0 -15
  274. data/lib/facter/facts_utils/facts_utils.rb +0 -12
  275. data/lib/facter/facts_utils/unit_converter.rb +0 -59
  276. data/lib/facter/facts_utils/uptime_parser.rb +0 -124
  277. data/lib/facter/facts_utils/virtual_detector.rb +0 -78
  278. data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
  279. data/lib/facter/os_hierarchy.json +0 -36
  280. data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
  281. data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
  282. data/lib/facter/resolvers/hostname_resolver.rb +0 -44
  283. data/lib/facter/resolvers/mountpoints_resolver.rb +0 -62
  284. data/lib/facter/resolvers/networking_linux_resolver.rb +0 -159
  285. data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
  286. data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
  287. data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
  288. data/lib/facter/resolvers/utils/networking.rb +0 -86
  289. data/lib/facter/resolvers/utils/ssh.rb +0 -13
  290. data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
  291. data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
@@ -16,7 +16,7 @@ module Facter
16
16
  private_class_method def self.get_resolved_facts_for_searched_fact(searched_fact, resolved_facts)
17
17
  if searched_fact.name.include?('.*')
18
18
  resolved_facts
19
- .select { |resolved_fact| resolved_fact.name.match(searched_fact.user_query) }
19
+ .select { |resolved_fact| resolved_fact.name.match(searched_fact.name) }
20
20
  .reject(&:user_query)
21
21
  .uniq(&:name)
22
22
  else
@@ -21,8 +21,9 @@ module Facter
21
21
 
22
22
  custom_facts_to_load = LegacyFacter.collection.custom_facts
23
23
 
24
- custom_facts_to_load&.each do |custom_fact_name|
25
- loaded_fact = LoadedFact.new(custom_fact_name.to_s, nil, :custom)
24
+ custom_facts_to_load&.each do |k, v|
25
+ loaded_fact = LoadedFact.new(k.to_s, nil, :custom)
26
+ loaded_fact.is_env = v.options[:is_env] if v.options[:is_env]
26
27
  custom_facts << loaded_fact
27
28
  end
28
29
 
@@ -37,6 +38,7 @@ module Facter
37
38
  external_facts_to_load&.each do |k, v|
38
39
  loaded_fact = LoadedFact.new(k.to_s, nil, :external)
39
40
  loaded_fact.file = v.options[:file]
41
+ loaded_fact.is_env = v.options[:is_env]
40
42
  external_facts << loaded_fact
41
43
  end
42
44
 
@@ -24,11 +24,27 @@ module Facter
24
24
  @internal_facts = load_internal_facts(options)
25
25
  @external_facts = load_external_facts(options)
26
26
 
27
+ filter_env_facts
28
+
27
29
  @facts = @internal_facts + @external_facts
28
30
  end
29
31
 
30
32
  private
31
33
 
34
+ def filter_env_facts
35
+ env_fact_names = @external_facts.select { |fact| fact.is_env == true }.map(&:name)
36
+ return unless env_fact_names.any?
37
+
38
+ @internal_facts.delete_if do |fact|
39
+ if env_fact_names.include?(fact.name)
40
+ @log.debug("Reading #{fact.name} fact from environment variable")
41
+ true
42
+ else
43
+ false
44
+ end
45
+ end
46
+ end
47
+
32
48
  def load_internal_facts(options)
33
49
  @log.debug('Loading internal facts')
34
50
  internal_facts = []
@@ -84,7 +100,7 @@ module Facter
84
100
 
85
101
  blocked_facts.each do |blocked|
86
102
  facts.each do |fact|
87
- next unless fact.name =~ /^#{blocked}/
103
+ next unless fact.name =~ /^#{blocked}\..*|^#{blocked}$/
88
104
 
89
105
  if fact.type == :core
90
106
  reject_list_core << fact
@@ -17,8 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def resolve_facts(user_query = [])
20
- loaded_facts = @fact_loader.load(Options.get)
21
- searched_facts = QueryParser.parse(user_query, loaded_facts)
20
+ searched_facts = parse_user_query(user_query)
22
21
 
23
22
  cache_manager = Facter::CacheManager.new
24
23
  searched_facts, cached_facts = cache_manager.resolve_facts(searched_facts)
@@ -27,11 +26,12 @@ module Facter
27
26
 
28
27
  resolved_facts = override_core_facts(internal_facts, external_facts)
29
28
 
30
- cache_manager.cache_facts(resolved_facts)
31
29
  resolved_facts = resolved_facts.concat(cached_facts)
30
+ cache_manager.cache_facts(resolved_facts)
32
31
 
33
32
  FactFilter.new.filter_facts!(resolved_facts)
34
33
 
34
+ log_resolved_facts(resolved_facts)
35
35
  resolved_facts
36
36
  end
37
37
 
@@ -47,6 +47,12 @@ module Facter
47
47
 
48
48
  private
49
49
 
50
+ def parse_user_query(user_query)
51
+ loaded_facts = @fact_loader.load(Options.get)
52
+
53
+ QueryParser.parse(user_query, loaded_facts)
54
+ end
55
+
50
56
  def override_core_facts(core_facts, custom_facts)
51
57
  return core_facts unless custom_facts
52
58
 
@@ -60,5 +66,11 @@ module Facter
60
66
  def root_fact_name(fact)
61
67
  fact.name.split('.').first
62
68
  end
69
+
70
+ def log_resolved_facts(resolved_facts)
71
+ resolved_facts.each do |fact|
72
+ @log.debug("fact \"#{fact.name}\" has resolved to: #{fact.value}") unless fact.value.nil?
73
+ end
74
+ end
63
75
  end
64
76
  end
@@ -34,7 +34,11 @@ require 'facter/framework/config/fact_groups'
34
34
 
35
35
  load_dir(['config'])
36
36
 
37
- load_dir(%w[resolvers utils])
37
+ load_dir(['util'])
38
+ load_dir(%w[util resolvers])
39
+ load_dir(%w[util facts])
40
+ load_dir(%w[util resolvers networking])
41
+
38
42
  load_dir(['resolvers'])
39
43
  load_dir(['facts_utils'])
40
44
  load_dir(%w[framework core])
@@ -47,12 +51,12 @@ load_dir(%w[framework core fact external])
47
51
  load_dir(%w[framework formatters])
48
52
 
49
53
  os_hierarchy = OsDetector.instance.hierarchy
54
+ os_hierarchy.each { |operating_system| load_dir(['util', operating_system.downcase, '**']) }
50
55
  os_hierarchy.each { |operating_system| load_dir(['facts', operating_system.downcase, '**']) }
51
56
  os_hierarchy.each { |operating_system| load_dir(['resolvers', operating_system.downcase, '**']) }
52
57
 
53
58
  require 'facter/custom_facts/core/legacy_facter'
54
59
  load_dir(%w[framework utils])
55
- load_dir(['util'])
56
60
 
57
61
  require 'facter/framework/core/fact_augmenter'
58
62
  require 'facter/framework/parsers/query_parser'
@@ -19,14 +19,18 @@ module Facter
19
19
  private
20
20
 
21
21
  def augment_all
22
- if Options.cli?
23
- augment_cli(Facter::ConfigReader.cli)
24
- augment_ruby(Facter::ConfigReader.global)
25
- end
22
+ augment_cli(Facter::ConfigReader.cli) if Options.cli?
23
+ augment_globals
24
+ augment_facts(Facter::ConfigReader.ttls, Facter::ConfigReader.fact_groups)
25
+ end
26
+
27
+ def augment_globals
28
+ augment_ruby(Facter::ConfigReader.global)
29
+
26
30
  augment_custom(Facter::ConfigReader.global)
27
31
  augment_external(Facter::ConfigReader.global)
28
32
  augment_show_legacy(Facter::ConfigReader.global)
29
- augment_facts(Facter::ConfigReader.ttls, Facter::ConfigReader.fact_groups)
33
+ augment_sequential(Facter::ConfigReader.global)
30
34
  end
31
35
 
32
36
  def augment_config_path(config_path)
@@ -68,6 +72,7 @@ module Facter
68
72
 
69
73
  def augment_ruby(global_conf)
70
74
  return unless global_conf
75
+ return unless Options.cli?
71
76
 
72
77
  @options[:no_ruby] = global_conf['no-ruby'].nil? ? false : global_conf['no-ruby']
73
78
  end
@@ -78,6 +83,12 @@ module Facter
78
83
  @options[:show_legacy] = global_conf['show-legacy'] unless global_conf['show-legacy'].nil?
79
84
  end
80
85
 
86
+ def augment_sequential(global_conf)
87
+ return unless global_conf
88
+
89
+ @options[:sequential] = global_conf['sequential'] unless global_conf['sequential'].nil?
90
+ end
91
+
81
92
  def augment_facts(ttls, groups)
82
93
  fact_groups = Facter::FactGroups.new
83
94
 
@@ -8,31 +8,42 @@ module Facter
8
8
  # TODO: constant is not yet available when running puppet facts
9
9
  @log_level = :warn
10
10
  @show_legacy = true
11
+ @custom_facts = true
12
+ @blocked_facts = []
13
+ @ruby = true
14
+ @external_facts = true
15
+ @config = nil
16
+ @user_query = []
17
+ @strict = false
18
+ @json = false
19
+ @cache = true
20
+ @yaml = false
21
+ @puppet = false
22
+ @ttls = []
11
23
  @block = true
12
- @custom_dir = []
24
+ @cli = nil
13
25
  @config_file_custom_dir = []
14
- @custom_facts = true
15
- @external_dir = []
16
26
  @config_file_external_dir = []
17
27
  @default_external_dir = []
18
- @external_facts = true
19
- @ruby = true
20
- @cache = true
21
- @blocked_facts = []
22
- @user_query = []
23
- @block_list = {}
24
28
  @fact_groups = {}
29
+ @sequential = true
30
+ @ttls = []
31
+ @block_list = []
25
32
  @color = true
33
+ @trace = false
26
34
  @timing = false
35
+ @external_dir = []
36
+ @custom_dir = []
37
+ @hocon = false
27
38
 
28
39
  class << self
29
40
  attr_reader :debug, :verbose, :log_level, :show_legacy,
30
41
  :custom_facts, :blocked_facts, :ruby, :external_facts
31
42
 
32
- attr_accessor :config, :user_query, :strict, :json, :haml,
43
+ attr_accessor :config, :user_query, :strict, :json,
33
44
  :cache, :yaml, :puppet, :ttls, :block, :cli, :config_file_custom_dir,
34
45
  :config_file_external_dir, :default_external_dir, :fact_groups,
35
- :block_list, :color, :trace, :timing
46
+ :block_list, :color, :trace, :sequential, :timing, :hocon
36
47
 
37
48
  attr_writer :external_dir
38
49
 
@@ -158,26 +169,37 @@ module Facter
158
169
  # TODO: constant is not yet available when running puppet facts
159
170
  @log_level = :warn
160
171
  @show_legacy = true
161
- @block = true
162
172
  @ruby = true
163
173
  @user_query = []
164
- @cli = nil
174
+ @json = false
175
+ @hocon = false
165
176
  @cache = true
166
- @trace = false
177
+ @yaml = false
178
+ @puppet = false
179
+ @ttls = []
180
+ @block = true
181
+ @cli = nil
182
+ @custom_facts = true
167
183
  reset_config
168
184
  end
169
185
 
170
186
  def reset_config
171
- @custom_dir = []
172
- @custom_facts = true
173
- @external_dir = []
174
- @default_external_dir = []
175
- @config_file_external_dir = []
176
- @external_facts = true
177
187
  @blocked_facts = []
188
+ @external_facts = true
189
+ @config = nil
190
+ @strict = false
191
+ @config_file_custom_dir = []
192
+ @config_file_external_dir = []
193
+ @default_external_dir = []
178
194
  @fact_groups = {}
179
195
  @block_list = {}
196
+ @color = true
197
+ @sequential = true
198
+ @ttls = []
199
+ @trace = false
180
200
  @timing = false
201
+ @external_dir = []
202
+ @custom_dir = []
181
203
  end
182
204
 
183
205
  def fallback_external_dir
@@ -45,6 +45,7 @@ class OsDetector
45
45
  if hierarchy.empty?
46
46
  @log.debug("Could not detect hierarchy using os identifier: #{identifier} , trying with family")
47
47
 
48
+ # https://www.commandlinux.com/man-page/man5/os-release.5.html
48
49
  detect_family.to_s.split.each do |family|
49
50
  hierarchy = @os_hierarchy.construct_hierarchy(family)
50
51
  return hierarchy unless hierarchy.empty?
@@ -1,29 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'facter/config'
4
+
3
5
  module Facter
4
6
  class OsHierarchy
5
7
  def initialize
6
8
  @log = Log.new(self)
7
- json_file_path = File.join(File.dirname(__FILE__), '../../os_hierarchy.json')
8
- json_file = Util::FileHelper.safe_read(json_file_path)
9
- begin
10
- @json_os_hierarchy = JSON.parse(json_file)
11
- rescue JSON::ParserError => _e
12
- @log.error('Could not parse os_hierarchy json')
13
- end
9
+ @os_hierarchy = Facter::Config::OS_HIERARCHY
14
10
  end
15
11
 
16
12
  def construct_hierarchy(searched_os)
17
13
  return [] if searched_os.nil?
18
14
 
19
15
  searched_os = searched_os.to_s.capitalize
20
- if @json_os_hierarchy.nil?
16
+ if @os_hierarchy.nil?
21
17
  @log.debug("There is no os_hierarchy, will fall back to: #{searched_os}")
22
18
  return [searched_os]
23
19
  end
24
20
 
25
21
  @searched_path = []
26
- search(@json_os_hierarchy, searched_os, [])
22
+ search(@os_hierarchy, searched_os, [])
27
23
 
28
24
  @searched_path.map { |os_name| os_name.to_s.capitalize }
29
25
  end
@@ -100,10 +100,10 @@ module Facter
100
100
  end
101
101
 
102
102
  def log_exception(exception)
103
- msg = colorize(exception.message, RED) + "\n"
104
- msg += exception.backtrace.join("\n") if Options[:trace]
103
+ msg = exception.message
104
+ msg += "\n" + exception.backtrace.join("\n") if Options[:trace]
105
105
 
106
- @@logger.error(@class_name + ' - ' + msg)
106
+ error(msg, true)
107
107
  end
108
108
 
109
109
  private
@@ -4,6 +4,7 @@ module Facter
4
4
  class FactCollection < Hash
5
5
  def initialize
6
6
  super
7
+ @log = Log.new(self)
7
8
  end
8
9
 
9
10
  def build_fact_collection!(facts)
@@ -39,7 +40,16 @@ module Facter
39
40
  private
40
41
 
41
42
  def bury_fact(fact)
42
- bury(*fact.name.split('.') + fact.filter_tokens << fact.value)
43
+ split_fact_name = extract_fact_name(fact)
44
+ bury(*split_fact_name + fact.filter_tokens << fact.value)
45
+ rescue NoMethodError
46
+ @log.error("#{fact.type.to_s.capitalize} fact `#{fact.name}` cannot be added to collection."\
47
+ ' The format of this fact is incompatible with other'\
48
+ " facts that belong to `#{fact.name.split('.').first}` group")
49
+ end
50
+
51
+ def extract_fact_name(fact)
52
+ fact.type == :legacy ? [fact.name] : fact.name.split('.')
43
53
  end
44
54
  end
45
55
  end
@@ -3,13 +3,14 @@
3
3
  module Facter
4
4
  class LoadedFact
5
5
  attr_reader :name, :klass, :type
6
- attr_accessor :file
6
+ attr_accessor :file, :is_env
7
7
 
8
8
  def initialize(name, klass, type = nil, file = nil)
9
9
  @name = name
10
10
  @klass = klass
11
11
  @type = type.nil? ? :core : type
12
12
  @file = file
13
+ @is_env = false
13
14
  end
14
15
  end
15
16
  end
@@ -3,7 +3,7 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class AioAgentVersion < BaseResolver
6
- @fact_list ||= {}
6
+ init_resolver
7
7
 
8
8
  class << self
9
9
  private
@@ -13,7 +13,7 @@ module Facter
13
13
  end
14
14
 
15
15
  def read_agent_version
16
- aio_agent_version = Util::FileHelper.safe_read('/opt/puppetlabs/puppet/VERSION', nil)&.chomp
16
+ aio_agent_version = Facter::Util::FileHelper.safe_read('/opt/puppetlabs/puppet/VERSION', nil)&.chomp
17
17
  aio_agent_version = aio_agent_version&.match(/^\d+\.\d+\.\d+(\.\d+){0,2}/)&.to_s
18
18
  @fact_list[:aio_agent_version] = aio_agent_version
19
19
  end
@@ -4,7 +4,8 @@ module Facter
4
4
  module Resolvers
5
5
  class Architecture < BaseResolver
6
6
  # :architecture
7
- @fact_list ||= {}
7
+ init_resolver
8
+
8
9
  class << self
9
10
  private
10
11
 
@@ -13,10 +14,12 @@ module Facter
13
14
  end
14
15
 
15
16
  def read_architecture(fact_name)
16
- require_relative 'utils/odm_query'
17
- odmquery = ODMQuery.new
17
+ require 'facter/util/aix/odm_query'
18
+
19
+ proc_number = read_proc
20
+ odmquery = Facter::Util::Aix::ODMQuery.new
18
21
  odmquery
19
- .equals('name', 'proc0')
22
+ .equals('name', proc_number)
20
23
  .equals('attribute', 'type')
21
24
 
22
25
  result = odmquery.execute
@@ -32,6 +35,18 @@ module Facter
32
35
 
33
36
  @fact_list[fact_name]
34
37
  end
38
+
39
+ def read_proc
40
+ odmquery = Facter::Util::Aix::ODMQuery.new
41
+ odmquery
42
+ .equals('PdDvLn', 'processor/sys/proc_rspc')
43
+ .equals('status', '1')
44
+
45
+ result = odmquery.execute
46
+ result.each_line do |line|
47
+ return line.split('=')[1].strip.delete('\"') if line.include?('name')
48
+ end
49
+ end
35
50
  end
36
51
  end
37
52
  end