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
@@ -1,159 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Facter
4
- module Resolvers
5
- class NetworkingLinux < BaseResolver
6
- @fact_list = {}
7
- DIRS = ['/var/lib/dhclient/', '/var/lib/dhcp/', '/var/lib/dhcp3/', '/var/lib/NetworkManager/', '/var/db/'].freeze
8
-
9
- class << self
10
- private
11
-
12
- def post_resolve(fact_name)
13
- @fact_list.fetch(fact_name) { retrieve_network_info(fact_name) }
14
-
15
- @fact_list[fact_name]
16
- end
17
-
18
- def retrieve_network_info(fact_name)
19
- @fact_list ||= {}
20
-
21
- retrieve_interface_info
22
- retrieve_interfaces_mac_and_mtu
23
- retrieve_default_interface
24
- ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
25
- @fact_list[fact_name]
26
- end
27
-
28
- def retrieve_interfaces_mac_and_mtu
29
- @fact_list[:interfaces].map do |name, info|
30
- macaddress = Util::FileHelper.safe_read("/sys/class/net/#{name}/address", nil)
31
- info[:mac] = macaddress.strip if macaddress && !macaddress.include?('00:00:00:00:00:00')
32
- mtu = Util::FileHelper.safe_read("/sys/class/net/#{name}/mtu", nil)
33
- info[:mtu] = mtu.strip.to_i if mtu
34
- end
35
- end
36
-
37
- def retrieve_interface_info
38
- log.debug('retrieve_interface_info')
39
- output = Facter::Core::Execution.execute('ip -o address', logger: log)
40
- log.debug("ip -o address result is:\n#{output}")
41
-
42
- interfaces = {}
43
-
44
- output.each_line do |ip_line|
45
- ip_tokens = ip_line.split(' ')
46
-
47
- log.debug("ip_tokens = #{ip_tokens}")
48
- log.debug("interfaces = #{interfaces}")
49
- fill_ip_v4_info!(ip_tokens, interfaces)
50
- fill_io_v6_info!(ip_tokens, interfaces)
51
- find_dhcp!(ip_tokens, interfaces)
52
- end
53
-
54
- @fact_list[:interfaces] = interfaces
55
- end
56
-
57
- def find_dhcp!(tokens, network_info)
58
- interface_name = tokens[1]
59
- return if !network_info[interface_name] || network_info[interface_name][:dhcp]
60
-
61
- index = tokens[0].delete(':')
62
- file_content = Util::FileHelper.safe_read("/run/systemd/netif/leases/#{index}", nil)
63
- dhcp = file_content.match(/SERVER_ADDRESS=(.*)/) if file_content
64
- if dhcp
65
- network_info[interface_name][:dhcp] = dhcp[1]
66
- else
67
- alternate_dhcp = retrieve_from_other_directories(interface_name)
68
- network_info[interface_name][:dhcp] = alternate_dhcp if alternate_dhcp
69
- end
70
- end
71
-
72
- def retrieve_from_other_directories(interface_name)
73
- DIRS.each do |dir|
74
- next unless File.readable?(dir)
75
-
76
- lease_files = Dir.entries(dir).select { |file| file =~ /dhclient.*\.lease/ }
77
- next if lease_files.empty?
78
-
79
- lease_files.select do |file|
80
- content = Util::FileHelper.safe_read("#{dir}#{file}", nil)
81
- next unless content =~ /interface.*#{interface_name}/
82
-
83
- dhcp = content.match(/dhcp-server-identifier ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/)
84
- return dhcp[1] if dhcp
85
- end
86
- end
87
- return unless File.readable?('/var/lib/NetworkManager/')
88
-
89
- search_internal_leases(interface_name)
90
- end
91
-
92
- def search_internal_leases(interface_name)
93
- files = Dir.entries('/var/lib/NetworkManager/').reject { |dir| dir =~ /^\.+$/ }
94
- lease_file = files.find { |file| file =~ /internal.*#{interface_name}\.lease/ }
95
- return unless lease_file
96
-
97
- dhcp = Util::FileHelper.safe_read("/var/lib/NetworkManager/#{lease_file}", nil)
98
-
99
- return unless dhcp
100
-
101
- dhcp = dhcp.match(/SERVER_ADDRESS=(.*)/)
102
- dhcp[1] if dhcp
103
- end
104
-
105
- def fill_ip_v4_info!(ip_tokens, network_info)
106
- log.debug('fill_ip_v4_info!')
107
- return unless ip_tokens[2].casecmp('inet').zero?
108
-
109
- interface_name, ip4_address, ip4_mask_length = retrieve_name_and_ip_info(ip_tokens)
110
-
111
- log.debug("interface_name = #{interface_name}\n" \
112
- "ip4_address = #{ip4_address}\n" \
113
- "ip4_mask_length = #{ip4_mask_length}")
114
-
115
- binding = ::Resolvers::Utils::Networking.build_binding(ip4_address, ip4_mask_length)
116
- build_network_info_structure!(network_info, interface_name, :bindings)
117
-
118
- network_info[interface_name][:bindings] << binding
119
- end
120
-
121
- def retrieve_name_and_ip_info(tokens)
122
- interface_name = tokens[1]
123
- ip_info = tokens[3].split('/')
124
- ip_address = ip_info[0]
125
- ip_mask_length = ip_info[1]
126
-
127
- [interface_name, ip_address, ip_mask_length]
128
- end
129
-
130
- def fill_io_v6_info!(ip_tokens, network_info)
131
- return unless ip_tokens[2].casecmp('inet6').zero?
132
-
133
- interface_name, ip6_address, ip6_mask_length = retrieve_name_and_ip_info(ip_tokens)
134
-
135
- binding = ::Resolvers::Utils::Networking.build_binding(ip6_address, ip6_mask_length)
136
-
137
- build_network_info_structure!(network_info, interface_name, :bindings6)
138
-
139
- network_info[interface_name][:scope6] ||= ip_tokens[5]
140
- network_info[interface_name][:bindings6] << binding
141
- end
142
-
143
- def retrieve_default_interface
144
- output = Facter::Core::Execution.execute('ip route get 1', logger: log)
145
-
146
- ip_route_tokens = output.each_line.first.strip.split(' ')
147
- default_interface = ip_route_tokens[4]
148
-
149
- @fact_list[:primary_interface] = default_interface
150
- end
151
-
152
- def build_network_info_structure!(network_info, interface_name, binding)
153
- network_info[interface_name] = {} unless network_info.dig(interface_name)
154
- network_info[interface_name][binding] = [] unless network_info.dig(interface_name, binding)
155
- end
156
- end
157
- end
158
- end
159
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Facter
4
- module Resolvers
5
- class PuppetVersionResolver < BaseResolver
6
- # :puppetversion
7
-
8
- @fact_list ||= {}
9
-
10
- class << self
11
- private
12
-
13
- def post_resolve(fact_name)
14
- @fact_list.fetch(fact_name) { puppet_version(fact_name) }
15
- end
16
-
17
- def puppet_version(fact_name)
18
- require 'puppet/version'
19
- @fact_list[:puppetversion] = Puppet.version
20
-
21
- @fact_list[fact_name]
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Facter
4
- module FilesystemHelper
5
- MOUNT_KEYS = %i[device filesystem path options
6
- available available_bytes size
7
- size_bytes used used_bytes capacity].freeze
8
- class << self
9
- def read_mountpoints
10
- # TODO: this require must be replaced with "require 'sys/filesystem'" when a new release of
11
- # djberg96/sys-filesystem gem is available
12
- require_relative '../../patches/sysfilesystem/sys/statvfs.rb'
13
- force_utf(Sys::Filesystem.mounts)
14
- end
15
-
16
- def read_mountpoint_stats(path)
17
- require 'sys/filesystem'
18
- Sys::Filesystem.stat(path)
19
- end
20
-
21
- def compute_capacity(used, total)
22
- if used == total
23
- '100%'
24
- elsif used.positive?
25
- "#{format('%<value>.2f', value: (used / total.to_f * 100))}%"
26
- else
27
- '0%'
28
- end
29
- end
30
-
31
- private
32
-
33
- def force_utf(mounts)
34
- mounts.each do |mount|
35
- mount.name.force_encoding('UTF-8')
36
- mount.mount_type.force_encoding('UTF-8')
37
- mount.mount_point.force_encoding('UTF-8')
38
- mount.options.force_encoding('UTF-8')
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Facter
4
- class FingerPrint
5
- attr_accessor :sha1, :sha256
6
- def initialize(sha1, sha256)
7
- @sha1 = sha1
8
- @sha256 = sha256
9
- end
10
- end
11
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ipaddr'
4
-
5
- module Resolvers
6
- module Utils
7
- module Networking
8
- class << self
9
- # Creates a hash with IP, netmask and network. Works for IPV4 and IPV6
10
- # @param [String] addr The IP address
11
- # @param [Integer] mask_length Number of 1 bits the netmask has
12
- #
13
- # @return [Hash] Hash containing ip address, netmask and network
14
- def build_binding(addr, mask_length)
15
- ip = IPAddr.new(addr)
16
- mask_helper = ip.ipv6? ? 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' : '255.255.255.255'
17
- mask = IPAddr.new(mask_helper).mask(mask_length)
18
-
19
- { address: addr, netmask: mask.to_s, network: ip.mask(mask_length).to_s }
20
- end
21
-
22
- def expand_main_bindings(networking_facts)
23
- primary = networking_facts[:primary_interface]
24
- interfaces = networking_facts[:interfaces]
25
-
26
- expand_interfaces(interfaces) unless interfaces.nil?
27
- expand_primary_interface(networking_facts, primary) unless primary.nil? || interfaces.nil?
28
- end
29
-
30
- def get_scope(ip)
31
- require 'socket'
32
-
33
- scope6 = []
34
- addrinfo = Addrinfo.new(['AF_INET6', 0, nil, ip], :INET6)
35
-
36
- scope6 << 'compat,' if IPAddr.new(ip).ipv4_compat?
37
- scope6 << if addrinfo.ipv6_linklocal?
38
- 'link'
39
- elsif addrinfo.ipv6_sitelocal?
40
- 'site'
41
- elsif addrinfo.ipv6_loopback?
42
- 'host'
43
- else 'global'
44
- end
45
- scope6.join
46
- end
47
-
48
- def find_valid_binding(bindings)
49
- bindings.each do |binding|
50
- return binding unless ignored_ip_address(binding[:address])
51
- end
52
- bindings.empty? ? nil : bindings.first
53
- end
54
-
55
- def ignored_ip_address(addr)
56
- addr.empty? || addr.start_with?('127.', '169.254.') || addr.start_with?('fe80') || addr.eql?('::1')
57
- end
58
-
59
- private
60
-
61
- def expand_interfaces(interfaces)
62
- interfaces.each_value do |values|
63
- expand_binding(values, values[:bindings]) if values[:bindings]
64
- expand_binding(values, values[:bindings6], false) if values[:bindings6]
65
- end
66
- end
67
-
68
- def expand_primary_interface(networking_facts, primary)
69
- networking_facts[:interfaces][primary].each do |key, value|
70
- networking_facts[key] = value unless %i[bindings bindings6].include?(key)
71
- end
72
- end
73
-
74
- def expand_binding(values, bindings, ipv4_type = true)
75
- binding = find_valid_binding(bindings)
76
- ip_protocol_type = ipv4_type ? '' : '6'
77
-
78
- values["ip#{ip_protocol_type}".to_sym] = binding[:address]
79
- values["netmask#{ip_protocol_type}".to_sym] = binding[:netmask]
80
- values["network#{ip_protocol_type}".to_sym] = binding[:network]
81
- values[:scope6] = get_scope(binding[:address]) unless ipv4_type
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Facter
4
- class Ssh
5
- attr_accessor :fingerprint, :type, :key, :name
6
- def initialize(fingerprint, type, key, name)
7
- @fingerprint = fingerprint
8
- @type = type
9
- @key = key
10
- @name = name
11
- end
12
- end
13
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'base64'
4
- require 'digest/sha1'
5
-
6
- module Resolvers
7
- module Utils
8
- class SshHelper
9
- class << self
10
- SSH_NAME = { 'ssh-dss' => 'dsa', 'ecdsa-sha2-nistp256' => 'ecdsa',
11
- 'ssh-ed25519' => 'ed25519', 'ssh-rsa' => 'rsa' }.freeze
12
- SSH_FINGERPRINT = { 'rsa' => 1, 'dsa' => 2, 'ecdsa' => 3, 'ed25519' => 4 }.freeze
13
-
14
- def create_ssh(key_type, key)
15
- key_name = SSH_NAME[key_type]
16
- decoded_key = Base64.decode64(key)
17
- ssh_fp = SSH_FINGERPRINT[key_name]
18
- sha1 = "SSHFP #{ssh_fp} 1 #{Digest::SHA1.new.update(decoded_key)}"
19
- sha256 = "SSHFP #{ssh_fp} 2 #{Digest::SHA2.new.update(decoded_key)}"
20
-
21
- fingerprint = Facter::FingerPrint.new(sha1, sha256)
22
- Facter::Ssh.new(fingerprint, key_type, key, key_name)
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'win32ole'
4
-
5
- class Win32Ole
6
- RPC_C_IMP_LEVEL_IMPERSONATE = 3
7
-
8
- def initialize
9
- locator = WIN32OLE.new('WbemScripting.SWbemLocator')
10
- @conn = locator.ConnectServer('.', 'root\\cimv2')
11
- @conn.Security_.ImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE
12
- end
13
-
14
- def return_first(query)
15
- result = exec_query(query)
16
- return result.to_enum.first if result
17
-
18
- nil
19
- end
20
-
21
- def exec_query(query)
22
- @conn.execquery(query)
23
- end
24
- end