facter 4.0.9.pre → 4.0.10.pre

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 (280) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rtc.yml +11 -0
  3. data/.rubocop_todo.yml +10 -190
  4. data/VERSION +1 -1
  5. data/facter.gemspec +1 -0
  6. data/lib/custom_facts/core/aggregate.rb +4 -6
  7. data/lib/custom_facts/core/execution.rb +1 -1
  8. data/lib/custom_facts/core/execution/base.rb +15 -24
  9. data/lib/custom_facts/core/execution/posix.rb +2 -2
  10. data/lib/custom_facts/core/resolvable.rb +1 -1
  11. data/lib/custom_facts/core/suitable.rb +2 -1
  12. data/lib/custom_facts/util/fact.rb +3 -3
  13. data/lib/custom_facts/util/loader.rb +2 -2
  14. data/lib/custom_facts/util/parser.rb +7 -7
  15. data/lib/custom_facts/util/resolution.rb +1 -3
  16. data/lib/custom_facts/version.rb +1 -1
  17. data/lib/facter.rb +217 -41
  18. data/lib/facts/aix/augeas/version.rb +4 -1
  19. data/lib/facts/aix/filesystems.rb +14 -0
  20. data/lib/facts/aix/identity/user.rb +17 -0
  21. data/lib/facts/aix/puppet_version.rb +15 -0
  22. data/lib/facts/aix/system_uptime/days.rb +16 -0
  23. data/lib/facts/aix/system_uptime/hours.rb +16 -0
  24. data/lib/facts/aix/system_uptime/seconds.rb +16 -0
  25. data/lib/facts/aix/system_uptime/uptime.rb +16 -0
  26. data/lib/facts/aix/timezone.rb +14 -0
  27. data/lib/facts/debian/augeas/version.rb +19 -0
  28. data/lib/facts/debian/dmi/bios/release_date.rb +2 -1
  29. data/lib/facts/debian/dmi/bios/vendor.rb +2 -1
  30. data/lib/facts/debian/dmi/bios/version.rb +2 -1
  31. data/lib/facts/debian/dmi/board/manufacturer.rb +2 -1
  32. data/lib/facts/debian/dmi/board/product.rb +2 -1
  33. data/lib/facts/debian/dmi/board/serial_number.rb +2 -1
  34. data/lib/facts/debian/dmi/chassis/asset_tag.rb +2 -1
  35. data/lib/facts/debian/dmi/chassis/type.rb +2 -1
  36. data/lib/facts/debian/dmi/manufacturer.rb +2 -1
  37. data/lib/facts/debian/dmi/product/name.rb +2 -1
  38. data/lib/facts/debian/identity/user.rb +17 -0
  39. data/lib/facts/debian/interfaces.rb +16 -0
  40. data/lib/facts/debian/memory/swap/available.rb +2 -1
  41. data/lib/facts/debian/memory/swap/available_bytes.rb +4 -1
  42. data/lib/facts/debian/memory/swap/total.rb +2 -1
  43. data/lib/facts/debian/memory/swap/total_bytes.rb +3 -1
  44. data/lib/facts/debian/memory/system/available.rb +3 -1
  45. data/lib/facts/debian/memory/system/available_bytes.rb +4 -1
  46. data/lib/facts/debian/memory/system/total.rb +2 -1
  47. data/lib/facts/debian/memory/system/total_bytes.rb +3 -1
  48. data/lib/facts/debian/networking/mac.rb +18 -0
  49. data/lib/facts/debian/os/distro/codename.rb +21 -0
  50. data/lib/facts/debian/os/distro/description.rb +21 -0
  51. data/lib/facts/debian/os/distro/id.rb +21 -0
  52. data/lib/facts/debian/os/distro/release.rb +31 -0
  53. data/lib/facts/debian/os/distro/specification.rb +21 -0
  54. data/lib/facts/debian/os/hardware.rb +2 -1
  55. data/lib/facts/debian/os/selinux/config_mode.rb +21 -0
  56. data/lib/facts/debian/os/selinux/config_policy.rb +21 -0
  57. data/lib/facts/debian/os/selinux/current_mode.rb +21 -0
  58. data/lib/facts/debian/os/selinux/enabled.rb +21 -0
  59. data/lib/facts/debian/os/selinux/enforced.rb +21 -0
  60. data/lib/facts/debian/os/selinux/policy_version.rb +21 -0
  61. data/lib/facts/debian/processors/count.rb +2 -1
  62. data/lib/facts/debian/processors/isa.rb +3 -2
  63. data/lib/facts/debian/processors/physicalcount.rb +2 -1
  64. data/lib/facts/debian/puppet_version.rb +15 -0
  65. data/lib/facts/debian/ruby/platform.rb +2 -1
  66. data/lib/facts/debian/ruby/sitedir.rb +2 -1
  67. data/lib/facts/debian/system_uptime/days.rb +2 -1
  68. data/lib/facts/debian/system_uptime/hours.rb +2 -1
  69. data/lib/facts/debian/system_uptime/seconds.rb +18 -0
  70. data/lib/facts/debian/system_uptime/uptime.rb +2 -1
  71. data/lib/facts/el/augeas/version.rb +19 -0
  72. data/lib/facts/el/dmi/bios/release_date.rb +2 -1
  73. data/lib/facts/el/dmi/bios/vendor.rb +2 -1
  74. data/lib/facts/el/dmi/bios/version.rb +2 -1
  75. data/lib/facts/el/dmi/board/manufacturer.rb +2 -1
  76. data/lib/facts/el/dmi/board/product.rb +2 -1
  77. data/lib/facts/el/dmi/board/serial_number.rb +2 -1
  78. data/lib/facts/el/dmi/chassis/asset_tag.rb +2 -1
  79. data/lib/facts/el/dmi/chassis/type.rb +2 -1
  80. data/lib/facts/el/dmi/manufacturer.rb +2 -1
  81. data/lib/facts/el/dmi/product/name.rb +2 -1
  82. data/lib/facts/el/dmi/product/serial_number.rb +2 -1
  83. data/lib/facts/el/dmi/product/uuid.rb +2 -1
  84. data/lib/facts/el/identity/user.rb +17 -0
  85. data/lib/facts/el/interfaces.rb +16 -0
  86. data/lib/facts/el/memory/swap/available.rb +2 -1
  87. data/lib/facts/el/memory/swap/available_bytes.rb +3 -1
  88. data/lib/facts/el/memory/swap/total.rb +2 -1
  89. data/lib/facts/el/memory/swap/total_bytes.rb +3 -1
  90. data/lib/facts/el/memory/system/available.rb +2 -1
  91. data/lib/facts/el/memory/system/available_bytes.rb +3 -1
  92. data/lib/facts/el/memory/system/total.rb +2 -1
  93. data/lib/facts/el/memory/system/total_bytes.rb +3 -1
  94. data/lib/facts/el/networking/mac.rb +18 -0
  95. data/lib/facts/el/os/distro/codename.rb +21 -0
  96. data/lib/facts/el/os/distro/description.rb +21 -0
  97. data/lib/facts/el/os/distro/id.rb +21 -0
  98. data/lib/facts/el/os/distro/release.rb +31 -0
  99. data/lib/facts/el/os/distro/specification.rb +21 -0
  100. data/lib/facts/el/os/hardware.rb +2 -1
  101. data/lib/facts/el/os/selinux/config_mode.rb +21 -0
  102. data/lib/facts/el/os/selinux/config_policy.rb +21 -0
  103. data/lib/facts/el/os/selinux/current_mode.rb +21 -0
  104. data/lib/facts/el/os/selinux/enabled.rb +21 -0
  105. data/lib/facts/el/os/selinux/enforced.rb +21 -0
  106. data/lib/facts/el/os/selinux/policy_version.rb +21 -0
  107. data/lib/facts/el/processor.rb +19 -0
  108. data/lib/facts/el/processors/count.rb +2 -1
  109. data/lib/facts/el/processors/isa.rb +3 -1
  110. data/lib/facts/el/processors/physicalcount.rb +3 -1
  111. data/lib/facts/el/puppet_version.rb +15 -0
  112. data/lib/facts/el/ruby/platform.rb +3 -1
  113. data/lib/facts/el/ruby/sitedir.rb +3 -1
  114. data/lib/facts/el/ruby/version.rb +1 -0
  115. data/lib/facts/el/sshalgorithmkey.rb +16 -0
  116. data/lib/facts/el/sshfp_algorithm.rb +19 -0
  117. data/lib/facts/el/system_uptime/days.rb +3 -1
  118. data/lib/facts/el/system_uptime/hours.rb +3 -1
  119. data/lib/facts/el/system_uptime/seconds.rb +3 -1
  120. data/lib/facts/el/system_uptime/uptime.rb +3 -1
  121. data/lib/facts/macosx/augeas/version.rb +19 -0
  122. data/lib/facts/macosx/dmi/product/name.rb +2 -1
  123. data/lib/facts/macosx/identity/group.rb +2 -0
  124. data/lib/facts/macosx/identity/user.rb +2 -1
  125. data/lib/facts/macosx/interfaces.rb +15 -0
  126. data/lib/facts/macosx/memory/swap/available.rb +2 -1
  127. data/lib/facts/macosx/memory/swap/available_bytes.rb +3 -1
  128. data/lib/facts/macosx/memory/swap/encrypted.rb +2 -1
  129. data/lib/facts/macosx/memory/swap/total.rb +2 -1
  130. data/lib/facts/macosx/memory/swap/total_bytes.rb +3 -1
  131. data/lib/facts/macosx/memory/system/available.rb +2 -1
  132. data/lib/facts/macosx/memory/system/available_bytes.rb +3 -1
  133. data/lib/facts/macosx/memory/system/total.rb +2 -1
  134. data/lib/facts/macosx/memory/system/total_bytes.rb +3 -1
  135. data/lib/facts/macosx/networking/mac.rb +18 -0
  136. data/lib/facts/macosx/os/hardware.rb +2 -1
  137. data/lib/facts/macosx/os/macosx/build.rb +2 -2
  138. data/lib/facts/macosx/os/macosx/product.rb +2 -2
  139. data/lib/facts/macosx/os/macosx/version.rb +5 -1
  140. data/lib/facts/macosx/os/release.rb +11 -5
  141. data/lib/facts/macosx/processors/count.rb +2 -1
  142. data/lib/facts/macosx/processors/isa.rb +2 -1
  143. data/lib/facts/macosx/processors/models.rb +6 -1
  144. data/lib/facts/macosx/processors/physicalcount.rb +2 -1
  145. data/lib/facts/macosx/{augeas.rb → puppet_version.rb} +4 -3
  146. data/lib/facts/macosx/ruby/platform.rb +2 -2
  147. data/lib/facts/macosx/ruby/sitedir.rb +2 -2
  148. data/lib/facts/macosx/ssh.rb +26 -0
  149. data/lib/facts/macosx/sshalgorithmkey.rb +16 -0
  150. data/lib/facts/macosx/sshfp_algorithm.rb +19 -0
  151. data/lib/facts/macosx/system_profiler/boot_mode.rb +2 -1
  152. data/lib/facts/macosx/system_profiler/boot_rom_version.rb +2 -1
  153. data/lib/facts/macosx/system_profiler/boot_volume.rb +2 -1
  154. data/lib/facts/macosx/system_profiler/computer_name.rb +2 -1
  155. data/lib/facts/macosx/system_profiler/cores.rb +2 -1
  156. data/lib/facts/macosx/system_profiler/hardware_uuid.rb +2 -1
  157. data/lib/facts/macosx/system_profiler/kernel_version.rb +2 -1
  158. data/lib/facts/macosx/system_profiler/l2_cache_per_core.rb +2 -1
  159. data/lib/facts/macosx/system_profiler/l3_cache.rb +2 -1
  160. data/lib/facts/macosx/system_profiler/memory.rb +2 -1
  161. data/lib/facts/macosx/system_profiler/model_identifier.rb +2 -1
  162. data/lib/facts/macosx/system_profiler/model_name.rb +2 -1
  163. data/lib/facts/macosx/system_profiler/processor_name.rb +2 -1
  164. data/lib/facts/macosx/system_profiler/processor_speed.rb +2 -1
  165. data/lib/facts/macosx/system_profiler/processors.rb +2 -1
  166. data/lib/facts/macosx/system_profiler/secure_virtual_memory.rb +2 -1
  167. data/lib/facts/macosx/system_profiler/serial_number.rb +2 -1
  168. data/lib/facts/macosx/system_profiler/smc_version.rb +2 -1
  169. data/lib/facts/macosx/system_profiler/system_version.rb +2 -1
  170. data/lib/facts/macosx/system_profiler/uptime.rb +2 -1
  171. data/lib/facts/macosx/system_profiler/username.rb +2 -1
  172. data/lib/facts/macosx/system_uptime/days.rb +2 -1
  173. data/lib/facts/macosx/system_uptime/hours.rb +2 -1
  174. data/lib/facts/macosx/system_uptime/seconds.rb +2 -1
  175. data/lib/facts/macosx/system_uptime/uptime.rb +2 -1
  176. data/lib/facts/sles/augeas/version.rb +19 -0
  177. data/lib/facts/sles/disks.rb +15 -0
  178. data/lib/facts/sles/dmi/bios/release_date.rb +19 -0
  179. data/lib/facts/sles/dmi/bios/vendor.rb +19 -0
  180. data/lib/facts/sles/dmi/bios/version.rb +19 -0
  181. data/lib/facts/sles/dmi/board/manufacturer.rb +19 -0
  182. data/lib/facts/sles/dmi/board/product.rb +19 -0
  183. data/lib/facts/sles/dmi/board/serial_number.rb +19 -0
  184. data/lib/facts/sles/dmi/chassis/asset_tag.rb +19 -0
  185. data/lib/facts/sles/dmi/chassis/type.rb +19 -0
  186. data/lib/facts/sles/dmi/manufacturer.rb +17 -0
  187. data/lib/facts/sles/dmi/product/name.rb +19 -0
  188. data/lib/facts/sles/dmi/product/serial_number.rb +19 -0
  189. data/lib/facts/sles/dmi/product/uuid.rb +19 -0
  190. data/lib/facts/sles/filesystems.rb +14 -0
  191. data/lib/facts/sles/fips_enabled.rb +14 -0
  192. data/lib/facts/sles/identity/user.rb +17 -0
  193. data/lib/facts/sles/interfaces.rb +16 -0
  194. data/lib/facts/sles/load_averages.rb +14 -0
  195. data/lib/facts/sles/memory/swap/available.rb +2 -1
  196. data/lib/facts/sles/memory/swap/available_bytes.rb +3 -1
  197. data/lib/facts/sles/memory/swap/total.rb +2 -1
  198. data/lib/facts/sles/memory/swap/total_bytes.rb +3 -1
  199. data/lib/facts/sles/memory/swap/used.rb +1 -1
  200. data/lib/facts/sles/memory/swap/used_bytes.rb +1 -1
  201. data/lib/facts/sles/memory/system/available.rb +2 -1
  202. data/lib/facts/sles/memory/system/available_bytes.rb +3 -1
  203. data/lib/facts/sles/memory/system/total.rb +2 -1
  204. data/lib/facts/sles/memory/system/total_bytes.rb +3 -1
  205. data/lib/facts/sles/mountpoints.rb +21 -0
  206. data/lib/facts/sles/networking/mac.rb +18 -0
  207. data/lib/facts/sles/os/distro/codename.rb +21 -0
  208. data/lib/facts/sles/os/distro/description.rb +21 -0
  209. data/lib/facts/sles/os/distro/id.rb +21 -0
  210. data/lib/facts/sles/os/distro/release.rb +31 -0
  211. data/lib/facts/sles/os/distro/specification.rb +21 -0
  212. data/lib/facts/sles/os/family.rb +1 -1
  213. data/lib/facts/sles/os/hardware.rb +2 -1
  214. data/lib/facts/sles/os/release.rb +3 -3
  215. data/lib/facts/sles/os/selinux/config_mode.rb +21 -0
  216. data/lib/facts/sles/os/selinux/config_policy.rb +21 -0
  217. data/lib/facts/sles/os/selinux/current_mode.rb +21 -0
  218. data/lib/facts/sles/os/selinux/enabled.rb +21 -0
  219. data/lib/facts/sles/os/selinux/enforced.rb +21 -0
  220. data/lib/facts/sles/os/selinux/policy_version.rb +21 -0
  221. data/lib/facts/sles/puppet_version.rb +15 -0
  222. data/lib/facts/sles/ruby/platform.rb +3 -1
  223. data/lib/facts/sles/ruby/sitedir.rb +3 -1
  224. data/lib/facts/sles/ruby/version.rb +1 -0
  225. data/lib/facts/sles/sshalgorithmkey.rb +16 -0
  226. data/lib/facts/sles/sshfp_algorithm.rb +19 -0
  227. data/lib/facts/sles/system_uptime/days.rb +18 -0
  228. data/lib/facts/sles/system_uptime/hours.rb +18 -0
  229. data/lib/facts/sles/system_uptime/seconds.rb +18 -0
  230. data/lib/facts/sles/system_uptime/uptime.rb +18 -0
  231. data/lib/facts/solaris/augeas/version.rb +19 -0
  232. data/lib/facts/solaris/filesystems.rb +14 -0
  233. data/lib/facts/solaris/identity/user.rb +17 -0
  234. data/lib/facts/solaris/os/hardware.rb +3 -1
  235. data/lib/facts/solaris/puppet_version.rb +15 -0
  236. data/lib/facts/solaris/ruby/platform.rb +3 -1
  237. data/lib/facts/solaris/ruby/sitedir.rb +2 -1
  238. data/lib/facts/solaris/solaris_zones/current.rb +3 -1
  239. data/lib/facts/solaris/solaris_zones/zone.rb +39 -6
  240. data/lib/facts/solaris/ssh.rb +26 -0
  241. data/lib/facts/solaris/system_uptime/days.rb +17 -0
  242. data/lib/facts/solaris/system_uptime/hours.rb +17 -0
  243. data/lib/facts/{debian/system_uptime/minutes.rb → solaris/system_uptime/seconds.rb} +4 -4
  244. data/lib/facts/solaris/system_uptime/uptime.rb +17 -0
  245. data/lib/facts/solaris/timezone.rb +14 -0
  246. data/lib/facts/windows/augeas/version.rb +19 -0
  247. data/lib/facts/windows/puppet_version.rb +15 -0
  248. data/lib/facts_utils/bytes_converter.rb +15 -0
  249. data/lib/framework/config/block_list.rb +1 -1
  250. data/lib/framework/config/config_reader.rb +1 -1
  251. data/lib/framework/core/fact/external/external_fact_manager.rb +1 -1
  252. data/lib/framework/core/fact_loaders/external_fact_loader.rb +1 -1
  253. data/lib/framework/core/fact_manager.rb +5 -0
  254. data/lib/framework/logging/logger.rb +10 -1
  255. data/lib/models/fact_collection.rb +15 -1
  256. data/lib/models/resolved_fact.rb +5 -1
  257. data/lib/resolvers/aix/filesystem_resolver.rb +33 -0
  258. data/lib/resolvers/disk_resolver.rb +11 -3
  259. data/lib/resolvers/dmi_resolver.rb +1 -1
  260. data/lib/resolvers/filesystems_resolver.rb +2 -0
  261. data/lib/resolvers/fips_enabled_resolver.rb +2 -1
  262. data/lib/resolvers/hostname_resolver.rb +1 -1
  263. data/lib/resolvers/load_averages_resolver.rb +2 -0
  264. data/lib/resolvers/lsb_release_resolver.rb +23 -5
  265. data/lib/resolvers/macosx/ipaddress_resolver.rb +14 -1
  266. data/lib/resolvers/memory_resolver.rb +2 -0
  267. data/lib/resolvers/mountpoints_resolver.rb +2 -0
  268. data/lib/resolvers/networking_linux_resolver.rb +7 -1
  269. data/lib/resolvers/os_release_resolver.rb +1 -1
  270. data/lib/resolvers/processors_resolver.rb +2 -0
  271. data/lib/resolvers/puppet_version_resolver.rb +27 -0
  272. data/lib/resolvers/selinux_resolver.rb +36 -4
  273. data/lib/resolvers/solaris/filesystems_resolver.rb +32 -0
  274. data/lib/resolvers/solaris/zone_resolver.rb +4 -4
  275. data/lib/resolvers/ssh_resolver.rb +1 -1
  276. metadata +123 -8
  277. data/lib/facts/debian/os/distro.rb +0 -31
  278. data/lib/facts/debian/os/selinux.rb +0 -23
  279. data/lib/facts/el/os/selinux.rb +0 -23
  280. data/lib/facts/sles/os/selinux.rb +0 -23
@@ -6,9 +6,13 @@ module Facter
6
6
  attr_accessor :user_query, :filter_tokens, :value
7
7
 
8
8
  def initialize(name, value = '', type = :core)
9
+ unless type =~ /core|legacy|custom/
10
+ raise ArgumentError, 'The type provided for fact is not legacy, core or custom!'
11
+ end
12
+
9
13
  @name = name
10
14
  @value = Utils.deep_stringify_keys(value)
11
- type =~ /core|legacy/ ? @type = type : (raise ArgumentError, 'The type provided for fact is not legacy or core!')
15
+ @type = type
12
16
  end
13
17
 
14
18
  def legacy?
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Aix
6
+ class Filesystem < 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_vtf_file(fact_name) }
15
+ end
16
+
17
+ def read_vtf_file(fact_name)
18
+ return unless File.readable?('/etc/vfs')
19
+
20
+ file_content = File.readlines('/etc/vfs').map do |line|
21
+ next if line =~ /#|%/ # skip lines that are comments or defaultvfs line
22
+
23
+ line.split(' ').first
24
+ end
25
+
26
+ @fact_list[:file_systems] = file_content.compact.sort.join(',')
27
+ @fact_list[fact_name]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -17,28 +17,36 @@ module Facter
17
17
  end
18
18
 
19
19
  def read_facts(fact_name)
20
- @fact_list[:disks] = {}
21
20
  build_disks_hash
22
21
 
23
22
  FILE_PATHS.each do |key, file|
24
23
  @fact_list[:disks].each do |disk, value|
25
24
  file_path = File.join(DIR, disk, file)
26
25
 
27
- next unless File.exist?(file_path)
26
+ next unless File.readable?(file_path)
28
27
 
29
28
  result = File.read(file_path).strip
30
29
 
31
30
  # Linux always considers sectors to be 512 bytes long independently of the devices real block size.
32
- value[key] = file =~ /size/ ? result.to_i * 512 : result
31
+ value[key] = file =~ /size/ ? construct_size(value, result) : result
33
32
  end
34
33
  end
35
34
 
35
+ @fact_list[:disks] = nil if @fact_list[:disks].empty?
36
36
  @fact_list[fact_name]
37
37
  end
38
38
 
39
39
  def build_disks_hash
40
+ @fact_list[:disks] = {}
40
41
  directories = Dir.entries(DIR).reject { |dir| dir =~ /\.+/ }
41
42
  directories.each { |disk| @fact_list[:disks].merge!(disk => {}) }
43
+ @fact_list[:disks].select! { |disk, _fact| File.readable?(File.join(DIR, disk, 'device')) }
44
+ end
45
+
46
+ def construct_size(facts, value)
47
+ value = value.to_i * 512
48
+ facts[:size_bytes] = value
49
+ facts[:size] = Facter::BytesToHumanReadable.convert(value)
42
50
  end
43
51
  end
44
52
  end
@@ -35,7 +35,7 @@ module Facter
35
35
  product_uuid]
36
36
  return unless File.directory?('/sys/class/dmi')
37
37
 
38
- if files.include?(fact_name.to_s) && File.exist?("/sys/class/dmi/id/#{fact_name}")
38
+ if files.include?(fact_name.to_s) && File.readable?("/sys/class/dmi/id/#{fact_name}")
39
39
  @fact_list[fact_name] = File.read("/sys/class/dmi/id/#{fact_name}").strip
40
40
  chassis_to_name(@fact_list[fact_name]) if fact_name == :chassis_type
41
41
 
@@ -16,6 +16,8 @@ module Facter
16
16
  end
17
17
 
18
18
  def read_filesystems(fact_name)
19
+ return unless File.readable?('/proc/filesystems')
20
+
19
21
  output = File.read('/proc/filesystems')
20
22
  filesystems = []
21
23
  output.each_line do |line|
@@ -16,7 +16,8 @@ module Facter
16
16
  end
17
17
 
18
18
  def read_fips_file(fact_name)
19
- return @fact_list[fact_name] = false unless File.directory?('/proc/sys/crypto')
19
+ return @fact_list[fact_name] = false unless File.directory?('/proc/sys/crypto') ||
20
+ File.readable?('/proc/sys/crypto/fips_enabled')
20
21
 
21
22
  file_output = File.read('/proc/sys/crypto/fips_enabled')
22
23
  @fact_list[:fips_enabled] = file_output.strip == '1'
@@ -30,7 +30,7 @@ module Facter
30
30
  def read_domain(output)
31
31
  if output =~ /.*?\.(.+$)/
32
32
  domain = Regexp.last_match(1)
33
- elsif File.exist?('/etc/resolv.conf')
33
+ elsif File.readable?('/etc/resolv.conf')
34
34
  file = File.read('/etc/resolv.conf')
35
35
  if file =~ /^search\s+(\S+)/
36
36
  domain = Regexp.last_match(1)
@@ -15,6 +15,8 @@ module Facter
15
15
  end
16
16
 
17
17
  def read_load_averages_file(fact_name)
18
+ return unless File.readable?('/proc/loadavg')
19
+
18
20
  output = File.read('/proc/loadavg')
19
21
  @fact_list[:load_averages] = {}.tap { |h| h['1m'], h['5m'], h['15m'], = output.split.map(&:to_f) }
20
22
 
@@ -3,30 +3,48 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class LsbRelease < BaseResolver
6
+ # :lsb_version
6
7
  # :distributor_id
7
8
  # :description
8
9
  # :release
9
10
  # :codename
10
11
 
11
12
  @semaphore = Mutex.new
13
+ @log = Facter::Log.new(self)
12
14
  @fact_list ||= {}
13
15
 
14
16
  class << self
15
17
  private
16
18
 
17
19
  def post_resolve(fact_name)
18
- @fact_list.fetch(fact_name) { read_lsb_release_file(fact_name) }
20
+ @fact_list.fetch(fact_name) { retrieve_facts(fact_name) }
19
21
  end
20
22
 
21
- def read_lsb_release_file(fact_name)
22
- output, _status = Open3.capture2('lsb_release -a')
23
- release_info = output.delete("\t").split("\n").map { |e| e.split(':') }
23
+ def retrieve_facts(fact_name)
24
+ lsb_release_installed? if @fact_list[:lsb_release_installed].nil?
25
+ read_lsb_release_file if @fact_list[:lsb_release_installed]
26
+ @fact_list[fact_name]
27
+ end
28
+
29
+ def lsb_release_installed?
30
+ output, stderr, _status = Open3.capture3('which lsb_release')
31
+ @log.debug(stderr) unless stderr.empty?
32
+ @fact_list[:lsb_release_installed] = !output.empty?
33
+ end
34
+
35
+ def read_lsb_release_file
36
+ output, stderr, _status = Open3.capture3('lsb_release -a')
37
+ @log.debug(stderr) unless stderr.empty?
38
+ build_fact_list(output)
39
+ end
40
+
41
+ def build_fact_list(info)
42
+ release_info = info.delete("\t").split("\n").map { |e| e.split(':', 2) }
24
43
 
25
44
  result = Hash[*release_info.flatten]
26
45
  result.each { |k, v| @fact_list[k.downcase.gsub(/\s/, '_').to_sym] = v }
27
46
 
28
47
  @fact_list[:identifier] = @fact_list[:distributor_id]
29
- @fact_list[fact_name]
30
48
  end
31
49
  end
32
50
  end
@@ -18,10 +18,12 @@ module Facter
18
18
  ip = nil
19
19
  primary_interface = read_primary_interface
20
20
  unless primary_interface.nil?
21
+ @fact_list[:primary] = primary_interface
21
22
  output, _status = Open3.capture2("ipconfig getifaddr #{primary_interface}")
22
23
  ip = output.strip
23
24
  end
24
- @fact_list[fact_name] = ip
25
+ find_all_interfaces
26
+ @fact_list[:ip] = ip
25
27
  @fact_list[fact_name]
26
28
  end
27
29
 
@@ -33,6 +35,17 @@ module Facter
33
35
  end
34
36
  iface
35
37
  end
38
+
39
+ def find_all_interfaces
40
+ output, _status = Open3.capture2('ifconfig -a 2>/dev/null')
41
+
42
+ data_hash = Hash[*output.split(/^([A-Za-z0-9_]+): /)[1..-1]]
43
+
44
+ macaddress = */ether (([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2}))/.match(data_hash[@fact_list[:primary]])
45
+ @fact_list[:macaddress] = macaddress[1]
46
+
47
+ @fact_list[:interfaces] = data_hash.keys.join(',')
48
+ end
36
49
  end
37
50
  end
38
51
  end
@@ -15,6 +15,8 @@ module Facter
15
15
  end
16
16
 
17
17
  def read_meminfo_file(fact_name)
18
+ return unless File.readable?('/proc/meminfo')
19
+
18
20
  meminfo_output = File.read('/proc/meminfo')
19
21
  read_system(meminfo_output)
20
22
  read_swap(meminfo_output)
@@ -16,6 +16,8 @@ module Facter
16
16
  end
17
17
 
18
18
  def root_device
19
+ return unless File.readable?('/proc/cmdline')
20
+
19
21
  cmdline = File.read('/proc/cmdline')
20
22
  match = cmdline.match(/root=([^\s]+)/)
21
23
  match&.captures&.first
@@ -19,10 +19,16 @@ module Facter
19
19
 
20
20
  retrieve_default_interface_and_ip
21
21
  retrieve_interface_info
22
-
22
+ retrieve_macaddress
23
23
  @fact_list[fact_name]
24
24
  end
25
25
 
26
+ def retrieve_macaddress
27
+ output, _status = Open3.capture2("ip link show #{@fact_list[:primary_interface]}")
28
+ macaddress = */ether ([^ ]*) /.match(output)
29
+ @fact_list[:macaddress] = macaddress[1]
30
+ end
31
+
26
32
  def retrieve_interface_info
27
33
  output, _status = Open3.capture2('ip -o address')
28
34
  interfaces = {}
@@ -25,7 +25,7 @@ module Facter
25
25
  end
26
26
 
27
27
  def read_os_release_file(fact_name)
28
- unless File.exist?('/etc/os-release')
28
+ unless File.readable?('/etc/os-release')
29
29
  @fact_list[:name] = nil
30
30
  return
31
31
  end
@@ -19,6 +19,8 @@ module Facter
19
19
  end
20
20
 
21
21
  def read_cpuinfo(fact_name)
22
+ return unless File.readable?('/proc/cpuinfo')
23
+
22
24
  cpuinfo_output = File.read('/proc/cpuinfo')
23
25
  read_processors(cpuinfo_output) # + model names
24
26
 
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ class PuppetVersionResolver < BaseResolver
6
+ # :puppetversion
7
+
8
+ @semaphore = Mutex.new
9
+ @fact_list ||= {}
10
+
11
+ class << self
12
+ private
13
+
14
+ def post_resolve(fact_name)
15
+ @fact_list.fetch(fact_name) { puppet_version(fact_name) }
16
+ end
17
+
18
+ def puppet_version(fact_name)
19
+ require 'puppet/version'
20
+ @fact_list[:puppetversion] = Puppet.version
21
+
22
+ @fact_list[fact_name]
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -14,22 +14,54 @@ module Facter
14
14
  private
15
15
 
16
16
  def post_resolve(fact_name)
17
- @fact_list.fetch(fact_name) { read_lsb_release_file(fact_name) }
17
+ @fact_list.fetch(fact_name) { retrieve_facts(fact_name) }
18
18
  end
19
19
 
20
- def read_lsb_release_file(fact_name)
20
+ def retrieve_facts(fact_name)
21
+ mountpoint = read_mounts_file if @fact_list[:enabled].nil?
22
+ read_other_selinux_facts(mountpoint) if @fact_list[:enabled] && File.readable?('/etc/selinux/config')
23
+
24
+ @fact_list[fact_name]
25
+ end
26
+
27
+ def read_mounts_file
21
28
  output, _s = Open3.capture2('cat /proc/self/mounts')
22
29
  @fact_list[:enabled] = false
30
+ mountpoint = ''
23
31
 
24
32
  output.each_line do |line|
25
33
  next unless line =~ /selinuxfs/
26
34
 
27
35
  @fact_list[:enabled] = true
28
- @fact_list[:mountpoint] = line
36
+ mountpoint = line.split("\s")[1]
29
37
  break
30
38
  end
39
+ mountpoint
40
+ end
31
41
 
32
- @fact_list[fact_name]
42
+ def read_other_selinux_facts(mountpoint)
43
+ read_selinux_config
44
+
45
+ enforce_file = "#{mountpoint}/enforce"
46
+ policy_file = "#{mountpoint}/policyvers"
47
+
48
+ @fact_list[:policy_version] = File.read(policy_file) if File.readable?(policy_file)
49
+
50
+ enforce = File.read(enforce_file) if File.readable?(enforce_file)
51
+ if enforce.eql?('1')
52
+ @fact_list[:enforced] = true
53
+ @fact_list[:current_mode] = 'enforcing'
54
+ else
55
+ @fact_list[:enforced] = false
56
+ @fact_list[:current_mode] = 'permissive'
57
+ end
58
+ end
59
+
60
+ def read_selinux_config
61
+ File.readlines('/etc/selinux/config').map do |line|
62
+ @fact_list[:config_mode] = line.split('=').last.strip if line =~ /^SELINUX=/
63
+ @fact_list[:config_policy] = line.split('=').last.strip if line =~ /^SELINUXTYPE=/
64
+ end
33
65
  end
34
66
  end
35
67
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Solaris
6
+ class Filesystem < 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_sysdef_file(fact_name) }
15
+ end
16
+
17
+ def read_sysdef_file(fact_name)
18
+ return unless File.readable?('/usr/sbin/sysdef')
19
+
20
+ file_content, _status = Open3.capture2('/usr/sbin/sysdef')
21
+ files = file_content.split("\n").map do |line|
22
+ line.split('/').last if line =~ /^fs\.*/
23
+ end
24
+
25
+ @fact_list[:file_systems] = files.compact.sort.join(',')
26
+ @fact_list[fact_name]
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -14,7 +14,8 @@ module Facter
14
14
  end
15
15
 
16
16
  def build_zone_fact(fact_name)
17
- zone_adm_output, status = Open3.capture2('/usr/sbin/zoneadm list -cp')
17
+ command = '/usr/sbin/zoneadm list -cp'
18
+ zone_adm_output, status = Open3.capture2(command)
18
19
  unless status.to_s.include?('exit 0')
19
20
  @log.debug("Command #{command} returned status: #{status}")
20
21
  return
@@ -32,17 +33,16 @@ module Facter
32
33
  zones_fact = []
33
34
  zones_result.each_line do |zone_line|
34
35
  id, name, status, path, uuid, brand, ip_type = zone_line.split(':')
35
- zone_fact = {
36
+ zones_fact << {
36
37
  brand: brand,
37
38
  id: id,
38
- ip_type: ip_type.chomp,
39
+ iptype: ip_type.chomp,
39
40
  name: name,
40
41
  uuid: uuid,
41
42
  status: status,
42
43
  path: path
43
44
 
44
45
  }
45
- zones_fact << zone_fact
46
46
  end
47
47
  zones_fact
48
48
  end
@@ -24,7 +24,7 @@ module Facter
24
24
  next unless File.directory?(file_path)
25
25
 
26
26
  @file_names.each do |file_name|
27
- next unless File.file?(File.join(file_path, file_name))
27
+ next unless FileTest.file?(File.join(file_path, file_name))
28
28
 
29
29
  key_type, key = File.read(File.join(file_path, file_name)).split(' ')
30
30
  key_name = determine_ssh_key_name(key_type)