facter 4.1.1 → 4.2.3
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/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
|