facter 4.0.30 → 4.0.35

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 (254) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facter.rb +3 -4
  3. data/lib/facter/custom_facts/util/directory_loader.rb +10 -0
  4. data/lib/facter/custom_facts/util/parser.rb +3 -3
  5. data/lib/facter/facts/aix/disks.rb +17 -0
  6. data/lib/facter/facts/aix/memory/swap/available.rb +22 -0
  7. data/lib/facter/facts/aix/memory/swap/available_bytes.rb +22 -0
  8. data/lib/facter/facts/aix/memory/swap/capacity.rb +20 -0
  9. data/lib/facter/facts/aix/memory/swap/total.rb +22 -0
  10. data/lib/facter/facts/aix/memory/swap/total_bytes.rb +22 -0
  11. data/lib/facter/facts/aix/memory/swap/used.rb +21 -0
  12. data/lib/facter/facts/aix/memory/swap/used_bytes.rb +19 -0
  13. data/lib/facter/facts/aix/memory/system/available.rb +22 -0
  14. data/lib/facter/facts/aix/memory/system/available_bytes.rb +22 -0
  15. data/lib/facter/facts/aix/memory/system/capacity.rb +20 -0
  16. data/lib/facter/facts/aix/memory/system/total.rb +22 -0
  17. data/lib/facter/facts/aix/memory/system/total_bytes.rb +22 -0
  18. data/lib/facter/facts/aix/memory/system/used.rb +21 -0
  19. data/lib/facter/facts/aix/memory/system/used_bytes.rb +19 -0
  20. data/lib/facter/facts/aix/ssh.rb +3 -1
  21. data/lib/facter/facts/bsd/load_averages.rb +1 -1
  22. data/lib/facter/facts/freebsd/augeas/version.rb +19 -0
  23. data/lib/facter/facts/freebsd/dmi/bios/release_date.rb +19 -0
  24. data/lib/facter/facts/freebsd/dmi/bios/vendor.rb +19 -0
  25. data/lib/facter/facts/freebsd/dmi/bios/version.rb +19 -0
  26. data/lib/facter/facts/freebsd/dmi/manufacturer.rb +17 -0
  27. data/lib/facter/facts/freebsd/dmi/product/name.rb +19 -0
  28. data/lib/facter/facts/freebsd/dmi/product/serial_number.rb +19 -0
  29. data/lib/facter/facts/freebsd/dmi/product/uuid.rb +19 -0
  30. data/lib/facter/facts/freebsd/facterversion.rb +14 -0
  31. data/lib/facter/facts/freebsd/identity/gid.rb +16 -0
  32. data/lib/facter/facts/{solaris/solaris_zones/current.rb → freebsd/identity/group.rb} +6 -6
  33. data/lib/facter/facts/freebsd/identity/privileged.rb +16 -0
  34. data/lib/facter/facts/freebsd/identity/uid.rb +16 -0
  35. data/lib/facter/facts/freebsd/identity/user.rb +17 -0
  36. data/lib/facter/facts/freebsd/kernel.rb +14 -0
  37. data/lib/facter/facts/freebsd/kernelrelease.rb +14 -0
  38. data/lib/facter/facts/freebsd/memory/swap/available.rb +21 -0
  39. data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +20 -0
  40. data/lib/facter/facts/freebsd/memory/swap/capacity.rb +18 -0
  41. data/lib/facter/facts/freebsd/memory/swap/encrypted.rb +19 -0
  42. data/lib/facter/facts/freebsd/memory/swap/total.rb +21 -0
  43. data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +20 -0
  44. data/lib/facter/facts/freebsd/memory/swap/used.rb +20 -0
  45. data/lib/facter/facts/freebsd/memory/swap/used_bytes.rb +18 -0
  46. data/lib/facter/facts/freebsd/memory/system/available.rb +21 -0
  47. data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +20 -0
  48. data/lib/facter/facts/freebsd/memory/system/capacity.rb +18 -0
  49. data/lib/facter/facts/freebsd/memory/system/total.rb +21 -0
  50. data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +20 -0
  51. data/lib/facter/facts/freebsd/memory/system/used.rb +20 -0
  52. data/lib/facter/facts/freebsd/memory/system/used_bytes.rb +18 -0
  53. data/lib/facter/facts/freebsd/mountpoints.rb +21 -0
  54. data/lib/facter/facts/freebsd/netmask6_interfaces.rb +20 -0
  55. data/lib/facter/facts/freebsd/netmask_interfaces.rb +20 -0
  56. data/lib/facter/facts/freebsd/network6_interfaces.rb +20 -0
  57. data/lib/facter/facts/freebsd/network_interfaces.rb +20 -0
  58. data/lib/facter/facts/freebsd/networking/dhcp.rb +17 -0
  59. data/lib/facter/facts/freebsd/networking/domain.rb +18 -0
  60. data/lib/facter/facts/freebsd/networking/fqdn.rb +18 -0
  61. data/lib/facter/facts/freebsd/networking/hostname.rb +18 -0
  62. data/lib/facter/facts/freebsd/networking/interfaces.rb +17 -0
  63. data/lib/facter/facts/freebsd/networking/ip.rb +18 -0
  64. data/lib/facter/facts/freebsd/networking/ip6.rb +18 -0
  65. data/lib/facter/facts/freebsd/networking/mac.rb +18 -0
  66. data/lib/facter/facts/freebsd/networking/mtu.rb +17 -0
  67. data/lib/facter/facts/freebsd/networking/netmask.rb +18 -0
  68. data/lib/facter/facts/freebsd/networking/netmask6.rb +18 -0
  69. data/lib/facter/facts/freebsd/networking/network.rb +18 -0
  70. data/lib/facter/facts/freebsd/networking/network6.rb +18 -0
  71. data/lib/facter/facts/freebsd/networking/primary.rb +17 -0
  72. data/lib/facter/facts/freebsd/networking/scope6.rb +17 -0
  73. data/lib/facter/facts/freebsd/os/architecture.rb +18 -0
  74. data/lib/facter/facts/freebsd/os/hardware.rb +18 -0
  75. data/lib/facter/facts/freebsd/os/name.rb +18 -0
  76. data/lib/facter/facts/{bsd/bsd_example_fact.rb → freebsd/path.rb} +5 -4
  77. data/lib/facter/facts/freebsd/processors/isa.rb +17 -0
  78. data/lib/facter/facts/freebsd/puppet_version.rb +15 -0
  79. data/lib/facter/facts/freebsd/ruby/platform.rb +18 -0
  80. data/lib/facter/facts/freebsd/ruby/sitedir.rb +18 -0
  81. data/lib/facter/facts/freebsd/ruby/version.rb +18 -0
  82. data/lib/facter/facts/freebsd/ssh.rb +26 -0
  83. data/lib/facter/facts/freebsd/system_uptime/days.rb +18 -0
  84. data/lib/facter/facts/freebsd/system_uptime/hours.rb +18 -0
  85. data/lib/facter/facts/freebsd/system_uptime/seconds.rb +18 -0
  86. data/lib/facter/facts/freebsd/system_uptime/uptime.rb +18 -0
  87. data/lib/facter/facts/freebsd/timezone.rb +15 -0
  88. data/lib/facter/facts/freebsd/zfs_featurenumbers.rb +14 -0
  89. data/lib/facter/facts/freebsd/zfs_version.rb +14 -0
  90. data/lib/facter/facts/freebsd/zpool_featureflags.rb +14 -0
  91. data/lib/facter/facts/freebsd/zpool_featurenumbers.rb +14 -0
  92. data/lib/facter/facts/freebsd/zpool_version.rb +14 -0
  93. data/lib/facter/facts/linux/hypervisors/vmware.rb +2 -1
  94. data/lib/facter/facts/linux/mountpoints.rb +1 -1
  95. data/lib/facter/facts/linux/partitions.rb +1 -1
  96. data/lib/facter/facts/linux/ssh.rb +19 -9
  97. data/lib/facter/facts/linux/system_uptime/days.rb +7 -1
  98. data/lib/facter/facts/linux/system_uptime/hours.rb +7 -1
  99. data/lib/facter/facts/linux/system_uptime/seconds.rb +7 -1
  100. data/lib/facter/facts/linux/system_uptime/uptime.rb +7 -1
  101. data/lib/facter/facts/linux/virtual.rb +17 -0
  102. data/lib/facter/facts/macosx/dhcp_servers.rb +2 -2
  103. data/lib/facter/facts/macosx/interfaces.rb +1 -1
  104. data/lib/facter/facts/macosx/ipaddress6_interfaces.rb +1 -1
  105. data/lib/facter/facts/macosx/ipaddress_interfaces.rb +1 -1
  106. data/lib/facter/facts/macosx/macaddress_interfaces.rb +1 -1
  107. data/lib/facter/facts/macosx/mtu_interfaces.rb +1 -1
  108. data/lib/facter/facts/macosx/netmask6_interfaces.rb +1 -1
  109. data/lib/facter/facts/macosx/netmask_interfaces.rb +1 -1
  110. data/lib/facter/facts/macosx/network6_interfaces.rb +1 -1
  111. data/lib/facter/facts/macosx/network_interfaces.rb +1 -1
  112. data/lib/facter/facts/macosx/networking/dhcp.rb +1 -1
  113. data/lib/facter/facts/macosx/networking/interfaces.rb +1 -1
  114. data/lib/facter/facts/macosx/networking/ip.rb +1 -1
  115. data/lib/facter/facts/macosx/networking/ip6.rb +1 -1
  116. data/lib/facter/facts/macosx/networking/mac.rb +1 -1
  117. data/lib/facter/facts/macosx/networking/mtu.rb +1 -1
  118. data/lib/facter/facts/macosx/networking/netmask.rb +1 -1
  119. data/lib/facter/facts/macosx/networking/netmask6.rb +1 -1
  120. data/lib/facter/facts/macosx/networking/network.rb +1 -1
  121. data/lib/facter/facts/macosx/networking/network6.rb +1 -1
  122. data/lib/facter/facts/macosx/networking/primary.rb +1 -1
  123. data/lib/facter/facts/macosx/networking/scope6.rb +1 -1
  124. data/lib/facter/facts/macosx/scope6_interfaces.rb +2 -2
  125. data/lib/facter/facts/macosx/ssh.rb +19 -11
  126. data/lib/facter/facts/macosx/system_profiler/hardware_uuid.rb +1 -1
  127. data/lib/facter/facts/macosx/system_profiler/l2_cache_per_core.rb +1 -1
  128. data/lib/facter/facts/macosx/system_profiler/memory.rb +1 -1
  129. data/lib/facter/facts/macosx/system_profiler/processor_name.rb +1 -1
  130. data/lib/facter/facts/macosx/system_profiler/processors.rb +1 -1
  131. data/lib/facter/facts/macosx/virtual.rb +1 -1
  132. data/lib/facter/facts/solaris/current_zone.rb +16 -0
  133. data/lib/facter/facts/solaris/disks.rb +14 -0
  134. data/lib/facter/facts/solaris/dmi/bios/release_date.rb +24 -0
  135. data/lib/facter/facts/solaris/dmi/bios/vendor.rb +24 -0
  136. data/lib/facter/facts/solaris/dmi/bios/version.rb +24 -0
  137. data/lib/facter/facts/solaris/dmi/chassis/asset_tag.rb +24 -0
  138. data/lib/facter/facts/solaris/dmi/chassis/type.rb +24 -0
  139. data/lib/facter/facts/solaris/dmi/manufacturer.rb +25 -0
  140. data/lib/facter/facts/solaris/dmi/product/name.rb +27 -0
  141. data/lib/facter/facts/solaris/dmi/product/serial_number.rb +27 -0
  142. data/lib/facter/facts/solaris/dmi/product/uuid.rb +24 -0
  143. data/lib/facter/facts/solaris/load_averages.rb +14 -0
  144. data/lib/facter/facts/solaris/memory/swap/available.rb +22 -0
  145. data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +22 -0
  146. data/lib/facter/facts/solaris/memory/swap/capacity.rb +20 -0
  147. data/lib/facter/facts/solaris/memory/swap/total.rb +22 -0
  148. data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +22 -0
  149. data/lib/facter/facts/solaris/memory/swap/used.rb +21 -0
  150. data/lib/facter/facts/solaris/memory/swap/used_bytes.rb +19 -0
  151. data/lib/facter/facts/solaris/memory/system/available.rb +22 -0
  152. data/lib/facter/facts/solaris/memory/system/available_bytes.rb +22 -0
  153. data/lib/facter/facts/solaris/memory/system/capacity.rb +20 -0
  154. data/lib/facter/facts/solaris/memory/system/total.rb +22 -0
  155. data/lib/facter/facts/solaris/memory/system/total_bytes.rb +22 -0
  156. data/lib/facter/facts/solaris/memory/system/used.rb +21 -0
  157. data/lib/facter/facts/solaris/memory/system/used_bytes.rb +19 -0
  158. data/lib/facter/facts/solaris/mountpoints.rb +1 -1
  159. data/lib/facter/facts/solaris/os/release.rb +3 -3
  160. data/lib/facter/facts/solaris/ssh.rb +19 -9
  161. data/lib/facter/facts/solaris/zfs_featurenumbers.rb +1 -1
  162. data/lib/facter/facts/solaris/zfs_version.rb +1 -1
  163. data/lib/facter/facts/solaris/zones.rb +60 -0
  164. data/lib/facter/facts/solaris/zpool_featureflags.rb +1 -1
  165. data/lib/facter/facts/solaris/zpool_featurenumbers.rb +1 -1
  166. data/lib/facter/facts/solaris/zpool_version.rb +1 -1
  167. data/lib/facter/facts/windows/dhcp_servers.rb +2 -2
  168. data/lib/facter/facts/windows/interfaces.rb +1 -1
  169. data/lib/facter/facts/windows/ipaddress6_interfaces.rb +1 -1
  170. data/lib/facter/facts/windows/ipaddress_interfaces.rb +1 -1
  171. data/lib/facter/facts/windows/macaddress_interfaces.rb +1 -1
  172. data/lib/facter/facts/windows/mtu_interfaces.rb +1 -1
  173. data/lib/facter/facts/windows/netmask6_interfaces.rb +1 -1
  174. data/lib/facter/facts/windows/netmask_interfaces.rb +1 -1
  175. data/lib/facter/facts/windows/network6_interfaces.rb +1 -1
  176. data/lib/facter/facts/windows/network_interfaces.rb +1 -1
  177. data/lib/facter/facts/windows/networking/dhcp.rb +1 -1
  178. data/lib/facter/facts/windows/networking/domain.rb +1 -1
  179. data/lib/facter/facts/windows/networking/fqdn.rb +1 -1
  180. data/lib/facter/facts/windows/networking/interfaces.rb +1 -1
  181. data/lib/facter/facts/windows/networking/ip.rb +1 -1
  182. data/lib/facter/facts/windows/networking/ip6.rb +1 -1
  183. data/lib/facter/facts/windows/networking/mac.rb +1 -1
  184. data/lib/facter/facts/windows/networking/mtu.rb +1 -1
  185. data/lib/facter/facts/windows/networking/netmask.rb +1 -1
  186. data/lib/facter/facts/windows/networking/netmask6.rb +1 -1
  187. data/lib/facter/facts/windows/networking/network.rb +1 -1
  188. data/lib/facter/facts/windows/networking/network6.rb +1 -1
  189. data/lib/facter/facts/windows/networking/primary.rb +1 -1
  190. data/lib/facter/facts/windows/networking/scope6.rb +1 -1
  191. data/lib/facter/facts/windows/scope6_interfaces.rb +1 -1
  192. data/lib/facter/framework/cli/cli.rb +35 -6
  193. data/lib/facter/framework/config/fact_groups.rb +13 -0
  194. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +1 -1
  195. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +2 -0
  196. data/lib/facter/framework/core/options.rb +1 -0
  197. data/lib/facter/framework/core/options/option_store.rb +3 -6
  198. data/lib/facter/framework/detector/os_detector.rb +5 -1
  199. data/lib/facter/framework/logging/logger.rb +13 -5
  200. data/lib/facter/os_hierarchy.json +6 -7
  201. data/lib/facter/resolvers/aix/disks.rb +63 -0
  202. data/lib/facter/resolvers/aix/memory.rb +65 -0
  203. data/lib/facter/resolvers/aix/partitions.rb +9 -20
  204. data/lib/facter/resolvers/aix/utils/info_extractor.rb +20 -0
  205. data/lib/facter/resolvers/augeas_resolver.rb +19 -2
  206. data/lib/facter/resolvers/base_resolver.rb +1 -1
  207. data/lib/facter/resolvers/bsd/ffi/ffi_helper.rb +0 -10
  208. data/lib/facter/resolvers/ec2.rb +2 -2
  209. data/lib/facter/resolvers/filesystems_resolver.rb +1 -1
  210. data/lib/facter/resolvers/freebsd/dmi_resolver.rb +38 -0
  211. data/lib/facter/resolvers/freebsd/ffi/ffi_helper.rb +19 -0
  212. data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +39 -0
  213. data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +41 -0
  214. data/lib/facter/resolvers/linux/docker_uptime.rb +45 -0
  215. data/lib/facter/resolvers/{load_averages_resolver.rb → linux/load_averages.rb} +0 -1
  216. data/lib/facter/resolvers/load_averages.rb +26 -0
  217. data/lib/facter/resolvers/lspci.rb +2 -0
  218. data/lib/facter/resolvers/mountpoints_resolver.rb +42 -44
  219. data/lib/facter/resolvers/networking_linux_resolver.rb +16 -1
  220. data/lib/facter/resolvers/networking_resolver.rb +106 -0
  221. data/lib/facter/resolvers/os_release_resolver.rb +1 -1
  222. data/lib/facter/resolvers/redhat_release_resolver.rb +4 -3
  223. data/lib/facter/resolvers/solaris/disks.rb +51 -0
  224. data/lib/facter/resolvers/solaris/dmi.rb +57 -0
  225. data/lib/facter/resolvers/solaris/dmi_sparc.rb +47 -0
  226. data/lib/facter/resolvers/solaris/ffi/ffi.rb +5 -0
  227. data/lib/facter/resolvers/solaris/{filesystems_resolver.rb → filesystems.rb} +0 -0
  228. data/lib/facter/resolvers/solaris/{ipaddress_resolver.rb → ipaddress.rb} +0 -0
  229. data/lib/facter/resolvers/solaris/memory.rb +93 -0
  230. data/lib/facter/resolvers/solaris/{networking_resolver.rb → networking.rb} +2 -6
  231. data/lib/facter/resolvers/solaris/os_release.rb +44 -0
  232. data/lib/facter/resolvers/solaris/zone.rb +51 -0
  233. data/lib/facter/resolvers/solaris/zone_name.rb +31 -0
  234. data/lib/facter/resolvers/uptime_resolver.rb +1 -27
  235. data/lib/facter/resolvers/utils/ffi/load_averages.rb +27 -0
  236. data/lib/facter/resolvers/utils/networking.rb +2 -0
  237. data/lib/facter/resolvers/utils/uptime_helper.rb +32 -0
  238. data/lib/facter/resolvers/windows/ffi/ffi.rb +1 -1
  239. data/lib/facter/resolvers/windows/networking_resolver.rb +100 -100
  240. data/lib/facter/resolvers/zfs.rb +32 -0
  241. data/lib/facter/resolvers/zpool.rb +34 -0
  242. data/lib/facter/templates/man.erb +122 -0
  243. data/lib/facter/version.rb +1 -1
  244. metadata +140 -18
  245. data/lib/facter/facts/freebsd/solaris_zones/current.rb +0 -15
  246. data/lib/facter/facts/freebsd/solaris_zones/zone.rb +0 -15
  247. data/lib/facter/facts/solaris/solaris_zones/zone.rb +0 -62
  248. data/lib/facter/resolvers/bsd/load_averages_resolver.rb +0 -26
  249. data/lib/facter/resolvers/macosx/networking_resolver.rb +0 -108
  250. data/lib/facter/resolvers/solaris/solaris_os_release_resolver.rb +0 -42
  251. data/lib/facter/resolvers/solaris/solaris_zone_name.rb +0 -28
  252. data/lib/facter/resolvers/solaris/zfs_resolver.rb +0 -34
  253. data/lib/facter/resolvers/solaris/zone_resolver.rb +0 -48
  254. data/lib/facter/resolvers/solaris/zpool_resolver.rb +0 -36
@@ -12,7 +12,9 @@
12
12
  "Rhel": [
13
13
  "Fedora",
14
14
  "Amzn",
15
- "Centos"
15
+ "Centos",
16
+ "Ol",
17
+ "Scientific"
16
18
  ]
17
19
  },
18
20
  {
@@ -23,14 +25,11 @@
23
25
  ]
24
26
  },
25
27
  {
26
- "Solaris": [
27
- {
28
- "Bsd": [
29
- "Freebsd"
30
- ]
31
- }
28
+ "Bsd": [
29
+ "Freebsd"
32
30
  ]
33
31
  },
32
+ "Solaris",
34
33
  "Macosx",
35
34
  "Windows",
36
35
  "Aix"
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Aix
6
+ class Disks < BaseResolver
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+ class << self
10
+ private
11
+
12
+ def post_resolve(fact_name)
13
+ @fact_list.fetch(fact_name) { execute_lspv(fact_name) }
14
+ end
15
+
16
+ def execute_lspv(fact_name)
17
+ @fact_list[:disks] = {}
18
+
19
+ result = Facter::Core::Execution.execute('lspv', logger: log)
20
+
21
+ return if result.empty?
22
+
23
+ result.each_line do |line|
24
+ disk_name = line.split(' ')[0].strip
25
+ size = find_size(disk_name)
26
+ @fact_list[:disks][disk_name] = size if size
27
+ end
28
+
29
+ @fact_list[fact_name]
30
+ end
31
+
32
+ def find_size(name)
33
+ stdout = Facter::Core::Execution.execute("lspv #{name}", logger: log)
34
+
35
+ return if stdout.empty?
36
+
37
+ info_size = InfoExtractor.extract(stdout, /PP SIZE:|TOTAL PPs:|FREE PPs:|PV STATE:/)
38
+
39
+ return unless info_size['PV STATE']
40
+
41
+ size_bytes = compute_size(info_size)
42
+
43
+ {
44
+ size_bytes: size_bytes,
45
+ size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
46
+ }
47
+ end
48
+
49
+ def compute_size(size_hash)
50
+ physical_partitions = size_hash['TOTAL PPs'].to_i + size_hash['FREE PPs'].to_i
51
+ size_physical_partition = size_hash['PP SIZE']
52
+ exp = if size_physical_partition[/mega/]
53
+ InfoExtractor::MEGABYTES_EXPONENT
54
+ else
55
+ InfoExtractor::GIGABYTES_EXPONENT
56
+ end
57
+ size_physical_partition.to_i * physical_partitions * exp
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Aix
6
+ class Memory < BaseResolver
7
+ # :hardware
8
+ @semaphore = Mutex.new
9
+ @fact_list ||= {}
10
+ class << self
11
+ private
12
+
13
+ def post_resolve(fact_name)
14
+ @fact_list.fetch(fact_name) { execute_svmon(fact_name) }
15
+ end
16
+
17
+ def execute_svmon(fact_name)
18
+ result = Facter::Core::Execution.execute('svmon', logger: log)
19
+ return if result.empty?
20
+
21
+ @fact_list[:system] = @fact_list[:swap] = {}
22
+
23
+ pagesize = call_pagesize.to_i
24
+ return if pagesize.zero?
25
+
26
+ result.each_line do |line|
27
+ @fact_list[:system] = populate_system(line, pagesize) if line.include?('memory')
28
+ @fact_list[:swap] = populate_swap(line, pagesize) if line =~ /pg\sspace/
29
+ end
30
+
31
+ @fact_list[fact_name]
32
+ end
33
+
34
+ def call_pagesize
35
+ Facter::Core::Execution.execute('pagesize', logger: log).strip
36
+ end
37
+
38
+ def populate_system(content, pagesize)
39
+ content = content.split(' ')
40
+
41
+ total = content[1].to_i * pagesize
42
+ used = content[2].to_i * pagesize
43
+
44
+ { available_bytes: content[3].to_i * pagesize,
45
+ total_bytes: total,
46
+ used_bytes: used,
47
+ capacity: FilesystemHelper.compute_capacity(used, total) }
48
+ end
49
+
50
+ def populate_swap(content, pagesize)
51
+ content = content.split(' ')
52
+
53
+ total = content[2].to_i * pagesize
54
+ used = content[3].to_i * pagesize
55
+
56
+ { available_bytes: total - used,
57
+ total_bytes: total,
58
+ used_bytes: used,
59
+ capacity: FilesystemHelper.compute_capacity(used, total) }
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -9,9 +9,6 @@ module Facter
9
9
  class << self
10
10
  private
11
11
 
12
- MEGABYTES_EXPONENT = 1024**2
13
- GIGABYTES_EXPONENT = 1024**3
14
-
15
12
  def post_resolve(fact_name)
16
13
  @fact_list.fetch(fact_name) { query_cudv(fact_name) }
17
14
  end
@@ -43,7 +40,7 @@ module Facter
43
40
 
44
41
  return if stdout.empty?
45
42
 
46
- info_hash = extract_info(stdout)
43
+ info_hash = InfoExtractor.extract(stdout, /PPs:|PP SIZE|TYPE:|LABEL:|MOUNT/)
47
44
  size_bytes = compute_size(info_hash)
48
45
 
49
46
  part_info = {
@@ -51,29 +48,21 @@ module Facter
51
48
  size_bytes: size_bytes,
52
49
  size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
53
50
  }
54
- mount = info_hash['MOUNTPOINT']
51
+ mount = info_hash['MOUNT POINT']
55
52
  label = info_hash['LABEL']
56
53
  part_info[:mount] = mount unless %r{N/A} =~ mount
57
- part_info[:label] = label unless /None/ =~ label
54
+ part_info[:label] = label.strip unless /None/ =~ label
58
55
  part_info
59
56
  end
60
57
 
61
- def extract_info(lsl_content)
62
- lsl_content = lsl_content.strip.split("\n").map do |line|
63
- next unless /PPs:|PP SIZE|TYPE:|LABEL:|MOUNT/ =~ line
64
-
65
- line.split(/:|\s\s/).reject(&:empty?)
66
- end
67
-
68
- lsl_content.flatten!.select! { |elem| elem }.map! { |elem| elem.delete("\s") }
69
-
70
- Hash[*lsl_content]
71
- end
72
-
73
58
  def compute_size(info_hash)
74
59
  physical_partitions = info_hash['PPs'].to_i
75
- size_physical_partition = info_hash['PPSIZE']
76
- exp = size_physical_partition[/mega/] ? MEGABYTES_EXPONENT : GIGABYTES_EXPONENT
60
+ size_physical_partition = info_hash['PP SIZE']
61
+ exp = if size_physical_partition[/mega/]
62
+ InfoExtractor::MEGABYTES_EXPONENT
63
+ else
64
+ InfoExtractor::GIGABYTES_EXPONENT
65
+ end
77
66
  size_physical_partition.to_i * physical_partitions * exp
78
67
  end
79
68
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module InfoExtractor
5
+ MEGABYTES_EXPONENT = 1024**2
6
+ GIGABYTES_EXPONENT = 1024**3
7
+
8
+ def self.extract(content, regex)
9
+ content = content.each_line.map do |line|
10
+ next unless regex =~ line
11
+
12
+ line.split(/:\s*|\s{2,}/)
13
+ end
14
+
15
+ content.flatten!.reject!(&:nil?)
16
+
17
+ Hash[*content]
18
+ end
19
+ end
20
+ end
@@ -14,10 +14,27 @@ module Facter
14
14
  end
15
15
 
16
16
  def read_augeas_version(fact_name)
17
- output = Facter::Core::Execution.execute('augparse --version 2>&1', logger: log)
18
- @fact_list[:augeas_version] = Regexp.last_match(1) if output =~ /^augparse (\d+\.\d+\.\d+)/
17
+ @fact_list[:augeas_version] = read_augeas_from_cli
18
+ @fact_list[:augeas_version] ||= read_augeas_from_gem
19
+
19
20
  @fact_list[fact_name]
20
21
  end
22
+
23
+ def read_augeas_from_cli
24
+ output = Facter::Core::Execution.execute('augparse --version 2>&1', logger: log)
25
+ Regexp.last_match(1) if output =~ /^augparse (\d+\.\d+\.\d+)/
26
+ end
27
+
28
+ def read_augeas_from_gem
29
+ require 'augeas'
30
+
31
+ if Gem.loaded_specs['augeas']
32
+ ::Augeas.create { |aug| aug.get('/augeas/version') }
33
+ else
34
+ # it is used for legacy augeas <= 0.5.0 (ruby-augeas gem)
35
+ ::Augeas.open { |aug| aug.get('/augeas/version') }
36
+ end
37
+ end
21
38
  end
22
39
  end
23
40
  end
@@ -20,7 +20,7 @@ module Facter
20
20
  subscribe_to_manager
21
21
  post_resolve(fact_name)
22
22
  end
23
- rescue LoadError => e
23
+ rescue LoadError, NameError => e
24
24
  log.debug("resolving fact #{fact_name}, but #{e}")
25
25
  @fact_list[fact_name] = nil
26
26
  end
@@ -9,19 +9,9 @@ module Facter
9
9
  extend FFI::Library
10
10
 
11
11
  ffi_lib 'c'
12
- attach_function :getloadavg, %i[pointer int], :int
13
12
  attach_function :sysctl, %i[pointer uint pointer pointer pointer size_t], :int
14
13
  end
15
14
 
16
- def self.read_load_averages
17
- raw_loadavg = FFI::MemoryPointer.new(:double, 3)
18
-
19
- res = Libc.getloadavg(raw_loadavg, 3)
20
- return unless res == 3
21
-
22
- raw_loadavg.read_array_of_double(res)
23
- end
24
-
25
15
  def self.sysctl(type, oids)
26
16
  name = FFI::MemoryPointer.new(:uint, oids.size)
27
17
  name.write_array_of_uint(oids)
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'net/http'
4
-
5
3
  module Facter
6
4
  module Resolvers
7
5
  class Ec2 < BaseResolver
@@ -52,6 +50,8 @@ module Facter
52
50
  end
53
51
 
54
52
  def get_data_from(url)
53
+ require 'net/http'
54
+
55
55
  parsed_url = URI.parse(url)
56
56
  http = Net::HTTP.new(parsed_url.host)
57
57
  http.read_timeout = determine_session_timeout
@@ -22,7 +22,7 @@ module Facter
22
22
  filesystems = []
23
23
  output.each do |line|
24
24
  tokens = line.split(' ')
25
- filesystems << tokens if tokens.size == 1
25
+ filesystems << tokens if tokens.size == 1 && tokens.first != 'fuseblk'
26
26
  end
27
27
  @fact_list[:systems] = filesystems.sort.join(',')
28
28
  @fact_list[fact_name]
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Freebsd
6
+ class DmiBios < BaseResolver
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+
10
+ class << self
11
+ #:model
12
+
13
+ private
14
+
15
+ def post_resolve(fact_name)
16
+ @fact_list.fetch(fact_name) { read_facts(fact_name) }
17
+ end
18
+
19
+ def read_facts(fact_name)
20
+ require_relative 'ffi/ffi_helper'
21
+
22
+ @fact_list[:bios_date] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.bios.reldate')
23
+ @fact_list[:bios_vendor] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.bios.vendor')
24
+ @fact_list[:bios_version] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.bios.version')
25
+
26
+ @fact_list[:product_name] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.system.product')
27
+ @fact_list[:product_serial] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.system.serial')
28
+ @fact_list[:product_uuid] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.system.uuid')
29
+
30
+ @fact_list[:sys_vendor] = Facter::Freebsd::FfiHelper.kenv(:get, 'smbios.system.maker')
31
+
32
+ @fact_list[fact_name]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -8,10 +8,29 @@ module Facter
8
8
  module Libc
9
9
  extend FFI::Library
10
10
 
11
+ KENV_GET = 0
12
+
13
+ KENV_MVALLEN = 128
14
+
11
15
  ffi_lib 'c'
16
+ attach_function :kenv, %i[int string pointer int], :int
12
17
  attach_function :sysctlbyname, %i[string pointer pointer pointer size_t], :int
13
18
  end
14
19
 
20
+ def self.kenv(action, name, value = nil)
21
+ case action
22
+ when :get
23
+ len = Libc::KENV_MVALLEN + 1
24
+ value = FFI::MemoryPointer.new(:char, len)
25
+ res = Libc.kenv(Libc::KENV_GET, name, value, len)
26
+ return nil if res.negative?
27
+
28
+ value.read_string(res).chomp("\0")
29
+ else
30
+ raise "Action #{action} not supported"
31
+ end
32
+ end
33
+
15
34
  def self.sysctl_by_name(type, name)
16
35
  oldp = FFI::Pointer::NULL
17
36
  oldlenp = FFI::MemoryPointer.new(:size_t)
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Freebsd
6
+ class SwapMemory < BaseResolver
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+ class << self
10
+ private
11
+
12
+ def post_resolve(fact_name)
13
+ @fact_list.fetch(fact_name) { read_swap_memory(fact_name) }
14
+ end
15
+
16
+ def read_swap_memory(fact_name) # rubocop:disable Metrics/AbcSize
17
+ output = Facter::Core::Execution.execute('swapinfo -k', logger: log)
18
+ data = output.split("\n")[1..-1].map { |line| line.split(/\s+/) }
19
+
20
+ unless data.empty?
21
+ @fact_list[:total_bytes] = kilobytes_to_bytes(data.map { |line| line[1].to_i }.inject(:+))
22
+ @fact_list[:used_bytes] = kilobytes_to_bytes(data.map { |line| line[2].to_i }.inject(:+))
23
+ @fact_list[:available_bytes] = kilobytes_to_bytes(data.map { |line| line[3].to_i }.inject(:+))
24
+ @fact_list[:capacity] = FilesystemHelper.compute_capacity(@fact_list[:used_bytes],
25
+ @fact_list[:total_bytes])
26
+ @fact_list[:encrypted] = data.map { |line| line[0].end_with?('.eli') }.all?
27
+ end
28
+
29
+ @fact_list[fact_name]
30
+ end
31
+
32
+ def kilobytes_to_bytes(quantity)
33
+ (quantity.to_f * 1024).to_i
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Freebsd
6
+ class SystemMemory < BaseResolver
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+ class << self
10
+ private
11
+
12
+ def post_resolve(fact_name)
13
+ @fact_list.fetch(fact_name) { calculate_system_memory(fact_name) }
14
+ end
15
+
16
+ def calculate_system_memory(fact_name)
17
+ read_total_memory_in_bytes
18
+ read_available_memory_in_bytes
19
+
20
+ @fact_list[:used_bytes] = @fact_list[:total_bytes] - @fact_list[:available_bytes]
21
+ @fact_list[:capacity] = FilesystemHelper.compute_capacity(@fact_list[:used_bytes], @fact_list[:total_bytes])
22
+
23
+ @fact_list[fact_name]
24
+ end
25
+
26
+ def read_available_memory_in_bytes
27
+ output = Facter::Core::Execution.execute('vmstat -H --libxo json', logger: log)
28
+ data = JSON.parse(output)
29
+ @fact_list[:available_bytes] = data['memory']['free-memory'] * 1024
30
+ end
31
+
32
+ def read_total_memory_in_bytes
33
+ require_relative 'ffi/ffi_helper'
34
+
35
+ @fact_list[:total_bytes] = Facter::Freebsd::FfiHelper.sysctl_by_name(:long, 'hw.physmem')
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end