facter 4.1.1 → 4.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +202 -0
- data/lib/facter.rb +11 -17
- data/lib/facter/config.rb +2 -0
- data/lib/facter/custom_facts/core/execution/posix.rb +2 -2
- data/lib/facter/custom_facts/core/execution/windows.rb +1 -1
- data/lib/facter/custom_facts/core/file_loader.rb +0 -1
- data/lib/facter/custom_facts/core/legacy_facter.rb +0 -2
- data/lib/facter/custom_facts/core/resolvable.rb +1 -1
- data/lib/facter/custom_facts/util/collection.rb +6 -4
- data/lib/facter/custom_facts/util/confine.rb +9 -3
- data/lib/facter/custom_facts/util/directory_loader.rb +19 -7
- data/lib/facter/custom_facts/util/fact.rb +12 -10
- data/lib/facter/custom_facts/util/loader.rb +5 -1
- data/lib/facter/custom_facts/util/parser.rb +8 -2
- data/lib/facter/custom_facts/util/resolution.rb +5 -1
- data/lib/facter/custom_facts/util/windows_root.rb +2 -1
- data/lib/facter/facts/freebsd/is_virtual.rb +1 -5
- data/lib/facter/facts/freebsd/virtual.rb +1 -2
- data/lib/facter/facts/linux/az_metadata.rb +1 -5
- data/lib/facter/facts/linux/cloud/provider.rb +1 -5
- data/lib/facter/facts/linux/ec2_metadata.rb +1 -5
- data/lib/facter/facts/linux/ec2_userdata.rb +1 -5
- data/lib/facter/facts/linux/hypervisors/xen.rb +1 -2
- data/lib/facter/facts/linux/is_virtual.rb +1 -5
- data/lib/facter/facts/linux/virtual.rb +1 -2
- data/lib/facter/facts/macosx/os/macosx/version.rb +6 -3
- data/lib/facter/facts/windows/az_metadata.rb +1 -1
- data/lib/facter/facts/windows/cloud/provider.rb +1 -1
- data/lib/facter/facts/windows/ec2_metadata.rb +1 -1
- data/lib/facter/facts/windows/ec2_userdata.rb +1 -1
- data/lib/facter/facts/windows/gce.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/hyperv.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/kvm.rb +2 -1
- data/lib/facter/facts/windows/hypervisors/virtualbox.rb +2 -2
- data/lib/facter/facts/windows/hypervisors/vmware.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/xen.rb +3 -1
- data/lib/facter/facts/windows/is_virtual.rb +15 -0
- data/lib/facter/facts/windows/virtual.rb +15 -0
- data/lib/facter/framework/cli/cli.rb +13 -15
- data/lib/facter/framework/core/cache_manager.rb +2 -2
- data/lib/facter/framework/core/fact/external/external_fact_manager.rb +0 -1
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +39 -39
- data/lib/facter/framework/core/fact_filter.rb +4 -14
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +0 -1
- data/lib/facter/framework/core/fact_manager.rb +11 -0
- data/lib/facter/framework/core/file_loader.rb +1 -1
- data/lib/facter/framework/logging/logger.rb +61 -0
- data/lib/facter/framework/parsers/query_parser.rb +6 -16
- data/lib/facter/models/fact_collection.rb +20 -3
- data/lib/facter/models/resolved_fact.rb +2 -3
- data/lib/facter/models/searched_fact.rb +2 -3
- data/lib/facter/resolvers/ec2.rb +8 -1
- data/lib/facter/resolvers/linux/networking.rb +18 -1
- data/lib/facter/resolvers/lsb_release.rb +1 -2
- data/lib/facter/resolvers/mountpoints.rb +16 -8
- data/lib/facter/resolvers/networking.rb +3 -1
- data/lib/facter/resolvers/os_release.rb +7 -4
- data/lib/facter/resolvers/partitions.rb +1 -3
- data/lib/facter/resolvers/ruby.rb +1 -1
- data/lib/facter/resolvers/windows/ffi/identity_ffi.rb +5 -0
- data/lib/facter/resolvers/windows/ffi/kernel_ffi.rb +1 -1
- data/lib/facter/resolvers/windows/identity.rb +1 -6
- data/lib/facter/resolvers/windows/virtualization.rb +46 -44
- data/lib/facter/resolvers/xen.rb +6 -1
- data/lib/facter/util/facts/posix/virtual_detector.rb +74 -0
- data/lib/facter/util/linux/dhcp.rb +4 -1
- data/lib/facter/util/linux/if_inet6.rb +73 -0
- data/lib/facter/util/linux/socket_parser.rb +17 -2
- data/lib/facter/version.rb +1 -1
- metadata +48 -11
- data/lib/facter/custom_facts/core/logging.rb +0 -203
- data/lib/facter/facts/windows/virtualization/is_virtual.rb +0 -17
- data/lib/facter/facts/windows/virtualization/virtual.rb +0 -17
- data/lib/facter/framework/core/fact_augmenter.rb +0 -54
- data/lib/facter/util/facts/virtual_detector.rb +0 -83
@@ -47,8 +47,6 @@ module Facter
|
|
47
47
|
@used_resolution_weight = 0
|
48
48
|
|
49
49
|
@value = nil
|
50
|
-
|
51
|
-
@log = Facter::Log.new(self)
|
52
50
|
end
|
53
51
|
|
54
52
|
# Adds a new {Facter::Util::Resolution resolution}. This requires a
|
@@ -87,8 +85,8 @@ module Facter
|
|
87
85
|
|
88
86
|
resolve
|
89
87
|
rescue StandardError => e
|
90
|
-
|
91
|
-
|
88
|
+
log.log_exception("Unable to add resolve #{resolution_name.inspect} for fact #{@name}: #{e.message}")
|
89
|
+
nil
|
92
90
|
end
|
93
91
|
|
94
92
|
# Retrieve an existing resolution by name
|
@@ -122,7 +120,7 @@ module Facter
|
|
122
120
|
return @value if @value
|
123
121
|
|
124
122
|
if @resolves.empty?
|
125
|
-
|
123
|
+
log.debug format('No resolves for %<name>s', name: @name)
|
126
124
|
return nil
|
127
125
|
end
|
128
126
|
|
@@ -147,12 +145,16 @@ module Facter
|
|
147
145
|
def extract_ldapname_option!(options)
|
148
146
|
return unless options[:ldapname]
|
149
147
|
|
150
|
-
|
148
|
+
log.warnonce('ldapname is deprecated and will be removed in a future version')
|
151
149
|
self.ldapname = options.delete(:ldapname)
|
152
150
|
end
|
153
151
|
|
154
152
|
private
|
155
153
|
|
154
|
+
def log
|
155
|
+
@log ||= Facter::Log.new(self)
|
156
|
+
end
|
157
|
+
|
156
158
|
def resolve_value
|
157
159
|
return Facter.core_value(name) if @value.nil?
|
158
160
|
|
@@ -222,18 +224,18 @@ module Facter
|
|
222
224
|
|
223
225
|
def log_fact_path(resolve)
|
224
226
|
fact = resolve.fact
|
225
|
-
|
227
|
+
log.debug("#{resolve.fact_type} fact #{fact.name} got resolved from: #{fact.location}")
|
226
228
|
end
|
227
229
|
|
228
230
|
def announce_when_no_suitable_resolution(resolutions)
|
229
231
|
return unless resolutions.empty?
|
230
232
|
|
231
|
-
|
232
|
-
|
233
|
+
log.debug format('Found no suitable resolves of %<resolver_length> for %<name>s',
|
234
|
+
resolver_length: @resolves.length, name: @name)
|
233
235
|
end
|
234
236
|
|
235
237
|
def announce_when_no_value_found(value)
|
236
|
-
|
238
|
+
log.debug(format('value for %<name>s is still nil', name: @name)) if value.nil?
|
237
239
|
end
|
238
240
|
|
239
241
|
def create_or_return_resolution(resolution_name, resolution_type)
|
@@ -78,7 +78,7 @@ module LegacyFacter
|
|
78
78
|
if valid_search_path?(path)
|
79
79
|
search_paths << path
|
80
80
|
else
|
81
|
-
|
81
|
+
log.debug "Excluding #{path} from search path. Fact file paths must be an absolute directory"
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
@@ -89,6 +89,10 @@ module LegacyFacter
|
|
89
89
|
|
90
90
|
private
|
91
91
|
|
92
|
+
def log
|
93
|
+
@log ||= Facter::Log.new(self)
|
94
|
+
end
|
95
|
+
|
92
96
|
# Validate that the given path is valid, ie it is an absolute path.
|
93
97
|
#
|
94
98
|
# @api private
|
@@ -137,11 +137,17 @@ module LegacyFacter
|
|
137
137
|
if LegacyFacter.json?
|
138
138
|
JSON.parse(content)
|
139
139
|
else
|
140
|
-
|
141
|
-
|
140
|
+
log.warnonce "Cannot parse JSON data file #{filename} without the json library."
|
141
|
+
log.warnonce 'Suggested next step is `gem install json` to install the json library.'
|
142
142
|
nil
|
143
143
|
end
|
144
144
|
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
def log
|
149
|
+
@log ||= Facter::Log.new(self)
|
150
|
+
end
|
145
151
|
end
|
146
152
|
|
147
153
|
register(JsonParser) do |filename|
|
@@ -91,7 +91,7 @@ module Facter
|
|
91
91
|
msg = "Already evaluated #{@name}"
|
92
92
|
msg << " at #{@last_evaluated}" if msg.is_a? String
|
93
93
|
msg << ', reevaluating anyways'
|
94
|
-
|
94
|
+
log.warn msg
|
95
95
|
end
|
96
96
|
|
97
97
|
instance_eval(&block)
|
@@ -171,6 +171,10 @@ module Facter
|
|
171
171
|
|
172
172
|
private
|
173
173
|
|
174
|
+
def log
|
175
|
+
@log ||= Facter::Log.new(self)
|
176
|
+
end
|
177
|
+
|
174
178
|
# If the weights are equal, we consider external facts greater tan custom facts
|
175
179
|
def compare_equal_weights(other)
|
176
180
|
# Other is considered greater because self is custom fact and other is external
|
@@ -5,12 +5,8 @@ module Facts
|
|
5
5
|
class IsVirtual
|
6
6
|
FACT_NAME = 'is_virtual'
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
10
|
-
end
|
11
|
-
|
12
8
|
def call_the_resolver
|
13
|
-
fact_value =
|
9
|
+
fact_value = Facter::Util::Facts::Posix::VirtualDetector.platform
|
14
10
|
|
15
11
|
Facter::ResolvedFact.new(FACT_NAME, check_if_virtual(fact_value))
|
16
12
|
end
|
@@ -7,12 +7,11 @@ module Facts
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@log = Facter::Log.new(self)
|
10
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
11
10
|
end
|
12
11
|
|
13
12
|
def call_the_resolver
|
14
13
|
@log.debug('FreeBSD Virtual Resolver')
|
15
|
-
fact_value =
|
14
|
+
fact_value = Facter::Util::Facts::Posix::VirtualDetector.platform
|
16
15
|
@log.debug("Fact value is: #{fact_value}")
|
17
16
|
|
18
17
|
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
@@ -5,10 +5,6 @@ module Facts
|
|
5
5
|
class AzMetadata
|
6
6
|
FACT_NAME = 'az_metadata'
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
10
|
-
end
|
11
|
-
|
12
8
|
def call_the_resolver
|
13
9
|
return Facter::ResolvedFact.new(FACT_NAME, nil) unless azure_hypervisor?
|
14
10
|
|
@@ -20,7 +16,7 @@ module Facts
|
|
20
16
|
private
|
21
17
|
|
22
18
|
def azure_hypervisor?
|
23
|
-
|
19
|
+
Facter::Util::Facts::Posix::VirtualDetector.platform == 'hyperv'
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
@@ -6,12 +6,8 @@ module Facts
|
|
6
6
|
class Provider
|
7
7
|
FACT_NAME = 'cloud.provider'
|
8
8
|
|
9
|
-
def initialize
|
10
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
11
|
-
end
|
12
|
-
|
13
9
|
def call_the_resolver
|
14
|
-
provider = case
|
10
|
+
provider = case Facter::Util::Facts::Posix::VirtualDetector.platform
|
15
11
|
when 'hyperv'
|
16
12
|
'azure' unless Facter::Resolvers::Az.resolve(:metadata).empty?
|
17
13
|
end
|
@@ -5,10 +5,6 @@ module Facts
|
|
5
5
|
class Ec2Metadata
|
6
6
|
FACT_NAME = 'ec2_metadata'
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
10
|
-
end
|
11
|
-
|
12
8
|
def call_the_resolver
|
13
9
|
return Facter::ResolvedFact.new(FACT_NAME, nil) unless aws_hypervisors?
|
14
10
|
|
@@ -20,7 +16,7 @@ module Facts
|
|
20
16
|
private
|
21
17
|
|
22
18
|
def aws_hypervisors?
|
23
|
-
|
19
|
+
Facter::Util::Facts::Posix::VirtualDetector.platform =~ /kvm|xen|aws/
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
@@ -5,10 +5,6 @@ module Facts
|
|
5
5
|
class Ec2Userdata
|
6
6
|
FACT_NAME = 'ec2_userdata'
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
10
|
-
end
|
11
|
-
|
12
8
|
def call_the_resolver
|
13
9
|
return Facter::ResolvedFact.new(FACT_NAME, nil) unless aws_hypervisors?
|
14
10
|
|
@@ -20,7 +16,7 @@ module Facts
|
|
20
16
|
private
|
21
17
|
|
22
18
|
def aws_hypervisors?
|
23
|
-
|
19
|
+
Facter::Util::Facts::Posix::VirtualDetector.platform =~ /kvm|xen|aws/
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
@@ -8,7 +8,6 @@ module Facts
|
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@log = Facter::Log.new(self)
|
11
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
12
11
|
end
|
13
12
|
|
14
13
|
def call_the_resolver
|
@@ -29,7 +28,7 @@ module Facts
|
|
29
28
|
private
|
30
29
|
|
31
30
|
def xen?
|
32
|
-
|
31
|
+
Facter::Util::Facts::Posix::VirtualDetector.platform =~ /xen/
|
33
32
|
end
|
34
33
|
|
35
34
|
def hvm?
|
@@ -5,12 +5,8 @@ module Facts
|
|
5
5
|
class IsVirtual
|
6
6
|
FACT_NAME = 'is_virtual'
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
10
|
-
end
|
11
|
-
|
12
8
|
def call_the_resolver
|
13
|
-
fact_value =
|
9
|
+
fact_value = Facter::Util::Facts::Posix::VirtualDetector.platform
|
14
10
|
|
15
11
|
Facter::ResolvedFact.new(FACT_NAME, check_if_virtual(fact_value))
|
16
12
|
end
|
@@ -7,12 +7,11 @@ module Facts
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@log = Facter::Log.new(self)
|
10
|
-
@virtual = Facter::Util::Facts::VirtualDetector.new
|
11
10
|
end
|
12
11
|
|
13
12
|
def call_the_resolver
|
14
13
|
@log.debug('Linux Virtual Resolver')
|
15
|
-
fact_value =
|
14
|
+
fact_value = Facter::Util::Facts::Posix::VirtualDetector.platform
|
16
15
|
@log.debug("Fact value is: #{fact_value}")
|
17
16
|
|
18
17
|
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
@@ -6,7 +6,8 @@ module Facts
|
|
6
6
|
module Macosx
|
7
7
|
class Version
|
8
8
|
FACT_NAME = 'os.macosx.version'
|
9
|
-
ALIASES = %w[macosx_productversion macosx_productversion_major macosx_productversion_minor
|
9
|
+
ALIASES = %w[macosx_productversion macosx_productversion_major macosx_productversion_minor
|
10
|
+
macosx_productversion_patch].freeze
|
10
11
|
|
11
12
|
def call_the_resolver
|
12
13
|
fact_value = Facter::Resolvers::SwVers.resolve(:productversion)
|
@@ -15,7 +16,8 @@ module Facts
|
|
15
16
|
[Facter::ResolvedFact.new(FACT_NAME, ver),
|
16
17
|
Facter::ResolvedFact.new(ALIASES[0], fact_value, :legacy),
|
17
18
|
Facter::ResolvedFact.new(ALIASES[1], ver['major'], :legacy),
|
18
|
-
Facter::ResolvedFact.new(ALIASES[2], ver['minor'], :legacy)
|
19
|
+
Facter::ResolvedFact.new(ALIASES[2], ver['minor'], :legacy),
|
20
|
+
Facter::ResolvedFact.new(ALIASES[3], ver['patch'], :legacy)]
|
19
21
|
end
|
20
22
|
|
21
23
|
def version_hash(fact_value)
|
@@ -23,7 +25,8 @@ module Facts
|
|
23
25
|
if versions[0] == '10'
|
24
26
|
{ 'full' => fact_value, 'major' => "#{versions[0]}.#{versions[1]}", 'minor' => versions[-1] }
|
25
27
|
else
|
26
|
-
{ 'full' => fact_value, 'major' => versions[0], 'minor' =>
|
28
|
+
{ 'full' => fact_value, 'major' => versions[0], 'minor' => versions.fetch(1, '0'),
|
29
|
+
'patch' => versions.fetch(2, '0') }
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
@@ -7,7 +7,7 @@ module Facts
|
|
7
7
|
FACT_NAME = 'cloud.provider'
|
8
8
|
|
9
9
|
def call_the_resolver
|
10
|
-
virtual = Facter::Resolvers::Virtualization.resolve(:virtual)
|
10
|
+
virtual = Facter::Resolvers::Windows::Virtualization.resolve(:virtual)
|
11
11
|
provider = case virtual
|
12
12
|
when 'hyperv'
|
13
13
|
'azure' unless Facter::Resolvers::Az.resolve(:metadata).empty?
|
@@ -6,7 +6,7 @@ module Facts
|
|
6
6
|
FACT_NAME = 'gce'
|
7
7
|
|
8
8
|
def call_the_resolver
|
9
|
-
virtualization = Facter::Resolvers::Virtualization.resolve(:virtual)
|
9
|
+
virtualization = Facter::Resolvers::Windows::Virtualization.resolve(:virtual)
|
10
10
|
|
11
11
|
fact_value = virtualization&.include?('gce') ? Facter::Resolvers::Gce.resolve(:metadata) : nil
|
12
12
|
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
@@ -15,7 +15,7 @@ module Facts
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def hyperv?
|
18
|
-
Facter::Resolvers::Virtualization.resolve(:virtual) == 'hyperv' ||
|
18
|
+
Facter::Resolvers::Windows::Virtualization.resolve(:virtual) == 'hyperv' ||
|
19
19
|
Facter::Resolvers::DMIBios.resolve(:manufacturer).include?('Microsoft')
|
20
20
|
end
|
21
21
|
end
|
@@ -17,7 +17,8 @@ module Facts
|
|
17
17
|
def kvm?
|
18
18
|
product_name = Facter::Resolvers::DMIComputerSystem.resolve(:name)
|
19
19
|
|
20
|
-
(Facter::Resolvers::Virtualization.resolve(:virtual) == 'kvm' ||
|
20
|
+
(Facter::Resolvers::Windows::Virtualization.resolve(:virtual) == 'kvm' ||
|
21
|
+
Facter::Resolvers::NetKVM.resolve(:kvm)) &&
|
21
22
|
product_name != 'VirtualBox' && !product_name.match(/^Parallels/)
|
22
23
|
end
|
23
24
|
|
@@ -15,12 +15,12 @@ module Facts
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def virtualbox?
|
18
|
-
Facter::Resolvers::Virtualization.resolve(:virtual) == 'virtualbox' ||
|
18
|
+
Facter::Resolvers::Windows::Virtualization.resolve(:virtual) == 'virtualbox' ||
|
19
19
|
Facter::Resolvers::DMIComputerSystem.resolve(:name) == 'VirtualBox'
|
20
20
|
end
|
21
21
|
|
22
22
|
def populate_version_and_revision
|
23
|
-
oem_strings = Facter::Resolvers::Virtualization.resolve(:oem_strings)
|
23
|
+
oem_strings = Facter::Resolvers::Windows::Virtualization.resolve(:oem_strings)
|
24
24
|
return unless oem_strings
|
25
25
|
|
26
26
|
version = revision = ''
|
@@ -15,7 +15,7 @@ module Facts
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def vmware?
|
18
|
-
Facter::Resolvers::Virtualization.resolve(:virtual) == 'vmware' ||
|
18
|
+
Facter::Resolvers::Windows::Virtualization.resolve(:virtual) == 'vmware' ||
|
19
19
|
Facter::Resolvers::DMIBios.resolve(:manufacturer) == 'VMware, Inc.'
|
20
20
|
end
|
21
21
|
end
|
@@ -7,7 +7,9 @@ module Facts
|
|
7
7
|
FACT_NAME = 'hypervisors.xen'
|
8
8
|
|
9
9
|
def call_the_resolver
|
10
|
-
|
10
|
+
if Facter::Resolvers::Windows::Virtualization.resolve(:virtual) == 'xen'
|
11
|
+
fact_value = { context: hvm? ? 'hvm' : 'pv' }
|
12
|
+
end
|
11
13
|
|
12
14
|
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
13
15
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facts
|
4
|
+
module Windows
|
5
|
+
class IsVirtual
|
6
|
+
FACT_NAME = 'is_virtual'
|
7
|
+
|
8
|
+
def call_the_resolver
|
9
|
+
fact_value = Facter::Resolvers::Windows::Virtualization.resolve(:is_virtual)
|
10
|
+
|
11
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|