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.
- 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
|