facter 4.0.41 → 4.0.47

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 (269) 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 +110 -25
  5. data/lib/facter/config.rb +386 -0
  6. data/lib/facter/custom_facts/core/aggregate.rb +51 -17
  7. data/lib/facter/custom_facts/core/execution.rb +54 -38
  8. data/lib/facter/custom_facts/core/execution/base.rb +46 -40
  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 +19 -2
  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 +41 -12
  15. data/lib/facter/facts/aix/interfaces.rb +1 -0
  16. data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
  17. data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
  18. data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
  19. data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
  20. data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
  21. data/lib/facter/facts/aix/memory/system/available.rb +1 -1
  22. data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
  23. data/lib/facter/facts/aix/memory/system/total.rb +1 -1
  24. data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
  25. data/lib/facter/facts/aix/memory/system/used.rb +1 -1
  26. data/lib/facter/facts/aix/processors/speed.rb +1 -1
  27. data/lib/facter/facts/bsd/processors/speed.rb +1 -1
  28. data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
  29. data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
  30. data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
  31. data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
  32. data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
  33. data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
  34. data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
  35. data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
  36. data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
  37. data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
  38. data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
  39. data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
  40. data/lib/facter/facts/freebsd/virtual.rb +22 -0
  41. data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
  42. data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
  43. data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
  44. data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
  45. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
  46. data/lib/facter/facts/linux/interfaces.rb +1 -0
  47. data/lib/facter/facts/linux/is_virtual.rb +2 -2
  48. data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
  49. data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
  50. data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
  51. data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
  52. data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
  53. data/lib/facter/facts/linux/memory/system/available.rb +1 -1
  54. data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
  55. data/lib/facter/facts/linux/memory/system/total.rb +1 -1
  56. data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
  57. data/lib/facter/facts/linux/memory/system/used.rb +1 -1
  58. data/lib/facter/facts/linux/processors/speed.rb +1 -1
  59. data/lib/facter/facts/linux/virtual.rb +1 -1
  60. data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
  61. data/lib/facter/facts/macosx/interfaces.rb +1 -0
  62. data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
  63. data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
  64. data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
  65. data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
  66. data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
  67. data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
  68. data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
  69. data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
  70. data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
  71. data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
  72. data/lib/facter/facts/macosx/processors/speed.rb +1 -1
  73. data/lib/facter/facts/rhel/os/release.rb +1 -1
  74. data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
  75. data/lib/facter/facts/solaris/hypervisors/ldom.rb +3 -0
  76. data/lib/facter/facts/solaris/interfaces.rb +1 -0
  77. data/lib/facter/facts/solaris/is_virtual.rb +2 -2
  78. data/lib/facter/facts/solaris/ldom.rb +34 -4
  79. data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
  80. data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
  81. data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
  82. data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
  83. data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
  84. data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
  85. data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
  86. data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
  87. data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
  88. data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
  89. data/lib/facter/facts/solaris/processors/speed.rb +1 -1
  90. data/lib/facter/facts/solaris/virtual.rb +1 -1
  91. data/lib/facter/facts/solaris/zones.rb +1 -1
  92. data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
  93. data/lib/facter/facts/windows/interfaces.rb +1 -0
  94. data/lib/facter/facts/windows/memory/system/available.rb +1 -1
  95. data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
  96. data/lib/facter/facts/windows/memory/system/total.rb +1 -1
  97. data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
  98. data/lib/facter/facts/windows/memory/system/used.rb +1 -1
  99. data/lib/facter/facts/windows/os/release.rb +1 -1
  100. data/lib/facter/framework/benchmarking/timer.rb +4 -2
  101. data/lib/facter/framework/cli/cli.rb +20 -6
  102. data/lib/facter/framework/config/fact_groups.rb +10 -8
  103. data/lib/facter/framework/core/cache_manager.rb +79 -29
  104. data/lib/facter/framework/core/fact/internal/core_fact.rb +6 -1
  105. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +38 -4
  106. data/lib/facter/framework/core/fact_augmenter.rb +1 -1
  107. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -2
  108. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +17 -1
  109. data/lib/facter/framework/core/fact_manager.rb +15 -3
  110. data/lib/facter/framework/core/file_loader.rb +6 -2
  111. data/lib/facter/framework/core/options/config_file_options.rb +16 -5
  112. data/lib/facter/framework/core/options/option_store.rb +40 -20
  113. data/lib/facter/framework/detector/os_hierarchy.rb +5 -9
  114. data/lib/facter/framework/logging/logger.rb +3 -3
  115. data/lib/facter/models/fact_collection.rb +11 -1
  116. data/lib/facter/models/loaded_fact.rb +2 -1
  117. data/lib/facter/resolvers/aio_agent_version.rb +2 -2
  118. data/lib/facter/resolvers/aix/architecture_resolver.rb +19 -4
  119. data/lib/facter/resolvers/aix/disks.rb +6 -5
  120. data/lib/facter/resolvers/aix/filesystem_resolver.rb +2 -2
  121. data/lib/facter/resolvers/aix/hardware_resolver.rb +4 -3
  122. data/lib/facter/resolvers/aix/load_averages_resolver.rb +2 -1
  123. data/lib/facter/resolvers/aix/memory.rb +4 -3
  124. data/lib/facter/resolvers/aix/mountpoints.rb +6 -5
  125. data/lib/facter/resolvers/aix/networking_resolver.rb +4 -3
  126. data/lib/facter/resolvers/aix/nim.rb +1 -1
  127. data/lib/facter/resolvers/aix/os_level.rb +2 -2
  128. data/lib/facter/resolvers/aix/partitions.rb +7 -6
  129. data/lib/facter/resolvers/aix/processors.rb +5 -4
  130. data/lib/facter/resolvers/aix/serialnumber.rb +2 -2
  131. data/lib/facter/resolvers/augeas_resolver.rb +8 -2
  132. data/lib/facter/resolvers/base_resolver.rb +14 -4
  133. data/lib/facter/resolvers/bsd/processors.rb +13 -8
  134. data/lib/facter/resolvers/cloud.rb +2 -2
  135. data/lib/facter/resolvers/containers.rb +5 -4
  136. data/lib/facter/resolvers/debian_version.rb +2 -2
  137. data/lib/facter/resolvers/disk_resolver.rb +17 -6
  138. data/lib/facter/resolvers/dmi_decode.rb +1 -1
  139. data/lib/facter/resolvers/dmi_resolver.rb +5 -4
  140. data/lib/facter/resolvers/ec2.rb +5 -2
  141. data/lib/facter/resolvers/eos_release_resolver.rb +2 -2
  142. data/lib/facter/resolvers/facterversion_resolver.rb +1 -1
  143. data/lib/facter/resolvers/filesystems_resolver.rb +5 -2
  144. data/lib/facter/resolvers/fips_enabled_resolver.rb +5 -2
  145. data/lib/facter/resolvers/freebsd/dmi_resolver.rb +1 -1
  146. data/lib/facter/resolvers/freebsd/freebsd_version_resolver.rb +9 -7
  147. data/lib/facter/resolvers/freebsd/geom_resolver.rb +15 -22
  148. data/lib/facter/resolvers/freebsd/processors.rb +13 -8
  149. data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +5 -3
  150. data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +4 -2
  151. data/lib/facter/resolvers/freebsd/virtual_resolver.rb +45 -0
  152. data/lib/facter/resolvers/gce.rb +3 -2
  153. data/lib/facter/resolvers/hostname_resolver.rb +69 -21
  154. data/lib/facter/resolvers/identity_resolver.rb +2 -1
  155. data/lib/facter/resolvers/linux/docker_uptime.rb +3 -2
  156. data/lib/facter/resolvers/linux/load_averages.rb +3 -2
  157. data/lib/facter/resolvers/load_averages.rb +5 -3
  158. data/lib/facter/resolvers/lpar_resolver.rb +1 -1
  159. data/lib/facter/resolvers/lsb_release_resolver.rb +1 -1
  160. data/lib/facter/resolvers/lspci.rb +1 -1
  161. data/lib/facter/resolvers/macosx/dmi_resolver.rb +1 -1
  162. data/lib/facter/resolvers/macosx/filesystems_resolver.rb +1 -1
  163. data/lib/facter/resolvers/macosx/load_averages_resolver.rb +2 -1
  164. data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +9 -8
  165. data/lib/facter/resolvers/macosx/processor_resolver.rb +2 -1
  166. data/lib/facter/resolvers/macosx/swap_memory_resolver.rb +2 -1
  167. data/lib/facter/resolvers/macosx/system_memory_resolver.rb +2 -1
  168. data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +4 -6
  169. data/lib/facter/resolvers/memory_resolver.rb +16 -16
  170. data/lib/facter/resolvers/mountpoints_resolver.rb +56 -25
  171. data/lib/facter/resolvers/networking_linux_resolver.rb +188 -83
  172. data/lib/facter/resolvers/networking_resolver.rb +9 -6
  173. data/lib/facter/resolvers/open_vz.rb +2 -4
  174. data/lib/facter/resolvers/os_release_resolver.rb +2 -2
  175. data/lib/facter/resolvers/partitions.rb +67 -63
  176. data/lib/facter/resolvers/path_resolver.rb +1 -1
  177. data/lib/facter/resolvers/processors_resolver.rb +10 -3
  178. data/lib/facter/resolvers/redhat_release_resolver.rb +2 -2
  179. data/lib/facter/resolvers/ruby_resolver.rb +1 -1
  180. data/lib/facter/resolvers/selinux_resolver.rb +4 -4
  181. data/lib/facter/resolvers/solaris/disks.rb +2 -2
  182. data/lib/facter/resolvers/solaris/dmi.rb +3 -1
  183. data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
  184. data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
  185. data/lib/facter/resolvers/solaris/ipaddress.rb +2 -1
  186. data/lib/facter/resolvers/solaris/ldom.rb +1 -3
  187. data/lib/facter/resolvers/solaris/memory.rb +4 -3
  188. data/lib/facter/resolvers/solaris/mountpoints.rb +61 -0
  189. data/lib/facter/resolvers/solaris/networking.rb +51 -44
  190. data/lib/facter/resolvers/solaris/os_release.rb +7 -5
  191. data/lib/facter/resolvers/solaris/processors.rb +2 -1
  192. data/lib/facter/resolvers/solaris/zone.rb +1 -1
  193. data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
  194. data/lib/facter/resolvers/ssh_resolver.rb +11 -7
  195. data/lib/facter/resolvers/suse_release_resolver.rb +2 -2
  196. data/lib/facter/resolvers/sw_vers_resolver.rb +2 -2
  197. data/lib/facter/resolvers/timezone_resolver.rb +1 -1
  198. data/lib/facter/resolvers/uname_resolver.rb +1 -1
  199. data/lib/facter/resolvers/uptime_resolver.rb +3 -3
  200. data/lib/facter/resolvers/virt_what.rb +1 -1
  201. data/lib/facter/resolvers/vmware.rb +1 -1
  202. data/lib/facter/resolvers/windows/aio_agent_version.rb +2 -2
  203. data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +2 -2
  204. data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +2 -2
  205. data/lib/facter/resolvers/windows/fips_resolver.rb +2 -1
  206. data/lib/facter/resolvers/windows/hardware_architecture_resolver.rb +2 -1
  207. data/lib/facter/resolvers/windows/identity_resolver.rb +2 -1
  208. data/lib/facter/resolvers/windows/kernel_resolver.rb +3 -1
  209. data/lib/facter/resolvers/windows/memory_resolver.rb +7 -1
  210. data/lib/facter/resolvers/windows/netkvm_resolver.rb +2 -1
  211. data/lib/facter/resolvers/windows/networking_resolver.rb +5 -4
  212. data/lib/facter/resolvers/windows/processors_resolver.rb +3 -2
  213. data/lib/facter/resolvers/windows/product_release_resolver.rb +2 -1
  214. data/lib/facter/resolvers/windows/ssh.rb +5 -3
  215. data/lib/facter/resolvers/windows/system32_resolver.rb +3 -1
  216. data/lib/facter/resolvers/windows/uptime_resolver.rb +3 -2
  217. data/lib/facter/resolvers/windows/virtualization_resolver.rb +3 -2
  218. data/lib/facter/resolvers/windows/win_os_description_resolver.rb +4 -2
  219. data/lib/facter/resolvers/wpar_resolver.rb +1 -1
  220. data/lib/facter/resolvers/xen.rb +2 -2
  221. data/lib/facter/resolvers/zfs.rb +2 -1
  222. data/lib/facter/resolvers/zpool.rb +2 -1
  223. data/lib/facter/util/aix/info_extractor.rb +24 -0
  224. data/lib/facter/util/aix/odm_query.rb +46 -0
  225. data/lib/facter/util/api_debugger.rb +33 -29
  226. data/lib/facter/util/facts/facts_utils.rb +14 -0
  227. data/lib/facter/util/facts/unit_converter.rb +61 -0
  228. data/lib/facter/util/facts/uptime_parser.rb +128 -0
  229. data/lib/facter/util/facts/virtual_detector.rb +90 -0
  230. data/lib/facter/util/facts/windows_release_finder.rb +55 -0
  231. data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
  232. data/lib/facter/util/resolvers/aws_token.rb +37 -0
  233. data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
  234. data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
  235. data/lib/facter/util/resolvers/fingerprint.rb +15 -0
  236. data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
  237. data/lib/facter/util/resolvers/networking.rb +90 -0
  238. data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
  239. data/lib/facter/util/resolvers/networking/networking.rb +109 -0
  240. data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
  241. data/lib/facter/util/resolvers/ssh.rb +17 -0
  242. data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
  243. data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
  244. data/lib/facter/{framework/utils → util}/utils.rb +0 -0
  245. data/lib/facter/util/windows/win32ole.rb +30 -0
  246. data/lib/facter/version.rb +1 -1
  247. metadata +33 -44
  248. data/lib/facter/fact_groups.conf +0 -308
  249. data/lib/facter/facts/aix/puppet_version.rb +0 -15
  250. data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
  251. data/lib/facter/facts/linux/puppet_version.rb +0 -15
  252. data/lib/facter/facts/macosx/puppet_version.rb +0 -15
  253. data/lib/facter/facts/solaris/puppet_version.rb +0 -15
  254. data/lib/facter/facts/windows/puppet_version.rb +0 -15
  255. data/lib/facter/facts_utils/facts_utils.rb +0 -12
  256. data/lib/facter/facts_utils/unit_converter.rb +0 -59
  257. data/lib/facter/facts_utils/uptime_parser.rb +0 -124
  258. data/lib/facter/facts_utils/virtual_detector.rb +0 -78
  259. data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
  260. data/lib/facter/os_hierarchy.json +0 -36
  261. data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
  262. data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
  263. data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
  264. data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
  265. data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
  266. data/lib/facter/resolvers/utils/networking.rb +0 -86
  267. data/lib/facter/resolvers/utils/ssh.rb +0 -13
  268. data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
  269. data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
@@ -11,7 +11,7 @@ module Facts
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Solaris::Memory.resolve(:swap)
13
13
  if fact_value
14
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value[:available_bytes])
14
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:available_bytes])
15
15
  end
16
16
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
17
17
  end
@@ -13,7 +13,7 @@ module Facts
13
13
  fact_value = fact_value[:available_bytes] if fact_value
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
16
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
17
17
  end
18
18
  end
19
19
  end
@@ -11,7 +11,7 @@ module Facts
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Solaris::Memory.resolve(:swap)
13
13
  if fact_value
14
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value[:total_bytes])
14
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:total_bytes])
15
15
  end
16
16
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
17
17
  end
@@ -13,7 +13,7 @@ module Facts
13
13
  fact_value = fact_value[:total_bytes] if fact_value
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
16
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
17
17
  end
18
18
  end
19
19
  end
@@ -10,7 +10,7 @@ module Facts
10
10
  def call_the_resolver
11
11
  fact_value = Facter::Resolvers::Solaris::Memory.resolve(:swap)
12
12
  if fact_value
13
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value[:used_bytes])
13
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:used_bytes])
14
14
  end
15
15
  Facter::ResolvedFact.new(FACT_NAME, fact_value)
16
16
  end
@@ -11,7 +11,7 @@ module Facts
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Solaris::Memory.resolve(:system)
13
13
  if fact_value
14
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value[:available_bytes])
14
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:available_bytes])
15
15
  end
16
16
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
17
17
  end
@@ -13,7 +13,7 @@ module Facts
13
13
  fact_value = fact_value[:available_bytes] if fact_value
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
16
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
17
17
  end
18
18
  end
19
19
  end
@@ -11,7 +11,7 @@ module Facts
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Solaris::Memory.resolve(:system)
13
13
  if fact_value
14
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value[:total_bytes])
14
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:total_bytes])
15
15
  end
16
16
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
17
17
  end
@@ -13,7 +13,7 @@ module Facts
13
13
  fact_value = fact_value[:total_bytes] if fact_value
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
16
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
17
17
  end
18
18
  end
19
19
  end
@@ -10,7 +10,7 @@ module Facts
10
10
  def call_the_resolver
11
11
  fact_value = Facter::Resolvers::Solaris::Memory.resolve(:system)
12
12
  if fact_value
13
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value[:used_bytes])
13
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value[:used_bytes])
14
14
  end
15
15
  Facter::ResolvedFact.new(FACT_NAME, fact_value)
16
16
  end
@@ -8,7 +8,7 @@ module Facts
8
8
 
9
9
  def call_the_resolver
10
10
  fact_value = Facter::Resolvers::Solaris::Processors.resolve(:speed)
11
- speed = Facter::FactsUtils::UnitConverter.hertz_to_human_readable(fact_value)
11
+ speed = Facter::Util::Facts::UnitConverter.hertz_to_human_readable(fact_value)
12
12
  Facter::ResolvedFact.new(FACT_NAME, speed)
13
13
  end
14
14
  end
@@ -51,7 +51,7 @@ module Facts
51
51
 
52
52
  return unless product_name
53
53
 
54
- Facter::FactsUtils::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
54
+ Facter::Util::Facts::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
55
55
 
56
56
  nil
57
57
  end
@@ -28,7 +28,7 @@ module Facts
28
28
  end
29
29
 
30
30
  resolved_facts << Facter::ResolvedFact.new('solaris_zones.zones', zones)
31
- resolved_facts << Facter::ResolvedFact.new('zones', results.count.to_s, :legacy)
31
+ resolved_facts << Facter::ResolvedFact.new('zones', results.count, :legacy)
32
32
 
33
33
  resolved_facts.flatten
34
34
  end
@@ -4,6 +4,7 @@ module Facts
4
4
  module Windows
5
5
  class DhcpServers
6
6
  FACT_NAME = 'dhcp_servers'
7
+ TYPE = :legacy
7
8
 
8
9
  def call_the_resolver
9
10
  fact_value = construct_addresses_hash
@@ -4,6 +4,7 @@ module Facts
4
4
  module Windows
5
5
  class Interfaces
6
6
  FACT_NAME = 'interfaces'
7
+ TYPE = :legacy
7
8
 
8
9
  def call_the_resolver
9
10
  fact_value = Facter::Resolvers::Windows::Networking.resolve(:interfaces)
@@ -10,7 +10,7 @@ module Facts
10
10
 
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:available_bytes)
13
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value)
13
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value)
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
16
16
  end
@@ -12,7 +12,7 @@ module Facts
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:available_bytes)
13
13
 
14
14
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
15
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
16
  end
17
17
  end
18
18
  end
@@ -10,7 +10,7 @@ module Facts
10
10
 
11
11
  def call_the_resolver
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:total_bytes)
13
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value)
13
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value)
14
14
 
15
15
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
16
16
  end
@@ -12,7 +12,7 @@ module Facts
12
12
  fact_value = Facter::Resolvers::Memory.resolve(:total_bytes)
13
13
 
14
14
  [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, Facter::FactsUtils::UnitConverter.bytes_to_mb(fact_value), :legacy)]
15
+ Facter::ResolvedFact.new(ALIASES, Facter::Util::Facts::UnitConverter.bytes_to_mb(fact_value), :legacy)]
16
16
  end
17
17
  end
18
18
  end
@@ -9,7 +9,7 @@ module Facts
9
9
 
10
10
  def call_the_resolver
11
11
  fact_value = Facter::Resolvers::Memory.resolve(:used_bytes)
12
- fact_value = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(fact_value)
12
+ fact_value = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(fact_value)
13
13
 
14
14
  Facter::ResolvedFact.new(FACT_NAME, fact_value)
15
15
  end
@@ -16,7 +16,7 @@ module Facts
16
16
  kernel_version: kernel_resolver(:kernelversion)
17
17
  }
18
18
 
19
- fact_value = Facter::WindowsReleaseFinder.find_release(input)
19
+ fact_value = Facter::Util::Facts::WindowsReleaseFinder.find_release(input)
20
20
  arr << Facter::ResolvedFact.new(FACT_NAME, ({ full: fact_value, major: fact_value } if fact_value))
21
21
  ALIASES.each { |aliass| arr << Facter::ResolvedFact.new(aliass, fact_value, :legacy) }
22
22
  arr
@@ -7,11 +7,13 @@ module Facter
7
7
  module Benchmarking
8
8
  class Timer
9
9
  class << self
10
- def measure(fact_name)
10
+ def measure(fact_name, prefix_message = '')
11
11
  if Options[:timing]
12
12
  time = Benchmark.measure { yield }
13
13
 
14
- puts "fact `#{fact_name}`, took: #{time.format('%r')} seconds"
14
+ log = "fact '#{fact_name}', took: #{time.format('%r')} seconds"
15
+ prefix_message = "#{prefix_message} " unless prefix_message.empty?
16
+ puts "#{prefix_message}#{log}"
15
17
  else
16
18
  yield
17
19
  end
@@ -75,11 +75,6 @@ module Facter
75
75
  type: :boolean,
76
76
  desc: 'Enable verbose (info) output.'
77
77
 
78
- class_option :puppet,
79
- type: :boolean,
80
- aliases: '-p',
81
- desc: 'Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
82
-
83
78
  class_option :show_legacy,
84
79
  type: :boolean,
85
80
  desc: 'Show legacy facts when querying all facts.'
@@ -98,6 +93,10 @@ module Facter
98
93
  aliases: '-t',
99
94
  desc: 'Show how much time it took to resolve each fact'
100
95
 
96
+ class_option :sequential,
97
+ type: :boolean,
98
+ desc: 'Resolve facts sequentially'
99
+
101
100
  desc '--man', 'Display manual.', hide: true
102
101
  map ['--man'] => :man
103
102
  def man(*args)
@@ -157,6 +156,20 @@ module Facter
157
156
  puts cache_groups
158
157
  end
159
158
 
159
+ desc '--puppet, -p', '(NOT SUPPORTED)Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
160
+ map ['--puppet', '-p'] => :puppet
161
+ def puppet(*args)
162
+ log = Log.new(self)
163
+ log.warn('`facter --puppet` and `facter -p` are no longer supported, use `puppet facts show` instead')
164
+ log.warn('the output does not contain puppet facts!')
165
+
166
+ output, status = Facter.to_user_output(@options, *args)
167
+ puts output
168
+
169
+ status = 1 if Facter::Log.errors?
170
+ exit status
171
+ end
172
+
160
173
  desc 'help', 'Help for all arguments'
161
174
  def help(*args)
162
175
  help_string = +''
@@ -171,7 +184,7 @@ module Facter
171
184
  def help_header(_args)
172
185
  path = File.join(File.dirname(__FILE__), '../../')
173
186
 
174
- Util::FileHelper.safe_read("#{path}fixtures/facter_help_header")
187
+ Facter::Util::FileHelper.safe_read("#{path}fixtures/facter_help_header")
175
188
  end
176
189
 
177
190
  IGNORE_OPTIONS = %w[log_level color no_color].freeze
@@ -201,6 +214,7 @@ module Facter
201
214
  end
202
215
 
203
216
  def build_option(name, aliases, description)
217
+ name = name.tr('_', '-')
204
218
  help_option = +''
205
219
  help_option << aliases.join(',').rjust(10)
206
220
  help_option << ' '
@@ -1,17 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'facter/config'
4
+
3
5
  module Facter
4
6
  class FactGroups
7
+ attr_accessor :groups_ttls
5
8
  attr_reader :groups, :block_list, :facts_ttls
6
9
 
7
- @groups_ttls = []
8
-
9
10
  STRING_TO_SECONDS = { 'seconds' => 1, 'minutes' => 60, 'hours' => 3600, 'days' => 3600 * 24 }.freeze
10
11
 
11
- def initialize(group_list_path = nil)
12
- default_path = File.join(File.dirname(__FILE__), '../../fact_groups.conf')
13
- @groups_file_path = group_list_path || default_path
14
- @groups ||= File.readable?(@groups_file_path) ? Hocon.load(@groups_file_path) : {}
12
+ def initialize
13
+ @groups = Facter::Config::FACT_GROUPS.dup
15
14
  load_groups
16
15
  load_groups_from_options
17
16
  load_facts_ttls
@@ -38,7 +37,10 @@ module Facter
38
37
  fact = get_fact(fact_name)
39
38
  return fact[:group] if fact
40
39
 
41
- @groups.detect { |k, v| break k if Array(v).find { |f| fact_name =~ /^#{f}.*/ } }
40
+ # @groups.detect { |k, v| break k if Array(v).find { |f| fact_name =~ /^#{f}.*/ } }
41
+ @groups.detect do |k, v|
42
+ break k if Array(v).find { |f| fact_name.include?('.*') ? fact_name == f : fact_name =~ /^#{f}.*/ }
43
+ end
42
44
  end
43
45
 
44
46
  # Get config ttls for a given group
@@ -91,7 +93,7 @@ module Facter
91
93
 
92
94
  def load_groups
93
95
  config = ConfigReader.init(Options[:config])
94
- @block_list = config.block_list || {}
96
+ @block_list = config.block_list || []
95
97
  @groups_ttls = config.ttls || []
96
98
  @groups.merge!(config.fact_groups) if config.fact_groups
97
99
  end
@@ -10,7 +10,7 @@ module Facter
10
10
  end
11
11
 
12
12
  def resolve_facts(searched_facts)
13
- return searched_facts, [] if !File.directory?(@cache_dir) || !Options[:cache]
13
+ return searched_facts, [] if (!File.directory?(@cache_dir) || !Options[:cache]) && Options[:ttls].any?
14
14
 
15
15
  facts = []
16
16
  searched_facts.delete_if do |fact|
@@ -27,8 +27,9 @@ module Facter
27
27
  end
28
28
 
29
29
  def cache_facts(resolved_facts)
30
- return unless Options[:cache]
30
+ return unless Options[:cache] && Options[:ttls].any?
31
31
 
32
+ @groups = {}
32
33
  resolved_facts.each do |fact|
33
34
  cache_fact(fact)
34
35
  end
@@ -48,21 +49,25 @@ module Facter
48
49
  false
49
50
  end
50
51
 
51
- fact_group = @fact_groups.get_fact_group(fact_name)
52
- delete_cache(fact_group) if fact_group && !cached
52
+ # fact_group = @fact_groups.get_fact_group(fact_name)
53
+ # delete_cache(fact_group) if fact_group && !cached
53
54
  cached
54
55
  end
55
56
 
56
57
  private
57
58
 
58
59
  def resolve_fact(searched_fact)
59
- return unless fact_cache_enabled?(searched_fact.name)
60
+ fact_name = if searched_fact.file
61
+ File.basename(searched_fact.file)
62
+ else
63
+ searched_fact.name
64
+ end
65
+
66
+ return unless fact_cache_enabled?(fact_name)
67
+
68
+ fact = @fact_groups.get_fact(fact_name)
60
69
 
61
- fact = if searched_fact.file
62
- @fact_groups.get_fact(File.basename(searched_fact.file))
63
- else
64
- @fact_groups.get_fact(searched_fact.name)
65
- end
70
+ return if external_fact_in_custom_group?(searched_fact, fact_name, fact)
66
71
 
67
72
  return unless fact
68
73
 
@@ -71,40 +76,82 @@ module Facter
71
76
  read_fact(searched_fact, fact[:group])
72
77
  end
73
78
 
79
+ def external_fact_in_custom_group?(searched_fact, fact_name, fact)
80
+ if searched_fact.type == :file && fact[:group] != fact_name
81
+ @log.error("Cannot cache '#{fact_name}' fact from '#{fact[:group]}' group. "\
82
+ 'Caching custom group is not supported for external facts.')
83
+ return true
84
+ end
85
+
86
+ false
87
+ end
88
+
74
89
  def read_fact(searched_fact, fact_group)
75
- data = read_group_json(fact_group)
90
+ data = nil
91
+ Facter::Framework::Benchmarking::Timer.measure(searched_fact.name, 'cached') do
92
+ data = read_group_json(fact_group)
93
+ end
76
94
  return unless data
77
95
 
96
+ unless searched_fact.file
97
+ return unless valid_format_version?(searched_fact, data, fact_group)
98
+
99
+ delete_cache(fact_group) unless data.keys.grep(/#{searched_fact.name}/).any?
100
+ # data.fetch(searched_fact.name) { delete_cache(fact_group) }
101
+ end
102
+
78
103
  @log.debug("loading cached values for #{searched_fact.name} facts")
79
104
 
80
105
  create_facts(searched_fact, data)
81
106
  end
82
107
 
108
+ def valid_format_version?(searched_fact, data, fact_group)
109
+ unless data['cache_format_version'] == 1
110
+ @log.debug("The fact #{searched_fact.name} could not be read from the cache, \
111
+ cache_format_version is incorrect!")
112
+ delete_cache(fact_group)
113
+ return false
114
+ end
115
+
116
+ true
117
+ end
118
+
83
119
  def create_facts(searched_fact, data)
84
120
  if searched_fact.type == :file
85
- facts = []
86
- data.each do |fact_name, fact_value|
87
- fact = Facter::ResolvedFact.new(fact_name, fact_value, searched_fact.type,
88
- searched_fact.user_query, searched_fact.filter_tokens)
89
- fact.file = searched_fact.file
90
- facts << fact
91
- end
92
- facts
121
+ resolve_external_fact(searched_fact, data)
93
122
  else
123
+ return unless data[searched_fact.name]
124
+
94
125
  [Facter::ResolvedFact.new(searched_fact.name, data[searched_fact.name], searched_fact.type,
95
126
  searched_fact.user_query, searched_fact.filter_tokens)]
96
127
  end
97
128
  end
98
129
 
130
+ def resolve_external_fact(searched_fact, data)
131
+ facts = []
132
+ data.each do |fact_name, fact_value|
133
+ next if fact_name == 'cache_format_version'
134
+
135
+ fact = Facter::ResolvedFact.new(fact_name, fact_value, searched_fact.type,
136
+ searched_fact.user_query, searched_fact.filter_tokens)
137
+ fact.file = searched_fact.file
138
+ facts << fact
139
+ end
140
+ facts
141
+ end
142
+
99
143
  def cache_fact(fact)
100
- group_name = if fact.file
101
- File.basename(fact.file)
102
- else
103
- @fact_groups.get_fact_group(fact.name)
104
- end
105
- return if !group_name || fact.value.nil?
144
+ fact_name = if fact.file
145
+ File.basename(fact.file)
146
+ else
147
+ fact.name
148
+ end
149
+
150
+ group_name = @fact_groups.get_fact_group(fact_name)
106
151
 
107
- return unless fact_cache_enabled?(fact.name)
152
+ return unless group_name
153
+
154
+ return unless fact_cache_enabled?(fact_name)
108
155
 
109
156
  @groups[group_name] ||= {}
110
157
  @groups[group_name][fact.name] = fact.value
@@ -123,6 +170,8 @@ module Facter
123
170
  next if File.readable?(cache_file_name)
124
171
 
125
172
  @log.debug("caching values for #{group_name} facts")
173
+
174
+ data['cache_format_version'] = 1
126
175
  File.write(cache_file_name, JSON.pretty_generate(data))
127
176
  end
128
177
  end
@@ -132,9 +181,9 @@ module Facter
132
181
 
133
182
  cache_file_name = File.join(@cache_dir, group_name)
134
183
  data = nil
135
- file = Util::FileHelper.safe_read(cache_file_name)
184
+ file = Facter::Util::FileHelper.safe_read(cache_file_name)
136
185
  begin
137
- data = JSON.parse(file)
186
+ data = JSON.parse(file) unless file.nil?
138
187
  rescue JSON::ParserError
139
188
  delete_cache(group_name)
140
189
  end
@@ -153,12 +202,13 @@ module Facter
153
202
  File.delete(cache_file_name)
154
203
  end
155
204
 
156
- @log.debug("#{group_name} facts cache file expired/missing")
205
+ @log.debug("#{group_name} facts cache file expired, missing or is corrupt")
157
206
  true
158
207
  end
159
208
 
160
209
  def delete_cache(group_name)
161
210
  cache_file_name = File.join(@cache_dir, group_name)
211
+
162
212
  File.delete(cache_file_name) if File.readable?(cache_file_name)
163
213
  end
164
214
  end