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
@@ -3,7 +3,7 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class Path < BaseResolver
6
- @fact_list ||= {}
6
+ init_resolver
7
7
 
8
8
  class << self
9
9
  private
@@ -5,8 +5,11 @@ module Facter
5
5
  module Linux
6
6
  class Processors < BaseResolver
7
7
  @log = Facter::Log.new(self)
8
- @fact_list ||= {}
8
+
9
+ init_resolver
10
+
9
11
  MHZ_TO_HZ = 1_000_000
12
+
10
13
  class << self
11
14
  # :count
12
15
  # :models
@@ -20,7 +23,7 @@ module Facter
20
23
  end
21
24
 
22
25
  def read_cpuinfo(fact_name)
23
- cpuinfo_output = Util::FileHelper.safe_readlines('/proc/cpuinfo')
26
+ cpuinfo_output = Facter::Util::FileHelper.safe_readlines('/proc/cpuinfo')
24
27
  return if cpuinfo_output.empty?
25
28
 
26
29
  read_processors(cpuinfo_output) # + model names
@@ -62,7 +65,7 @@ module Facter
62
65
  .select { |dir| dir =~ /cpu[0-9]+$/ }
63
66
  .select { |dir| File.exist?("/sys/devices/system/cpu/#{dir}/topology/physical_package_id") }
64
67
  .map do |dir|
65
- Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
68
+ Facter::Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
66
69
  end
67
70
  .uniq.count
68
71
  end
@@ -7,7 +7,7 @@ module Facter
7
7
  # :version
8
8
  # :codename
9
9
 
10
- @fact_list ||= {}
10
+ init_resolver
11
11
 
12
12
  class << self
13
13
  private
@@ -17,7 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def read_redhat_release(fact_name)
20
- output = Util::FileHelper.safe_read('/etc/redhat-release', nil)
20
+ output = Facter::Util::FileHelper.safe_read('/etc/redhat-release', nil)
21
21
  return @fact_list[fact_name] = nil if output.nil?
22
22
 
23
23
  build_fact_list(output)
@@ -3,7 +3,7 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class Ruby < BaseResolver
6
- @fact_list ||= {}
6
+ init_resolver
7
7
 
8
8
  class << self
9
9
  private
@@ -3,7 +3,7 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class SELinux < BaseResolver
6
- @fact_list ||= {}
6
+ init_resolver
7
7
 
8
8
  class << self
9
9
  private
@@ -40,9 +40,9 @@ module Facter
40
40
  enforce_file = "#{mountpoint}/enforce"
41
41
  policy_file = "#{mountpoint}/policyvers"
42
42
 
43
- @fact_list[:policy_version] = Util::FileHelper.safe_read(policy_file, nil)
43
+ @fact_list[:policy_version] = Facter::Util::FileHelper.safe_read(policy_file, nil)
44
44
 
45
- enforce = Util::FileHelper.safe_read(enforce_file)
45
+ enforce = Facter::Util::FileHelper.safe_read(enforce_file)
46
46
  if enforce.eql?('1')
47
47
  @fact_list[:enforced] = true
48
48
  @fact_list[:current_mode] = 'enforcing'
@@ -53,7 +53,7 @@ module Facter
53
53
  end
54
54
 
55
55
  def read_selinux_config
56
- file_lines = Util::FileHelper.safe_readlines('/etc/selinux/config')
56
+ file_lines = Facter::Util::FileHelper.safe_readlines('/etc/selinux/config')
57
57
 
58
58
  file_lines.map do |line|
59
59
  @fact_list[:config_mode] = line.split('=').last.strip if line =~ /^SELINUX=/
@@ -4,7 +4,7 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Disks < BaseResolver
7
- @fact_list ||= {}
7
+ init_resolver
8
8
 
9
9
  class << self
10
10
  private
@@ -36,7 +36,7 @@ module Facter
36
36
  disk_size = sizes[index].to_i
37
37
  disks[name] = {
38
38
  product: products[index],
39
- size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(disk_size),
39
+ size: Facter::Util::Facts::UnitConverter.bytes_to_human_readable(disk_size),
40
40
  size_bytes: disk_size,
41
41
  vendor: vendors[index]
42
42
  }
@@ -4,7 +4,7 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Dmi < BaseResolver
7
- @fact_list ||= {}
7
+ init_resolver
8
8
 
9
9
  class << self
10
10
  private
@@ -37,6 +37,8 @@ module Facter
37
37
 
38
38
  output = exec_smbios(param[0])
39
39
  facts = param[1]
40
+ return unless output
41
+
40
42
  facts.each do |name, regx|
41
43
  @fact_list[name] = output.match(/#{regx}/)&.captures&.first
42
44
  end
@@ -4,7 +4,7 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class DmiSparc < BaseResolver
7
- @fact_list ||= {}
7
+ init_resolver
8
8
 
9
9
  class << self
10
10
  private
@@ -4,7 +4,7 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Filesystem < BaseResolver
7
- @fact_list ||= {}
7
+ init_resolver
8
8
 
9
9
  class << self
10
10
  private
@@ -4,7 +4,8 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Ipaddress < BaseResolver
7
- @fact_list ||= {}
7
+ init_resolver
8
+
8
9
  class << self
9
10
  private
10
11
 
@@ -14,7 +14,7 @@ module Facter
14
14
  # :role_service
15
15
  # :role_impl
16
16
 
17
- @fact_list ||= {}
17
+ init_resolver
18
18
 
19
19
  VIRTINFO_MAPPING = {
20
20
  chassis_serial: %w[DOMAINCHASSIS serialno],
@@ -36,8 +36,6 @@ module Facter
36
36
  end
37
37
 
38
38
  def call_virtinfo(fact_name)
39
- # return unless File.executable?('/usr/sbin/virtinfo')
40
-
41
39
  virtinfo_output = Facter::Core::Execution.execute('/usr/sbin/virtinfo -a -p', logger: log)
42
40
  return if virtinfo_output.empty?
43
41
 
@@ -4,10 +4,11 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Memory < BaseResolver
7
+ init_resolver
7
8
  BLOCKSIZE = 512
8
9
  # :system
9
10
  # :swap
10
- @fact_list ||= {}
11
+
11
12
  class << self
12
13
  private
13
14
 
@@ -31,7 +32,7 @@ module Facter
31
32
  sys[:total_bytes] = total
32
33
  sys[:available_bytes] = free
33
34
  sys[:used_bytes] = total - free
34
- sys[:capacity] = FilesystemHelper.compute_capacity(total - free, total)
35
+ sys[:capacity] = Facter::Util::Resolvers::FilesystemHelper.compute_capacity(total - free, total)
35
36
 
36
37
  sys
37
38
  end
@@ -44,7 +45,7 @@ module Facter
44
45
  swap_hash[:total_bytes] = total
45
46
  swap_hash[:available_bytes] = free
46
47
  swap_hash[:used_bytes] = total - free
47
- swap_hash[:capacity] = FilesystemHelper.compute_capacity(total - free, total)
48
+ swap_hash[:capacity] = Facter::Util::Resolvers::FilesystemHelper.compute_capacity(total - free, total)
48
49
 
49
50
  swap_hash if total != 0
50
51
  end
@@ -4,9 +4,9 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Mountpoints < BaseResolver
7
- include Facter::FilesystemHelper
8
- @fact_list ||= {}
9
- @log = Facter::Log.new(self)
7
+ include Facter::Util::Resolvers::FilesystemHelper
8
+ init_resolver
9
+
10
10
  class << self
11
11
  private
12
12
 
@@ -15,7 +15,7 @@ module Facter
15
15
  end
16
16
 
17
17
  def root_device
18
- cmdline = Util::FileHelper.safe_read('/proc/cmdline')
18
+ cmdline = Facter::Util::FileHelper.safe_read('/proc/cmdline')
19
19
  match = cmdline.match(/root=([^\s]+)/)
20
20
  match&.captures&.first
21
21
  end
@@ -27,27 +27,28 @@ module Facter
27
27
  device
28
28
  end
29
29
 
30
- def read_mounts(fact_name) # rubocop:disable Metrics/AbcSize
30
+ def read_mounts(fact_name) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
31
31
  mounts = []
32
- FilesystemHelper.read_mountpoints.each do |fs|
32
+ Facter::Util::Resolvers::FilesystemHelper.read_mountpoints.each do |fs|
33
33
  device = compute_device(fs.name)
34
34
  filesystem = fs.mount_type
35
35
  path = fs.mount_point
36
36
  options = fs.options.split(',').map(&:strip)
37
37
 
38
- stats = FilesystemHelper.read_mountpoint_stats(path)
38
+ stats = Facter::Util::Resolvers::FilesystemHelper.read_mountpoint_stats(path)
39
39
  size_bytes = stats.bytes_total.abs
40
40
  available_bytes = stats.bytes_available.abs
41
41
 
42
42
  used_bytes = stats.bytes_used.abs
43
43
  total_bytes = used_bytes + available_bytes
44
- capacity = FilesystemHelper.compute_capacity(used_bytes, total_bytes)
44
+ capacity = Facter::Util::Resolvers::FilesystemHelper.compute_capacity(used_bytes, total_bytes)
45
45
 
46
- size = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
47
- available = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(available_bytes)
48
- used = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(used_bytes)
46
+ size = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(size_bytes)
47
+ available = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(available_bytes)
48
+ used = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(used_bytes)
49
49
 
50
- mounts << Hash[FilesystemHelper::MOUNT_KEYS.zip(FilesystemHelper::MOUNT_KEYS
50
+ mounts << Hash[Facter::Util::Resolvers::FilesystemHelper::MOUNT_KEYS
51
+ .zip(Facter::Util::Resolvers::FilesystemHelper::MOUNT_KEYS
51
52
  .map { |v| binding.local_variable_get(v) })]
52
53
  end
53
54
  @fact_list[:mountpoints] = mounts
@@ -1,15 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'ffi/ffi.rb'
4
- require 'ipaddr'
5
-
6
4
  module Facter
7
5
  module Resolvers
8
6
  module Solaris
9
7
  class Networking < BaseResolver
8
+ init_resolver
10
9
  @log = Facter::Log.new(self)
11
- @fact_list ||= {}
12
- @interfaces = {}
13
10
 
14
11
  class << self
15
12
  private
@@ -19,24 +16,38 @@ module Facter
19
16
  end
20
17
 
21
18
  def read_facts(fact_name)
22
- lifreqs = load_interfaces
23
- @interfaces = {}
19
+ begin
20
+ lifreqs = load_interfaces
21
+ @interfaces = {}
22
+
23
+ lifreqs.each do |lifreq|
24
+ obtain_info_for_interface(lifreq)
25
+ end
26
+
27
+ @fact_list[:primary_interface] = Facter::Util::Resolvers::Networking::PrimaryInterface.read_from_route
24
28
 
25
- lifreqs.each do |lifreq|
26
- @interfaces[lifreq.name] ||= {}
29
+ unless @interfaces.empty?
30
+ @fact_list[:interfaces] = @interfaces
31
+ @fact_list[:primary_interface] ||=
32
+ Facter::Util::Resolvers::Networking::PrimaryInterface.find_in_interfaces(@interfaces)
33
+ end
27
34
 
28
- add_mac(lifreq)
29
- add_bindings(lifreq)
30
- add_mtu(lifreq)
31
- add_dhcp(lifreq.name)
35
+ Facter::Util::Resolvers::Networking.expand_main_bindings(@fact_list)
36
+ rescue StandardError => e
37
+ @log.log_exception(e)
32
38
  end
39
+ @fact_list[fact_name]
40
+ end
33
41
 
34
- @fact_list = { interfaces: @interfaces } unless @interfaces.empty?
35
- primary_interface
42
+ def obtain_info_for_interface(lifreq)
43
+ @interfaces[lifreq.name] ||= {}
36
44
 
37
- ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
45
+ add_mac(lifreq)
46
+ add_bindings(lifreq)
47
+ add_mtu(lifreq)
38
48
 
39
- @fact_list[fact_name]
49
+ dhcp = Facter::Util::Resolvers::Networking::Dhcp.get(lifreq.name, @log)
50
+ @interfaces[lifreq.name][:dhcp] = dhcp if dhcp
40
51
  end
41
52
 
42
53
  def add_mac(lifreq)
@@ -44,7 +55,10 @@ module Facter
44
55
 
45
56
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGARP, arp, lifreq.ss_family)
46
57
 
47
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
58
+ if ioctl == -1
59
+ @log.debug("Could not read MAC address for interface #{lifreq.name} "\
60
+ "error code is: #{::FFI::LastError.error}")
61
+ end
48
62
 
49
63
  mac = arp.sa_data_to_mac
50
64
  @interfaces[lifreq.name][:mac] ||= mac if mac.count('0') < 12
@@ -54,7 +68,7 @@ module Facter
54
68
  ip = inet_ntop(lifreq, lifreq.ss_family)
55
69
  _netmask, netmask_length = load_netmask(lifreq)
56
70
 
57
- bindings = ::Resolvers::Utils::Networking.build_binding(ip, netmask_length)
71
+ bindings = Facter::Util::Resolvers::Networking.build_binding(ip, netmask_length)
58
72
 
59
73
  bindings_key = BINDINGS_KEY[lifreq.ss_family]
60
74
  @interfaces[lifreq.name][bindings_key] ||= []
@@ -64,7 +78,10 @@ module Facter
64
78
  def add_mtu(lifreq)
65
79
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFMTU, lifreq, lifreq.ss_family)
66
80
 
67
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
81
+ if ioctl == -1
82
+ @log.error("Cold not read MTU, error code is #{::FFI::LastError.error}")
83
+ return
84
+ end
68
85
 
69
86
  @interfaces[lifreq.name][:mtu] ||= lifreq[:lifr_lifru][:lifru_metric]
70
87
  end
@@ -75,11 +92,12 @@ module Facter
75
92
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFNETMASK, netmask_lifreq, lifreq.ss_family)
76
93
 
77
94
  if ioctl == -1
78
- @log.debug("Error! #{::FFI::LastError.error}")
79
- else
80
- netmask = inet_ntop(netmask_lifreq, lifreq.ss_family)
81
- [netmask, calculate_mask_length(netmask)]
95
+ @log.error("Could not read Netmask, error code is: #{::FFI::LastError.error}")
96
+ return
82
97
  end
98
+
99
+ netmask = inet_ntop(netmask_lifreq, lifreq.ss_family)
100
+ [netmask, Facter::Util::Resolvers::Networking.calculate_mask_length(netmask)]
83
101
  end
84
102
 
85
103
  def inet_ntop(lifreq, ss_family)
@@ -101,7 +119,7 @@ module Facter
101
119
 
102
120
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFNUM, lifnum)
103
121
 
104
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
122
+ @log.error("Could not read interface count, error code is: #{::FFI::LastError.error}") if ioctl == -1
105
123
 
106
124
  lifnum[:lifn_count]
107
125
  end
@@ -113,7 +131,14 @@ module Facter
113
131
 
114
132
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFCONF, lifconf)
115
133
 
116
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
134
+ # we need to enlarge the scope of this pointer so that Ruby GC will not free the memory.
135
+ # If the pointer if freed, Lifreq structures will contain garbage from memory.
136
+ @long_living_pointer = lifconf
137
+
138
+ if ioctl == -1
139
+ @log.error("Could not read interface information, error code is: #{::FFI::LastError.error}")
140
+ return []
141
+ end
117
142
 
118
143
  interfaces = []
119
144
  interface_count.times do |i|
@@ -122,24 +147,6 @@ module Facter
122
147
 
123
148
  interfaces
124
149
  end
125
-
126
- def calculate_mask_length(netmask)
127
- ipaddr = IPAddr.new(netmask)
128
- ipaddr.to_i.to_s(2).count('1')
129
- end
130
-
131
- def primary_interface
132
- result = Facter::Core::Execution.execute('route -n get default', logger: log)
133
-
134
- @fact_list[:primary_interface] = result.match(/interface: (.+)/)&.captures&.first
135
- end
136
-
137
- def add_dhcp(interface_name)
138
- dhcpinfo_command = Facter::Core::Execution.which('dhcpinfo') || '/sbin/dhcpinfo'
139
- result = Facter::Core::Execution.execute("#{dhcpinfo_command} -i #{interface_name} ServerID", logger: log)
140
-
141
- @interfaces[interface_name][:dhcp] = result.chomp
142
- end
143
150
  end
144
151
  end
145
152
  end
@@ -4,9 +4,11 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class OsRelease < BaseResolver
7
- @fact_list ||= {}
8
- @os_version_regex_patterns = ['Solaris \d+ \d+/\d+ s(\d+)[sx]?_u(\d+)wos_',
9
- 'Solaris (\d+)[.](\d+)', 'Solaris (\d+)']
7
+ init_resolver
8
+
9
+ OS_VERSION_REGEX_PATTERNS = ['Solaris \d+ \d+/\d+ s(\d+)[sx]?_u(\d+)wos_',
10
+ 'Solaris (\d+)[.](\d+)', 'Solaris (\d+)'].freeze
11
+
10
12
  class << self
11
13
  private
12
14
 
@@ -15,10 +17,10 @@ module Facter
15
17
  end
16
18
 
17
19
  def build_release_facts(fact_name)
18
- result = Util::FileHelper.safe_read('/etc/release', nil)
20
+ result = Facter::Util::FileHelper.safe_read('/etc/release', nil)
19
21
  return @fact_list[fact_name] = nil if result.nil?
20
22
 
21
- @os_version_regex_patterns.each do |os_version_regex|
23
+ OS_VERSION_REGEX_PATTERNS.each do |os_version_regex|
22
24
  major, minor = search_for_os_version(/#{os_version_regex}/, result)
23
25
  next unless major || minor
24
26