facter 4.0.40 → 4.0.46
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/facter.rb +72 -19
- data/lib/facter/config.rb +355 -0
- data/lib/facter/custom_facts/core/aggregate.rb +51 -17
- data/lib/facter/custom_facts/core/execution.rb +54 -38
- data/lib/facter/custom_facts/core/execution/base.rb +46 -40
- data/lib/facter/custom_facts/util/fact.rb +1 -1
- data/lib/facter/custom_facts/util/parser.rb +17 -3
- data/lib/facter/custom_facts/util/resolution.rb +40 -11
- data/lib/facter/facts/linux/ec2_metadata.rb +5 -30
- data/lib/facter/facts/linux/ec2_userdata.rb +5 -28
- data/lib/facter/facts/linux/is_virtual.rb +7 -46
- data/lib/facter/facts/linux/virtual.rb +3 -58
- data/lib/facter/facts/rhel/os/release.rb +1 -1
- data/lib/facter/facts/solaris/hypervisors/ldom.rb +3 -0
- data/lib/facter/facts/solaris/ldom.rb +4 -1
- data/lib/facter/facts/solaris/zones.rb +1 -1
- data/lib/facter/facts_utils/virtual_detector.rb +78 -0
- data/lib/facter/framework/benchmarking/timer.rb +4 -2
- data/lib/facter/framework/cli/cli.rb +19 -5
- data/lib/facter/framework/config/fact_groups.rb +10 -8
- data/lib/facter/framework/core/cache_manager.rb +78 -28
- data/lib/facter/framework/core/fact/internal/core_fact.rb +6 -1
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +38 -4
- data/lib/facter/framework/core/fact_augmenter.rb +1 -1
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +1 -1
- data/lib/facter/framework/core/fact_manager.rb +1 -1
- data/lib/facter/framework/core/options/config_file_options.rb +16 -5
- data/lib/facter/framework/core/options/option_store.rb +40 -20
- data/lib/facter/framework/detector/os_hierarchy.rb +5 -9
- data/lib/facter/resolvers/aio_agent_version.rb +1 -1
- data/lib/facter/resolvers/aix/architecture_resolver.rb +17 -2
- data/lib/facter/resolvers/aix/disks.rb +2 -1
- data/lib/facter/resolvers/aix/filesystem_resolver.rb +1 -1
- data/lib/facter/resolvers/aix/hardware_resolver.rb +2 -1
- data/lib/facter/resolvers/aix/load_averages_resolver.rb +2 -1
- data/lib/facter/resolvers/aix/memory.rb +2 -1
- data/lib/facter/resolvers/aix/mountpoints.rb +2 -1
- data/lib/facter/resolvers/aix/networking_resolver.rb +1 -1
- data/lib/facter/resolvers/aix/nim.rb +1 -1
- data/lib/facter/resolvers/aix/os_level.rb +2 -2
- data/lib/facter/resolvers/aix/partitions.rb +2 -1
- data/lib/facter/resolvers/aix/processors.rb +2 -1
- data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
- data/lib/facter/resolvers/augeas_resolver.rb +8 -2
- data/lib/facter/resolvers/base_resolver.rb +11 -4
- data/lib/facter/resolvers/bsd/processors.rb +13 -8
- data/lib/facter/resolvers/cloud.rb +1 -1
- data/lib/facter/resolvers/containers.rb +2 -1
- data/lib/facter/resolvers/debian_version.rb +1 -1
- data/lib/facter/resolvers/disk_resolver.rb +15 -4
- data/lib/facter/resolvers/dmi_decode.rb +2 -1
- data/lib/facter/resolvers/dmi_resolver.rb +4 -3
- data/lib/facter/resolvers/ec2.rb +2 -1
- data/lib/facter/resolvers/eos_release_resolver.rb +1 -1
- data/lib/facter/resolvers/facterversion_resolver.rb +1 -1
- data/lib/facter/resolvers/filesystems_resolver.rb +4 -1
- data/lib/facter/resolvers/fips_enabled_resolver.rb +4 -1
- data/lib/facter/resolvers/freebsd/dmi_resolver.rb +1 -1
- data/lib/facter/resolvers/freebsd/freebsd_version_resolver.rb +9 -7
- data/lib/facter/resolvers/freebsd/geom_resolver.rb +14 -21
- data/lib/facter/resolvers/freebsd/processors.rb +13 -8
- data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +2 -1
- data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +2 -1
- data/lib/facter/resolvers/gce.rb +2 -1
- data/lib/facter/resolvers/hostname_resolver.rb +2 -1
- data/lib/facter/resolvers/identity_resolver.rb +2 -1
- data/lib/facter/resolvers/linux/docker_uptime.rb +2 -1
- data/lib/facter/resolvers/linux/load_averages.rb +2 -1
- data/lib/facter/resolvers/load_averages.rb +2 -1
- data/lib/facter/resolvers/lpar_resolver.rb +1 -1
- data/lib/facter/resolvers/lsb_release_resolver.rb +1 -1
- data/lib/facter/resolvers/lspci.rb +1 -1
- data/lib/facter/resolvers/macosx/dmi_resolver.rb +1 -1
- data/lib/facter/resolvers/macosx/filesystems_resolver.rb +1 -1
- data/lib/facter/resolvers/macosx/load_averages_resolver.rb +2 -1
- data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +2 -1
- data/lib/facter/resolvers/macosx/processor_resolver.rb +2 -1
- data/lib/facter/resolvers/macosx/swap_memory_resolver.rb +2 -1
- data/lib/facter/resolvers/macosx/system_memory_resolver.rb +2 -1
- data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +1 -3
- data/lib/facter/resolvers/memory_resolver.rb +15 -15
- data/lib/facter/resolvers/mountpoints_resolver.rb +54 -23
- data/lib/facter/resolvers/networking_linux_resolver.rb +15 -9
- data/lib/facter/resolvers/networking_resolver.rb +1 -1
- data/lib/facter/resolvers/open_vz.rb +1 -1
- data/lib/facter/resolvers/os_release_resolver.rb +1 -1
- data/lib/facter/resolvers/partitions.rb +62 -58
- data/lib/facter/resolvers/path_resolver.rb +1 -1
- data/lib/facter/resolvers/processors_resolver.rb +9 -2
- data/lib/facter/resolvers/puppet_version_resolver.rb +1 -1
- data/lib/facter/resolvers/redhat_release_resolver.rb +1 -1
- data/lib/facter/resolvers/ruby_resolver.rb +1 -1
- data/lib/facter/resolvers/selinux_resolver.rb +1 -1
- data/lib/facter/resolvers/solaris/disks.rb +1 -1
- data/lib/facter/resolvers/solaris/dmi.rb +3 -1
- data/lib/facter/resolvers/solaris/dmi_sparc.rb +1 -1
- data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
- data/lib/facter/resolvers/solaris/ipaddress.rb +2 -1
- data/lib/facter/resolvers/solaris/ldom.rb +1 -3
- data/lib/facter/resolvers/solaris/memory.rb +2 -1
- data/lib/facter/resolvers/solaris/mountpoints.rb +60 -0
- data/lib/facter/resolvers/solaris/networking.rb +2 -3
- data/lib/facter/resolvers/solaris/os_release.rb +6 -4
- data/lib/facter/resolvers/solaris/processors.rb +2 -1
- data/lib/facter/resolvers/solaris/zone.rb +1 -1
- data/lib/facter/resolvers/solaris/zone_name.rb +1 -1
- data/lib/facter/resolvers/ssh_resolver.rb +8 -5
- data/lib/facter/resolvers/suse_release_resolver.rb +1 -1
- data/lib/facter/resolvers/sw_vers_resolver.rb +2 -2
- data/lib/facter/resolvers/timezone_resolver.rb +1 -1
- data/lib/facter/resolvers/uname_resolver.rb +1 -1
- data/lib/facter/resolvers/uptime_resolver.rb +1 -1
- data/lib/facter/resolvers/utils/networking.rb +2 -0
- data/lib/facter/resolvers/virt_what.rb +1 -1
- data/lib/facter/resolvers/vmware.rb +1 -1
- data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
- data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/fips_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/hardware_architecture_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/identity_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/kernel_resolver.rb +3 -1
- data/lib/facter/resolvers/windows/memory_resolver.rb +3 -1
- data/lib/facter/resolvers/windows/netkvm_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/networking_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/processors_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/product_release_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/ssh.rb +3 -1
- data/lib/facter/resolvers/windows/system32_resolver.rb +3 -1
- data/lib/facter/resolvers/windows/uptime_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/virtualization_resolver.rb +2 -1
- data/lib/facter/resolvers/windows/win_os_description_resolver.rb +3 -1
- data/lib/facter/resolvers/wpar_resolver.rb +1 -1
- data/lib/facter/resolvers/xen.rb +1 -1
- data/lib/facter/resolvers/zfs.rb +2 -1
- data/lib/facter/resolvers/zpool.rb +2 -1
- data/lib/facter/version.rb +1 -1
- metadata +7 -5
- data/lib/facter/fact_groups.conf +0 -308
- 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
|
-
|
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
|
-
#
|
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
|
-
#
|
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
|
-
# @
|
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 [
|
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
|
-
#
|
133
|
-
#
|
134
|
-
#
|
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
|
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
|
9
|
-
|
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
|
25
|
-
|
26
|
-
end
|
12
|
+
def call_the_resolver
|
13
|
+
fact_value = @virtual.platform
|
27
14
|
|
28
|
-
|
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
|
-
|
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
|
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
|
@@ -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:
|
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
|
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
|