facter 4.0.46 → 4.0.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docs/generate.rb +32 -0
  3. data/lib/docs/template.erb +34 -0
  4. data/lib/facter.rb +38 -6
  5. data/lib/facter/config.rb +32 -1
  6. data/lib/facter/custom_facts/util/collection.rb +1 -2
  7. data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
  8. data/lib/facter/custom_facts/util/fact.rb +18 -1
  9. data/lib/facter/custom_facts/util/loader.rb +1 -1
  10. data/lib/facter/custom_facts/util/resolution.rb +1 -1
  11. data/lib/facter/facts/aix/interfaces.rb +1 -0
  12. data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
  13. data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
  14. data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
  15. data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
  16. data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
  17. data/lib/facter/facts/aix/memory/system/available.rb +1 -1
  18. data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
  19. data/lib/facter/facts/aix/memory/system/total.rb +1 -1
  20. data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
  21. data/lib/facter/facts/aix/memory/system/used.rb +1 -1
  22. data/lib/facter/facts/aix/processors/speed.rb +1 -1
  23. data/lib/facter/facts/bsd/processors/speed.rb +1 -1
  24. data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
  25. data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
  26. data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
  27. data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
  28. data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
  29. data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
  30. data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
  31. data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
  32. data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
  33. data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
  34. data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
  35. data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
  36. data/lib/facter/facts/freebsd/virtual.rb +22 -0
  37. data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
  38. data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
  39. data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
  40. data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
  41. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
  42. data/lib/facter/facts/linux/interfaces.rb +1 -0
  43. data/lib/facter/facts/linux/is_virtual.rb +2 -2
  44. data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
  45. data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
  46. data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
  47. data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
  48. data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
  49. data/lib/facter/facts/linux/memory/system/available.rb +1 -1
  50. data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
  51. data/lib/facter/facts/linux/memory/system/total.rb +1 -1
  52. data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
  53. data/lib/facter/facts/linux/memory/system/used.rb +1 -1
  54. data/lib/facter/facts/linux/processors/speed.rb +1 -1
  55. data/lib/facter/facts/linux/virtual.rb +1 -1
  56. data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
  57. data/lib/facter/facts/macosx/interfaces.rb +1 -0
  58. data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
  59. data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
  60. data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
  61. data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
  62. data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
  63. data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
  64. data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
  65. data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
  66. data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
  67. data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
  68. data/lib/facter/facts/macosx/processors/speed.rb +1 -1
  69. data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
  70. data/lib/facter/facts/solaris/interfaces.rb +1 -0
  71. data/lib/facter/facts/solaris/is_virtual.rb +2 -2
  72. data/lib/facter/facts/solaris/ldom.rb +31 -4
  73. data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
  74. data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
  75. data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
  76. data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
  77. data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
  78. data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
  79. data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
  80. data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
  81. data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
  82. data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
  83. data/lib/facter/facts/solaris/processors/speed.rb +1 -1
  84. data/lib/facter/facts/solaris/virtual.rb +1 -1
  85. data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
  86. data/lib/facter/facts/windows/interfaces.rb +1 -0
  87. data/lib/facter/facts/windows/memory/system/available.rb +1 -1
  88. data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
  89. data/lib/facter/facts/windows/memory/system/total.rb +1 -1
  90. data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
  91. data/lib/facter/facts/windows/memory/system/used.rb +1 -1
  92. data/lib/facter/facts/windows/os/release.rb +1 -1
  93. data/lib/facter/framework/cli/cli.rb +1 -1
  94. data/lib/facter/framework/core/cache_manager.rb +1 -1
  95. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -2
  96. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +16 -0
  97. data/lib/facter/framework/core/fact_manager.rb +14 -2
  98. data/lib/facter/framework/core/file_loader.rb +6 -2
  99. data/lib/facter/framework/core/options/option_store.rb +2 -2
  100. data/lib/facter/framework/logging/logger.rb +3 -3
  101. data/lib/facter/models/fact_collection.rb +11 -1
  102. data/lib/facter/models/loaded_fact.rb +2 -1
  103. data/lib/facter/resolvers/aio_agent_version.rb +1 -1
  104. data/lib/facter/resolvers/aix/architecture_resolver.rb +3 -3
  105. data/lib/facter/resolvers/aix/disks.rb +4 -4
  106. data/lib/facter/resolvers/aix/filesystem_resolver.rb +1 -1
  107. data/lib/facter/resolvers/aix/hardware_resolver.rb +2 -2
  108. data/lib/facter/resolvers/aix/memory.rb +2 -2
  109. data/lib/facter/resolvers/aix/mountpoints.rb +4 -4
  110. data/lib/facter/resolvers/aix/networking_resolver.rb +3 -2
  111. data/lib/facter/resolvers/aix/partitions.rb +5 -5
  112. data/lib/facter/resolvers/aix/processors.rb +3 -3
  113. data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
  114. data/lib/facter/resolvers/base_resolver.rb +3 -0
  115. data/lib/facter/resolvers/cloud.rb +1 -1
  116. data/lib/facter/resolvers/containers.rb +3 -3
  117. data/lib/facter/resolvers/debian_version.rb +1 -1
  118. data/lib/facter/resolvers/disk_resolver.rb +2 -2
  119. data/lib/facter/resolvers/dmi_resolver.rb +1 -1
  120. data/lib/facter/resolvers/ec2.rb +3 -1
  121. data/lib/facter/resolvers/eos_release_resolver.rb +1 -1
  122. data/lib/facter/resolvers/filesystems_resolver.rb +1 -1
  123. data/lib/facter/resolvers/fips_enabled_resolver.rb +1 -1
  124. data/lib/facter/resolvers/freebsd/geom_resolver.rb +1 -1
  125. data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +3 -2
  126. data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +2 -1
  127. data/lib/facter/resolvers/freebsd/virtual_resolver.rb +45 -0
  128. data/lib/facter/resolvers/gce.rb +1 -1
  129. data/lib/facter/resolvers/hostname_resolver.rb +67 -20
  130. data/lib/facter/resolvers/linux/docker_uptime.rb +1 -1
  131. data/lib/facter/resolvers/linux/load_averages.rb +1 -1
  132. data/lib/facter/resolvers/load_averages.rb +3 -2
  133. data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +7 -7
  134. data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +3 -3
  135. data/lib/facter/resolvers/memory_resolver.rb +1 -1
  136. data/lib/facter/resolvers/mountpoints_resolver.rb +8 -8
  137. data/lib/facter/resolvers/networking_linux_resolver.rb +183 -85
  138. data/lib/facter/resolvers/networking_resolver.rb +8 -5
  139. data/lib/facter/resolvers/open_vz.rb +1 -3
  140. data/lib/facter/resolvers/os_release_resolver.rb +1 -1
  141. data/lib/facter/resolvers/partitions.rb +5 -5
  142. data/lib/facter/resolvers/processors_resolver.rb +2 -2
  143. data/lib/facter/resolvers/redhat_release_resolver.rb +1 -1
  144. data/lib/facter/resolvers/selinux_resolver.rb +3 -3
  145. data/lib/facter/resolvers/solaris/disks.rb +1 -1
  146. data/lib/facter/resolvers/solaris/memory.rb +2 -2
  147. data/lib/facter/resolvers/solaris/mountpoints.rb +11 -10
  148. data/lib/facter/resolvers/solaris/networking.rb +49 -41
  149. data/lib/facter/resolvers/solaris/os_release.rb +1 -1
  150. data/lib/facter/resolvers/ssh_resolver.rb +3 -2
  151. data/lib/facter/resolvers/suse_release_resolver.rb +1 -1
  152. data/lib/facter/resolvers/uptime_resolver.rb +2 -2
  153. data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
  154. data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +1 -1
  155. data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +1 -1
  156. data/lib/facter/resolvers/windows/memory_resolver.rb +4 -0
  157. data/lib/facter/resolvers/windows/networking_resolver.rb +3 -3
  158. data/lib/facter/resolvers/windows/processors_resolver.rb +1 -1
  159. data/lib/facter/resolvers/windows/ssh.rb +2 -2
  160. data/lib/facter/resolvers/windows/uptime_resolver.rb +1 -1
  161. data/lib/facter/resolvers/windows/virtualization_resolver.rb +1 -1
  162. data/lib/facter/resolvers/windows/win_os_description_resolver.rb +1 -1
  163. data/lib/facter/resolvers/xen.rb +1 -1
  164. data/lib/facter/util/aix/info_extractor.rb +24 -0
  165. data/lib/facter/util/aix/odm_query.rb +46 -0
  166. data/lib/facter/util/api_debugger.rb +33 -29
  167. data/lib/facter/util/facts/facts_utils.rb +14 -0
  168. data/lib/facter/util/facts/unit_converter.rb +61 -0
  169. data/lib/facter/util/facts/uptime_parser.rb +128 -0
  170. data/lib/facter/util/facts/virtual_detector.rb +90 -0
  171. data/lib/facter/util/facts/windows_release_finder.rb +55 -0
  172. data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
  173. data/lib/facter/util/resolvers/aws_token.rb +37 -0
  174. data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
  175. data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
  176. data/lib/facter/util/resolvers/fingerprint.rb +15 -0
  177. data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
  178. data/lib/facter/util/resolvers/networking.rb +90 -0
  179. data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
  180. data/lib/facter/util/resolvers/networking/networking.rb +109 -0
  181. data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
  182. data/lib/facter/util/resolvers/ssh.rb +17 -0
  183. data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
  184. data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
  185. data/lib/facter/{framework/utils → util}/utils.rb +0 -0
  186. data/lib/facter/util/windows/win32ole.rb +30 -0
  187. data/lib/facter/version.rb +1 -1
  188. metadata +29 -41
  189. data/lib/facter/facts/aix/puppet_version.rb +0 -15
  190. data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
  191. data/lib/facter/facts/linux/puppet_version.rb +0 -15
  192. data/lib/facter/facts/macosx/puppet_version.rb +0 -15
  193. data/lib/facter/facts/solaris/puppet_version.rb +0 -15
  194. data/lib/facter/facts/windows/puppet_version.rb +0 -15
  195. data/lib/facter/facts_utils/facts_utils.rb +0 -12
  196. data/lib/facter/facts_utils/unit_converter.rb +0 -59
  197. data/lib/facter/facts_utils/uptime_parser.rb +0 -124
  198. data/lib/facter/facts_utils/virtual_detector.rb +0 -78
  199. data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
  200. data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
  201. data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
  202. data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
  203. data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
  204. data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
  205. data/lib/facter/resolvers/utils/networking.rb +0 -88
  206. data/lib/facter/resolvers/utils/ssh.rb +0 -13
  207. data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
  208. data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
@@ -13,16 +13,19 @@ module Facter
13
13
  end
14
14
 
15
15
  def read_facts(fact_name)
16
- primary_interface
17
16
  interfaces_data
18
- ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
17
+ primary_interface
18
+ Facter::Util::Resolvers::Networking.expand_main_bindings(@fact_list)
19
19
  @fact_list[fact_name]
20
20
  end
21
21
 
22
22
  def primary_interface
23
- result = Facter::Core::Execution.execute('route -n get default', logger: log)
23
+ primary_helper = Facter::Util::Resolvers::Networking::PrimaryInterface
24
+ primary_interface ||= primary_helper.read_from_route
25
+
26
+ primary_interface ||= primary_helper.find_in_interfaces(@fact_list[:interfaces])
24
27
 
25
- @fact_list[:primary_interface] = result.match(/interface: (.+)/)&.captures&.first
28
+ @fact_list[:primary_interface] = primary_interface
26
29
  end
27
30
 
28
31
  def interfaces_data
@@ -95,7 +98,7 @@ module Facter
95
98
  def create_bindings(ips, masks)
96
99
  bindings = []
97
100
  ips.zip(masks).each do |ip, mask|
98
- bindings << ::Resolvers::Utils::Networking.build_binding(ip, mask)
101
+ bindings << Facter::Util::Resolvers::Networking.build_binding(ip, mask)
99
102
  end
100
103
  bindings
101
104
  end
@@ -15,9 +15,7 @@ module Facter
15
15
  end
16
16
 
17
17
  def check_proc_vz(fact_name)
18
- if !Dir.exist?('/proc/vz') || !File.executable?('/proc/lve/list') || Dir.entries('/proc/vz').count.equal?(2)
19
- return
20
- end
18
+ return if !Dir.exist?('/proc/vz') || File.file?('/proc/lve/list') || Dir.entries('/proc/vz').count.equal?(2)
21
19
 
22
20
  @fact_list[:vm] = read_proc_status
23
21
  @fact_list[fact_name]
@@ -24,7 +24,7 @@ module Facter
24
24
  end
25
25
 
26
26
  def read_os_release_file(fact_name)
27
- output = Util::FileHelper.safe_readlines('/etc/os-release')
27
+ output = Facter::Util::FileHelper.safe_readlines('/etc/os-release')
28
28
  return @fact_list[:name] = nil if output.empty?
29
29
 
30
30
  pairs = []
@@ -45,7 +45,7 @@ module Facter
45
45
  end
46
46
 
47
47
  def extract_from_dm(block_path, block_device, blkid_and_lsblk)
48
- map_name = Util::FileHelper.safe_read("#{block_path}/dm/name").chomp
48
+ map_name = Facter::Util::FileHelper.safe_read("#{block_path}/dm/name").chomp
49
49
  if map_name.empty?
50
50
  populate_partitions("/dev/#{block_device}", block_path, blkid_and_lsblk)
51
51
  else
@@ -54,7 +54,7 @@ module Facter
54
54
  end
55
55
 
56
56
  def extract_from_loop(block_path, block_device, blkid_and_lsblk)
57
- backing_file = Util::FileHelper.safe_read("#{block_path}/loop/backing_file").chomp
57
+ backing_file = Facter::Util::FileHelper.safe_read("#{block_path}/loop/backing_file").chomp
58
58
  if backing_file.empty?
59
59
  populate_partitions("/dev/#{block_device}", block_path, blkid_and_lsblk)
60
60
  else
@@ -63,10 +63,10 @@ module Facter
63
63
  end
64
64
 
65
65
  def populate_partitions(partition_name, block_path, blkid_and_lsblk, backing_file = nil)
66
- size_bytes = Util::FileHelper.safe_read("#{block_path}/size", '0')
67
- .chomp.to_i * BLOCK_SIZE
66
+ size_bytes = Facter::Util::FileHelper.safe_read("#{block_path}/size", '0')
67
+ .chomp.to_i * BLOCK_SIZE
68
68
  info_hash = { size_bytes: size_bytes,
69
- size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes),
69
+ size: Facter::Util::Facts::UnitConverter.bytes_to_human_readable(size_bytes),
70
70
  backing_file: backing_file }
71
71
  info_hash.merge!(populate_from_syscalls(partition_name, blkid_and_lsblk))
72
72
  @fact_list[:partitions][partition_name] = info_hash.reject { |_key, value| value.nil? }
@@ -23,7 +23,7 @@ module Facter
23
23
  end
24
24
 
25
25
  def read_cpuinfo(fact_name)
26
- cpuinfo_output = Util::FileHelper.safe_readlines('/proc/cpuinfo')
26
+ cpuinfo_output = Facter::Util::FileHelper.safe_readlines('/proc/cpuinfo')
27
27
  return if cpuinfo_output.empty?
28
28
 
29
29
  read_processors(cpuinfo_output) # + model names
@@ -65,7 +65,7 @@ module Facter
65
65
  .select { |dir| dir =~ /cpu[0-9]+$/ }
66
66
  .select { |dir| File.exist?("/sys/devices/system/cpu/#{dir}/topology/physical_package_id") }
67
67
  .map do |dir|
68
- Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
68
+ Facter::Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
69
69
  end
70
70
  .uniq.count
71
71
  end
@@ -17,7 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def read_redhat_release(fact_name)
20
- output = Util::FileHelper.safe_read('/etc/redhat-release', nil)
20
+ output = Facter::Util::FileHelper.safe_read('/etc/redhat-release', nil)
21
21
  return @fact_list[fact_name] = nil if output.nil?
22
22
 
23
23
  build_fact_list(output)
@@ -40,9 +40,9 @@ module Facter
40
40
  enforce_file = "#{mountpoint}/enforce"
41
41
  policy_file = "#{mountpoint}/policyvers"
42
42
 
43
- @fact_list[:policy_version] = Util::FileHelper.safe_read(policy_file, nil)
43
+ @fact_list[:policy_version] = Facter::Util::FileHelper.safe_read(policy_file, nil)
44
44
 
45
- enforce = Util::FileHelper.safe_read(enforce_file)
45
+ enforce = Facter::Util::FileHelper.safe_read(enforce_file)
46
46
  if enforce.eql?('1')
47
47
  @fact_list[:enforced] = true
48
48
  @fact_list[:current_mode] = 'enforcing'
@@ -53,7 +53,7 @@ module Facter
53
53
  end
54
54
 
55
55
  def read_selinux_config
56
- file_lines = Util::FileHelper.safe_readlines('/etc/selinux/config')
56
+ file_lines = Facter::Util::FileHelper.safe_readlines('/etc/selinux/config')
57
57
 
58
58
  file_lines.map do |line|
59
59
  @fact_list[:config_mode] = line.split('=').last.strip if line =~ /^SELINUX=/
@@ -36,7 +36,7 @@ module Facter
36
36
  disk_size = sizes[index].to_i
37
37
  disks[name] = {
38
38
  product: products[index],
39
- size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(disk_size),
39
+ size: Facter::Util::Facts::UnitConverter.bytes_to_human_readable(disk_size),
40
40
  size_bytes: disk_size,
41
41
  vendor: vendors[index]
42
42
  }
@@ -32,7 +32,7 @@ module Facter
32
32
  sys[:total_bytes] = total
33
33
  sys[:available_bytes] = free
34
34
  sys[:used_bytes] = total - free
35
- sys[:capacity] = FilesystemHelper.compute_capacity(total - free, total)
35
+ sys[:capacity] = Facter::Util::Resolvers::FilesystemHelper.compute_capacity(total - free, total)
36
36
 
37
37
  sys
38
38
  end
@@ -45,7 +45,7 @@ module Facter
45
45
  swap_hash[:total_bytes] = total
46
46
  swap_hash[:available_bytes] = free
47
47
  swap_hash[:used_bytes] = total - free
48
- swap_hash[:capacity] = FilesystemHelper.compute_capacity(total - free, total)
48
+ swap_hash[:capacity] = Facter::Util::Resolvers::FilesystemHelper.compute_capacity(total - free, total)
49
49
 
50
50
  swap_hash if total != 0
51
51
  end
@@ -4,7 +4,7 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Mountpoints < BaseResolver
7
- include Facter::FilesystemHelper
7
+ include Facter::Util::Resolvers::FilesystemHelper
8
8
  init_resolver
9
9
 
10
10
  class << self
@@ -15,7 +15,7 @@ module Facter
15
15
  end
16
16
 
17
17
  def root_device
18
- cmdline = Util::FileHelper.safe_read('/proc/cmdline')
18
+ cmdline = Facter::Util::FileHelper.safe_read('/proc/cmdline')
19
19
  match = cmdline.match(/root=([^\s]+)/)
20
20
  match&.captures&.first
21
21
  end
@@ -27,27 +27,28 @@ module Facter
27
27
  device
28
28
  end
29
29
 
30
- def read_mounts(fact_name) # rubocop:disable Metrics/AbcSize
30
+ def read_mounts(fact_name) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
31
31
  mounts = []
32
- FilesystemHelper.read_mountpoints.each do |fs|
32
+ Facter::Util::Resolvers::FilesystemHelper.read_mountpoints.each do |fs|
33
33
  device = compute_device(fs.name)
34
34
  filesystem = fs.mount_type
35
35
  path = fs.mount_point
36
36
  options = fs.options.split(',').map(&:strip)
37
37
 
38
- stats = FilesystemHelper.read_mountpoint_stats(path)
38
+ stats = Facter::Util::Resolvers::FilesystemHelper.read_mountpoint_stats(path)
39
39
  size_bytes = stats.bytes_total.abs
40
40
  available_bytes = stats.bytes_available.abs
41
41
 
42
42
  used_bytes = stats.bytes_used.abs
43
43
  total_bytes = used_bytes + available_bytes
44
- capacity = FilesystemHelper.compute_capacity(used_bytes, total_bytes)
44
+ capacity = Facter::Util::Resolvers::FilesystemHelper.compute_capacity(used_bytes, total_bytes)
45
45
 
46
- size = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
47
- available = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(available_bytes)
48
- used = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(used_bytes)
46
+ size = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(size_bytes)
47
+ available = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(available_bytes)
48
+ used = Facter::Util::Facts::UnitConverter.bytes_to_human_readable(used_bytes)
49
49
 
50
- mounts << Hash[FilesystemHelper::MOUNT_KEYS.zip(FilesystemHelper::MOUNT_KEYS
50
+ mounts << Hash[Facter::Util::Resolvers::FilesystemHelper::MOUNT_KEYS
51
+ .zip(Facter::Util::Resolvers::FilesystemHelper::MOUNT_KEYS
51
52
  .map { |v| binding.local_variable_get(v) })]
52
53
  end
53
54
  @fact_list[:mountpoints] = mounts
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'ffi/ffi.rb'
4
- require 'ipaddr'
5
-
6
4
  module Facter
7
5
  module Resolvers
8
6
  module Solaris
@@ -18,24 +16,38 @@ module Facter
18
16
  end
19
17
 
20
18
  def read_facts(fact_name)
21
- lifreqs = load_interfaces
22
- @interfaces = {}
19
+ begin
20
+ lifreqs = load_interfaces
21
+ @interfaces = {}
22
+
23
+ lifreqs.each do |lifreq|
24
+ obtain_info_for_interface(lifreq)
25
+ end
26
+
27
+ @fact_list[:primary_interface] = Facter::Util::Resolvers::Networking::PrimaryInterface.read_from_route
23
28
 
24
- lifreqs.each do |lifreq|
25
- @interfaces[lifreq.name] ||= {}
29
+ unless @interfaces.empty?
30
+ @fact_list[:interfaces] = @interfaces
31
+ @fact_list[:primary_interface] ||=
32
+ Facter::Util::Resolvers::Networking::PrimaryInterface.find_in_interfaces(@interfaces)
33
+ end
26
34
 
27
- add_mac(lifreq)
28
- add_bindings(lifreq)
29
- add_mtu(lifreq)
30
- add_dhcp(lifreq.name)
35
+ Facter::Util::Resolvers::Networking.expand_main_bindings(@fact_list)
36
+ rescue StandardError => e
37
+ @log.log_exception(e)
31
38
  end
39
+ @fact_list[fact_name]
40
+ end
32
41
 
33
- @fact_list = { interfaces: @interfaces } unless @interfaces.empty?
34
- primary_interface
42
+ def obtain_info_for_interface(lifreq)
43
+ @interfaces[lifreq.name] ||= {}
35
44
 
36
- ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
45
+ add_mac(lifreq)
46
+ add_bindings(lifreq)
47
+ add_mtu(lifreq)
37
48
 
38
- @fact_list[fact_name]
49
+ dhcp = Facter::Util::Resolvers::Networking::Dhcp.get(lifreq.name, @log)
50
+ @interfaces[lifreq.name][:dhcp] = dhcp if dhcp
39
51
  end
40
52
 
41
53
  def add_mac(lifreq)
@@ -43,7 +55,10 @@ module Facter
43
55
 
44
56
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGARP, arp, lifreq.ss_family)
45
57
 
46
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
58
+ if ioctl == -1
59
+ @log.debug("Could not read MAC address for interface #{lifreq.name} "\
60
+ "error code is: #{::FFI::LastError.error}")
61
+ end
47
62
 
48
63
  mac = arp.sa_data_to_mac
49
64
  @interfaces[lifreq.name][:mac] ||= mac if mac.count('0') < 12
@@ -53,7 +68,7 @@ module Facter
53
68
  ip = inet_ntop(lifreq, lifreq.ss_family)
54
69
  _netmask, netmask_length = load_netmask(lifreq)
55
70
 
56
- bindings = ::Resolvers::Utils::Networking.build_binding(ip, netmask_length)
71
+ bindings = Facter::Util::Resolvers::Networking.build_binding(ip, netmask_length)
57
72
 
58
73
  bindings_key = BINDINGS_KEY[lifreq.ss_family]
59
74
  @interfaces[lifreq.name][bindings_key] ||= []
@@ -63,7 +78,10 @@ module Facter
63
78
  def add_mtu(lifreq)
64
79
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFMTU, lifreq, lifreq.ss_family)
65
80
 
66
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
81
+ if ioctl == -1
82
+ @log.error("Cold not read MTU, error code is #{::FFI::LastError.error}")
83
+ return
84
+ end
67
85
 
68
86
  @interfaces[lifreq.name][:mtu] ||= lifreq[:lifr_lifru][:lifru_metric]
69
87
  end
@@ -74,11 +92,12 @@ module Facter
74
92
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFNETMASK, netmask_lifreq, lifreq.ss_family)
75
93
 
76
94
  if ioctl == -1
77
- @log.debug("Error! #{::FFI::LastError.error}")
78
- else
79
- netmask = inet_ntop(netmask_lifreq, lifreq.ss_family)
80
- [netmask, calculate_mask_length(netmask)]
95
+ @log.error("Could not read Netmask, error code is: #{::FFI::LastError.error}")
96
+ return
81
97
  end
98
+
99
+ netmask = inet_ntop(netmask_lifreq, lifreq.ss_family)
100
+ [netmask, Facter::Util::Resolvers::Networking.calculate_mask_length(netmask)]
82
101
  end
83
102
 
84
103
  def inet_ntop(lifreq, ss_family)
@@ -100,7 +119,7 @@ module Facter
100
119
 
101
120
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFNUM, lifnum)
102
121
 
103
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
122
+ @log.error("Could not read interface count, error code is: #{::FFI::LastError.error}") if ioctl == -1
104
123
 
105
124
  lifnum[:lifn_count]
106
125
  end
@@ -112,7 +131,14 @@ module Facter
112
131
 
113
132
  ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFCONF, lifconf)
114
133
 
115
- @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
134
+ # we need to enlarge the scope of this pointer so that Ruby GC will not free the memory.
135
+ # If the pointer if freed, Lifreq structures will contain garbage from memory.
136
+ @long_living_pointer = lifconf
137
+
138
+ if ioctl == -1
139
+ @log.error("Could not read interface information, error code is: #{::FFI::LastError.error}")
140
+ return []
141
+ end
116
142
 
117
143
  interfaces = []
118
144
  interface_count.times do |i|
@@ -121,24 +147,6 @@ module Facter
121
147
 
122
148
  interfaces
123
149
  end
124
-
125
- def calculate_mask_length(netmask)
126
- ipaddr = IPAddr.new(netmask)
127
- ipaddr.to_i.to_s(2).count('1')
128
- end
129
-
130
- def primary_interface
131
- result = Facter::Core::Execution.execute('route -n get default', logger: log)
132
-
133
- @fact_list[:primary_interface] = result.match(/interface: (.+)/)&.captures&.first
134
- end
135
-
136
- def add_dhcp(interface_name)
137
- dhcpinfo_command = Facter::Core::Execution.which('dhcpinfo') || '/sbin/dhcpinfo'
138
- result = Facter::Core::Execution.execute("#{dhcpinfo_command} -i #{interface_name} ServerID", logger: log)
139
-
140
- @interfaces[interface_name][:dhcp] = result.chomp
141
- end
142
150
  end
143
151
  end
144
152
  end
@@ -17,7 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def build_release_facts(fact_name)
20
- result = Util::FileHelper.safe_read('/etc/release', nil)
20
+ result = Facter::Util::FileHelper.safe_read('/etc/release', nil)
21
21
  return @fact_list[fact_name] = nil if result.nil?
22
22
 
23
23
  OS_VERSION_REGEX_PATTERNS.each do |os_version_regex|
@@ -23,11 +23,12 @@ module Facter
23
23
  next unless File.directory?(file_path)
24
24
 
25
25
  FILE_NAMES.each do |file_name|
26
- file_content = Util::FileHelper.safe_read(File.join(file_path, file_name), nil)
26
+ file_content = Facter::Util::FileHelper.safe_read(File.join(file_path, file_name), nil)
27
27
  next unless file_content
28
28
 
29
29
  key_type, key = file_content.split(' ')
30
- ssh_list << ::Resolvers::Utils::SshHelper.create_ssh(key_type, key)
30
+ ssh = Facter::Util::Resolvers::SshHelper.create_ssh(key_type, key)
31
+ ssh_list << ssh if ssh
31
32
  end
32
33
  end
33
34
  @fact_list[:ssh] = ssh_list
@@ -17,7 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def read_suse_release(fact_name)
20
- output = Util::FileHelper.safe_read('/etc/SuSE-release', nil)
20
+ output = Facter::Util::FileHelper.safe_read('/etc/SuSE-release', nil)
21
21
  return @fact_list[fact_name] = nil if output.nil?
22
22
 
23
23
  output_strings = output.split(' ')
@@ -13,7 +13,7 @@ module Facter
13
13
  end
14
14
 
15
15
  def uptime_system_call(fact_name)
16
- seconds = Facter::UptimeParser.uptime_seconds_unix
16
+ seconds = Facter::Util::Facts::UptimeParser.uptime_seconds_unix
17
17
  build_fact_list(seconds)
18
18
 
19
19
  @fact_list[fact_name]
@@ -22,7 +22,7 @@ module Facter
22
22
  def build_fact_list(seconds)
23
23
  return @fact_list[:uptime] = 'unknown' unless seconds
24
24
 
25
- @fact_list = Utils::UptimeHelper.create_uptime_hash(seconds)
25
+ @fact_list = Facter::Util::Resolvers::UptimeHelper.create_uptime_hash(seconds)
26
26
  end
27
27
  end
28
28
  end
@@ -30,7 +30,7 @@ module Facter
30
30
  return if puppet_aio_path.nil? || puppet_aio_path.empty?
31
31
 
32
32
  puppet_aio_version_path = File.join(puppet_aio_path, 'VERSION')
33
- aio_agent_version = Util::FileHelper.safe_read(puppet_aio_version_path, nil)&.chomp
33
+ aio_agent_version = Facter::Util::FileHelper.safe_read(puppet_aio_version_path, nil)&.chomp
34
34
 
35
35
  @fact_list[:aio_agent_version] = aio_agent_version&.match(/^\d+\.\d+\.\d+(\.\d+){0,2}/)&.to_s
36
36
  end
@@ -17,7 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def read_fact_from_bios(fact_name)
20
- win = Win32Ole.new
20
+ win = Facter::Util::Windows::Win32Ole.new
21
21
 
22
22
  bios = win.return_first('SELECT Manufacturer,SerialNumber from Win32_BIOS')
23
23
  unless bios