facter 4.0.47 → 4.0.52

Sign up to get free protection for your applications and to get access to all the features.
Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docs/generate_cli.rb +7 -0
  3. data/lib/facter.rb +76 -43
  4. data/lib/facter/config.rb +21 -9
  5. data/lib/facter/custom_facts/core/aggregate.rb +16 -0
  6. data/lib/facter/custom_facts/core/execution/base.rb +3 -2
  7. data/lib/facter/custom_facts/core/execution/popen3.rb +47 -0
  8. data/lib/facter/custom_facts/core/resolvable.rb +11 -0
  9. data/lib/facter/custom_facts/util/fact.rb +22 -3
  10. data/lib/facter/custom_facts/util/resolution.rb +3 -1
  11. data/lib/facter/facts/aix/disks.rb +1 -1
  12. data/lib/facter/facts/aix/ssh.rb +1 -1
  13. data/lib/facter/facts/aix/sshalgorithmkey.rb +1 -1
  14. data/lib/facter/facts/aix/sshfp_algorithm.rb +1 -1
  15. data/lib/facter/facts/alpine/os/release.rb +29 -0
  16. data/lib/facter/facts/amzn/lsbdistcodename.rb +16 -0
  17. data/lib/facter/facts/amzn/lsbdistdescription.rb +16 -0
  18. data/lib/facter/facts/amzn/lsbdistid.rb +16 -0
  19. data/lib/facter/facts/amzn/os/distro/codename.rb +24 -0
  20. data/lib/facter/facts/amzn/os/distro/description.rb +21 -0
  21. data/lib/facter/facts/amzn/os/distro/id.rb +21 -0
  22. data/lib/facter/facts/amzn/os/distro/release.rb +32 -0
  23. data/lib/facter/facts/amzn/os/release.rb +29 -0
  24. data/lib/facter/facts/devuan/os/distro/release.rb +36 -0
  25. data/lib/facter/facts/devuan/os/release.rb +29 -0
  26. data/lib/facter/facts/freebsd/ssh.rb +1 -1
  27. data/lib/facter/facts/freebsd/sshalgorithmkey.rb +1 -1
  28. data/lib/facter/facts/freebsd/sshfp_algorithm.rb +1 -1
  29. data/lib/facter/facts/gentoo/os/release.rb +29 -0
  30. data/lib/facter/facts/linux/az_metadata.rb +27 -0
  31. data/lib/facter/facts/linux/cloud/provider.rb +17 -0
  32. data/lib/facter/facts/linux/dhcp_servers.rb +2 -2
  33. data/lib/facter/facts/linux/disks.rb +1 -1
  34. data/lib/facter/facts/linux/interfaces.rb +1 -1
  35. data/lib/facter/facts/linux/ipaddress6_interfaces.rb +1 -1
  36. data/lib/facter/facts/linux/ipaddress_interfaces.rb +1 -1
  37. data/lib/facter/facts/linux/macaddress_interfaces.rb +1 -1
  38. data/lib/facter/facts/linux/mtu_interfaces.rb +1 -1
  39. data/lib/facter/facts/linux/netmask6_interfaces.rb +1 -1
  40. data/lib/facter/facts/linux/netmask_interfaces.rb +1 -1
  41. data/lib/facter/facts/linux/network6_interfaces.rb +1 -1
  42. data/lib/facter/facts/linux/network_interfaces.rb +1 -1
  43. data/lib/facter/facts/linux/networking/dhcp.rb +1 -1
  44. data/lib/facter/facts/linux/networking/domain.rb +1 -1
  45. data/lib/facter/facts/linux/networking/fqdn.rb +1 -1
  46. data/lib/facter/facts/linux/networking/hostname.rb +1 -1
  47. data/lib/facter/facts/linux/networking/interfaces.rb +1 -1
  48. data/lib/facter/facts/linux/networking/ip.rb +1 -1
  49. data/lib/facter/facts/linux/networking/ip6.rb +1 -1
  50. data/lib/facter/facts/linux/networking/mac.rb +1 -1
  51. data/lib/facter/facts/linux/networking/mtu.rb +1 -1
  52. data/lib/facter/facts/linux/networking/netmask.rb +1 -1
  53. data/lib/facter/facts/linux/networking/netmask6.rb +1 -1
  54. data/lib/facter/facts/linux/networking/network.rb +1 -1
  55. data/lib/facter/facts/linux/networking/network6.rb +1 -1
  56. data/lib/facter/facts/linux/networking/primary.rb +1 -1
  57. data/lib/facter/facts/linux/networking/scope6.rb +1 -1
  58. data/lib/facter/facts/linux/os/family.rb +4 -2
  59. data/lib/facter/facts/linux/scope6_interfaces.rb +1 -1
  60. data/lib/facter/facts/linux/ssh.rb +1 -1
  61. data/lib/facter/facts/linux/sshalgorithmkey.rb +1 -1
  62. data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
  63. data/lib/facter/facts/linuxmint/os/name.rb +18 -0
  64. data/lib/facter/facts/linuxmint/os/release.rb +35 -0
  65. data/lib/facter/facts/macosx/ssh.rb +1 -1
  66. data/lib/facter/facts/macosx/sshalgorithmkey.rb +1 -1
  67. data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
  68. data/lib/facter/facts/mageia/os/release.rb +36 -0
  69. data/lib/facter/facts/meego/os/release.rb +29 -0
  70. data/lib/facter/facts/oel/os/release.rb +29 -0
  71. data/lib/facter/facts/ol/os/release.rb +29 -0
  72. data/lib/facter/facts/openwrt/os/release.rb +35 -0
  73. data/lib/facter/facts/ovs/os/release.rb +29 -0
  74. data/lib/facter/facts/photon/os/release.rb +45 -0
  75. data/lib/facter/facts/rhel/lsbdistcodename.rb +16 -0
  76. data/lib/facter/facts/rhel/lsbdistdescription.rb +16 -0
  77. data/lib/facter/facts/rhel/lsbdistid.rb +16 -0
  78. data/lib/facter/facts/rhel/os/distro/codename.rb +2 -4
  79. data/lib/facter/facts/rhel/os/distro/description.rb +2 -4
  80. data/lib/facter/facts/rhel/os/distro/id.rb +2 -4
  81. data/lib/facter/facts/rhel/os/distro/release.rb +13 -12
  82. data/lib/facter/facts/rhel/os/release.rb +1 -8
  83. data/lib/facter/facts/slackware/os/release.rb +35 -0
  84. data/lib/facter/facts/sles/lsbdistcodename.rb +16 -0
  85. data/lib/facter/facts/sles/lsbdistdescription.rb +16 -0
  86. data/lib/facter/facts/sles/lsbdistid.rb +16 -0
  87. data/lib/facter/facts/sles/os/distro/codename.rb +3 -4
  88. data/lib/facter/facts/sles/os/distro/description.rb +2 -5
  89. data/lib/facter/facts/sles/os/distro/id.rb +6 -5
  90. data/lib/facter/facts/sles/os/distro/release.rb +17 -12
  91. data/lib/facter/facts/solaris/disks.rb +1 -1
  92. data/lib/facter/facts/solaris/ssh.rb +1 -1
  93. data/lib/facter/facts/solaris/sshalgorithmkey.rb +1 -1
  94. data/lib/facter/facts/solaris/sshfp_algorithm.rb +1 -1
  95. data/lib/facter/facts/ubuntu/lsbdistrelease.rb +2 -2
  96. data/lib/facter/facts/windows/az_metadata.rb +27 -0
  97. data/lib/facter/facts/windows/cloud/provider.rb +17 -0
  98. data/lib/facter/facts/windows/networking/fqdn.rb +1 -1
  99. data/lib/facter/framework/cli/cli.rb +6 -8
  100. data/lib/facter/framework/config/config_reader.rb +9 -0
  101. data/lib/facter/framework/config/fact_groups.rb +28 -2
  102. data/lib/facter/framework/core/cache_manager.rb +5 -1
  103. data/lib/facter/framework/core/fact_filter.rb +3 -3
  104. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +0 -4
  105. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +2 -1
  106. data/lib/facter/framework/core/fact_manager.rb +5 -3
  107. data/lib/facter/framework/core/options.rb +1 -2
  108. data/lib/facter/framework/core/options/option_store.rb +11 -5
  109. data/lib/facter/framework/detector/os_detector.rb +8 -0
  110. data/lib/facter/framework/logging/logger.rb +4 -4
  111. data/lib/facter/framework/parsers/query_parser.rb +13 -6
  112. data/lib/facter/resolvers/aio_agent_version.rb +1 -1
  113. data/lib/facter/resolvers/aix/{architecture_resolver.rb → architecture.rb} +1 -1
  114. data/lib/facter/resolvers/aix/disks.rb +1 -1
  115. data/lib/facter/resolvers/aix/ffi/ffi.rb +63 -0
  116. data/lib/facter/resolvers/aix/ffi/ffi_helper.rb +146 -20
  117. data/lib/facter/resolvers/aix/ffi/structs.rb +69 -0
  118. data/lib/facter/resolvers/aix/{filesystem_resolver.rb → filesystem.rb} +1 -1
  119. data/lib/facter/resolvers/aix/{hardware_resolver.rb → hardware.rb} +1 -1
  120. data/lib/facter/resolvers/aix/{load_averages_resolver.rb → load_averages.rb} +2 -2
  121. data/lib/facter/resolvers/aix/memory.rb +1 -1
  122. data/lib/facter/resolvers/aix/mountpoints.rb +1 -1
  123. data/lib/facter/resolvers/aix/{networking_resolver.rb → networking.rb} +9 -16
  124. data/lib/facter/resolvers/aix/nim.rb +1 -1
  125. data/lib/facter/resolvers/aix/os_level.rb +1 -1
  126. data/lib/facter/resolvers/aix/partitions.rb +1 -1
  127. data/lib/facter/resolvers/aix/processors.rb +1 -1
  128. data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
  129. data/lib/facter/resolvers/{augeas_resolver.rb → augeas.rb} +1 -1
  130. data/lib/facter/resolvers/az.rb +39 -0
  131. data/lib/facter/resolvers/base_resolver.rb +4 -4
  132. data/lib/facter/resolvers/bsd/processors.rb +1 -1
  133. data/lib/facter/resolvers/containers.rb +1 -1
  134. data/lib/facter/resolvers/debian_version.rb +1 -1
  135. data/lib/facter/resolvers/{disk_resolver.rb → disk.rb} +1 -1
  136. data/lib/facter/resolvers/{dmi_resolver.rb → dmi.rb} +1 -1
  137. data/lib/facter/resolvers/dmi_decode.rb +1 -1
  138. data/lib/facter/resolvers/ec2.rb +1 -1
  139. data/lib/facter/resolvers/{eos_release_resolver.rb → eos_release.rb} +1 -1
  140. data/lib/facter/resolvers/{facterversion_resolver.rb → facterversion.rb} +1 -1
  141. data/lib/facter/resolvers/{filesystems_resolver.rb → filesystems.rb} +1 -1
  142. data/lib/facter/resolvers/{fips_enabled_resolver.rb → fips_enabled.rb} +1 -1
  143. data/lib/facter/resolvers/freebsd/{dmi_resolver.rb → dmi.rb} +1 -1
  144. data/lib/facter/resolvers/freebsd/{freebsd_version_resolver.rb → freebsd_version.rb} +1 -1
  145. data/lib/facter/resolvers/freebsd/{geom_resolver.rb → geom.rb} +1 -1
  146. data/lib/facter/resolvers/freebsd/processors.rb +1 -1
  147. data/lib/facter/resolvers/freebsd/{swap_memory_resolver.rb → swap_memory.rb} +1 -1
  148. data/lib/facter/resolvers/freebsd/{system_memory_resolver.rb → system_memory.rb} +1 -1
  149. data/lib/facter/resolvers/freebsd/{virtual_resolver.rb → virtual.rb} +1 -1
  150. data/lib/facter/resolvers/gce.rb +1 -1
  151. data/lib/facter/resolvers/{hostname_resolver.rb → hostname.rb} +1 -1
  152. data/lib/facter/resolvers/{identity_resolver.rb → identity.rb} +1 -1
  153. data/lib/facter/resolvers/linux/docker_uptime.rb +1 -1
  154. data/lib/facter/resolvers/linux/hostname.rb +115 -0
  155. data/lib/facter/resolvers/linux/load_averages.rb +1 -1
  156. data/lib/facter/resolvers/linux/networking.rb +106 -0
  157. data/lib/facter/resolvers/load_averages.rb +1 -1
  158. data/lib/facter/resolvers/{lpar_resolver.rb → lpar.rb} +1 -1
  159. data/lib/facter/resolvers/{lsb_release_resolver.rb → lsb_release.rb} +1 -1
  160. data/lib/facter/resolvers/lspci.rb +1 -1
  161. data/lib/facter/resolvers/macosx/{dmi_resolver.rb → dmi.rb} +1 -1
  162. data/lib/facter/resolvers/macosx/{filesystems_resolver.rb → filesystems.rb} +1 -1
  163. data/lib/facter/resolvers/macosx/{load_averages_resolver.rb → load_averages.rb} +1 -1
  164. data/lib/facter/resolvers/macosx/{mountpoints_resolver.rb → mountpoints.rb} +1 -1
  165. data/lib/facter/resolvers/macosx/{processor_resolver.rb → processor.rb} +1 -1
  166. data/lib/facter/resolvers/macosx/{swap_memory_resolver.rb → swap_memory.rb} +1 -1
  167. data/lib/facter/resolvers/macosx/{system_memory_resolver.rb → system_memory.rb} +1 -1
  168. data/lib/facter/resolvers/macosx/{system_profiler_resolver.rb → system_profiler.rb} +1 -1
  169. data/lib/facter/resolvers/{memory_resolver.rb → memory.rb} +1 -1
  170. data/lib/facter/resolvers/{mountpoints_resolver.rb → mountpoints.rb} +1 -1
  171. data/lib/facter/resolvers/{networking_resolver.rb → networking.rb} +1 -1
  172. data/lib/facter/resolvers/open_vz.rb +1 -1
  173. data/lib/facter/resolvers/{os_release_resolver.rb → os_release.rb} +1 -1
  174. data/lib/facter/resolvers/partitions.rb +1 -1
  175. data/lib/facter/resolvers/{path_resolver.rb → path.rb} +1 -1
  176. data/lib/facter/resolvers/{processors_resolver.rb → processors.rb} +1 -1
  177. data/lib/facter/resolvers/redhat_release.rb +71 -0
  178. data/lib/facter/resolvers/release_from_first_line.rb +41 -0
  179. data/lib/facter/resolvers/{ruby_resolver.rb → ruby.rb} +1 -1
  180. data/lib/facter/resolvers/{selinux_resolver.rb → selinux.rb} +1 -1
  181. data/lib/facter/resolvers/solaris/disks.rb +1 -1
  182. data/lib/facter/resolvers/solaris/dmi.rb +1 -1
  183. data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
  184. data/lib/facter/resolvers/solaris/ffi/functions.rb +1 -1
  185. data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
  186. data/lib/facter/resolvers/solaris/ipaddress.rb +1 -1
  187. data/lib/facter/resolvers/solaris/ldom.rb +1 -1
  188. data/lib/facter/resolvers/solaris/memory.rb +1 -1
  189. data/lib/facter/resolvers/solaris/mountpoints.rb +1 -1
  190. data/lib/facter/resolvers/solaris/networking.rb +1 -1
  191. data/lib/facter/resolvers/solaris/os_release.rb +1 -1
  192. data/lib/facter/resolvers/solaris/processors.rb +1 -1
  193. data/lib/facter/resolvers/solaris/zone.rb +1 -1
  194. data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
  195. data/lib/facter/resolvers/specific_release_file.rb +35 -0
  196. data/lib/facter/resolvers/{ssh_resolver.rb → ssh.rb} +2 -2
  197. data/lib/facter/resolvers/{suse_release_resolver.rb → suse_release.rb} +1 -1
  198. data/lib/facter/resolvers/{sw_vers_resolver.rb → sw_vers.rb} +1 -1
  199. data/lib/facter/resolvers/{timezone_resolver.rb → timezone.rb} +1 -1
  200. data/lib/facter/resolvers/{uname_resolver.rb → uname.rb} +1 -1
  201. data/lib/facter/resolvers/{uptime_resolver.rb → uptime.rb} +1 -1
  202. data/lib/facter/resolvers/virt_what.rb +1 -1
  203. data/lib/facter/resolvers/vmware.rb +1 -1
  204. data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
  205. data/lib/facter/resolvers/windows/{dmi_bios_resolver.rb → dmi_bios.rb} +1 -1
  206. data/lib/facter/resolvers/windows/{dmi_computersystem_resolver.rb → dmi_computersystem.rb} +1 -1
  207. data/lib/facter/resolvers/windows/ffi/network_utils.rb +1 -2
  208. data/lib/facter/resolvers/windows/{fips_resolver.rb → fips.rb} +1 -1
  209. data/lib/facter/resolvers/windows/{hardware_architecture_resolver.rb → hardware_architecture.rb} +1 -1
  210. data/lib/facter/resolvers/windows/{identity_resolver.rb → identity.rb} +1 -1
  211. data/lib/facter/resolvers/windows/{kernel_resolver.rb → kernel.rb} +1 -1
  212. data/lib/facter/resolvers/windows/{memory_resolver.rb → memory.rb} +1 -1
  213. data/lib/facter/resolvers/windows/{netkvm_resolver.rb → netkvm.rb} +1 -1
  214. data/lib/facter/resolvers/windows/{networking_resolver.rb → networking.rb} +19 -2
  215. data/lib/facter/resolvers/windows/{processors_resolver.rb → processors.rb} +1 -1
  216. data/lib/facter/resolvers/windows/{product_release_resolver.rb → product_release.rb} +1 -1
  217. data/lib/facter/resolvers/windows/ssh.rb +1 -1
  218. data/lib/facter/resolvers/windows/{system32_resolver.rb → system32.rb} +1 -1
  219. data/lib/facter/resolvers/windows/{uptime_resolver.rb → uptime.rb} +1 -1
  220. data/lib/facter/resolvers/windows/{virtualization_resolver.rb → virtualization.rb} +1 -1
  221. data/lib/facter/resolvers/windows/{win_os_description_resolver.rb → win_os_description.rb} +1 -1
  222. data/lib/facter/resolvers/{wpar_resolver.rb → wpar.rb} +1 -1
  223. data/lib/facter/resolvers/xen.rb +1 -1
  224. data/lib/facter/resolvers/zfs.rb +1 -1
  225. data/lib/facter/resolvers/zpool.rb +1 -1
  226. data/lib/facter/templates/man.erb +8 -0
  227. data/lib/facter/util/facts/facts_utils.rb +33 -0
  228. data/lib/facter/util/facts/unit_converter.rb +11 -4
  229. data/lib/facter/util/linux/dhcp.rb +86 -0
  230. data/lib/facter/util/linux/routing_table.rb +60 -0
  231. data/lib/facter/util/linux/socket_parser.rb +114 -0
  232. data/lib/facter/util/resolvers/ffi/hostname.rb +70 -0
  233. data/lib/facter/util/utils.rb +0 -4
  234. data/lib/facter/version.rb +1 -1
  235. metadata +124 -83
  236. data/lib/facter/facts/linux/cloud.rb +0 -15
  237. data/lib/facter/resolvers/cloud.rb +0 -39
  238. data/lib/facter/resolvers/networking_linux_resolver.rb +0 -258
  239. data/lib/facter/resolvers/redhat_release_resolver.rb +0 -55
  240. data/lib/facter/util/resolvers/networking.rb +0 -90
@@ -6,13 +6,12 @@ module Facts
6
6
  module Distro
7
7
  class Codename
8
8
  FACT_NAME = 'os.distro.codename'
9
- ALIASES = 'lsbdistcodename'
10
9
 
11
10
  def call_the_resolver
12
- fact_value = Facter::Resolvers::LsbRelease.resolve(:codename)
11
+ fact_value = Facter::Resolvers::OsRelease.resolve(:version_codename)
12
+ fact_value = 'n/a' if !fact_value || fact_value.empty?
13
13
 
14
- [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
14
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
16
15
  end
17
16
  end
18
17
  end
@@ -6,13 +6,10 @@ module Facts
6
6
  module Distro
7
7
  class Description
8
8
  FACT_NAME = 'os.distro.description'
9
- ALIASES = 'lsbdistdescription'
10
9
 
11
10
  def call_the_resolver
12
- fact_value = Facter::Resolvers::LsbRelease.resolve(:description)
13
-
14
- [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
11
+ fact_value = Facter::Resolvers::OsRelease.resolve(:pretty_name)
12
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
16
13
  end
17
14
  end
18
15
  end
@@ -6,13 +6,14 @@ module Facts
6
6
  module Distro
7
7
  class Id
8
8
  FACT_NAME = 'os.distro.id'
9
- ALIASES = 'lsbdistid'
10
9
 
11
10
  def call_the_resolver
12
- fact_value = Facter::Resolvers::LsbRelease.resolve(:distributor_id)
13
-
14
- [Facter::ResolvedFact.new(FACT_NAME, fact_value),
15
- Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
11
+ fact_value = if Facter::Resolvers::OsRelease.resolve(:version_id).start_with?('12')
12
+ 'SUSE LINUX'
13
+ else
14
+ 'SUSE'
15
+ end
16
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
16
17
  end
17
18
  end
18
19
  end
@@ -9,20 +9,25 @@ module Facts
9
9
  ALIASES = %w[lsbdistrelease lsbmajdistrelease lsbminordistrelease].freeze
10
10
 
11
11
  def call_the_resolver
12
- fact_value = Facter::Resolvers::LsbRelease.resolve(:release)
13
- return Facter::ResolvedFact.new(FACT_NAME, nil) unless fact_value
12
+ version = Facter::Resolvers::OsRelease.resolve(:version_id)
13
+ fact_value = build_fact_list(version)
14
14
 
15
- versions = fact_value.split('.')
16
- release = {
17
- 'full' => fact_value,
18
- 'major' => versions[0],
19
- 'minor' => versions[1]
20
- }
15
+ [Facter::ResolvedFact.new(FACT_NAME, fact_value),
16
+ Facter::ResolvedFact.new(ALIASES[0], fact_value[:full], :legacy),
17
+ Facter::ResolvedFact.new(ALIASES[1], fact_value[:major], :legacy),
18
+ Facter::ResolvedFact.new(ALIASES[2], fact_value[:minor], :legacy)]
19
+ end
21
20
 
22
- [Facter::ResolvedFact.new(FACT_NAME, release),
23
- Facter::ResolvedFact.new(ALIASES[0], fact_value, :legacy),
24
- Facter::ResolvedFact.new(ALIASES[1], versions[0], :legacy),
25
- Facter::ResolvedFact.new(ALIASES[2], versions[1], :legacy)]
21
+ def build_fact_list(version)
22
+ if version.include?('.')
23
+ {
24
+ full: version,
25
+ major: version.split('.').first,
26
+ minor: version.split('.').last
27
+ }
28
+ else
29
+ { full: version, major: version, minor: nil }
30
+ end
26
31
  end
27
32
  end
28
33
  end
@@ -4,7 +4,7 @@ module Facts
4
4
  module Solaris
5
5
  class Disks
6
6
  FACT_NAME = 'disks'
7
- ALIASES = %w[blockdevices blockdevice_.*_size blockdevice_.*_vendor'].freeze
7
+ ALIASES = %w[blockdevices blockdevice_.*_size blockdevice_.*_vendor].freeze
8
8
 
9
9
  def call_the_resolver
10
10
  facts = []
@@ -16,7 +16,7 @@ module Facts
16
16
  end
17
17
 
18
18
  def resolver_data
19
- Facter::Resolvers::SshResolver.resolve(:ssh)
19
+ Facter::Resolvers::Ssh.resolve(:ssh)
20
20
  end
21
21
 
22
22
  def create_ssh_fact(ssh)
@@ -8,7 +8,7 @@ module Facts
8
8
 
9
9
  def call_the_resolver
10
10
  facts = []
11
- result = Facter::Resolvers::SshResolver.resolve(:ssh)
11
+ result = Facter::Resolvers::Ssh.resolve(:ssh)
12
12
  result.each { |ssh| facts << Facter::ResolvedFact.new("ssh#{ssh.name.to_sym}key", ssh.key, :legacy) }
13
13
  facts
14
14
  end
@@ -8,7 +8,7 @@ module Facts
8
8
 
9
9
  def call_the_resolver
10
10
  facts = []
11
- result = Facter::Resolvers::SshResolver.resolve(:ssh)
11
+ result = Facter::Resolvers::Ssh.resolve(:ssh)
12
12
  result.each do |ssh|
13
13
  facts << Facter::ResolvedFact.new("sshfp_#{ssh.name.to_sym}",
14
14
  "#{ssh.fingerprint.sha1}\n#{ssh.fingerprint.sha256}", :legacy)
@@ -15,8 +15,8 @@ module Facts
15
15
  version = fact_value.split('.')
16
16
 
17
17
  [Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy),
18
- Facter::ResolvedFact.new(ALIASES[0], version[0], :legacy),
19
- Facter::ResolvedFact.new(ALIASES[1], version[1], :legacy)]
18
+ Facter::ResolvedFact.new(ALIASES[0], "#{version[0]}.#{version[1]}", :legacy),
19
+ Facter::ResolvedFact.new(ALIASES[1], version[2], :legacy)]
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Windows
5
+ class AzMetadata
6
+ FACT_NAME = 'az_metadata'
7
+
8
+ def initialize
9
+ @virtual = Facter::Util::Facts::VirtualDetector.new
10
+ end
11
+
12
+ def call_the_resolver
13
+ return Facter::ResolvedFact.new(FACT_NAME, nil) unless azure_hypervisor?
14
+
15
+ fact_value = Facter::Resolvers::Az.resolve(:metadata)
16
+
17
+ Facter::ResolvedFact.new(FACT_NAME, fact_value&.empty? ? nil : fact_value)
18
+ end
19
+
20
+ private
21
+
22
+ def azure_hypervisor?
23
+ @virtual.platform == 'hyperv'
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Windows
5
+ module Cloud
6
+ class Provider
7
+ FACT_NAME = 'cloud.provider'
8
+
9
+ def call_the_resolver
10
+ az_metadata = Facter::Resolvers::Az.resolve(:metadata)
11
+
12
+ Facter::ResolvedFact.new(FACT_NAME, az_metadata&.empty? ? nil : 'azure')
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -12,7 +12,7 @@ module Facts
12
12
  hostname = Facter::Resolvers::Hostname.resolve(:hostname)
13
13
  return Facter::ResolvedFact.new(FACT_NAME, nil) if !hostname || hostname.empty?
14
14
 
15
- fact_value = [hostname, domain].compact.join('.')
15
+ fact_value = domain && !domain.empty? ? [hostname, domain].compact.join('.') : hostname
16
16
 
17
17
  [Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
18
18
  end
@@ -134,9 +134,9 @@ module Facter
134
134
 
135
135
  desc '--list-block-groups', 'List block groups'
136
136
  map ['--list-block-groups'] => :list_block_groups
137
- def list_block_groups(*args)
137
+ def list_block_groups
138
138
  options = @options.map { |(k, v)| [k.to_sym, v] }.to_h
139
- Facter::Options.init_from_cli(options, args)
139
+ Facter::Options.init_from_cli(options)
140
140
 
141
141
  block_groups = Facter::FactGroups.new.groups.to_yaml.lines[1..-1].join
142
142
  block_groups.gsub!(/:\s*\n/, "\n")
@@ -146,9 +146,9 @@ module Facter
146
146
 
147
147
  desc '--list-cache-groups', 'List cache groups'
148
148
  map ['--list-cache-groups'] => :list_cache_groups
149
- def list_cache_groups(*args)
149
+ def list_cache_groups
150
150
  options = @options.map { |(k, v)| [k.to_sym, v] }.to_h
151
- Facter::Options.init_from_cli(options, args)
151
+ Facter::Options.init_from_cli(options)
152
152
 
153
153
  cache_groups = Facter::FactGroups.new.groups.to_yaml.lines[1..-1].join
154
154
  cache_groups.gsub!(/:\s*\n/, "\n")
@@ -156,12 +156,10 @@ module Facter
156
156
  puts cache_groups
157
157
  end
158
158
 
159
- desc '--puppet, -p', '(NOT SUPPORTED)Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
159
+ desc '--puppet, -p', 'Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
160
160
  map ['--puppet', '-p'] => :puppet
161
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!')
162
+ Facter.puppet_facts
165
163
 
166
164
  output, status = Facter.to_user_output(@options, *args)
167
165
  puts output
@@ -33,11 +33,20 @@ module Facter
33
33
 
34
34
  def refresh_config(config_path)
35
35
  @conf = File.readable?(config_path) ? Hocon.load(config_path) : {}
36
+ rescue StandardError => e
37
+ log.warn("Facter failed to read config file #{config_path} with the following error: #{e.message}")
38
+ @conf = {}
36
39
  end
37
40
 
38
41
  private
39
42
 
43
+ def log
44
+ @log ||= Log.new(self)
45
+ end
46
+
40
47
  def default_path
48
+ return '' if RUBY_PLATFORM == 'java'
49
+
41
50
  os = OsDetector.instance.identifier
42
51
 
43
52
  windows_path = File.join('C:', 'ProgramData', 'PuppetLabs', 'facter', 'etc', 'facter.conf')
@@ -7,7 +7,15 @@ module Facter
7
7
  attr_accessor :groups_ttls
8
8
  attr_reader :groups, :block_list, :facts_ttls
9
9
 
10
- STRING_TO_SECONDS = { 'seconds' => 1, 'minutes' => 60, 'hours' => 3600, 'days' => 3600 * 24 }.freeze
10
+ STRING_TO_SECONDS = { 'ns' => 1.fdiv(1_000_000_000), 'nanos' => 1.fdiv(1_000_000_000),
11
+ 'nanoseconds' => 1.fdiv(1_000_000_000),
12
+ 'us' => 1.fdiv(1_000_000), 'micros' => 1.fdiv(1_000_000), 'microseconds' => 1.fdiv(1_000_000),
13
+ '' => 1.fdiv(1000), 'ms' => 1.fdiv(1000), 'milis' => 1.fdiv(1000),
14
+ 'milliseconds' => 1.fdiv(1000),
15
+ 's' => 1, 'seconds' => 1,
16
+ 'm' => 60, 'minutes' => 60,
17
+ 'h' => 3600, 'hours' => 3600,
18
+ 'd' => 3600 * 24, 'days' => 3600 * 24 }.freeze
11
19
 
12
20
  def initialize
13
21
  @groups = Facter::Config::FACT_GROUPS.dup
@@ -24,6 +32,9 @@ module Facter
24
32
  fact_list = []
25
33
 
26
34
  @block_list.each do |group_name|
35
+ # legacy is a special group and does not need to be broken into facts
36
+ next if group_name == 'legacy'
37
+
27
38
  facts_for_block = @groups[group_name]
28
39
 
29
40
  fact_list += facts_for_block || [group_name]
@@ -100,7 +111,22 @@ module Facter
100
111
 
101
112
  def ttls_to_seconds(ttls)
102
113
  duration, unit = ttls.split(' ', 2)
103
- duration.to_i * STRING_TO_SECONDS[unit]
114
+ unit = '' if duration && !unit
115
+ unit = append_s(unit)
116
+ seconds = STRING_TO_SECONDS[unit]
117
+ if seconds
118
+ (duration.to_i * seconds).to_i
119
+ else
120
+ log = Log.new(self)
121
+ log.error("Could not parse time unit #{unit} (try #{STRING_TO_SECONDS.keys.reject(&:empty?).join(', ')})")
122
+ nil
123
+ end
124
+ end
125
+
126
+ def append_s(unit)
127
+ return unit + 's' if unit.length > 2 && unit[-1] != 's'
128
+
129
+ unit
104
130
  end
105
131
  end
106
132
  end
@@ -209,7 +209,11 @@ cache_format_version is incorrect!")
209
209
  def delete_cache(group_name)
210
210
  cache_file_name = File.join(@cache_dir, group_name)
211
211
 
212
- File.delete(cache_file_name) if File.readable?(cache_file_name)
212
+ begin
213
+ File.delete(cache_file_name) if File.readable?(cache_file_name)
214
+ rescue Errno::EACCES => e
215
+ @log.warn("Could not delete cache: #{e.message}")
216
+ end
213
217
  end
214
218
  end
215
219
  end
@@ -5,8 +5,8 @@ module Facter
5
5
  # e.g. os.release.major is the user query, os.release is the fact
6
6
  # and major is the filter criteria inside tha fact
7
7
  class FactFilter
8
- def filter_facts!(searched_facts)
9
- filter_legacy_facts!(searched_facts)
8
+ def filter_facts!(searched_facts, user_query)
9
+ filter_legacy_facts!(searched_facts) if user_query.empty?
10
10
  filter_blocked_legacy_facts!(searched_facts)
11
11
 
12
12
  searched_facts.each do |fact|
@@ -32,7 +32,7 @@ module Facter
32
32
  end
33
33
 
34
34
  def filter_legacy_facts!(resolved_facts)
35
- return unless !Options[:show_legacy] && Options[:user_query].empty?
35
+ return if Options[:show_legacy]
36
36
 
37
37
  resolved_facts.reject!(&:legacy?)
38
38
  end
@@ -10,10 +10,6 @@ module Facter
10
10
  @external_facts = load_external_facts
11
11
  end
12
12
 
13
- def all_facts
14
- @all_facts ||= Utils.deep_copy(custom_facts + external_facts)
15
- end
16
-
17
13
  private
18
14
 
19
15
  def load_custom_facts
@@ -48,7 +48,6 @@ module Facter
48
48
  def load_internal_facts(options)
49
49
  @log.debug('Loading internal facts')
50
50
  internal_facts = []
51
-
52
51
  if options[:user_query] || options[:show_legacy]
53
52
  # if we have a user query, then we must search in core facts and legacy facts
54
53
  @log.debug('Loading all internal facts')
@@ -83,6 +82,8 @@ module Facter
83
82
  def block_facts(facts, options)
84
83
  blocked_facts = options[:blocked_facts] || []
85
84
 
85
+ facts.reject! { |fact| fact.type == :legacy } if options[:block_list]&.include?('legacy')
86
+
86
87
  reject_list_core, reject_list_legacy = construct_reject_lists(blocked_facts, facts)
87
88
 
88
89
  facts = facts.reject do |fact|
@@ -29,7 +29,7 @@ module Facter
29
29
  resolved_facts = resolved_facts.concat(cached_facts)
30
30
  cache_manager.cache_facts(resolved_facts)
31
31
 
32
- FactFilter.new.filter_facts!(resolved_facts)
32
+ FactFilter.new.filter_facts!(resolved_facts, user_query)
33
33
 
34
34
  log_resolved_facts(resolved_facts)
35
35
  resolved_facts
@@ -40,7 +40,7 @@ module Facter
40
40
 
41
41
  searched_facts = QueryParser.parse(user_query, loaded_facts_hash)
42
42
  resolved_facts = @internal_fact_mgr.resolve_facts(searched_facts)
43
- FactFilter.new.filter_facts!(resolved_facts)
43
+ FactFilter.new.filter_facts!(resolved_facts, user_query)
44
44
 
45
45
  resolved_facts
46
46
  end
@@ -48,7 +48,9 @@ module Facter
48
48
  private
49
49
 
50
50
  def parse_user_query(user_query)
51
- loaded_facts = @fact_loader.load(Options.get)
51
+ options = Options.get
52
+ options[:user_query] = user_query
53
+ loaded_facts = @fact_loader.load(options)
52
54
 
53
55
  QueryParser.parse(user_query, loaded_facts)
54
56
  end
@@ -41,10 +41,9 @@ module Facter
41
41
  store(ConfigFileOptions.get)
42
42
  end
43
43
 
44
- def init_from_cli(cli_options = {}, user_query = nil)
44
+ def init_from_cli(cli_options = {})
45
45
  Facter::OptionStore.cli = true
46
46
  Facter::OptionStore.show_legacy = false
47
- Facter::OptionStore.user_query = user_query
48
47
  Facter::OptionStore.trace = cli_options[:trace]
49
48
  OptionStore.set(:config, cli_options[:config])
50
49
  ConfigFileOptions.init(cli_options[:config])
@@ -13,7 +13,6 @@ module Facter
13
13
  @ruby = true
14
14
  @external_facts = true
15
15
  @config = nil
16
- @user_query = []
17
16
  @strict = false
18
17
  @json = false
19
18
  @cache = true
@@ -34,15 +33,17 @@ module Facter
34
33
  @timing = false
35
34
  @external_dir = []
36
35
  @custom_dir = []
36
+ @hocon = false
37
+ @allow_external_loggers = true
37
38
 
38
39
  class << self
39
40
  attr_reader :debug, :verbose, :log_level, :show_legacy,
40
41
  :custom_facts, :blocked_facts, :ruby, :external_facts
41
42
 
42
- attr_accessor :config, :user_query, :strict, :json,
43
+ attr_accessor :config, :strict, :json,
43
44
  :cache, :yaml, :puppet, :ttls, :block, :cli, :config_file_custom_dir,
44
45
  :config_file_external_dir, :default_external_dir, :fact_groups,
45
- :block_list, :color, :trace, :sequential, :timing
46
+ :block_list, :color, :trace, :sequential, :timing, :hocon, :allow_external_loggers
46
47
 
47
48
  attr_writer :external_dir
48
49
 
@@ -169,15 +170,14 @@ module Facter
169
170
  @log_level = :warn
170
171
  @show_legacy = true
171
172
  @ruby = true
172
- @user_query = []
173
173
  @json = false
174
+ @hocon = false
174
175
  @cache = true
175
176
  @yaml = false
176
177
  @puppet = false
177
178
  @ttls = []
178
179
  @block = true
179
180
  @cli = nil
180
- @custom_facts = true
181
181
  reset_config
182
182
  end
183
183
 
@@ -196,6 +196,12 @@ module Facter
196
196
  @ttls = []
197
197
  @trace = false
198
198
  @timing = false
199
+ @allow_external_loggers = true
200
+ reset_facts
201
+ end
202
+
203
+ def reset_facts
204
+ @custom_facts = true
199
205
  @external_dir = []
200
206
  @custom_dir = []
201
207
  end