facter 4.0.35 → 4.0.40

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 (185) hide show
  1. checksums.yaml +4 -4
  2. data/bin/facter +3 -4
  3. data/lib/facter.rb +163 -23
  4. data/lib/facter/custom_facts/core/execution/base.rb +36 -6
  5. data/lib/facter/custom_facts/util/directory_loader.rb +13 -3
  6. data/lib/facter/custom_facts/util/fact.rb +4 -1
  7. data/lib/facter/fact_groups.conf +140 -1
  8. data/lib/facter/facts/aix/disks.rb +17 -2
  9. data/lib/facter/facts/aix/kernel.rb +1 -1
  10. data/lib/facter/facts/aix/kernelmajversion.rb +1 -1
  11. data/lib/facter/facts/aix/kernelrelease.rb +1 -1
  12. data/lib/facter/facts/aix/kernelversion.rb +1 -1
  13. data/lib/facter/facts/aix/networking/scope6.rb +3 -1
  14. data/lib/facter/facts/aix/os/release.rb +1 -1
  15. data/lib/facter/facts/aix/scope6_interfaces.rb +0 -2
  16. data/lib/facter/facts/aix/serialnumber.rb +20 -0
  17. data/lib/facter/facts/aix/sshalgorithmkey.rb +17 -0
  18. data/lib/facter/facts/aix/sshfp_algorithm.rb +20 -0
  19. data/lib/facter/facts/debian/os/distro/release.rb +6 -1
  20. data/lib/facter/facts/freebsd/sshalgorithmkey.rb +17 -0
  21. data/lib/facter/facts/freebsd/sshfp_algorithm.rb +20 -0
  22. data/lib/facter/facts/linux/cloud.rb +15 -0
  23. data/lib/facter/facts/linux/disks.rb +20 -1
  24. data/lib/facter/facts/linux/dmi/board/asset_tag.rb +19 -0
  25. data/lib/facter/facts/linux/ec2_metadata.rb +11 -6
  26. data/lib/facter/facts/linux/ec2_userdata.rb +7 -4
  27. data/lib/facter/facts/linux/gce.rb +16 -0
  28. data/lib/facter/facts/linux/is_virtual.rb +1 -3
  29. data/lib/facter/facts/linux/networking/scope6.rb +3 -1
  30. data/lib/facter/facts/linux/partitions.rb +1 -1
  31. data/lib/facter/facts/linux/processors/speed.rb +17 -0
  32. data/lib/facter/facts/linux/scope6_interfaces.rb +1 -2
  33. data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
  34. data/lib/facter/facts/linux/xen.rb +28 -0
  35. data/lib/facter/facts/macosx/networking/scope6.rb +3 -1
  36. data/lib/facter/facts/macosx/scope6_interfaces.rb +0 -2
  37. data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
  38. data/lib/facter/facts/rhel/os/release.rb +2 -2
  39. data/lib/facter/facts/solaris/disks.rb +21 -2
  40. data/lib/facter/facts/solaris/hypervisors/ldom.rb +24 -0
  41. data/lib/facter/facts/solaris/hypervisors/zone.rb +39 -0
  42. data/lib/facter/facts/solaris/is_virtual.rb +64 -0
  43. data/lib/facter/facts/solaris/kernelmajversion.rb +1 -1
  44. data/lib/facter/facts/solaris/ldom.rb +35 -0
  45. data/lib/facter/facts/solaris/sshalgorithmkey.rb +17 -0
  46. data/lib/facter/facts/solaris/sshfp_algorithm.rb +20 -0
  47. data/lib/facter/facts/solaris/virtual.rb +60 -0
  48. data/lib/facter/facts/solaris/zones.rb +1 -1
  49. data/lib/facter/facts/ubuntu/lsbdistrelease.rb +23 -0
  50. data/lib/facter/facts/windows/ec2_metadata.rb +5 -3
  51. data/lib/facter/facts/windows/ec2_userdata.rb +5 -3
  52. data/lib/facter/facts/windows/gce.rb +16 -0
  53. data/lib/facter/facts/windows/networking/scope6.rb +3 -1
  54. data/lib/facter/facts/windows/sshalgorithmkey.rb +22 -0
  55. data/lib/facter/facts/windows/sshfp_algorithm.rb +25 -0
  56. data/lib/facter/facts_utils/facts_utils.rb +2 -0
  57. data/lib/facter/framework/benchmarking/timer.rb +23 -0
  58. data/lib/facter/framework/cli/cli.rb +86 -34
  59. data/lib/facter/framework/cli/cli_launcher.rb +34 -38
  60. data/lib/facter/framework/config/fact_groups.rb +36 -2
  61. data/lib/facter/framework/core/cache_manager.rb +30 -18
  62. data/lib/facter/framework/core/fact/internal/core_fact.rb +2 -0
  63. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +11 -25
  64. data/lib/facter/framework/core/fact_filter.rb +13 -0
  65. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +38 -12
  66. data/lib/facter/framework/core/fact_loaders/internal_fact_loader.rb +7 -7
  67. data/lib/facter/framework/core/file_loader.rb +2 -0
  68. data/lib/facter/framework/core/options/config_file_options.rb +5 -3
  69. data/lib/facter/framework/core/options/option_store.rb +30 -11
  70. data/lib/facter/framework/core/session_cache.rb +1 -4
  71. data/lib/facter/framework/formatters/legacy_fact_formatter.rb +8 -1
  72. data/lib/facter/framework/formatters/yaml_fact_formatter.rb +1 -1
  73. data/lib/facter/framework/logging/logger.rb +3 -11
  74. data/lib/facter/patches/sysfilesystem/sys/statvfs.rb +92 -0
  75. data/lib/facter/resolvers/aio_agent_version.rb +0 -1
  76. data/lib/facter/resolvers/aix/architecture_resolver.rb +0 -1
  77. data/lib/facter/resolvers/aix/disks.rb +2 -3
  78. data/lib/facter/resolvers/aix/filesystem_resolver.rb +0 -1
  79. data/lib/facter/resolvers/aix/hardware_resolver.rb +0 -1
  80. data/lib/facter/resolvers/aix/load_averages_resolver.rb +0 -1
  81. data/lib/facter/resolvers/aix/memory.rb +2 -3
  82. data/lib/facter/resolvers/aix/mountpoints.rb +0 -1
  83. data/lib/facter/resolvers/aix/networking_resolver.rb +0 -1
  84. data/lib/facter/resolvers/aix/nim.rb +0 -1
  85. data/lib/facter/resolvers/aix/os_level.rb +27 -0
  86. data/lib/facter/resolvers/aix/partitions.rb +2 -3
  87. data/lib/facter/resolvers/aix/processors.rb +0 -1
  88. data/lib/facter/resolvers/aix/serialnumber.rb +36 -0
  89. data/lib/facter/resolvers/augeas_resolver.rb +0 -1
  90. data/lib/facter/resolvers/base_resolver.rb +9 -4
  91. data/lib/facter/resolvers/bsd/processors.rb +0 -1
  92. data/lib/facter/resolvers/cloud.rb +39 -0
  93. data/lib/facter/resolvers/containers.rb +0 -1
  94. data/lib/facter/resolvers/debian_version.rb +0 -1
  95. data/lib/facter/resolvers/disk_resolver.rb +0 -1
  96. data/lib/facter/resolvers/dmi_decode.rb +0 -1
  97. data/lib/facter/resolvers/dmi_resolver.rb +4 -4
  98. data/lib/facter/resolvers/ec2.rb +4 -19
  99. data/lib/facter/resolvers/eos_release_resolver.rb +0 -1
  100. data/lib/facter/resolvers/facterversion_resolver.rb +0 -1
  101. data/lib/facter/resolvers/filesystems_resolver.rb +0 -1
  102. data/lib/facter/resolvers/fips_enabled_resolver.rb +0 -1
  103. data/lib/facter/resolvers/freebsd/dmi_resolver.rb +0 -1
  104. data/lib/facter/resolvers/freebsd/freebsd_version_resolver.rb +0 -1
  105. data/lib/facter/resolvers/freebsd/geom_resolver.rb +0 -1
  106. data/lib/facter/resolvers/freebsd/processors.rb +0 -1
  107. data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +0 -1
  108. data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +0 -1
  109. data/lib/facter/resolvers/gce.rb +53 -0
  110. data/lib/facter/resolvers/hostname_resolver.rb +0 -1
  111. data/lib/facter/resolvers/identity_resolver.rb +0 -1
  112. data/lib/facter/resolvers/linux/docker_uptime.rb +0 -1
  113. data/lib/facter/resolvers/linux/load_averages.rb +0 -1
  114. data/lib/facter/resolvers/load_averages.rb +0 -1
  115. data/lib/facter/resolvers/lpar_resolver.rb +0 -1
  116. data/lib/facter/resolvers/lsb_release_resolver.rb +0 -1
  117. data/lib/facter/resolvers/lspci.rb +0 -1
  118. data/lib/facter/resolvers/macosx/dmi_resolver.rb +0 -1
  119. data/lib/facter/resolvers/macosx/filesystems_resolver.rb +1 -6
  120. data/lib/facter/resolvers/macosx/load_averages_resolver.rb +0 -1
  121. data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +3 -3
  122. data/lib/facter/resolvers/macosx/processor_resolver.rb +0 -1
  123. data/lib/facter/resolvers/macosx/swap_memory_resolver.rb +0 -1
  124. data/lib/facter/resolvers/macosx/system_memory_resolver.rb +0 -1
  125. data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +0 -1
  126. data/lib/facter/resolvers/memory_resolver.rb +13 -2
  127. data/lib/facter/resolvers/mountpoints_resolver.rb +0 -1
  128. data/lib/facter/resolvers/networking_linux_resolver.rb +0 -1
  129. data/lib/facter/resolvers/networking_resolver.rb +0 -1
  130. data/lib/facter/resolvers/open_vz.rb +0 -1
  131. data/lib/facter/resolvers/os_release_resolver.rb +0 -1
  132. data/lib/facter/resolvers/partitions.rb +37 -2
  133. data/lib/facter/resolvers/path_resolver.rb +0 -1
  134. data/lib/facter/resolvers/processors_resolver.rb +24 -3
  135. data/lib/facter/resolvers/puppet_version_resolver.rb +0 -1
  136. data/lib/facter/resolvers/redhat_release_resolver.rb +0 -1
  137. data/lib/facter/resolvers/ruby_resolver.rb +0 -1
  138. data/lib/facter/resolvers/selinux_resolver.rb +0 -1
  139. data/lib/facter/resolvers/solaris/disks.rb +0 -1
  140. data/lib/facter/resolvers/solaris/dmi.rb +0 -1
  141. data/lib/facter/resolvers/solaris/dmi_sparc.rb +0 -1
  142. data/lib/facter/resolvers/solaris/filesystems.rb +0 -1
  143. data/lib/facter/resolvers/solaris/ipaddress.rb +0 -1
  144. data/lib/facter/resolvers/solaris/ldom.rb +69 -0
  145. data/lib/facter/resolvers/solaris/memory.rb +0 -1
  146. data/lib/facter/resolvers/solaris/networking.rb +0 -1
  147. data/lib/facter/resolvers/solaris/os_release.rb +0 -1
  148. data/lib/facter/resolvers/solaris/processors.rb +0 -1
  149. data/lib/facter/resolvers/solaris/zone.rb +0 -1
  150. data/lib/facter/resolvers/solaris/zone_name.rb +0 -1
  151. data/lib/facter/resolvers/ssh_resolver.rb +0 -1
  152. data/lib/facter/resolvers/suse_release_resolver.rb +0 -1
  153. data/lib/facter/resolvers/sw_vers_resolver.rb +0 -1
  154. data/lib/facter/resolvers/timezone_resolver.rb +0 -1
  155. data/lib/facter/resolvers/uname_resolver.rb +0 -1
  156. data/lib/facter/resolvers/uptime_resolver.rb +0 -1
  157. data/lib/facter/resolvers/utils/filesystem_helper.rb +3 -1
  158. data/lib/facter/resolvers/utils/http.rb +68 -0
  159. data/lib/facter/resolvers/virt_what.rb +0 -1
  160. data/lib/facter/resolvers/vmware.rb +0 -1
  161. data/lib/facter/resolvers/windows/aio_agent_version.rb +0 -1
  162. data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +0 -1
  163. data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +0 -1
  164. data/lib/facter/resolvers/windows/fips_resolver.rb +0 -1
  165. data/lib/facter/resolvers/windows/hardware_architecture_resolver.rb +0 -1
  166. data/lib/facter/resolvers/windows/identity_resolver.rb +0 -1
  167. data/lib/facter/resolvers/windows/kernel_resolver.rb +0 -1
  168. data/lib/facter/resolvers/windows/memory_resolver.rb +0 -1
  169. data/lib/facter/resolvers/windows/netkvm_resolver.rb +0 -1
  170. data/lib/facter/resolvers/windows/networking_resolver.rb +0 -1
  171. data/lib/facter/resolvers/windows/processors_resolver.rb +0 -1
  172. data/lib/facter/resolvers/windows/product_release_resolver.rb +0 -1
  173. data/lib/facter/resolvers/windows/ssh.rb +0 -1
  174. data/lib/facter/resolvers/windows/system32_resolver.rb +0 -1
  175. data/lib/facter/resolvers/windows/uptime_resolver.rb +0 -1
  176. data/lib/facter/resolvers/windows/virtualization_resolver.rb +0 -1
  177. data/lib/facter/resolvers/windows/win_os_description_resolver.rb +0 -1
  178. data/lib/facter/resolvers/wpar_resolver.rb +0 -1
  179. data/lib/facter/resolvers/xen.rb +28 -1
  180. data/lib/facter/resolvers/zfs.rb +0 -1
  181. data/lib/facter/resolvers/zpool.rb +0 -1
  182. data/lib/facter/version.rb +1 -1
  183. metadata +31 -4
  184. data/lib/facter/resolvers/aix/os_level_resolver.rb +0 -26
  185. data/lib/facter/resolvers/os_level_resolver.rb +0 -29
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Macosx
6
6
  class SwapMemory < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  class << self
10
9
  private
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Macosx
6
6
  class SystemMemory < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  class << self
10
9
  private
@@ -15,7 +15,6 @@ module Facter
15
15
  SP_ETHERNET_DATA_TYPE = %i[type bus vendor_id device_id subsystem_vendor_id
16
16
  subsystem_id revision_id bsd_name kext_name location version].freeze
17
17
 
18
- @semaphore = Mutex.new
19
18
  @fact_list = {}
20
19
 
21
20
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Linux
6
6
  class Memory < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  @log = Facter::Log.new(self)
10
9
  class << self
@@ -27,7 +26,7 @@ module Facter
27
26
  def read_system(output)
28
27
  @fact_list[:total] = kilobytes_to_bytes(output.match(/MemTotal:\s+(\d+)\s/)[1])
29
28
  @fact_list[:memfree] = kilobytes_to_bytes(output.match(/MemFree:\s+(\d+)\s/)[1])
30
- @fact_list[:used_bytes] = compute_used(@fact_list[:total], @fact_list[:memfree])
29
+ @fact_list[:used_bytes] = compute_used(@fact_list[:total], reclaimable_memory(output))
31
30
  @fact_list[:capacity] = compute_capacity(@fact_list[:used_bytes], @fact_list[:total])
32
31
  end
33
32
 
@@ -45,6 +44,18 @@ module Facter
45
44
  quantity.to_i * 1024
46
45
  end
47
46
 
47
+ def reclaimable_memory(output)
48
+ buffers = kilobytes_to_bytes(output.match(/Buffers:\s+(\d+)\s/)[1])
49
+ cached = kilobytes_to_bytes(output.match(/Cached:\s+(\d+)\s/)[1])
50
+ s_reclaimable = output.match(/SReclaimable:\s+(\d+)\s/)
51
+ s_reclaimable = if s_reclaimable
52
+ kilobytes_to_bytes(s_reclaimable[1])
53
+ else
54
+ 0
55
+ end
56
+ @fact_list[:memfree] + buffers + cached + s_reclaimable
57
+ end
58
+
48
59
  def compute_capacity(used, total)
49
60
  format('%<computed_capacity>.2f', computed_capacity: (used / total.to_f * 100)) + '%'
50
61
  end
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  class Mountpoints < BaseResolver
6
6
  include Facter::FilesystemHelper
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  @log = Facter::Log.new(self)
10
9
  class << self
@@ -3,7 +3,6 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class NetworkingLinux < BaseResolver
6
- @semaphore = Mutex.new
7
6
  @fact_list = {}
8
7
  DIRS = ['/var/lib/dhclient/', '/var/lib/dhcp/', '/var/lib/dhcp3/', '/var/lib/NetworkManager/', '/var/db/'].freeze
9
8
 
@@ -3,7 +3,6 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class Networking < BaseResolver
6
- @semaphore = Mutex.new
7
6
  @fact_list ||= {}
8
7
 
9
8
  class << self
@@ -5,7 +5,6 @@ module Facter
5
5
  class OpenVz < BaseResolver
6
6
  # build
7
7
 
8
- @semaphore = Mutex.new
9
8
  @fact_list ||= {}
10
9
 
11
10
  class << self
@@ -14,7 +14,6 @@ module Facter
14
14
  # :support_url
15
15
  # :bug_report_url
16
16
 
17
- @semaphore = Mutex.new
18
17
  @fact_list ||= {}
19
18
 
20
19
  class << self
@@ -3,7 +3,6 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class Partitions < BaseResolver
6
- @semaphore = Mutex.new
7
6
  @fact_list ||= {}
8
7
  BLOCK_PATH = '/sys/block'
9
8
  BLOCK_SIZE = 512
@@ -66,10 +65,18 @@ module Facter
66
65
  info_hash = { size_bytes: size_bytes,
67
66
  size: Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes),
68
67
  backing_file: backing_file }
69
- info_hash.merge!(populate_from_blkid(partition_name))
68
+ info_hash.merge!(populate_from_syscalls(partition_name))
70
69
  @fact_list[:partitions][partition_name] = info_hash.reject { |_key, value| value.nil? }
71
70
  end
72
71
 
72
+ def populate_from_syscalls(partition_name)
73
+ part_info = populate_from_blkid(partition_name)
74
+
75
+ return pupulate_from_lsblk(partition_name) if part_info.empty?
76
+
77
+ part_info
78
+ end
79
+
73
80
  def populate_from_blkid(partition_name)
74
81
  return {} unless blkid_command?
75
82
 
@@ -92,6 +99,34 @@ module Facter
92
99
  @blkid_exists = !output.empty?
93
100
  end
94
101
 
102
+ def pupulate_from_lsblk(partition_name)
103
+ return {} unless lsblk_command?
104
+
105
+ @lsblk_content ||= Facter::Core::Execution.execute('lsblk -fp', logger: log)
106
+
107
+ part_info = @lsblk_content.match(/#{partition_name}.*/).to_s.split(' ')
108
+ return {} if part_info.empty?
109
+
110
+ result = { filesystem: part_info[1] }
111
+
112
+ if part_info.count.eql?(5)
113
+ result[:label] = part_info[2]
114
+ result[:uuid] = part_info[3]
115
+ else
116
+ result[:uuid] = part_info[2]
117
+ end
118
+
119
+ result
120
+ end
121
+
122
+ def lsblk_command?
123
+ return @lsblk_exists unless @lsblk_exists.nil?
124
+
125
+ output = Facter::Core::Execution.execute('which lsblk', logger: log)
126
+
127
+ @lsblk_exists = !output.empty?
128
+ end
129
+
95
130
  def execute_and_extract_blkid_info
96
131
  stdout = Facter::Core::Execution.execute('blkid', logger: log)
97
132
  output_hash = Hash[*stdout.split(/^([^:]+):/)[1..-1]]
@@ -3,7 +3,6 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class Path < BaseResolver
6
- @semaphore = Mutex.new
7
6
  @fact_list ||= {}
8
7
 
9
8
  class << self
@@ -5,12 +5,13 @@ module Facter
5
5
  module Linux
6
6
  class Processors < BaseResolver
7
7
  @log = Facter::Log.new(self)
8
- @semaphore = Mutex.new
9
8
  @fact_list ||= {}
9
+ MHZ_TO_HZ = 1_000_000
10
10
  class << self
11
11
  # :count
12
12
  # :models
13
13
  # :physical_count
14
+ # :speed
14
15
 
15
16
  private
16
17
 
@@ -38,6 +39,7 @@ module Facter
38
39
  count_processors(tokens)
39
40
  construct_models_list(tokens)
40
41
  count_physical_processors(tokens)
42
+ build_speed(tokens)
41
43
  end
42
44
  end
43
45
 
@@ -46,7 +48,9 @@ module Facter
46
48
  end
47
49
 
48
50
  def construct_models_list(tokens)
49
- @fact_list[:models] << tokens.last.strip if tokens.first.strip == 'model name'
51
+ return unless tokens.first.strip == 'model name' || tokens.first.strip == 'cpu'
52
+
53
+ @fact_list[:models] << tokens.last.strip
50
54
  end
51
55
 
52
56
  def count_physical_processors(tokens)
@@ -54,7 +58,24 @@ module Facter
54
58
  end
55
59
 
56
60
  def physical_devices_count
57
- Dir.entries('/sys/devices/system/cpu').count { |dir| dir =~ /cpu[0-9]+$/ }
61
+ Dir.entries('/sys/devices/system/cpu')
62
+ .select { |dir| dir =~ /cpu[0-9]+$/ }
63
+ .count { |dir| File.exist?("/sys/devices/system/cpu/#{dir}/topology/physical_package_id") }
64
+ end
65
+
66
+ def build_speed(tokens)
67
+ build_speed_for_power_pc(tokens) if tokens.first.strip == 'clock'
68
+ build_speed_for_x86(tokens) if tokens.first.strip == 'cpu MHz'
69
+ end
70
+
71
+ def build_speed_for_power_pc(tokens)
72
+ speed = tokens.last.strip.match(/^(\d+).*MHz/)[1]
73
+ @fact_list[:speed] = speed.to_i * MHZ_TO_HZ
74
+ end
75
+
76
+ def build_speed_for_x86(tokens)
77
+ speed = tokens.last.strip.match(/^(\d+).*/)[1]
78
+ @fact_list[:speed] = speed.to_i * MHZ_TO_HZ
58
79
  end
59
80
  end
60
81
  end
@@ -5,7 +5,6 @@ module Facter
5
5
  class PuppetVersionResolver < BaseResolver
6
6
  # :puppetversion
7
7
 
8
- @semaphore = Mutex.new
9
8
  @fact_list ||= {}
10
9
 
11
10
  class << self
@@ -7,7 +7,6 @@ module Facter
7
7
  # :version
8
8
  # :codename
9
9
 
10
- @semaphore = Mutex.new
11
10
  @fact_list ||= {}
12
11
 
13
12
  class << self
@@ -3,7 +3,6 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class Ruby < BaseResolver
6
- @semaphore = Mutex.new
7
6
  @fact_list ||= {}
8
7
 
9
8
  class << self
@@ -3,7 +3,6 @@
3
3
  module Facter
4
4
  module Resolvers
5
5
  class SELinux < BaseResolver
6
- @semaphore = Mutex.new
7
6
  @fact_list ||= {}
8
7
 
9
8
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Disks < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
 
10
9
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Dmi < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
 
10
9
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class DmiSparc < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
 
10
9
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Filesystem < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
 
10
9
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Ipaddress < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  class << self
10
9
  private
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Solaris
6
+ class Ldom < BaseResolver
7
+ # :chassis_serial
8
+ # :control_domain
9
+ # :domain_name
10
+ # :domain_uuid
11
+ # :role_control
12
+ # :role_io
13
+ # :role_root
14
+ # :role_service
15
+ # :role_impl
16
+
17
+ @fact_list ||= {}
18
+
19
+ VIRTINFO_MAPPING = {
20
+ chassis_serial: %w[DOMAINCHASSIS serialno],
21
+ control_domain: %w[DOMAINCONTROL name],
22
+ domain_name: %w[DOMAINNAME name],
23
+ domain_uuid: %w[DOMAINUUID uuid],
24
+ role_control: %w[DOMAINROLE control],
25
+ role_io: %w[DOMAINROLE io],
26
+ role_root: %w[DOMAINROLE root],
27
+ role_service: %w[DOMAINROLE service],
28
+ role_impl: %w[DOMAINROLE impl]
29
+ }.freeze
30
+
31
+ class << self
32
+ private
33
+
34
+ def post_resolve(fact_name)
35
+ @fact_list.fetch(fact_name) { call_virtinfo(fact_name) }
36
+ end
37
+
38
+ def call_virtinfo(fact_name)
39
+ # return unless File.executable?('/usr/sbin/virtinfo')
40
+
41
+ virtinfo_output = Facter::Core::Execution.execute('/usr/sbin/virtinfo -a -p', logger: log)
42
+ return if virtinfo_output.empty?
43
+
44
+ output_hash = parse_output(virtinfo_output)
45
+ return if output_hash.empty?
46
+
47
+ VIRTINFO_MAPPING.each do |key, value|
48
+ @fact_list[key] = output_hash.dig(*value)&.strip
49
+ end
50
+
51
+ @fact_list[fact_name]
52
+ end
53
+
54
+ def parse_output(output)
55
+ result = {}
56
+ output.each_line do |line|
57
+ next unless line.include? 'DOMAIN'
58
+
59
+ x = line.split('|')
60
+ result[x.shift] = x.map { |f| f.split('=') }.to_h
61
+ end
62
+
63
+ result
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -7,7 +7,6 @@ module Facter
7
7
  BLOCKSIZE = 512
8
8
  # :system
9
9
  # :swap
10
- @semaphore = Mutex.new
11
10
  @fact_list ||= {}
12
11
  class << self
13
12
  private
@@ -8,7 +8,6 @@ module Facter
8
8
  module Solaris
9
9
  class Networking < BaseResolver
10
10
  @log = Facter::Log.new(self)
11
- @semaphore = Mutex.new
12
11
  @fact_list ||= {}
13
12
  @interfaces = {}
14
13
 
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class OsRelease < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  @os_version_regex_patterns = ['Solaris \d+ \d+/\d+ s(\d+)[sx]?_u(\d+)wos_',
10
9
  'Solaris (\d+)[.](\d+)', 'Solaris (\d+)']
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Processors < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  class << self
10
9
  private
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class Zone < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
 
10
9
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  module Solaris
6
6
  class ZoneName < BaseResolver
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
 
10
9
  class << self
@@ -4,7 +4,6 @@ module Facter
4
4
  module Resolvers
5
5
  class SshResolver < BaseResolver
6
6
  @log = Facter::Log.new(self)
7
- @semaphore = Mutex.new
8
7
  @fact_list ||= {}
9
8
  @file_names = %w[ssh_host_rsa_key.pub ssh_host_dsa_key.pub ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub]
10
9
  @file_paths = %w[/etc/ssh /usr/local/etc/ssh /etc /usr/local/etc /etc/opt/ssh]