facter 4.0.44 → 4.0.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (309) 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 +52 -7
  5. data/lib/facter/config.rb +53 -9
  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 +36 -35
  9. data/lib/facter/custom_facts/core/execution/popen3.rb +47 -0
  10. data/lib/facter/custom_facts/util/collection.rb +1 -2
  11. data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
  12. data/lib/facter/custom_facts/util/fact.rb +40 -4
  13. data/lib/facter/custom_facts/util/loader.rb +1 -1
  14. data/lib/facter/custom_facts/util/parser.rb +17 -3
  15. data/lib/facter/custom_facts/util/resolution.rb +2 -2
  16. data/lib/facter/facts/aix/disks.rb +1 -1
  17. data/lib/facter/facts/aix/interfaces.rb +1 -0
  18. data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
  19. data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
  20. data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
  21. data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
  22. data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
  23. data/lib/facter/facts/aix/memory/system/available.rb +1 -1
  24. data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
  25. data/lib/facter/facts/aix/memory/system/total.rb +1 -1
  26. data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
  27. data/lib/facter/facts/aix/memory/system/used.rb +1 -1
  28. data/lib/facter/facts/aix/processors/speed.rb +1 -1
  29. data/lib/facter/facts/aix/ssh.rb +1 -1
  30. data/lib/facter/facts/aix/sshalgorithmkey.rb +1 -1
  31. data/lib/facter/facts/aix/sshfp_algorithm.rb +1 -1
  32. data/lib/facter/facts/alpine/os/release.rb +29 -0
  33. data/lib/facter/facts/amzn/os/release.rb +29 -0
  34. data/lib/facter/facts/bsd/processors/speed.rb +1 -1
  35. data/lib/facter/facts/devuan/os/distro/release.rb +36 -0
  36. data/lib/facter/facts/devuan/os/release.rb +29 -0
  37. data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
  38. data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
  39. data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
  40. data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
  41. data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
  42. data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
  43. data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
  44. data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
  45. data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
  46. data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
  47. data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
  48. data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
  49. data/lib/facter/facts/freebsd/ssh.rb +1 -1
  50. data/lib/facter/facts/freebsd/sshalgorithmkey.rb +1 -1
  51. data/lib/facter/facts/freebsd/sshfp_algorithm.rb +1 -1
  52. data/lib/facter/facts/freebsd/virtual.rb +22 -0
  53. data/lib/facter/facts/gentoo/os/release.rb +29 -0
  54. data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
  55. data/lib/facter/facts/linux/disks.rb +1 -1
  56. data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
  57. data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
  58. data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
  59. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
  60. data/lib/facter/facts/linux/interfaces.rb +1 -0
  61. data/lib/facter/facts/linux/is_virtual.rb +2 -2
  62. data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
  63. data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
  64. data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
  65. data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
  66. data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
  67. data/lib/facter/facts/linux/memory/system/available.rb +1 -1
  68. data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
  69. data/lib/facter/facts/linux/memory/system/total.rb +1 -1
  70. data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
  71. data/lib/facter/facts/linux/memory/system/used.rb +1 -1
  72. data/lib/facter/facts/linux/os/family.rb +4 -2
  73. data/lib/facter/facts/linux/processors/speed.rb +1 -1
  74. data/lib/facter/facts/linux/ssh.rb +1 -1
  75. data/lib/facter/facts/linux/sshalgorithmkey.rb +1 -1
  76. data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
  77. data/lib/facter/facts/linux/virtual.rb +1 -1
  78. data/lib/facter/facts/linuxmint/os/name.rb +18 -0
  79. data/lib/facter/facts/linuxmint/os/release.rb +35 -0
  80. data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
  81. data/lib/facter/facts/macosx/interfaces.rb +1 -0
  82. data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
  83. data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
  84. data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
  85. data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
  86. data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
  87. data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
  88. data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
  89. data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
  90. data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
  91. data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
  92. data/lib/facter/facts/macosx/processors/speed.rb +1 -1
  93. data/lib/facter/facts/macosx/ssh.rb +1 -1
  94. data/lib/facter/facts/macosx/sshalgorithmkey.rb +1 -1
  95. data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
  96. data/lib/facter/facts/mageia/os/release.rb +36 -0
  97. data/lib/facter/facts/meego/os/release.rb +29 -0
  98. data/lib/facter/facts/oel/os/release.rb +29 -0
  99. data/lib/facter/facts/ol/os/release.rb +29 -0
  100. data/lib/facter/facts/openwrt/os/release.rb +35 -0
  101. data/lib/facter/facts/ovs/os/release.rb +29 -0
  102. data/lib/facter/facts/photon/os/release.rb +45 -0
  103. data/lib/facter/facts/rhel/os/release.rb +1 -8
  104. data/lib/facter/facts/slackware/os/release.rb +35 -0
  105. data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
  106. data/lib/facter/facts/solaris/disks.rb +1 -1
  107. data/lib/facter/facts/solaris/hypervisors/ldom.rb +3 -0
  108. data/lib/facter/facts/solaris/interfaces.rb +1 -0
  109. data/lib/facter/facts/solaris/is_virtual.rb +2 -2
  110. data/lib/facter/facts/solaris/ldom.rb +34 -4
  111. data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
  112. data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
  113. data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
  114. data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
  115. data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
  116. data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
  117. data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
  118. data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
  119. data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
  120. data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
  121. data/lib/facter/facts/solaris/processors/speed.rb +1 -1
  122. data/lib/facter/facts/solaris/ssh.rb +1 -1
  123. data/lib/facter/facts/solaris/sshalgorithmkey.rb +1 -1
  124. data/lib/facter/facts/solaris/sshfp_algorithm.rb +1 -1
  125. data/lib/facter/facts/solaris/virtual.rb +1 -1
  126. data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
  127. data/lib/facter/facts/windows/interfaces.rb +1 -0
  128. data/lib/facter/facts/windows/memory/system/available.rb +1 -1
  129. data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
  130. data/lib/facter/facts/windows/memory/system/total.rb +1 -1
  131. data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
  132. data/lib/facter/facts/windows/memory/system/used.rb +1 -1
  133. data/lib/facter/facts/windows/networking/fqdn.rb +1 -1
  134. data/lib/facter/facts/windows/os/release.rb +1 -1
  135. data/lib/facter/framework/cli/cli.rb +20 -6
  136. data/lib/facter/framework/config/config_reader.rb +7 -0
  137. data/lib/facter/framework/config/fact_groups.rb +8 -3
  138. data/lib/facter/framework/core/cache_manager.rb +58 -16
  139. data/lib/facter/framework/core/fact/internal/core_fact.rb +6 -1
  140. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +38 -4
  141. data/lib/facter/framework/core/fact_augmenter.rb +1 -1
  142. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -6
  143. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +19 -1
  144. data/lib/facter/framework/core/fact_manager.rb +15 -3
  145. data/lib/facter/framework/core/file_loader.rb +6 -2
  146. data/lib/facter/framework/core/options/config_file_options.rb +16 -5
  147. data/lib/facter/framework/core/options/option_store.rb +9 -3
  148. data/lib/facter/framework/detector/os_detector.rb +8 -0
  149. data/lib/facter/framework/logging/logger.rb +3 -3
  150. data/lib/facter/models/fact_collection.rb +11 -1
  151. data/lib/facter/models/loaded_fact.rb +2 -1
  152. data/lib/facter/resolvers/aio_agent_version.rb +3 -3
  153. data/lib/facter/resolvers/aix/{architecture_resolver.rb → architecture.rb} +6 -5
  154. data/lib/facter/resolvers/aix/disks.rb +7 -6
  155. data/lib/facter/resolvers/aix/ffi/ffi.rb +63 -0
  156. data/lib/facter/resolvers/aix/ffi/ffi_helper.rb +146 -20
  157. data/lib/facter/resolvers/aix/ffi/structs.rb +69 -0
  158. data/lib/facter/resolvers/aix/{filesystem_resolver.rb → filesystem.rb} +3 -3
  159. data/lib/facter/resolvers/aix/{hardware_resolver.rb → hardware.rb} +5 -4
  160. data/lib/facter/resolvers/aix/{load_averages_resolver.rb → load_averages.rb} +4 -3
  161. data/lib/facter/resolvers/aix/memory.rb +5 -4
  162. data/lib/facter/resolvers/aix/mountpoints.rb +7 -6
  163. data/lib/facter/resolvers/aix/{networking_resolver.rb → networking.rb} +13 -19
  164. data/lib/facter/resolvers/aix/nim.rb +2 -2
  165. data/lib/facter/resolvers/aix/os_level.rb +2 -2
  166. data/lib/facter/resolvers/aix/partitions.rb +8 -7
  167. data/lib/facter/resolvers/aix/processors.rb +6 -5
  168. data/lib/facter/resolvers/aix/serialnumber.rb +3 -3
  169. data/lib/facter/resolvers/{augeas_resolver.rb → augeas.rb} +2 -2
  170. data/lib/facter/resolvers/base_resolver.rb +17 -7
  171. data/lib/facter/resolvers/bsd/processors.rb +3 -2
  172. data/lib/facter/resolvers/cloud.rb +3 -3
  173. data/lib/facter/resolvers/containers.rb +6 -5
  174. data/lib/facter/resolvers/debian_version.rb +3 -3
  175. data/lib/facter/resolvers/{disk_resolver.rb → disk.rb} +7 -4
  176. data/lib/facter/resolvers/{dmi_resolver.rb → dmi.rb} +4 -3
  177. data/lib/facter/resolvers/dmi_decode.rb +2 -2
  178. data/lib/facter/resolvers/ec2.rb +6 -3
  179. data/lib/facter/resolvers/{eos_release_resolver.rb → eos_release.rb} +3 -3
  180. data/lib/facter/resolvers/{facterversion_resolver.rb → facterversion.rb} +2 -2
  181. data/lib/facter/resolvers/{filesystems_resolver.rb → filesystems.rb} +6 -3
  182. data/lib/facter/resolvers/{fips_enabled_resolver.rb → fips_enabled.rb} +6 -3
  183. data/lib/facter/resolvers/freebsd/{dmi_resolver.rb → dmi.rb} +2 -2
  184. data/lib/facter/resolvers/freebsd/{freebsd_version_resolver.rb → freebsd_version.rb} +10 -8
  185. data/lib/facter/resolvers/freebsd/{geom_resolver.rb → geom.rb} +4 -3
  186. data/lib/facter/resolvers/freebsd/processors.rb +3 -2
  187. data/lib/facter/resolvers/freebsd/{swap_memory_resolver.rb → swap_memory.rb} +6 -4
  188. data/lib/facter/resolvers/freebsd/{system_memory_resolver.rb → system_memory.rb} +5 -3
  189. data/lib/facter/resolvers/freebsd/virtual.rb +45 -0
  190. data/lib/facter/resolvers/gce.rb +4 -3
  191. data/lib/facter/resolvers/hostname.rb +92 -0
  192. data/lib/facter/resolvers/{identity_resolver.rb → identity.rb} +3 -2
  193. data/lib/facter/resolvers/linux/docker_uptime.rb +4 -3
  194. data/lib/facter/resolvers/linux/load_averages.rb +4 -3
  195. data/lib/facter/resolvers/load_averages.rb +6 -4
  196. data/lib/facter/resolvers/{lpar_resolver.rb → lpar.rb} +2 -2
  197. data/lib/facter/resolvers/{lsb_release_resolver.rb → lsb_release.rb} +2 -2
  198. data/lib/facter/resolvers/lspci.rb +2 -2
  199. data/lib/facter/resolvers/macosx/{dmi_resolver.rb → dmi.rb} +2 -2
  200. data/lib/facter/resolvers/macosx/{filesystems_resolver.rb → filesystems.rb} +2 -2
  201. data/lib/facter/resolvers/macosx/{load_averages_resolver.rb → load_averages.rb} +3 -2
  202. data/lib/facter/resolvers/macosx/{mountpoints_resolver.rb → mountpoints.rb} +10 -9
  203. data/lib/facter/resolvers/macosx/{processor_resolver.rb → processor.rb} +3 -2
  204. data/lib/facter/resolvers/macosx/{swap_memory_resolver.rb → swap_memory.rb} +3 -2
  205. data/lib/facter/resolvers/macosx/{system_memory_resolver.rb → system_memory.rb} +3 -2
  206. data/lib/facter/resolvers/macosx/{system_profiler_resolver.rb → system_profiler.rb} +5 -7
  207. data/lib/facter/resolvers/{memory_resolver.rb → memory.rb} +5 -3
  208. data/lib/facter/resolvers/{mountpoints_resolver.rb → mountpoints.rb} +13 -10
  209. data/lib/facter/resolvers/{networking_resolver.rb → networking.rb} +10 -7
  210. data/lib/facter/resolvers/networking_linux.rb +296 -0
  211. data/lib/facter/resolvers/open_vz.rb +3 -5
  212. data/lib/facter/resolvers/{os_release_resolver.rb → os_release.rb} +3 -3
  213. data/lib/facter/resolvers/partitions.rb +8 -7
  214. data/lib/facter/resolvers/{path_resolver.rb → path.rb} +2 -2
  215. data/lib/facter/resolvers/{processors_resolver.rb → processors.rb} +7 -4
  216. data/lib/facter/resolvers/{redhat_release_resolver.rb → redhat_release.rb} +3 -3
  217. data/lib/facter/resolvers/release_from_first_line.rb +41 -0
  218. data/lib/facter/resolvers/{ruby_resolver.rb → ruby.rb} +2 -2
  219. data/lib/facter/resolvers/{selinux_resolver.rb → selinux.rb} +5 -5
  220. data/lib/facter/resolvers/solaris/disks.rb +3 -3
  221. data/lib/facter/resolvers/solaris/dmi.rb +2 -2
  222. data/lib/facter/resolvers/solaris/dmi_sparc.rb +2 -2
  223. data/lib/facter/resolvers/solaris/filesystems.rb +2 -2
  224. data/lib/facter/resolvers/solaris/ipaddress.rb +3 -2
  225. data/lib/facter/resolvers/solaris/ldom.rb +2 -4
  226. data/lib/facter/resolvers/solaris/memory.rb +5 -4
  227. data/lib/facter/resolvers/solaris/mountpoints.rb +14 -13
  228. data/lib/facter/resolvers/solaris/networking.rb +51 -43
  229. data/lib/facter/resolvers/solaris/os_release.rb +4 -3
  230. data/lib/facter/resolvers/solaris/processors.rb +3 -2
  231. data/lib/facter/resolvers/solaris/zone.rb +2 -2
  232. data/lib/facter/resolvers/solaris/zone_name.rb +2 -2
  233. data/lib/facter/resolvers/specific_release_file.rb +35 -0
  234. data/lib/facter/resolvers/{ssh_resolver.rb → ssh.rb} +9 -5
  235. data/lib/facter/resolvers/{suse_release_resolver.rb → suse_release.rb} +3 -3
  236. data/lib/facter/resolvers/{sw_vers_resolver.rb → sw_vers.rb} +3 -3
  237. data/lib/facter/resolvers/{timezone_resolver.rb → timezone.rb} +2 -2
  238. data/lib/facter/resolvers/{uname_resolver.rb → uname.rb} +2 -2
  239. data/lib/facter/resolvers/{uptime_resolver.rb → uptime.rb} +4 -4
  240. data/lib/facter/resolvers/virt_what.rb +2 -2
  241. data/lib/facter/resolvers/vmware.rb +2 -2
  242. data/lib/facter/resolvers/windows/aio_agent_version.rb +3 -3
  243. data/lib/facter/resolvers/windows/{dmi_bios_resolver.rb → dmi_bios.rb} +3 -3
  244. data/lib/facter/resolvers/windows/{dmi_computersystem_resolver.rb → dmi_computersystem.rb} +3 -3
  245. data/lib/facter/resolvers/windows/ffi/network_utils.rb +1 -2
  246. data/lib/facter/resolvers/windows/{fips_resolver.rb → fips.rb} +3 -2
  247. data/lib/facter/resolvers/windows/{hardware_architecture_resolver.rb → hardware_architecture.rb} +3 -2
  248. data/lib/facter/resolvers/windows/{identity_resolver.rb → identity.rb} +3 -2
  249. data/lib/facter/resolvers/windows/{kernel_resolver.rb → kernel.rb} +4 -2
  250. data/lib/facter/resolvers/windows/{memory_resolver.rb → memory.rb} +8 -2
  251. data/lib/facter/resolvers/windows/{netkvm_resolver.rb → netkvm.rb} +3 -2
  252. data/lib/facter/resolvers/windows/{networking_resolver.rb → networking.rb} +24 -6
  253. data/lib/facter/resolvers/windows/{processors_resolver.rb → processors.rb} +4 -3
  254. data/lib/facter/resolvers/windows/{product_release_resolver.rb → product_release.rb} +3 -2
  255. data/lib/facter/resolvers/windows/ssh.rb +6 -4
  256. data/lib/facter/resolvers/windows/{system32_resolver.rb → system32.rb} +4 -2
  257. data/lib/facter/resolvers/windows/{uptime_resolver.rb → uptime.rb} +4 -3
  258. data/lib/facter/resolvers/windows/{virtualization_resolver.rb → virtualization.rb} +4 -3
  259. data/lib/facter/resolvers/windows/{win_os_description_resolver.rb → win_os_description.rb} +5 -3
  260. data/lib/facter/resolvers/{wpar_resolver.rb → wpar.rb} +2 -2
  261. data/lib/facter/resolvers/xen.rb +3 -3
  262. data/lib/facter/resolvers/zfs.rb +3 -2
  263. data/lib/facter/resolvers/zpool.rb +3 -2
  264. data/lib/facter/util/aix/info_extractor.rb +24 -0
  265. data/lib/facter/util/aix/odm_query.rb +46 -0
  266. data/lib/facter/util/api_debugger.rb +33 -29
  267. data/lib/facter/util/facts/facts_utils.rb +47 -0
  268. data/lib/facter/util/facts/unit_converter.rb +68 -0
  269. data/lib/facter/util/facts/uptime_parser.rb +128 -0
  270. data/lib/facter/util/facts/virtual_detector.rb +90 -0
  271. data/lib/facter/util/facts/windows_release_finder.rb +55 -0
  272. data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
  273. data/lib/facter/util/resolvers/aws_token.rb +37 -0
  274. data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
  275. data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
  276. data/lib/facter/util/resolvers/fingerprint.rb +15 -0
  277. data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
  278. data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
  279. data/lib/facter/util/resolvers/networking/networking.rb +109 -0
  280. data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
  281. data/lib/facter/util/resolvers/ssh.rb +17 -0
  282. data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
  283. data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
  284. data/lib/facter/{framework/utils → util}/utils.rb +0 -4
  285. data/lib/facter/util/windows/win32ole.rb +30 -0
  286. data/lib/facter/version.rb +1 -1
  287. metadata +125 -117
  288. data/lib/facter/facts/aix/puppet_version.rb +0 -15
  289. data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
  290. data/lib/facter/facts/linux/puppet_version.rb +0 -15
  291. data/lib/facter/facts/macosx/puppet_version.rb +0 -15
  292. data/lib/facter/facts/solaris/puppet_version.rb +0 -15
  293. data/lib/facter/facts/windows/puppet_version.rb +0 -15
  294. data/lib/facter/facts_utils/facts_utils.rb +0 -12
  295. data/lib/facter/facts_utils/unit_converter.rb +0 -59
  296. data/lib/facter/facts_utils/uptime_parser.rb +0 -124
  297. data/lib/facter/facts_utils/virtual_detector.rb +0 -78
  298. data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
  299. data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
  300. data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
  301. data/lib/facter/resolvers/hostname_resolver.rb +0 -44
  302. data/lib/facter/resolvers/networking_linux_resolver.rb +0 -159
  303. data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
  304. data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
  305. data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
  306. data/lib/facter/resolvers/utils/networking.rb +0 -86
  307. data/lib/facter/resolvers/utils/ssh.rb +0 -13
  308. data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
  309. data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
@@ -4,6 +4,7 @@ module Facts
4
4
  module Windows
5
5
  class Interfaces
6
6
  FACT_NAME = 'interfaces'
7
+ TYPE = :legacy
7
8
 
8
9
  def call_the_resolver
9
10
  fact_value = Facter::Resolvers::Windows::Networking.resolve(:interfaces)
@@ -10,7 +10,7 @@ module Facts
10
10
 
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:available_bytes)
13
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value)
13
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value)
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
16
16
  end
@@ -12,7 +12,7 @@ module Facts
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:available_bytes)
13
13
 
14
14
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
15
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
16
  end
17
17
  end
18
18
  end
@@ -10,7 +10,7 @@ module Facts
10
10
 
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:total_bytes)
13
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value)
13
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value)
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
16
16
  end
@@ -12,7 +12,7 @@ module Facts
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:total_bytes)
13
13
 
14
14
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
15
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
16
  end
17
17
  end
18
18
  end
@@ -9,7 +9,7 @@ module Facts
9
9
 
10
10
  def call_the_resolver
11
11
  fact_value = Facter::Resolvers::Memory.resolve(:used_bytes)
12
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value)
12
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value)
13
13
 
14
14
  Facter::ResolvedFact.new(FACT_NAME, fact_value)
15
15
  end
@@ -12,7 +12,7 @@ module Facts
12
12
  hostname = Facter::Resolvers::Hostname.resolve(:hostname)
13
13
  return Facter::ResolvedFact.new(FACT_NAME, nil) if !hostname || hostname.empty?
14
14
 
15
- fact_value = [hostname, domain].compact.join('.')
15
+ fact_value = domain && !domain.empty? ? [hostname, domain].compact.join('.') : hostname
16
16
 
17
17
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
18
18
  end
@@ -16,7 +16,7 @@ module Facts
16
16
  kernel_version: kernel_resolver(:kernelversion)
17
17
  }
18
18
 
19
- fact_value = Facter::WindowsReleaseFinder.find_release(input)
19
+ fact_value = Facter::Util::Facts::WindowsReleaseFinder.find_release(input)
20
20
  arr << Facter::ResolvedFact.new(FACT_NAME, ({ full: fact_value, major: fact_value } if fact_value))
21
21
  ALIASES.each { |aliass| arr << Facter::ResolvedFact.new(aliass, fact_value, :legacy) }
22
22
  arr
@@ -79,11 +79,6 @@ module Facter
79
79
  type: :boolean,
80
80
  desc: 'Show legacy facts when querying all facts.'
81
81
 
82
- class_option :puppet,
83
- type: :boolean,
84
- aliases: '-p',
85
- desc: 'Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
86
-
87
82
  class_option :yaml,
88
83
  aliases: '-y',
89
84
  type: :boolean,
@@ -98,6 +93,10 @@ module Facter
98
93
  aliases: '-t',
99
94
  desc: 'Show how much time it took to resolve each fact'
100
95
 
96
+ class_option :sequential,
97
+ type: :boolean,
98
+ desc: 'Resolve facts sequentially'
99
+
101
100
  desc '--man', 'Display manual.', hide: true
102
101
  map ['--man'] => :man
103
102
  def man(*args)
@@ -157,6 +156,20 @@ module Facter
157
156
  puts cache_groups
158
157
  end
159
158
 
159
+ desc '--puppet, -p', '(NOT SUPPORTED)Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
160
+ map ['--puppet', '-p'] => :puppet
161
+ def puppet(*args)
162
+ log = Log.new(self)
163
+ log.warn('`facter --puppet` and `facter -p` are no longer supported, use `puppet facts show` instead')
164
+ log.warn('the output does not contain puppet facts!')
165
+
166
+ output, status = Facter.to_user_output(@options, *args)
167
+ puts output
168
+
169
+ status = 1 if Facter::Log.errors?
170
+ exit status
171
+ end
172
+
160
173
  desc 'help', 'Help for all arguments'
161
174
  def help(*args)
162
175
  help_string = +''
@@ -171,7 +184,7 @@ module Facter
171
184
  def help_header(_args)
172
185
  path = File.join(File.dirname(__FILE__), '../../')
173
186
 
174
- Util::FileHelper.safe_read("#{path}fixtures/facter_help_header")
187
+ Facter::Util::FileHelper.safe_read("#{path}fixtures/facter_help_header")
175
188
  end
176
189
 
177
190
  IGNORE_OPTIONS = %w[log_level color no_color].freeze
@@ -201,6 +214,7 @@ module Facter
201
214
  end
202
215
 
203
216
  def build_option(name, aliases, description)
217
+ name = name.tr('_', '-')
204
218
  help_option = +''
205
219
  help_option << aliases.join(',').rjust(10)
206
220
  help_option << ' '
@@ -33,10 +33,17 @@ module Facter
33
33
 
34
34
  def refresh_config(config_path)
35
35
  @conf = File.readable?(config_path) ? Hocon.load(config_path) : {}
36
+ rescue StandardError => e
37
+ log.warn("Facter failed to read config file #{config_path} with the following error: #{e.message}")
38
+ @conf = {}
36
39
  end
37
40
 
38
41
  private
39
42
 
43
+ def log
44
+ @log ||= Log.new(self)
45
+ end
46
+
40
47
  def default_path
41
48
  os = OsDetector.instance.identifier
42
49
 
@@ -4,10 +4,9 @@ require 'facter/config'
4
4
 
5
5
  module Facter
6
6
  class FactGroups
7
+ attr_accessor :groups_ttls
7
8
  attr_reader :groups, :block_list, :facts_ttls
8
9
 
9
- @groups_ttls = []
10
-
11
10
  STRING_TO_SECONDS = { 'seconds' => 1, 'minutes' => 60, 'hours' => 3600, 'days' => 3600 * 24 }.freeze
12
11
 
13
12
  def initialize
@@ -25,6 +24,9 @@ module Facter
25
24
  fact_list = []
26
25
 
27
26
  @block_list.each do |group_name|
27
+ # legacy is a special group and does not need to be broken into facts
28
+ next if group_name == 'legacy'
29
+
28
30
  facts_for_block = @groups[group_name]
29
31
 
30
32
  fact_list += facts_for_block || [group_name]
@@ -38,7 +40,10 @@ module Facter
38
40
  fact = get_fact(fact_name)
39
41
  return fact[:group] if fact
40
42
 
41
- @groups.detect { |k, v| break k if Array(v).find { |f| fact_name =~ /^#{f}.*/ } }
43
+ # @groups.detect { |k, v| break k if Array(v).find { |f| fact_name =~ /^#{f}.*/ } }
44
+ @groups.detect do |k, v|
45
+ break k if Array(v).find { |f| fact_name.include?('.*') ? fact_name == f : fact_name =~ /^#{f}.*/ }
46
+ end
42
47
  end
43
48
 
44
49
  # Get config ttls for a given group
@@ -10,7 +10,7 @@ module Facter
10
10
  end
11
11
 
12
12
  def resolve_facts(searched_facts)
13
- return searched_facts, [] if !File.directory?(@cache_dir) || !Options[:cache]
13
+ return searched_facts, [] if (!File.directory?(@cache_dir) || !Options[:cache]) && Options[:ttls].any?
14
14
 
15
15
  facts = []
16
16
  searched_facts.delete_if do |fact|
@@ -27,8 +27,9 @@ module Facter
27
27
  end
28
28
 
29
29
  def cache_facts(resolved_facts)
30
- return unless Options[:cache]
30
+ return unless Options[:cache] && Options[:ttls].any?
31
31
 
32
+ @groups = {}
32
33
  resolved_facts.each do |fact|
33
34
  cache_fact(fact)
34
35
  end
@@ -48,8 +49,8 @@ module Facter
48
49
  false
49
50
  end
50
51
 
51
- fact_group = @fact_groups.get_fact_group(fact_name)
52
- delete_cache(fact_group) if fact_group && !cached
52
+ # fact_group = @fact_groups.get_fact_group(fact_name)
53
+ # delete_cache(fact_group) if fact_group && !cached
53
54
  cached
54
55
  end
55
56
 
@@ -66,6 +67,8 @@ module Facter
66
67
 
67
68
  fact = @fact_groups.get_fact(fact_name)
68
69
 
70
+ return if external_fact_in_custom_group?(searched_fact, fact_name, fact)
71
+
69
72
  return unless fact
70
73
 
71
74
  return unless check_ttls?(fact[:group], fact[:ttls])
@@ -73,6 +76,16 @@ module Facter
73
76
  read_fact(searched_fact, fact[:group])
74
77
  end
75
78
 
79
+ def external_fact_in_custom_group?(searched_fact, fact_name, fact)
80
+ if searched_fact.type == :file && fact[:group] != fact_name
81
+ @log.error("Cannot cache '#{fact_name}' fact from '#{fact[:group]}' group. "\
82
+ 'Caching custom group is not supported for external facts.')
83
+ return true
84
+ end
85
+
86
+ false
87
+ end
88
+
76
89
  def read_fact(searched_fact, fact_group)
77
90
  data = nil
78
91
  Facter::Framework::Benchmarking::Timer.measure(searched_fact.name, 'cached') do
@@ -80,27 +93,53 @@ module Facter
80
93
  end
81
94
  return unless data
82
95
 
96
+ unless searched_fact.file
97
+ return unless valid_format_version?(searched_fact, data, fact_group)
98
+
99
+ delete_cache(fact_group) unless data.keys.grep(/#{searched_fact.name}/).any?
100
+ # data.fetch(searched_fact.name) { delete_cache(fact_group) }
101
+ end
102
+
83
103
  @log.debug("loading cached values for #{searched_fact.name} facts")
84
104
 
85
105
  create_facts(searched_fact, data)
86
106
  end
87
107
 
108
+ def valid_format_version?(searched_fact, data, fact_group)
109
+ unless data['cache_format_version'] == 1
110
+ @log.debug("The fact #{searched_fact.name} could not be read from the cache, \
111
+ cache_format_version is incorrect!")
112
+ delete_cache(fact_group)
113
+ return false
114
+ end
115
+
116
+ true
117
+ end
118
+
88
119
  def create_facts(searched_fact, data)
89
120
  if searched_fact.type == :file
90
- facts = []
91
- data.each do |fact_name, fact_value|
92
- fact = Facter::ResolvedFact.new(fact_name, fact_value, searched_fact.type,
93
- searched_fact.user_query, searched_fact.filter_tokens)
94
- fact.file = searched_fact.file
95
- facts << fact
96
- end
97
- facts
121
+ resolve_external_fact(searched_fact, data)
98
122
  else
123
+ return unless data[searched_fact.name]
124
+
99
125
  [Facter::ResolvedFact.new(searched_fact.name, data[searched_fact.name], searched_fact.type,
100
126
  searched_fact.user_query, searched_fact.filter_tokens)]
101
127
  end
102
128
  end
103
129
 
130
+ def resolve_external_fact(searched_fact, data)
131
+ facts = []
132
+ data.each do |fact_name, fact_value|
133
+ next if fact_name == 'cache_format_version'
134
+
135
+ fact = Facter::ResolvedFact.new(fact_name, fact_value, searched_fact.type,
136
+ searched_fact.user_query, searched_fact.filter_tokens)
137
+ fact.file = searched_fact.file
138
+ facts << fact
139
+ end
140
+ facts
141
+ end
142
+
104
143
  def cache_fact(fact)
105
144
  fact_name = if fact.file
106
145
  File.basename(fact.file)
@@ -110,7 +149,7 @@ module Facter
110
149
 
111
150
  group_name = @fact_groups.get_fact_group(fact_name)
112
151
 
113
- return if !group_name || fact.value.nil?
152
+ return unless group_name
114
153
 
115
154
  return unless fact_cache_enabled?(fact_name)
116
155
 
@@ -131,6 +170,8 @@ module Facter
131
170
  next if File.readable?(cache_file_name)
132
171
 
133
172
  @log.debug("caching values for #{group_name} facts")
173
+
174
+ data['cache_format_version'] = 1
134
175
  File.write(cache_file_name, JSON.pretty_generate(data))
135
176
  end
136
177
  end
@@ -140,9 +181,9 @@ module Facter
140
181
 
141
182
  cache_file_name = File.join(@cache_dir, group_name)
142
183
  data = nil
143
- file = Util::FileHelper.safe_read(cache_file_name)
184
+ file = Facter::Util::FileHelper.safe_read(cache_file_name)
144
185
  begin
145
- data = JSON.parse(file)
186
+ data = JSON.parse(file) unless file.nil?
146
187
  rescue JSON::ParserError
147
188
  delete_cache(group_name)
148
189
  end
@@ -161,12 +202,13 @@ module Facter
161
202
  File.delete(cache_file_name)
162
203
  end
163
204
 
164
- @log.debug("#{group_name} facts cache file expired/missing")
205
+ @log.debug("#{group_name} facts cache file expired, missing or is corrupt")
165
206
  true
166
207
  end
167
208
 
168
209
  def delete_cache(group_name)
169
210
  cache_file_name = File.join(@cache_dir, group_name)
211
+
170
212
  File.delete(cache_file_name) if File.readable?(cache_file_name)
171
213
  end
172
214
  end
@@ -11,7 +11,12 @@ module Facter
11
11
 
12
12
  return unless fact_class
13
13
 
14
- fact_class.new.call_the_resolver
14
+ fact_value = nil
15
+ Facter::Framework::Benchmarking::Timer.measure(@searched_fact.name) do
16
+ fact_value = fact_class.new.call_the_resolver
17
+ end
18
+
19
+ fact_value
15
20
  end
16
21
  end
17
22
  end
@@ -7,7 +7,15 @@ module Facter
7
7
  def resolve_facts(searched_facts)
8
8
  internal_searched_facts = filter_internal_facts(searched_facts)
9
9
 
10
- resolved_facts = resolve(internal_searched_facts)
10
+ resolved_facts = if Options[:sequential]
11
+ @@log.debug('Resolving facts sequentially')
12
+ resolve_sequentially(internal_searched_facts)
13
+ else
14
+ @@log.debug('Resolving fact in parallel')
15
+ threads = start_threads(internal_searched_facts)
16
+ join_threads(threads, internal_searched_facts)
17
+ end
18
+
11
19
  nil_resolved_facts = resolve_nil_facts(searched_facts)
12
20
 
13
21
  resolved_facts.concat(nil_resolved_facts)
@@ -28,7 +36,7 @@ module Facter
28
36
  resolved_facts
29
37
  end
30
38
 
31
- def resolve(searched_facts)
39
+ def resolve_sequentially(searched_facts)
32
40
  resolved_facts = []
33
41
 
34
42
  searched_facts
@@ -36,8 +44,7 @@ module Facter
36
44
  .each do |searched_fact|
37
45
  begin
38
46
  fact = CoreFact.new(searched_fact)
39
- fact_value = nil
40
- Facter::Framework::Benchmarking::Timer.measure(searched_fact.name) { fact_value = fact.create }
47
+ fact_value = fact.create
41
48
  resolved_facts << fact_value unless fact_value.nil?
42
49
  rescue StandardError => e
43
50
  @@log.log_exception(e)
@@ -47,5 +54,32 @@ module Facter
47
54
  resolved_facts.flatten!
48
55
  FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts)
49
56
  end
57
+
58
+ def start_threads(searched_facts)
59
+ # only resolve a fact once, even if multiple search facts depend on that fact
60
+ searched_facts
61
+ .uniq { |searched_fact| searched_fact.fact_class.name }
62
+ .map do |searched_fact|
63
+ Thread.new do
64
+ resolve_fact(searched_fact)
65
+ end
66
+ end
67
+ end
68
+
69
+ def join_threads(threads, searched_facts)
70
+ resolved_facts = threads.map(&:value)
71
+ resolved_facts.compact!
72
+ resolved_facts.flatten!
73
+
74
+ FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts)
75
+ end
76
+
77
+ def resolve_fact(searched_fact)
78
+ fact = CoreFact.new(searched_fact)
79
+ fact.create
80
+ rescue StandardError => e
81
+ @@log.log_exception(e)
82
+ nil
83
+ end
50
84
  end
51
85
  end
@@ -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
@@ -10,10 +10,6 @@ module Facter
10
10
  @external_facts = load_external_facts
11
11
  end
12
12
 
13
- def all_facts
14
- @all_facts ||= Utils.deep_copy(custom_facts + external_facts)
15
- end
16
-
17
13
  private
18
14
 
19
15
  def load_custom_facts
@@ -21,8 +17,9 @@ module Facter
21
17
 
22
18
  custom_facts_to_load = LegacyFacter.collection.custom_facts
23
19
 
24
- custom_facts_to_load&.each do |custom_fact_name|
25
- loaded_fact = LoadedFact.new(custom_fact_name.to_s, nil, :custom)
20
+ custom_facts_to_load&.each do |k, v|
21
+ loaded_fact = LoadedFact.new(k.to_s, nil, :custom)
22
+ loaded_fact.is_env = v.options[:is_env] if v.options[:is_env]
26
23
  custom_facts << loaded_fact
27
24
  end
28
25
 
@@ -37,6 +34,7 @@ module Facter
37
34
  external_facts_to_load&.each do |k, v|
38
35
  loaded_fact = LoadedFact.new(k.to_s, nil, :external)
39
36
  loaded_fact.file = v.options[:file]
37
+ loaded_fact.is_env = v.options[:is_env]
40
38
  external_facts << loaded_fact
41
39
  end
42
40