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
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Facts
6
+ class WindowsReleaseFinder
7
+ class << self
8
+ def find_release(input)
9
+ version = input[:version]
10
+ return unless version
11
+
12
+ consumerrel = input[:consumerrel]
13
+ description = input[:description]
14
+ kernel_version = input[:kernel_version]
15
+
16
+ if version =~ /10.0/
17
+ check_version_10(consumerrel, kernel_version)
18
+ else
19
+ check_version_6(version, consumerrel) || check_version_5(version, consumerrel, description) || version
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def check_version_10(consumerrel, kernel_version)
26
+ build_number = kernel_version[/([^.]*)$/].to_i
27
+ if consumerrel
28
+ '10'
29
+ elsif build_number >= 17_623
30
+ '2019'
31
+ else
32
+ '2016'
33
+ end
34
+ end
35
+
36
+ def check_version_6(version, consumerrel)
37
+ hash = {}
38
+ hash['6.3'] = consumerrel ? '8.1' : '2012 R2'
39
+ hash['6.2'] = consumerrel ? '8' : '2012'
40
+ hash['6.1'] = consumerrel ? '7' : '2008 R2'
41
+ hash['6.0'] = consumerrel ? 'Vista' : '2008'
42
+ hash[version]
43
+ end
44
+
45
+ def check_version_5(version, consumerrel, description)
46
+ return unless version =~ /5.2/
47
+ return 'XP' if consumerrel
48
+
49
+ description == 'R2' ? '2003 R2' : '2003'
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Facter
4
- module Resolvers
4
+ module Util
5
5
  module Macosx
6
6
  class SystemProfileExecutor
7
7
  @log = Log.new(self)
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Resolvers
6
+ module AwsToken
7
+ attr_reader :token
8
+
9
+ @log = Facter::Log.new(self)
10
+
11
+ class << self
12
+ AWS_API_TOKEN_URL = 'http://169.254.169.254/latest/api/token'
13
+
14
+ def get(lifetime = 100)
15
+ @expiry ||= Time.now
16
+
17
+ return @token if @token && @expiry > Time.now
18
+
19
+ @token = nil
20
+ @expiry = Time.now + lifetime
21
+
22
+ headers = {
23
+ 'X-aws-ec2-metadata-token-ttl-seconds' => lifetime.to_s
24
+ }
25
+
26
+ @token = Facter::Util::Resolvers::Http.put_request(AWS_API_TOKEN_URL, headers)
27
+ end
28
+
29
+ def reset
30
+ @expiry = nil
31
+ @token = nil
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -3,8 +3,8 @@
3
3
  require 'ffi'
4
4
 
5
5
  module Facter
6
- module Resolvers
7
- module Utils
6
+ module Util
7
+ module Resolvers
8
8
  module Ffi
9
9
  module LoadAverages
10
10
  extend ::FFI::Library
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Resolvers
6
+ module FilesystemHelper
7
+ MOUNT_KEYS = %i[device filesystem path options
8
+ available available_bytes size
9
+ size_bytes used used_bytes capacity].freeze
10
+ class << self
11
+ def read_mountpoints
12
+ # TODO: this require must be replaced with "require 'sys/filesystem'" when a new release of
13
+ # djberg96/sys-filesystem gem is available
14
+ require_relative '../../patches/sysfilesystem/sys/statvfs.rb'
15
+ force_utf(Sys::Filesystem.mounts)
16
+ end
17
+
18
+ def read_mountpoint_stats(path)
19
+ require 'sys/filesystem'
20
+ Sys::Filesystem.stat(path)
21
+ end
22
+
23
+ def compute_capacity(used, total)
24
+ if used == total
25
+ '100%'
26
+ elsif used.positive?
27
+ "#{format('%<value>.2f', value: (used / total.to_f * 100))}%"
28
+ else
29
+ '0%'
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def force_utf(mounts)
36
+ mounts.each do |mount|
37
+ mount.name.force_encoding('UTF-8')
38
+ mount.mount_type.force_encoding('UTF-8')
39
+ mount.mount_point.force_encoding('UTF-8')
40
+ mount.options.force_encoding('UTF-8')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Resolvers
6
+ class FingerPrint
7
+ attr_accessor :sha1, :sha256
8
+ def initialize(sha1, sha256)
9
+ @sha1 = sha1
10
+ @sha256 = sha256
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Facter
4
- module Resolvers
5
- module Utils
4
+ module Util
5
+ module Resolvers
6
6
  module Http
7
7
  @log = Facter::Log.new(self)
8
8
 
@@ -27,6 +27,10 @@ module Facter
27
27
  make_request(url, headers, timeouts, 'GET')
28
28
  end
29
29
 
30
+ def put_request(url, headers = {}, timeouts = {})
31
+ make_request(url, headers, timeouts, 'PUT')
32
+ end
33
+
30
34
  private
31
35
 
32
36
  def make_request(url, headers, timeouts, request_type)
@@ -37,8 +41,10 @@ module Facter
37
41
  request = request_obj(headers, uri, request_type)
38
42
 
39
43
  # Make the request
40
- resp = http.request(request)
41
- response_code_valid?(resp.code.to_i) ? resp.body : ''
44
+ response = http.request(request)
45
+ response.uri = url
46
+
47
+ successful_response?(response) ? response.body : ''
42
48
  rescue StandardError => e
43
49
  @log.debug("Trying to connect to #{url} but got: #{e.message}")
44
50
  ''
@@ -52,14 +58,15 @@ module Facter
52
58
  end
53
59
 
54
60
  def request_obj(headers, parsed_url, request_type)
55
- return Net::HTTP::Get.new(parsed_url.request_uri, headers) if request_type == 'GET'
56
-
57
- raise StandardError("Unknown http request type: #{request_type}")
61
+ Module.const_get("Net::HTTP::#{request_type.capitalize}").new(parsed_url.request_uri, headers)
58
62
  end
59
63
 
60
- def response_code_valid?(http_code)
61
- @log.debug("Request failed with error code #{http_code}") unless http_code.equal?(200)
62
- http_code.equal?(200)
64
+ def successful_response?(response)
65
+ success = response.code.to_i.equal?(200)
66
+
67
+ @log.debug("Request to #{response.uri} failed with error code #{response.code}") unless success
68
+
69
+ success
63
70
  end
64
71
  end
65
72
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Resolvers
6
+ module Networking
7
+ module Dhcp
8
+ class << self
9
+ def get(interface_name, log = nil)
10
+ dhcpinfo_command = Facter::Core::Execution.which('dhcpinfo') || '/sbin/dhcpinfo'
11
+ result = Facter::Core::Execution.execute("#{dhcpinfo_command} -i #{interface_name} ServerID", logger: log)
12
+ result.chomp!
13
+
14
+ result.empty? ? nil : result
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ipaddr'
4
+
5
+ module Facter
6
+ module Util
7
+ module Resolvers
8
+ module Networking
9
+ class << self
10
+ # Creates a hash with IP, netmask and network. Works for IPV4 and IPV6
11
+ # @param [String] addr The IP address
12
+ # @param [Integer] mask_length Number of 1 bits the netmask has
13
+ #
14
+ # @return [Hash] Hash containing ip address, netmask and network
15
+ def build_binding(addr, mask_length)
16
+ return if !addr || !mask_length
17
+
18
+ ip = IPAddr.new(addr)
19
+ mask_helper = nil
20
+ scope = nil
21
+ if ip.ipv6?
22
+ scope = get_scope(addr)
23
+ mask_helper = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
24
+ else
25
+ mask_helper = '255.255.255.255'
26
+ end
27
+ mask = IPAddr.new(mask_helper).mask(mask_length)
28
+
29
+ result = { address: addr, netmask: mask.to_s, network: ip.mask(mask_length).to_s }
30
+ result[:scope6] = scope if scope
31
+ result
32
+ end
33
+
34
+ def expand_main_bindings(networking_facts)
35
+ primary = networking_facts[:primary_interface]
36
+ interfaces = networking_facts[:interfaces]
37
+
38
+ expand_interfaces(interfaces) unless interfaces.nil?
39
+ expand_primary_interface(networking_facts, primary) unless primary.nil? || interfaces.nil?
40
+ end
41
+
42
+ def get_scope(ip)
43
+ require 'socket'
44
+
45
+ scope6 = []
46
+ addrinfo = Addrinfo.new(['AF_INET6', 0, nil, ip], :INET6)
47
+
48
+ scope6 << 'compat,' if IPAddr.new(ip).ipv4_compat?
49
+ scope6 << if addrinfo.ipv6_linklocal?
50
+ 'link'
51
+ elsif addrinfo.ipv6_sitelocal?
52
+ 'site'
53
+ elsif addrinfo.ipv6_loopback?
54
+ 'host'
55
+ else 'global'
56
+ end
57
+ scope6.join
58
+ end
59
+
60
+ def find_valid_binding(bindings)
61
+ bindings.each do |binding|
62
+ return binding unless ignored_ip_address(binding[:address])
63
+ end
64
+ bindings.empty? ? nil : bindings.first
65
+ end
66
+
67
+ def ignored_ip_address(addr)
68
+ addr.empty? || addr.start_with?('127.', '169.254.') || addr.start_with?('fe80') || addr.eql?('::1')
69
+ end
70
+
71
+ def calculate_mask_length(netmask)
72
+ ipaddr = IPAddr.new(netmask)
73
+
74
+ ipaddr.to_i.to_s(2).count('1')
75
+ end
76
+
77
+ def format_mac_address(address)
78
+ address.split('.').map { |e| format('%<mac_address>02s', mac_address: e) }.join(':').tr(' ', '0')
79
+ end
80
+
81
+ private
82
+
83
+ def expand_interfaces(interfaces)
84
+ interfaces.each_value do |values|
85
+ expand_binding(values, values[:bindings]) if values[:bindings]
86
+ expand_binding(values, values[:bindings6], false) if values[:bindings6]
87
+ end
88
+ end
89
+
90
+ def expand_primary_interface(networking_facts, primary)
91
+ networking_facts[:interfaces][primary].each do |key, value|
92
+ networking_facts[key] = value unless %i[bindings bindings6].include?(key)
93
+ end
94
+ end
95
+
96
+ def expand_binding(values, bindings, ipv4_type = true)
97
+ binding = find_valid_binding(bindings)
98
+ ip_protocol_type = ipv4_type ? '' : '6'
99
+
100
+ values["ip#{ip_protocol_type}".to_sym] = binding[:address]
101
+ values["netmask#{ip_protocol_type}".to_sym] = binding[:netmask]
102
+ values["network#{ip_protocol_type}".to_sym] = binding[:network]
103
+ values[:scope6] = get_scope(binding[:address]) unless ipv4_type
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Resolvers
6
+ module Networking
7
+ module PrimaryInterface
8
+ @log ||= Log.new(self)
9
+
10
+ class << self
11
+ ROUTE_TABLE_MAPPING = {
12
+ 'Iface' => 0,
13
+ 'Destination' => 1,
14
+ 'Gateway' => 2,
15
+ 'Flags' => 3,
16
+ 'RefCnt' => 4,
17
+ 'Use' => 5,
18
+ 'Metric' => 6,
19
+ 'Mask' => 7,
20
+ 'MTU' => 8,
21
+ 'Window' => 9,
22
+ 'IRTT' => 10
23
+ }.freeze
24
+
25
+ def read_from_route
26
+ return if Facter::Core::Execution.which('route').nil?
27
+
28
+ result = Facter::Core::Execution.execute('route -n get default', logger: @log)
29
+
30
+ result.match(/interface: (.+)/)&.captures&.first
31
+ end
32
+
33
+ def read_from_proc_route
34
+ content = Facter::Util::FileHelper.safe_read('/proc/net/route', '')
35
+
36
+ content.each_line.with_index do |line, index|
37
+ next if index.zero?
38
+
39
+ route = line.strip.split("\t")
40
+ if route.count > 7 &&
41
+ route[ROUTE_TABLE_MAPPING['Destination']] == '00000000' &&
42
+ route[ROUTE_TABLE_MAPPING['Mask']] == '00000000'
43
+ return route[ROUTE_TABLE_MAPPING['Iface']]
44
+ end
45
+ end
46
+
47
+ nil
48
+ end
49
+
50
+ def read_from_ip_route
51
+ return if Facter::Core::Execution.which('ip').nil?
52
+
53
+ output = Facter::Core::Execution.execute('ip route show default', logger: @log)
54
+ primary_interface = nil
55
+ output.each_line do |line|
56
+ primary_interface = line.strip.split(' ')[4] if line.start_with?('default')
57
+ end
58
+
59
+ primary_interface
60
+ end
61
+
62
+ def find_in_interfaces(interfaces)
63
+ interfaces.each do |iface_name, interface|
64
+ interface[:bindings]&.each do |binding|
65
+ return iface_name unless Facter::Util::Resolvers::Networking.ignored_ip_address(binding[:address])
66
+ end
67
+
68
+ next unless interface[:bindings6]
69
+
70
+ interface[:bindings6].each do |binding|
71
+ return iface_name unless Facter::Util::Resolvers::Networking.ignored_ip_address(binding[:address])
72
+ end
73
+ end
74
+
75
+ nil
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end