facter 4.0.40 → 4.0.46

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 (141) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facter.rb +72 -19
  3. data/lib/facter/config.rb +355 -0
  4. data/lib/facter/custom_facts/core/aggregate.rb +51 -17
  5. data/lib/facter/custom_facts/core/execution.rb +54 -38
  6. data/lib/facter/custom_facts/core/execution/base.rb +46 -40
  7. data/lib/facter/custom_facts/util/fact.rb +1 -1
  8. data/lib/facter/custom_facts/util/parser.rb +17 -3
  9. data/lib/facter/custom_facts/util/resolution.rb +40 -11
  10. data/lib/facter/facts/linux/ec2_metadata.rb +5 -30
  11. data/lib/facter/facts/linux/ec2_userdata.rb +5 -28
  12. data/lib/facter/facts/linux/is_virtual.rb +7 -46
  13. data/lib/facter/facts/linux/virtual.rb +3 -58
  14. data/lib/facter/facts/rhel/os/release.rb +1 -1
  15. data/lib/facter/facts/solaris/hypervisors/ldom.rb +3 -0
  16. data/lib/facter/facts/solaris/ldom.rb +4 -1
  17. data/lib/facter/facts/solaris/zones.rb +1 -1
  18. data/lib/facter/facts_utils/virtual_detector.rb +78 -0
  19. data/lib/facter/framework/benchmarking/timer.rb +4 -2
  20. data/lib/facter/framework/cli/cli.rb +19 -5
  21. data/lib/facter/framework/config/fact_groups.rb +10 -8
  22. data/lib/facter/framework/core/cache_manager.rb +78 -28
  23. data/lib/facter/framework/core/fact/internal/core_fact.rb +6 -1
  24. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +38 -4
  25. data/lib/facter/framework/core/fact_augmenter.rb +1 -1
  26. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +1 -1
  27. data/lib/facter/framework/core/fact_manager.rb +1 -1
  28. data/lib/facter/framework/core/options/config_file_options.rb +16 -5
  29. data/lib/facter/framework/core/options/option_store.rb +40 -20
  30. data/lib/facter/framework/detector/os_hierarchy.rb +5 -9
  31. data/lib/facter/resolvers/aio_agent_version.rb +1 -1
  32. data/lib/facter/resolvers/aix/architecture_resolver.rb +17 -2
  33. data/lib/facter/resolvers/aix/disks.rb +2 -1
  34. data/lib/facter/resolvers/aix/filesystem_resolver.rb +1 -1
  35. data/lib/facter/resolvers/aix/hardware_resolver.rb +2 -1
  36. data/lib/facter/resolvers/aix/load_averages_resolver.rb +2 -1
  37. data/lib/facter/resolvers/aix/memory.rb +2 -1
  38. data/lib/facter/resolvers/aix/mountpoints.rb +2 -1
  39. data/lib/facter/resolvers/aix/networking_resolver.rb +1 -1
  40. data/lib/facter/resolvers/aix/nim.rb +1 -1
  41. data/lib/facter/resolvers/aix/os_level.rb +2 -2
  42. data/lib/facter/resolvers/aix/partitions.rb +2 -1
  43. data/lib/facter/resolvers/aix/processors.rb +2 -1
  44. data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
  45. data/lib/facter/resolvers/augeas_resolver.rb +8 -2
  46. data/lib/facter/resolvers/base_resolver.rb +11 -4
  47. data/lib/facter/resolvers/bsd/processors.rb +13 -8
  48. data/lib/facter/resolvers/cloud.rb +1 -1
  49. data/lib/facter/resolvers/containers.rb +2 -1
  50. data/lib/facter/resolvers/debian_version.rb +1 -1
  51. data/lib/facter/resolvers/disk_resolver.rb +15 -4
  52. data/lib/facter/resolvers/dmi_decode.rb +2 -1
  53. data/lib/facter/resolvers/dmi_resolver.rb +4 -3
  54. data/lib/facter/resolvers/ec2.rb +2 -1
  55. data/lib/facter/resolvers/eos_release_resolver.rb +1 -1
  56. data/lib/facter/resolvers/facterversion_resolver.rb +1 -1
  57. data/lib/facter/resolvers/filesystems_resolver.rb +4 -1
  58. data/lib/facter/resolvers/fips_enabled_resolver.rb +4 -1
  59. data/lib/facter/resolvers/freebsd/dmi_resolver.rb +1 -1
  60. data/lib/facter/resolvers/freebsd/freebsd_version_resolver.rb +9 -7
  61. data/lib/facter/resolvers/freebsd/geom_resolver.rb +14 -21
  62. data/lib/facter/resolvers/freebsd/processors.rb +13 -8
  63. data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +2 -1
  64. data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +2 -1
  65. data/lib/facter/resolvers/gce.rb +2 -1
  66. data/lib/facter/resolvers/hostname_resolver.rb +2 -1
  67. data/lib/facter/resolvers/identity_resolver.rb +2 -1
  68. data/lib/facter/resolvers/linux/docker_uptime.rb +2 -1
  69. data/lib/facter/resolvers/linux/load_averages.rb +2 -1
  70. data/lib/facter/resolvers/load_averages.rb +2 -1
  71. data/lib/facter/resolvers/lpar_resolver.rb +1 -1
  72. data/lib/facter/resolvers/lsb_release_resolver.rb +1 -1
  73. data/lib/facter/resolvers/lspci.rb +1 -1
  74. data/lib/facter/resolvers/macosx/dmi_resolver.rb +1 -1
  75. data/lib/facter/resolvers/macosx/filesystems_resolver.rb +1 -1
  76. data/lib/facter/resolvers/macosx/load_averages_resolver.rb +2 -1
  77. data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +2 -1
  78. data/lib/facter/resolvers/macosx/processor_resolver.rb +2 -1
  79. data/lib/facter/resolvers/macosx/swap_memory_resolver.rb +2 -1
  80. data/lib/facter/resolvers/macosx/system_memory_resolver.rb +2 -1
  81. data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +1 -3
  82. data/lib/facter/resolvers/memory_resolver.rb +15 -15
  83. data/lib/facter/resolvers/mountpoints_resolver.rb +54 -23
  84. data/lib/facter/resolvers/networking_linux_resolver.rb +15 -9
  85. data/lib/facter/resolvers/networking_resolver.rb +1 -1
  86. data/lib/facter/resolvers/open_vz.rb +1 -1
  87. data/lib/facter/resolvers/os_release_resolver.rb +1 -1
  88. data/lib/facter/resolvers/partitions.rb +62 -58
  89. data/lib/facter/resolvers/path_resolver.rb +1 -1
  90. data/lib/facter/resolvers/processors_resolver.rb +9 -2
  91. data/lib/facter/resolvers/puppet_version_resolver.rb +1 -1
  92. data/lib/facter/resolvers/redhat_release_resolver.rb +1 -1
  93. data/lib/facter/resolvers/ruby_resolver.rb +1 -1
  94. data/lib/facter/resolvers/selinux_resolver.rb +1 -1
  95. data/lib/facter/resolvers/solaris/disks.rb +1 -1
  96. data/lib/facter/resolvers/solaris/dmi.rb +3 -1
  97. data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
  98. data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
  99. data/lib/facter/resolvers/solaris/ipaddress.rb +2 -1
  100. data/lib/facter/resolvers/solaris/ldom.rb +1 -3
  101. data/lib/facter/resolvers/solaris/memory.rb +2 -1
  102. data/lib/facter/resolvers/solaris/mountpoints.rb +60 -0
  103. data/lib/facter/resolvers/solaris/networking.rb +2 -3
  104. data/lib/facter/resolvers/solaris/os_release.rb +6 -4
  105. data/lib/facter/resolvers/solaris/processors.rb +2 -1
  106. data/lib/facter/resolvers/solaris/zone.rb +1 -1
  107. data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
  108. data/lib/facter/resolvers/ssh_resolver.rb +8 -5
  109. data/lib/facter/resolvers/suse_release_resolver.rb +1 -1
  110. data/lib/facter/resolvers/sw_vers_resolver.rb +2 -2
  111. data/lib/facter/resolvers/timezone_resolver.rb +1 -1
  112. data/lib/facter/resolvers/uname_resolver.rb +1 -1
  113. data/lib/facter/resolvers/uptime_resolver.rb +1 -1
  114. data/lib/facter/resolvers/utils/networking.rb +2 -0
  115. data/lib/facter/resolvers/virt_what.rb +1 -1
  116. data/lib/facter/resolvers/vmware.rb +1 -1
  117. data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
  118. data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +1 -1
  119. data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +1 -1
  120. data/lib/facter/resolvers/windows/fips_resolver.rb +2 -1
  121. data/lib/facter/resolvers/windows/hardware_architecture_resolver.rb +2 -1
  122. data/lib/facter/resolvers/windows/identity_resolver.rb +2 -1
  123. data/lib/facter/resolvers/windows/kernel_resolver.rb +3 -1
  124. data/lib/facter/resolvers/windows/memory_resolver.rb +3 -1
  125. data/lib/facter/resolvers/windows/netkvm_resolver.rb +2 -1
  126. data/lib/facter/resolvers/windows/networking_resolver.rb +2 -1
  127. data/lib/facter/resolvers/windows/processors_resolver.rb +2 -1
  128. data/lib/facter/resolvers/windows/product_release_resolver.rb +2 -1
  129. data/lib/facter/resolvers/windows/ssh.rb +3 -1
  130. data/lib/facter/resolvers/windows/system32_resolver.rb +3 -1
  131. data/lib/facter/resolvers/windows/uptime_resolver.rb +2 -1
  132. data/lib/facter/resolvers/windows/virtualization_resolver.rb +2 -1
  133. data/lib/facter/resolvers/windows/win_os_description_resolver.rb +3 -1
  134. data/lib/facter/resolvers/wpar_resolver.rb +1 -1
  135. data/lib/facter/resolvers/xen.rb +1 -1
  136. data/lib/facter/resolvers/zfs.rb +2 -1
  137. data/lib/facter/resolvers/zpool.rb +2 -1
  138. data/lib/facter/version.rb +1 -1
  139. metadata +7 -5
  140. data/lib/facter/fact_groups.conf +0 -308
  141. data/lib/facter/os_hierarchy.json +0 -36
@@ -14,6 +14,8 @@ module Facter
14
14
  class Resolution
15
15
  # @api private
16
16
  attr_accessor :code, :fact_type
17
+
18
+ # @api private
17
19
  attr_writer :value
18
20
 
19
21
  extend Facter::Core::Execution
@@ -24,7 +26,12 @@ module Facter
24
26
  # compatibility.
25
27
  #
26
28
  # @deprecated
27
- public :search_paths, :which, :absolute_path?, :expand_command, :with_env, :exec
29
+ #
30
+ # @api public
31
+ public :which, :exec
32
+
33
+ # @api private
34
+ public :with_env
28
35
  end
29
36
 
30
37
  include LegacyFacter::Core::Resolvable
@@ -32,22 +39,27 @@ module Facter
32
39
 
33
40
  # @!attribute [rw] name
34
41
  # The name of this resolution. The resolution name should be unique with
35
- # respect to the given fact.
42
+ # respect to the given fact.
43
+ #
36
44
  # @return [String]
45
+ #
37
46
  # @api public
38
47
  attr_accessor :name
39
48
 
40
49
  # @!attribute [r] fact
41
- # @return [Facter::Util::Fact]
50
+ #
51
+ # @return [Facter::Util::Fact] Associated fact with this resolution.
52
+ #
42
53
  # @api private
43
54
  attr_reader :fact
44
55
 
45
56
  # Create a new resolution mechanism.
46
57
  #
47
58
  # @param name [String] The name of the resolution.
48
- # @return [void]
49
59
  #
50
- # @api private
60
+ # @return [Facter::Util::Resolution] The created resolution
61
+ #
62
+ # @api public
51
63
  def initialize(name, fact)
52
64
  @name = name
53
65
  @fact = fact
@@ -57,6 +69,11 @@ module Facter
57
69
  @weight = nil
58
70
  end
59
71
 
72
+ # Returns the fact's resolution type
73
+ #
74
+ # @return [Symbol] The fact's type
75
+ #
76
+ # @api private
60
77
  def resolution_type
61
78
  :simple
62
79
  end
@@ -64,7 +81,9 @@ module Facter
64
81
  # Evaluate the given block in the context of this resolution. If a block has
65
82
  # already been evaluated emit a warning to that effect.
66
83
  #
67
- # @return [void]
84
+ # @return [String] Result of the block's evaluation
85
+ #
86
+ # @api private
68
87
  def evaluate(&block)
69
88
  if @last_evaluated
70
89
  msg = "Already evaluated #{@name}"
@@ -85,6 +104,11 @@ module Facter
85
104
  end
86
105
  end
87
106
 
107
+ # Sets options for the aggregate fact
108
+ #
109
+ # @return [nil]
110
+ #
111
+ # @api private
88
112
  def options(options)
89
113
  accepted_options = %i[name value timeout weight fact_type file]
90
114
 
@@ -98,8 +122,6 @@ module Facter
98
122
  # Sets the code block or external program that will be evaluated to
99
123
  # get the value of the fact.
100
124
  #
101
- # @return [void]
102
- #
103
125
  # @overload setcode(string)
104
126
  # Sets an external program to call to get the value of the resolution
105
127
  # @param [String] string the external program to run to get the
@@ -111,6 +133,8 @@ module Facter
111
133
  # This block is run when the fact is evaluated. Errors raised from
112
134
  # inside the block are rescued and printed to stderr.
113
135
  #
136
+ # @return [Facter::Util::Resolution] Returns itself
137
+ #
114
138
  # @api public
115
139
  def setcode(string = nil, &block)
116
140
  if string
@@ -127,11 +151,16 @@ module Facter
127
151
  else
128
152
  raise ArgumentError, 'You must pass either code or a block'
129
153
  end
154
+ self
130
155
  end
131
156
 
132
- # Comparation is done based on weight and fact type.
133
- # The greatter the weight, the higher the priority.
134
- # If weights are equal, we consider external facts greater than custom facts
157
+ # Comparison is done based on weight and fact type.
158
+ # The greater the weight, the higher the priority.
159
+ # If weights are equal, we consider external facts greater than custom facts.
160
+ #
161
+ # @return [bool] Weight comparison result
162
+ #
163
+ # @api private
135
164
  def <=>(other)
136
165
  return compare_equal_weights(other) if weight == other.weight
137
166
  return 1 if weight > other.weight
@@ -5,6 +5,10 @@ module Facts
5
5
  class Ec2Metadata
6
6
  FACT_NAME = 'ec2_metadata'
7
7
 
8
+ def initialize
9
+ @virtual = Facter::VirtualDetector.new
10
+ end
11
+
8
12
  def call_the_resolver
9
13
  return Facter::ResolvedFact.new(FACT_NAME, nil) unless aws_hypervisors?
10
14
 
@@ -16,36 +20,7 @@ module Facts
16
20
  private
17
21
 
18
22
  def aws_hypervisors?
19
- virtual =~ /kvm|xen|aws/
20
- end
21
-
22
- def virtual
23
- check_virt_what || check_xen || check_product_name || check_bios_vendor || check_lspci
24
- end
25
-
26
- def check_virt_what
27
- Facter::Resolvers::VirtWhat.resolve(:vm)
28
- end
29
-
30
- def check_xen
31
- Facter::Resolvers::Xen.resolve(:vm)
32
- end
33
-
34
- def check_product_name
35
- product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
36
- return unless product_name
37
-
38
- _, value = Facter::FactsUtils::HYPERVISORS_HASH.find { |key, _value| product_name.include?(key) }
39
- value
40
- end
41
-
42
- def check_bios_vendor
43
- bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
44
- return 'kvm' if bios_vendor&.include?('Amazon EC2')
45
- end
46
-
47
- def check_lspci
48
- Facter::Resolvers::Lspci.resolve(:vm)
23
+ @virtual.platform =~ /kvm|xen|aws/
49
24
  end
50
25
  end
51
26
  end
@@ -5,6 +5,10 @@ module Facts
5
5
  class Ec2Userdata
6
6
  FACT_NAME = 'ec2_userdata'
7
7
 
8
+ def initialize
9
+ @virtual = Facter::VirtualDetector.new
10
+ end
11
+
8
12
  def call_the_resolver
9
13
  return Facter::ResolvedFact.new(FACT_NAME, nil) unless aws_hypervisors?
10
14
 
@@ -16,34 +20,7 @@ module Facts
16
20
  private
17
21
 
18
22
  def aws_hypervisors?
19
- virtual = check_virt_what || check_xen || check_product_name || check_bios_vendor || check_lspci
20
-
21
- virtual == 'kvm' || virtual =~ /xen/
22
- end
23
-
24
- def check_virt_what
25
- Facter::Resolvers::VirtWhat.resolve(:vm)
26
- end
27
-
28
- def check_xen
29
- Facter::Resolvers::Xen.resolve(:vm)
30
- end
31
-
32
- def check_product_name
33
- product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
34
- return unless product_name
35
-
36
- _, value = Facter::FactsUtils::HYPERVISORS_HASH.find { |key, _value| product_name.include?(key) }
37
- value
38
- end
39
-
40
- def check_bios_vendor
41
- bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
42
- return 'kvm' if bios_vendor&.include?('Amazon EC2')
43
- end
44
-
45
- def check_lspci
46
- Facter::Resolvers::Lspci.resolve(:vm)
23
+ @virtual.platform =~ /kvm|xen|aws/
47
24
  end
48
25
  end
49
26
  end
@@ -5,59 +5,20 @@ module Facts
5
5
  class IsVirtual
6
6
  FACT_NAME = 'is_virtual'
7
7
 
8
- def call_the_resolver # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
9
- fact_value = check_docker_lxc || check_gce || retrieve_from_virt_what || check_vmware
10
- fact_value ||= check_open_vz || check_vserver || check_xen || check_other_facts || check_lspci || 'physical'
11
-
12
- Facter::ResolvedFact.new(FACT_NAME, check_if_virtual(fact_value))
13
- end
14
-
15
- def check_gce
16
- bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
17
- 'gce' if bios_vendor&.include?('Google')
18
- end
19
-
20
- def check_docker_lxc
21
- Facter::Resolvers::Containers.resolve(:vm)
8
+ def initialize
9
+ @virtual = Facter::VirtualDetector.new
22
10
  end
23
11
 
24
- def check_vmware
25
- Facter::Resolvers::Vmware.resolve(:vm)
26
- end
12
+ def call_the_resolver
13
+ fact_value = @virtual.platform
27
14
 
28
- def retrieve_from_virt_what
29
- Facter::Resolvers::VirtWhat.resolve(:vm)
30
- end
31
-
32
- def check_open_vz
33
- Facter::Resolvers::OpenVz.resolve(:vm)
34
- end
35
-
36
- def check_vserver
37
- Facter::Resolvers::VirtWhat.resolve(:vserver)
38
- end
39
-
40
- def check_xen
41
- Facter::Resolvers::Xen.resolve(:vm)
42
- end
43
-
44
- def check_other_facts
45
- product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
46
- bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
47
- return 'kvm' if bios_vendor&.include?('Amazon EC2')
48
- return unless product_name
49
-
50
- Facter::FactsUtils::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
51
-
52
- nil
15
+ Facter::ResolvedFact.new(FACT_NAME, check_if_virtual(fact_value))
53
16
  end
54
17
 
55
- def check_lspci
56
- Facter::Resolvers::Lspci.resolve(:vm)
57
- end
18
+ private
58
19
 
59
20
  def check_if_virtual(found_vm)
60
- Facter::FactsUtils::PHYSICAL_HYPERVISORS.count(found_vm).zero?
21
+ Facter::FactsUtils::PHYSICAL_HYPERVISORS.count(found_vm).zero?.to_s
61
22
  end
62
23
  end
63
24
  end
@@ -7,71 +7,16 @@ module Facts
7
7
 
8
8
  def initialize
9
9
  @log = Facter::Log.new(self)
10
+ @virtual = Facter::VirtualDetector.new
10
11
  end
11
12
 
12
- def call_the_resolver # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
13
+ def call_the_resolver
13
14
  @log.debug('Linux Virtual Resolver')
14
-
15
- fact_value = check_docker_lxc || check_gce || retrieve_from_virt_what || check_vmware
16
- fact_value ||= check_open_vz || check_vserver || check_xen || check_other_facts || check_lspci || 'physical'
17
-
15
+ fact_value = @virtual.platform
18
16
  @log.debug("Fact value is: #{fact_value}")
19
17
 
20
18
  Facter::ResolvedFact.new(FACT_NAME, fact_value)
21
19
  end
22
-
23
- def check_gce
24
- @log.debug('Checking GCE')
25
- bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
26
- 'gce' if bios_vendor&.include?('Google')
27
- end
28
-
29
- def check_docker_lxc
30
- @log.debug('Checking Docker and LXC')
31
- Facter::Resolvers::Containers.resolve(:vm)
32
- end
33
-
34
- def check_vmware
35
- @log.debug('Checking VMware')
36
- Facter::Resolvers::Vmware.resolve(:vm)
37
- end
38
-
39
- def retrieve_from_virt_what
40
- @log.debug('Checking virtual_what')
41
- Facter::Resolvers::VirtWhat.resolve(:vm)
42
- end
43
-
44
- def check_open_vz
45
- @log.debug('Checking OpenVZ')
46
- Facter::Resolvers::OpenVz.resolve(:vm)
47
- end
48
-
49
- def check_vserver
50
- @log.debug('Checking VServer')
51
- Facter::Resolvers::VirtWhat.resolve(:vserver)
52
- end
53
-
54
- def check_xen
55
- @log.debug('Checking XEN')
56
- Facter::Resolvers::Xen.resolve(:vm)
57
- end
58
-
59
- def check_other_facts
60
- @log.debug('Checking others')
61
- product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
62
- bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
63
- return 'kvm' if bios_vendor&.include?('Amazon EC2')
64
- return unless product_name
65
-
66
- Facter::FactsUtils::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
67
-
68
- nil
69
- end
70
-
71
- def check_lspci
72
- @log.debug('Checking lspci')
73
- Facter::Resolvers::Lspci.resolve(:vm)
74
- end
75
20
  end
76
21
  end
77
22
  end
@@ -27,7 +27,7 @@ module Facts
27
27
  fact_value = {}
28
28
  fact_value['full'] = version
29
29
  fact_value['major'] = versions[0]
30
- fact_value['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
30
+ fact_value['minor'] = versions[1] if versions[1]
31
31
  fact_value
32
32
  end
33
33
  end
@@ -11,6 +11,9 @@ module Facts
11
11
  end
12
12
 
13
13
  def call_the_resolver
14
+ chassis_serial = Facter::Resolvers::Solaris::Ldom.resolve(:chassis_serial)
15
+ return Facter::ResolvedFact.new(FACT_NAME, nil) if !chassis_serial || chassis_serial.empty?
16
+
14
17
  fact_value = %i[
15
18
  chassis_serial control_domain domain_name
16
19
  domain_uuid role_control role_io role_root role_service
@@ -10,8 +10,11 @@ module Facts
10
10
  end
11
11
 
12
12
  def call_the_resolver
13
+ chassis_serial = resolve(:chassis_serial)
14
+ return Facter::ResolvedFact.new(FACT_NAME, nil) if !chassis_serial || chassis_serial.empty?
15
+
13
16
  fact_value = {
14
- domainchassis: resolve(:chassis_serial),
17
+ domainchassis: chassis_serial,
15
18
  domaincontrol: resolve(:control_domain),
16
19
  domainname: resolve(:domain_name),
17
20
  domainrole: {
@@ -28,7 +28,7 @@ module Facts
28
28
  end
29
29
 
30
30
  resolved_facts << Facter::ResolvedFact.new('solaris_zones.zones', zones)
31
- resolved_facts << Facter::ResolvedFact.new('zones', results.count.to_s, :legacy)
31
+ resolved_facts << Facter::ResolvedFact.new('zones', results.count, :legacy)
32
32
 
33
33
  resolved_facts.flatten
34
34
  end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ class VirtualDetector
5
+ def initialize
6
+ @log = Facter::Log.new(self)
7
+ end
8
+
9
+ def platform # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
10
+ fact_value = check_docker_lxc || check_dmi || check_gce || retrieve_from_virt_what || check_vmware
11
+ fact_value ||= check_open_vz || check_vserver || check_xen || check_other_facts || check_lspci || 'physical'
12
+
13
+ fact_value
14
+ end
15
+
16
+ def check_docker_lxc
17
+ @log.debug('Checking Docker and LXC')
18
+ Facter::Resolvers::Containers.resolve(:vm)
19
+ end
20
+
21
+ def check_dmi
22
+ @log.debug('Checking DMI')
23
+ vendor = Facter::Resolvers::DmiDecode.resolve(:vendor)
24
+ @log.debug("dmi detected vendor: #{vendor}")
25
+ return 'kvm' if vendor =~ /Amazon/
26
+
27
+ 'xen' if vendor =~ /Xen/
28
+ end
29
+
30
+ def check_gce
31
+ @log.debug('Checking GCE')
32
+ bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
33
+ 'gce' if bios_vendor&.include?('Google')
34
+ end
35
+
36
+ def check_vmware
37
+ @log.debug('Checking VMware')
38
+ Facter::Resolvers::Vmware.resolve(:vm)
39
+ end
40
+
41
+ def retrieve_from_virt_what
42
+ @log.debug('Checking virtual_what')
43
+ Facter::Resolvers::VirtWhat.resolve(:vm)
44
+ end
45
+
46
+ def check_open_vz
47
+ @log.debug('Checking OpenVZ')
48
+ Facter::Resolvers::OpenVz.resolve(:vm)
49
+ end
50
+
51
+ def check_vserver
52
+ @log.debug('Checking VServer')
53
+ Facter::Resolvers::VirtWhat.resolve(:vserver)
54
+ end
55
+
56
+ def check_xen
57
+ @log.debug('Checking XEN')
58
+ Facter::Resolvers::Xen.resolve(:vm)
59
+ end
60
+
61
+ def check_other_facts
62
+ @log.debug('Checking others')
63
+ product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
64
+ bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
65
+ return 'kvm' if bios_vendor&.include?('Amazon EC2')
66
+ return unless product_name
67
+
68
+ Facter::FactsUtils::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
69
+
70
+ nil
71
+ end
72
+
73
+ def check_lspci
74
+ @log.debug('Checking lspci')
75
+ Facter::Resolvers::Lspci.resolve(:vm)
76
+ end
77
+ end
78
+ end