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
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Linux
6
+ class DockerUptime < 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) { detect_uptime(fact_name) }
14
+ end
15
+
16
+ def detect_uptime(fact_name)
17
+ days, hours, minutes, seconds = extract_uptime_from_docker
18
+ total_seconds = convert_to_seconds(days, hours, minutes, seconds)
19
+ @fact_list = Utils::UptimeHelper.create_uptime_hash(total_seconds)
20
+
21
+ @fact_list[fact_name]
22
+ end
23
+
24
+ def extract_uptime_from_docker
25
+ # time format [dd-][hh:]mm:ss
26
+ time = Facter::Core::Execution.execute('ps -o etime= -p "1"', logger: log)
27
+ extracted_time = time.split(/[-:]/)
28
+
29
+ reversed_time = extracted_time.reverse
30
+ seconds = reversed_time[0].to_i
31
+ minutes = reversed_time[1].to_i
32
+ hours = reversed_time[2].to_i
33
+ days = reversed_time[3].to_i
34
+
35
+ [days, hours, minutes, seconds]
36
+ end
37
+
38
+ def convert_to_seconds(days, hours, minutes, seconds)
39
+ days * 24 * 3600 + hours * 3600 + minutes * 60 + seconds
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Linux
6
6
  class LoadAverages < BaseResolver
7
- @log = Facter::Log.new(self)
8
7
  @semaphore = Mutex.new
9
8
  @fact_list ||= {}
10
9
  class << self
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ class LoadAverages < BaseResolver
6
+ @semaphore = Mutex.new
7
+ @fact_list ||= {}
8
+ class << self
9
+ private
10
+
11
+ def post_resolve(fact_name)
12
+ @fact_list.fetch(fact_name) { read_load_averages(fact_name) }
13
+ end
14
+
15
+ def read_load_averages(fact_name)
16
+ require_relative 'utils/ffi/load_averages'
17
+
18
+ log.debug('loading cpu load averages')
19
+ @fact_list[:load_averages] = %w[1m 5m 15m].zip(Utils::Ffi::LoadAverages.read_load_averages).to_h
20
+
21
+ @fact_list[fact_name]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -28,6 +28,8 @@ module Facter
28
28
 
29
29
  def retrieve_vm(output)
30
30
  output.each_line { |line| REGEX_VALUES.each { |key, value| return value if line =~ /#{key}/ } }
31
+
32
+ nil
31
33
  end
32
34
  end
33
35
  end
@@ -2,59 +2,57 @@
2
2
 
3
3
  module Facter
4
4
  module Resolvers
5
- module Linux
6
- class Mountpoints < BaseResolver
7
- include Facter::FilesystemHelper
8
- @semaphore = Mutex.new
9
- @fact_list ||= {}
10
- @log = Facter::Log.new(self)
11
- class << self
12
- private
13
-
14
- def post_resolve(fact_name)
15
- @fact_list.fetch(fact_name) { read_mounts }
16
- end
5
+ class Mountpoints < BaseResolver
6
+ include Facter::FilesystemHelper
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+ @log = Facter::Log.new(self)
10
+ class << self
11
+ private
12
+
13
+ def post_resolve(fact_name)
14
+ @fact_list.fetch(fact_name) { read_mounts }
15
+ end
17
16
 
18
- def root_device
19
- cmdline = Util::FileHelper.safe_read('/proc/cmdline')
20
- match = cmdline.match(/root=([^\s]+)/)
21
- match&.captures&.first
22
- end
17
+ def root_device
18
+ cmdline = Util::FileHelper.safe_read('/proc/cmdline')
19
+ match = cmdline.match(/root=([^\s]+)/)
20
+ match&.captures&.first
21
+ end
23
22
 
24
- def compute_device(device)
25
- # If the "root" device, lookup the actual device from the kernel options
26
- # This is done because not all systems symlink /dev/root
27
- device = root_device if device == '/dev/root'
28
- device
29
- end
23
+ def compute_device(device)
24
+ # If the "root" device, lookup the actual device from the kernel options
25
+ # This is done because not all systems symlink /dev/root
26
+ device = root_device if device == '/dev/root'
27
+ device
28
+ end
30
29
 
31
- def read_mounts # rubocop:disable Metrics/AbcSize
32
- mounts = []
33
- FilesystemHelper.read_mountpoints.each do |fs|
34
- device = compute_device(fs.name)
35
- filesystem = fs.mount_type
36
- path = fs.mount_point
37
- options = fs.options.split(',').map(&:strip)
30
+ def read_mounts # rubocop:disable Metrics/AbcSize
31
+ mounts = []
32
+ FilesystemHelper.read_mountpoints.each do |fs|
33
+ device = compute_device(fs.name)
34
+ filesystem = fs.mount_type
35
+ path = fs.mount_point
36
+ options = fs.options.split(',').map(&:strip)
38
37
 
39
- next if path =~ %r{^/(proc|sys)} && filesystem != 'tmpfs' || filesystem == 'autofs'
38
+ next if path =~ %r{^/(proc|sys)} && filesystem != 'tmpfs' || filesystem == 'autofs'
40
39
 
41
- stats = FilesystemHelper.read_mountpoint_stats(path)
42
- size_bytes = stats.bytes_total.abs
43
- available_bytes = stats.bytes_available.abs
40
+ stats = FilesystemHelper.read_mountpoint_stats(path)
41
+ size_bytes = stats.bytes_total.abs
42
+ available_bytes = stats.bytes_available.abs
44
43
 
45
- used_bytes = stats.bytes_used.abs
46
- total_bytes = used_bytes + available_bytes
47
- capacity = FilesystemHelper.compute_capacity(used_bytes, total_bytes)
44
+ used_bytes = stats.bytes_used.abs
45
+ total_bytes = used_bytes + available_bytes
46
+ capacity = FilesystemHelper.compute_capacity(used_bytes, total_bytes)
48
47
 
49
- size = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
50
- available = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(available_bytes)
51
- used = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(used_bytes)
48
+ size = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
49
+ available = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(available_bytes)
50
+ used = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(used_bytes)
52
51
 
53
- mounts << Hash[FilesystemHelper::MOUNT_KEYS.zip(FilesystemHelper::MOUNT_KEYS
54
- .map { |v| binding.local_variable_get(v) })]
55
- end
56
- @fact_list[:mountpoints] = mounts
52
+ mounts << Hash[FilesystemHelper::MOUNT_KEYS.zip(FilesystemHelper::MOUNT_KEYS
53
+ .map { |v| binding.local_variable_get(v) })]
57
54
  end
55
+ @fact_list[:mountpoints] = mounts
58
56
  end
59
57
  end
60
58
  end
@@ -11,6 +11,7 @@ module Facter
11
11
  private
12
12
 
13
13
  def post_resolve(fact_name)
14
+ log.debug('in networking_linux_resolver')
14
15
  @fact_list.fetch(fact_name) { retrieve_network_info(fact_name) }
15
16
 
16
17
  @fact_list[fact_name]
@@ -36,12 +37,17 @@ module Facter
36
37
  end
37
38
 
38
39
  def retrieve_interface_info
40
+ log.debug('retrieve_interface_info')
39
41
  output = Facter::Core::Execution.execute('ip -o address', logger: log)
42
+ log.debug("ip -o address result is:\n#{output}")
43
+
40
44
  interfaces = {}
41
45
 
42
46
  output.each_line do |ip_line|
43
47
  ip_tokens = ip_line.split(' ')
44
48
 
49
+ log.debug("ip_tokens = #{ip_tokens}")
50
+ log.debug("interfaces = #{interfaces}")
45
51
  fill_ip_v4_info!(ip_tokens, interfaces)
46
52
  fill_io_v6_info!(ip_tokens, interfaces)
47
53
  find_dhcp!(ip_tokens, interfaces)
@@ -85,14 +91,23 @@ module Facter
85
91
  return unless lease_file
86
92
 
87
93
  dhcp = Util::FileHelper.safe_read("/var/lib/NetworkManager/#{lease_file}", nil)
88
- dhcp ? dhcp.match(/SERVER_ADDRESS=(.*)/)[1] : nil
94
+
95
+ return unless dhcp
96
+
97
+ dhcp = dhcp.match(/SERVER_ADDRESS=(.*)/)
98
+ dhcp[1] if dhcp
89
99
  end
90
100
 
91
101
  def fill_ip_v4_info!(ip_tokens, network_info)
102
+ log.debug('fill_ip_v4_info!')
92
103
  return unless ip_tokens[2].casecmp('inet').zero?
93
104
 
94
105
  interface_name, ip4_address, ip4_mask_length = retrieve_name_and_ip_info(ip_tokens)
95
106
 
107
+ log.debug("interface_name = #{interface_name}\n" \
108
+ "ip4_address = #{ip4_address}\n" \
109
+ "ip4_mask_length = #{ip4_mask_length}")
110
+
96
111
  binding = ::Resolvers::Utils::Networking.build_binding(ip4_address, ip4_mask_length)
97
112
  build_network_info_structure!(network_info, interface_name, :bindings)
98
113
 
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ class Networking < BaseResolver
6
+ @semaphore = Mutex.new
7
+ @fact_list ||= {}
8
+
9
+ class << self
10
+ private
11
+
12
+ def post_resolve(fact_name)
13
+ @fact_list.fetch(fact_name) { read_facts(fact_name) }
14
+ end
15
+
16
+ def read_facts(fact_name)
17
+ primary_interface
18
+ interfaces_data
19
+ ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
20
+ @fact_list[fact_name]
21
+ end
22
+
23
+ def primary_interface
24
+ result = Facter::Core::Execution.execute('route -n get default', logger: log)
25
+
26
+ @fact_list[:primary_interface] = result.match(/interface: (.+)/)&.captures&.first
27
+ end
28
+
29
+ def interfaces_data
30
+ command_response = Facter::Core::Execution.execute('ifconfig -a', logger: log)
31
+
32
+ clean_up_interfaces_response(command_response)
33
+ parse_interfaces_response(command_response)
34
+ end
35
+
36
+ def clean_up_interfaces_response(response)
37
+ # convert ip ranges into single ip. eg. 10.16.132.213 --> 10.16.132.213 is converted to 10.16.132.213
38
+ response.gsub!(/(\d+(\.\d+)*)\s+-->\s+\d+(\.\d+)*/, '\\1')
39
+ end
40
+
41
+ def parse_interfaces_response(response)
42
+ parsed_interfaces_data = {}
43
+ interfaces_data = Hash[*response.split(/^([A-Za-z0-9_]+): /)[1..-1]]
44
+
45
+ interfaces_data.each do |interface_name, raw_data|
46
+ parsed_interface_data = {}
47
+
48
+ extract_mtu(raw_data, parsed_interface_data)
49
+ extract_mac(raw_data, parsed_interface_data)
50
+ extract_dhcp(interface_name, raw_data, parsed_interface_data)
51
+ extract_ip_data(raw_data, parsed_interface_data)
52
+
53
+ parsed_interfaces_data[interface_name] = parsed_interface_data
54
+ end
55
+ @fact_list[:interfaces] = parsed_interfaces_data unless parsed_interfaces_data.empty?
56
+ end
57
+
58
+ def extract_mtu(raw_data, parsed_interface_data)
59
+ mtu = raw_data.match(/mtu\s+(\d+)/)&.captures&.first&.to_i
60
+ parsed_interface_data[:mtu] = mtu unless mtu.nil?
61
+ end
62
+
63
+ def extract_mac(raw_data, parsed_interface_data)
64
+ mac = raw_data.match(/(?:ether|lladdr)\s+(\w?\w:\w?\w:\w?\w:\w?\w:\w?\w:\w?\w)/)&.captures&.first
65
+ parsed_interface_data[:mac] = mac unless mac.nil?
66
+ end
67
+
68
+ def extract_dhcp(interface_name, raw_data, parsed_interface_data)
69
+ return unless raw_data =~ /status:\s+active/
70
+
71
+ result = Facter::Core::Execution.execute("ipconfig getoption #{interface_name} " \
72
+ 'server_identifier', logger: log)
73
+
74
+ parsed_interface_data[:dhcp] = result.match(/^[\d.a-f:\s]+$/)&.to_s&.strip unless result.empty?
75
+ end
76
+
77
+ def extract_ip_data(raw_data, parsed_interface_data)
78
+ ip = extract_values(raw_data, /inet (\S+)/)
79
+ mask = extract_values(raw_data, /netmask (\S+)/).map { |val| val.hex.to_s(2).count('1') }
80
+
81
+ ip6 = extract_values(raw_data, /inet6 (\S+)/).map { |val| val.gsub(/%.+/, '') }
82
+ mask6 = extract_values(raw_data, /prefixlen (\S+)/)
83
+
84
+ parsed_interface_data[:bindings] = create_bindings(ip, mask) unless ip.empty?
85
+ parsed_interface_data[:bindings6] = create_bindings(ip6, mask6) unless ip6.empty?
86
+ end
87
+
88
+ def extract_values(data, regex)
89
+ results = []
90
+ data.scan(regex).flatten.each do |val|
91
+ results << val
92
+ end
93
+ results
94
+ end
95
+
96
+ def create_bindings(ips, masks)
97
+ bindings = []
98
+ ips.zip(masks).each do |ip, mask|
99
+ bindings << ::Resolvers::Utils::Networking.build_binding(ip, mask)
100
+ end
101
+ bindings
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -56,7 +56,7 @@ module Facter
56
56
  def process_name
57
57
  return unless @fact_list[:name]
58
58
 
59
- @fact_list[:name] = if @fact_list[:name].downcase.start_with?('red')
59
+ @fact_list[:name] = if @fact_list[:name].downcase.start_with?('red', 'oracle')
60
60
  @fact_list[:name].split(' ')[0..1].join
61
61
  else
62
62
  @fact_list[:name].split(' ')[0].strip
@@ -32,9 +32,10 @@ module Facter
32
32
  version_codename = output_strings[1].split(' ')
33
33
 
34
34
  @fact_list[:name] = name(output_strings[0])
35
- @fact_list[:version] = version_codename[0].strip
36
- codename = version_codename[1].strip
37
- @fact_list[:codename] = codename.gsub(/[()]/, '')
35
+ @fact_list[:version] = version_codename[0]&.strip
36
+
37
+ codename = version_codename[1]&.strip
38
+ @fact_list[:codename] = codename ? codename.gsub(/[()]/, '') : nil
38
39
 
39
40
  @fact_list[:identifier] = identifier(@fact_list[:name])
40
41
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Solaris
6
+ class Disks < BaseResolver
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+
10
+ class << self
11
+ private
12
+
13
+ def post_resolve(fact_name)
14
+ @fact_list.fetch(fact_name) { read_disks_info(fact_name) }
15
+ end
16
+
17
+ def read_disks_info(fact_name)
18
+ return unless File.executable?('/usr/bin/kstat')
19
+
20
+ log.debug('loading disks info')
21
+
22
+ kstat_output = Facter::Core::Execution.execute('/usr/bin/kstat sderr', logger: log)
23
+ return if kstat_output.empty?
24
+
25
+ @fact_list[fact_name] = parse(kstat_output)
26
+ end
27
+
28
+ def parse(kstat_output)
29
+ disks = {}
30
+
31
+ names = kstat_output.scan(/name:\s+(\w+)/).flatten
32
+ products = kstat_output.scan(/Product\s+(.+)/).flatten
33
+ vendors = kstat_output.scan(/Vendor\s+(\w+)/).flatten
34
+ sizes = kstat_output.scan(/Size\s+(\w+)/).flatten
35
+
36
+ names.each_with_index do |name, index|
37
+ disk_size = sizes[index].to_i
38
+ disks[name] = {
39
+ product: products[index],
40
+ size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(disk_size),
41
+ size_bytes: disk_size,
42
+ vendor: vendors[index]
43
+ }
44
+ end
45
+ disks
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Solaris
6
+ class Dmi < BaseResolver
7
+ @semaphore = Mutex.new
8
+ @fact_list ||= {}
9
+
10
+ class << self
11
+ private
12
+
13
+ def post_resolve(fact_name)
14
+ @fact_list.fetch(fact_name) { read_facts(fact_name) }
15
+ end
16
+
17
+ SMBIOS_PARAMS = {
18
+ 'SMB_TYPE_BIOS' => {
19
+ bios_version: 'Version String: (.+)',
20
+ bios_vendor: 'Vendor: (.+)',
21
+ bios_release_date: 'Release Date: (.+)'
22
+ },
23
+ 'SMB_TYPE_SYSTEM' => {
24
+ manufacturer: 'Manufacturer: (.+)',
25
+ product_name: 'Product: (.+)',
26
+ serial_number: 'Serial Number: (.+)',
27
+ product_uuid: 'UUID: (.+)'
28
+ },
29
+ 'SMB_TYPE_CHASSIS' => {
30
+ chassis_asset_tag: 'Asset Tag: (.+)',
31
+ chassis_type: '(?:Chassis )?Type: (.+)'
32
+ }
33
+ }.freeze
34
+
35
+ def read_facts(fact_name)
36
+ param = SMBIOS_PARAMS.find { |_key, hash| hash[fact_name] }
37
+ return nil unless param
38
+
39
+ output = exec_smbios(param[0])
40
+ facts = param[1]
41
+ facts.each do |name, regx|
42
+ @fact_list[name] = output.match(/#{regx}/)&.captures&.first
43
+ end
44
+
45
+ @fact_list[fact_name]
46
+ end
47
+
48
+ def exec_smbios(args)
49
+ return unless File.executable?('/usr/sbin/smbios')
50
+
51
+ Facter::Core::Execution.execute("/usr/sbin/smbios -t #{args}", logger: log)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end