facter 4.0.50 → 4.2.0
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/docs/generate_cli.rb +7 -0
- data/lib/facter.rb +90 -56
- data/lib/facter/config.rb +2 -0
- data/lib/facter/custom_facts/core/aggregate.rb +9 -0
- data/lib/facter/custom_facts/core/execution/base.rb +7 -3
- data/lib/facter/custom_facts/core/execution/popen3.rb +13 -1
- 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/resolvable.rb +11 -0
- data/lib/facter/custom_facts/util/collection.rb +5 -0
- data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
- data/lib/facter/custom_facts/util/normalization.rb +7 -2
- data/lib/facter/custom_facts/util/resolution.rb +2 -0
- data/lib/facter/custom_facts/util/windows_root.rb +2 -1
- data/lib/facter/facts/aix/processors/cores.rb +16 -0
- data/lib/facter/facts/aix/processors/threads.rb +16 -0
- data/lib/facter/facts/amzn/lsbdistcodename.rb +16 -0
- data/lib/facter/facts/amzn/lsbdistdescription.rb +16 -0
- data/lib/facter/facts/amzn/lsbdistid.rb +16 -0
- data/lib/facter/facts/amzn/os/distro/codename.rb +24 -0
- data/lib/facter/facts/amzn/os/distro/description.rb +21 -0
- data/lib/facter/facts/amzn/os/distro/id.rb +21 -0
- data/lib/facter/facts/amzn/os/distro/release.rb +32 -0
- 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 +23 -0
- data/lib/facter/facts/linux/cloud/provider.rb +20 -0
- data/lib/facter/facts/linux/dhcp_servers.rb +2 -2
- 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 -4
- data/lib/facter/facts/linux/interfaces.rb +1 -1
- data/lib/facter/facts/linux/ipaddress6_interfaces.rb +1 -1
- data/lib/facter/facts/linux/ipaddress_interfaces.rb +1 -1
- data/lib/facter/facts/linux/is_virtual.rb +1 -5
- data/lib/facter/facts/linux/macaddress_interfaces.rb +1 -1
- data/lib/facter/facts/linux/mtu_interfaces.rb +1 -1
- data/lib/facter/facts/linux/netmask6_interfaces.rb +1 -1
- data/lib/facter/facts/linux/netmask_interfaces.rb +1 -1
- data/lib/facter/facts/linux/network6_interfaces.rb +1 -1
- data/lib/facter/facts/linux/network_interfaces.rb +1 -1
- data/lib/facter/facts/linux/networking/dhcp.rb +1 -1
- data/lib/facter/facts/linux/networking/domain.rb +1 -1
- data/lib/facter/facts/linux/networking/fqdn.rb +1 -1
- data/lib/facter/facts/linux/networking/hostname.rb +1 -1
- data/lib/facter/facts/linux/networking/interfaces.rb +1 -1
- data/lib/facter/facts/linux/networking/ip.rb +1 -1
- data/lib/facter/facts/linux/networking/ip6.rb +1 -1
- data/lib/facter/facts/linux/networking/mac.rb +1 -1
- data/lib/facter/facts/linux/networking/mtu.rb +1 -1
- data/lib/facter/facts/linux/networking/netmask.rb +1 -1
- data/lib/facter/facts/linux/networking/netmask6.rb +1 -1
- data/lib/facter/facts/linux/networking/network.rb +1 -1
- data/lib/facter/facts/linux/networking/network6.rb +1 -1
- data/lib/facter/facts/linux/networking/primary.rb +1 -1
- data/lib/facter/facts/linux/networking/scope6.rb +1 -1
- data/lib/facter/facts/linux/processors/cores.rb +16 -0
- data/lib/facter/facts/linux/processors/threads.rb +16 -0
- data/lib/facter/facts/linux/scope6_interfaces.rb +1 -1
- data/lib/facter/facts/linux/virtual.rb +1 -2
- data/lib/facter/facts/macosx/os/macosx/version.rb +15 -4
- data/lib/facter/facts/macosx/processors/cores.rb +16 -0
- data/lib/facter/facts/macosx/processors/threads.rb +16 -0
- data/lib/facter/facts/rhel/lsbdistcodename.rb +16 -0
- data/lib/facter/facts/rhel/lsbdistdescription.rb +16 -0
- data/lib/facter/facts/rhel/lsbdistid.rb +16 -0
- data/lib/facter/facts/rhel/os/distro/codename.rb +2 -4
- data/lib/facter/facts/rhel/os/distro/description.rb +2 -4
- data/lib/facter/facts/rhel/os/distro/id.rb +2 -4
- data/lib/facter/facts/rhel/os/distro/release.rb +13 -12
- data/lib/facter/facts/sles/lsbdistcodename.rb +16 -0
- data/lib/facter/facts/sles/lsbdistdescription.rb +16 -0
- data/lib/facter/facts/sles/lsbdistid.rb +16 -0
- data/lib/facter/facts/sles/os/distro/codename.rb +3 -4
- data/lib/facter/facts/sles/os/distro/description.rb +2 -5
- data/lib/facter/facts/sles/os/distro/id.rb +6 -5
- data/lib/facter/facts/sles/os/distro/release.rb +17 -12
- data/lib/facter/facts/solaris/hypervisors/ldom.rb +1 -1
- data/lib/facter/facts/solaris/hypervisors/zone.rb +1 -1
- data/lib/facter/facts/solaris/mountpoints.rb +1 -1
- data/lib/facter/facts/solaris/processors/cores.rb +16 -0
- data/lib/facter/facts/solaris/processors/threads.rb +16 -0
- data/lib/facter/facts/ubuntu/lsbdistrelease.rb +2 -2
- data/lib/facter/facts/windows/az_metadata.rb +23 -0
- data/lib/facter/facts/windows/cloud/provider.rb +21 -0
- 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/{virtualization/is_virtual.rb → processors/cores.rb} +4 -4
- data/lib/facter/facts/windows/{virtualization/virtual.rb → processors/threads.rb} +4 -4
- data/lib/facter/facts/windows/virtual.rb +15 -0
- data/lib/facter/framework/cli/cli.rb +6 -8
- data/lib/facter/framework/config/config_reader.rb +2 -0
- data/lib/facter/framework/config/fact_groups.rb +25 -2
- data/lib/facter/framework/core/cache_manager.rb +7 -3
- data/lib/facter/framework/core/fact/external/external_fact_manager.rb +0 -1
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +41 -39
- data/lib/facter/framework/core/fact_filter.rb +5 -15
- data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +9 -6
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +39 -37
- data/lib/facter/framework/core/fact_manager.rb +84 -14
- data/lib/facter/framework/core/file_loader.rb +1 -1
- data/lib/facter/framework/core/options.rb +1 -2
- data/lib/facter/framework/core/options/config_file_options.rb +7 -0
- data/lib/facter/framework/core/options/option_store.rb +12 -6
- data/lib/facter/framework/formatters/formatter_helper.rb +3 -5
- data/lib/facter/framework/logging/logger.rb +4 -4
- data/lib/facter/framework/parsers/query_parser.rb +5 -12
- data/lib/facter/models/fact_collection.rb +48 -5
- data/lib/facter/models/resolved_fact.rb +2 -3
- data/lib/facter/models/searched_fact.rb +2 -3
- data/lib/facter/resolvers/aix/ffi/ffi_helper.rb +1 -1
- data/lib/facter/resolvers/aix/processors.rb +4 -0
- data/lib/facter/resolvers/az.rb +39 -0
- data/lib/facter/resolvers/base_resolver.rb +2 -2
- data/lib/facter/resolvers/dmi_decode.rb +0 -1
- data/lib/facter/resolvers/linux/hostname.rb +126 -0
- data/lib/facter/resolvers/linux/networking.rb +124 -0
- data/lib/facter/resolvers/macosx/mountpoints.rb +14 -1
- data/lib/facter/resolvers/macosx/processor.rb +16 -1
- data/lib/facter/resolvers/mountpoints.rb +16 -8
- data/lib/facter/resolvers/networking.rb +3 -2
- data/lib/facter/resolvers/partitions.rb +1 -1
- data/lib/facter/resolvers/processors_lscpu.rb +44 -0
- data/lib/facter/resolvers/redhat_release.rb +28 -12
- data/lib/facter/resolvers/ruby.rb +1 -1
- data/lib/facter/resolvers/selinux.rb +5 -7
- data/lib/facter/resolvers/solaris/ffi/functions.rb +1 -1
- data/lib/facter/resolvers/solaris/ffi/structs.rb +12 -0
- data/lib/facter/resolvers/solaris/mountpoints.rb +22 -16
- data/lib/facter/resolvers/solaris/networking.rb +20 -5
- data/lib/facter/resolvers/solaris/processors.rb +7 -0
- data/lib/facter/resolvers/solaris/zone.rb +0 -1
- data/lib/facter/resolvers/windows/ffi/identity_ffi.rb +5 -0
- data/lib/facter/resolvers/windows/identity.rb +1 -6
- data/lib/facter/resolvers/windows/processors.rb +41 -4
- data/lib/facter/resolvers/windows/uptime.rb +3 -22
- data/lib/facter/resolvers/windows/virtualization.rb +46 -44
- data/lib/facter/resolvers/xen.rb +6 -1
- data/lib/facter/templates/man.erb +13 -5
- data/lib/facter/util/facts/posix/virtual_detector.rb +74 -0
- data/lib/facter/util/facts/unit_converter.rb +2 -2
- data/lib/facter/util/linux/dhcp.rb +86 -0
- data/lib/facter/util/linux/if_inet6.rb +73 -0
- data/lib/facter/util/linux/routing_table.rb +60 -0
- data/lib/facter/util/linux/socket_parser.rb +114 -0
- data/lib/facter/util/resolvers/ffi/hostname.rb +70 -0
- data/lib/facter/util/resolvers/http.rb +7 -1
- data/lib/facter/util/resolvers/networking/primary_interface.rb +11 -5
- data/lib/facter/util/utils.rb +18 -1
- data/lib/facter/version.rb +1 -1
- metadata +63 -13
- data/lib/facter/facts/linux/cloud.rb +0 -15
- data/lib/facter/framework/core/fact_augmenter.rb +0 -37
- data/lib/facter/resolvers/cloud.rb +0 -39
- data/lib/facter/resolvers/networking_linux.rb +0 -296
- data/lib/facter/util/facts/virtual_detector.rb +0 -90
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9921e9c05d22c7fe9c84a9061a374dd9b31b2f7a28bfa292a62fd0e33ec7eb16
|
|
4
|
+
data.tar.gz: 44606e1ec31a336cb71971be5b6c21138f0d33b88d023bb71955526550a54fd2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c01cbeb07ac105bbcfcd41598a818962dae3634a72b24f5e850c9dd8b0410c31d52eef1553d9fcc2f3111166d24cba5cb8ae129c3470a1c67a9fc8be12a669cf
|
|
7
|
+
data.tar.gz: d53fe66fd09af1c5d73a3789160a38c236eacf45e43a5096357ab5eb719dcff38d251e8e29dab09a1763d0e2056909977758453e9fb0a272a229f30d70d85ba1
|
data/lib/facter.rb
CHANGED
|
@@ -27,21 +27,51 @@ module Facter
|
|
|
27
27
|
require 'facter/framework/cli/cli_launcher'
|
|
28
28
|
|
|
29
29
|
args = args_as_string.split(' ')
|
|
30
|
-
|
|
31
30
|
Facter::OptionsValidator.validate(args)
|
|
32
31
|
processed_arguments = CliLauncher.prepare_arguments(args, nil)
|
|
33
|
-
|
|
34
32
|
cli = Facter::Cli.new([], processed_arguments)
|
|
33
|
+
cli_options = cli.options.dup
|
|
34
|
+
|
|
35
|
+
# config file options
|
|
36
|
+
config_file = cli_options.delete(:config)
|
|
37
|
+
if config_file
|
|
38
|
+
Facter::OptionStore.set(:config, config_file)
|
|
39
|
+
Facter::ConfigFileOptions.init(config_file)
|
|
40
|
+
Facter::Options.store(ConfigFileOptions.get)
|
|
41
|
+
end
|
|
35
42
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
# user provided options
|
|
44
|
+
cli_options[:show_legacy] ||= false
|
|
45
|
+
Facter::Options.store(cli_options)
|
|
46
|
+
|
|
47
|
+
queried_facts(cli.args)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Method used by cli to set puppet paths
|
|
51
|
+
# in order to retrieve puppet custom and external facts
|
|
52
|
+
#
|
|
53
|
+
# @return nil
|
|
54
|
+
#
|
|
55
|
+
# @api private
|
|
56
|
+
def puppet_facts
|
|
57
|
+
require 'puppet'
|
|
58
|
+
|
|
59
|
+
# don't allow puppet logger to be injected in Facter
|
|
60
|
+
Options[:allow_external_loggers] = false
|
|
61
|
+
|
|
62
|
+
Puppet.initialize_settings
|
|
63
|
+
$LOAD_PATH << Puppet[:libdir] unless $LOAD_PATH.include?(Puppet[:libdir])
|
|
64
|
+
Facter.reset
|
|
65
|
+
Facter.search_external([Puppet[:pluginfactdest]])
|
|
66
|
+
if Puppet.respond_to? :initialize_facts
|
|
67
|
+
Puppet.initialize_facts
|
|
42
68
|
else
|
|
43
|
-
|
|
69
|
+
Facter.add(:puppetversion) do
|
|
70
|
+
setcode { Puppet.version.to_s }
|
|
71
|
+
end
|
|
44
72
|
end
|
|
73
|
+
rescue LoadError => e
|
|
74
|
+
logger.error("Could not load puppet gem, got #{e}")
|
|
45
75
|
end
|
|
46
76
|
|
|
47
77
|
# Alias method for Facter.fact()
|
|
@@ -89,10 +119,10 @@ module Facter
|
|
|
89
119
|
nil
|
|
90
120
|
end
|
|
91
121
|
|
|
92
|
-
#
|
|
93
|
-
#
|
|
122
|
+
# Retrieves the value of a core fact. External or custom facts are
|
|
123
|
+
# not returned with this call. Returns `nil` if no such fact exists.
|
|
94
124
|
#
|
|
95
|
-
# @return [FactCollection] hash with fact names and values
|
|
125
|
+
# @return [FactCollection] A hash with fact names and values
|
|
96
126
|
#
|
|
97
127
|
# @api private
|
|
98
128
|
def core_value(user_query)
|
|
@@ -177,14 +207,29 @@ module Facter
|
|
|
177
207
|
Facter::Options[:debug] = debug_bool
|
|
178
208
|
end
|
|
179
209
|
|
|
210
|
+
# Enable sequential resolving of facts
|
|
211
|
+
#
|
|
212
|
+
# @return [bool]
|
|
213
|
+
#
|
|
214
|
+
# @api public
|
|
180
215
|
def enable_sequential
|
|
181
216
|
Facter::Options[:sequential] = true
|
|
182
217
|
end
|
|
183
218
|
|
|
219
|
+
# Disable sequential resolving of facts
|
|
220
|
+
#
|
|
221
|
+
# @return [bool]
|
|
222
|
+
#
|
|
223
|
+
# @api public
|
|
184
224
|
def disable_sequential
|
|
185
225
|
Facter::Options[:sequential] = false
|
|
186
226
|
end
|
|
187
227
|
|
|
228
|
+
# Check if facts are resolved sequentially or not
|
|
229
|
+
#
|
|
230
|
+
# @return [bool]
|
|
231
|
+
#
|
|
232
|
+
# @api public
|
|
188
233
|
def sequential?
|
|
189
234
|
Facter::Options[:sequential]
|
|
190
235
|
end
|
|
@@ -208,23 +253,6 @@ module Facter
|
|
|
208
253
|
self
|
|
209
254
|
end
|
|
210
255
|
|
|
211
|
-
# Returns a fact object by name. If you use this, you still have to
|
|
212
|
-
# call {Facter::Util::Fact#value `value`} on it to retrieve the actual
|
|
213
|
-
# value.
|
|
214
|
-
#
|
|
215
|
-
# @param user_query [String] the name of the fact
|
|
216
|
-
#
|
|
217
|
-
# @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
|
|
218
|
-
# is found.
|
|
219
|
-
#
|
|
220
|
-
# @api public
|
|
221
|
-
def fact(user_query)
|
|
222
|
-
user_query = user_query.to_s
|
|
223
|
-
resolve_fact(user_query)
|
|
224
|
-
|
|
225
|
-
@already_searched[user_query]
|
|
226
|
-
end
|
|
227
|
-
|
|
228
256
|
# Reset search paths for custom and external facts
|
|
229
257
|
# If config file is set custom and external facts will be reloaded
|
|
230
258
|
#
|
|
@@ -322,10 +350,10 @@ module Facter
|
|
|
322
350
|
Options.custom_dir
|
|
323
351
|
end
|
|
324
352
|
|
|
325
|
-
#
|
|
326
|
-
# The hash contains core facts, legacy facts, custom facts and external facts (all facts that can be resolved).
|
|
353
|
+
# Retrieves a fact's value. Returns `nil` if no such fact exists.
|
|
327
354
|
#
|
|
328
|
-
# @
|
|
355
|
+
# @param user_query [String] the fact name
|
|
356
|
+
# @return [String] the value of the fact, or nil if no fact is found
|
|
329
357
|
#
|
|
330
358
|
# @api public
|
|
331
359
|
def to_hash
|
|
@@ -366,30 +394,25 @@ module Facter
|
|
|
366
394
|
def value(user_query)
|
|
367
395
|
user_query = user_query.to_s
|
|
368
396
|
resolve_fact(user_query)
|
|
397
|
+
|
|
369
398
|
@already_searched[user_query]&.value
|
|
370
399
|
end
|
|
371
400
|
|
|
372
|
-
#
|
|
401
|
+
# Returns a fact object by name. If you use this, you still have to
|
|
402
|
+
# call {Facter::Util::Fact#value `value`} on it to retrieve the actual
|
|
403
|
+
# value.
|
|
373
404
|
#
|
|
374
|
-
# @param
|
|
375
|
-
# of {Facter::Util::Fact} and {Facter::Util::Resolution} can be
|
|
376
|
-
# supplied here
|
|
377
|
-
# @param user_queries [Array] the fact names
|
|
405
|
+
# @param user_query [String] the name of the fact
|
|
378
406
|
#
|
|
379
|
-
# @return [
|
|
407
|
+
# @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
|
|
408
|
+
# is found.
|
|
380
409
|
#
|
|
381
410
|
# @api public
|
|
382
|
-
def
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
resolved_facts = Facter::FactManager.instance.resolve_facts(user_queries)
|
|
386
|
-
resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
|
|
411
|
+
def fact(user_query)
|
|
412
|
+
user_query = user_query.to_s
|
|
413
|
+
resolve_fact(user_query)
|
|
387
414
|
|
|
388
|
-
|
|
389
|
-
Facter::FactCollection.new.build_fact_collection!(resolved_facts)
|
|
390
|
-
else
|
|
391
|
-
FormatterHelper.retrieve_facts_to_display_for_user_query(user_queries, resolved_facts)
|
|
392
|
-
end
|
|
415
|
+
@already_searched[user_query]
|
|
393
416
|
end
|
|
394
417
|
|
|
395
418
|
# Returns Facter version
|
|
@@ -407,7 +430,7 @@ module Facter
|
|
|
407
430
|
#
|
|
408
431
|
# @api private
|
|
409
432
|
def to_user_output(cli_options, *args)
|
|
410
|
-
init_cli_options(cli_options
|
|
433
|
+
init_cli_options(cli_options)
|
|
411
434
|
logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
|
|
412
435
|
logger.debug("Facter version: #{Facter::VERSION}")
|
|
413
436
|
log_blocked_facts
|
|
@@ -433,7 +456,7 @@ module Facter
|
|
|
433
456
|
nil
|
|
434
457
|
end
|
|
435
458
|
|
|
436
|
-
# Returns a list with the names of all
|
|
459
|
+
# Returns a list with the names of all resolved facts
|
|
437
460
|
# @return [Array] the list with all the fact names
|
|
438
461
|
#
|
|
439
462
|
# @api public
|
|
@@ -469,6 +492,18 @@ module Facter
|
|
|
469
492
|
|
|
470
493
|
private
|
|
471
494
|
|
|
495
|
+
def queried_facts(user_query)
|
|
496
|
+
log_blocked_facts
|
|
497
|
+
resolved_facts = Facter::FactManager.instance.resolve_facts(user_query)
|
|
498
|
+
resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
|
|
499
|
+
|
|
500
|
+
if user_query.count.zero?
|
|
501
|
+
Facter::FactCollection.new.build_fact_collection!(resolved_facts)
|
|
502
|
+
else
|
|
503
|
+
FormatterHelper.retrieve_facts_to_display_for_user_query(user_query, resolved_facts)
|
|
504
|
+
end
|
|
505
|
+
end
|
|
506
|
+
|
|
472
507
|
def resolve_facts_for_user_query(user_query)
|
|
473
508
|
resolved_facts = Facter::FactManager.instance.resolve_facts(user_query)
|
|
474
509
|
user_querie = resolved_facts.uniq(&:user_query).map(&:user_query).first
|
|
@@ -495,9 +530,9 @@ module Facter
|
|
|
495
530
|
@logger ||= Log.new(self)
|
|
496
531
|
end
|
|
497
532
|
|
|
498
|
-
def init_cli_options(options
|
|
533
|
+
def init_cli_options(options)
|
|
499
534
|
options = options.map { |(k, v)| [k.to_sym, v] }.to_h
|
|
500
|
-
Facter::Options.init_from_cli(options
|
|
535
|
+
Facter::Options.init_from_cli(options)
|
|
501
536
|
end
|
|
502
537
|
|
|
503
538
|
def add_fact_to_searched_facts(user_query, value)
|
|
@@ -511,17 +546,16 @@ module Facter
|
|
|
511
546
|
# @return [ResolvedFact]
|
|
512
547
|
def resolve_fact(user_query)
|
|
513
548
|
user_query = user_query.to_s
|
|
514
|
-
resolved_facts = Facter::FactManager.instance.
|
|
549
|
+
resolved_facts = Facter::FactManager.instance.resolve_fact(user_query)
|
|
515
550
|
# we must make a distinction between custom facts that return nil and nil facts
|
|
516
551
|
# Nil facts should not be packaged as ResolvedFacts! (add_fact_to_searched_facts packages facts)
|
|
517
552
|
resolved_facts = resolved_facts.reject { |fact| fact.type == :nil }
|
|
518
553
|
fact_collection = FactCollection.new.build_fact_collection!(resolved_facts)
|
|
519
|
-
splitted_user_query = Facter::Utils.split_user_query(user_query)
|
|
520
554
|
|
|
521
555
|
begin
|
|
522
|
-
value = fact_collection.value(
|
|
556
|
+
value = fact_collection.value(user_query)
|
|
523
557
|
add_fact_to_searched_facts(user_query, value)
|
|
524
|
-
rescue KeyError
|
|
558
|
+
rescue KeyError, TypeError
|
|
525
559
|
nil
|
|
526
560
|
end
|
|
527
561
|
end
|
data/lib/facter/config.rb
CHANGED
|
@@ -166,6 +166,7 @@ module Facter
|
|
|
166
166
|
macosx_productversion
|
|
167
167
|
macosx_productversion_major
|
|
168
168
|
macosx_productversion_minor
|
|
169
|
+
macosx_productversion_patch
|
|
169
170
|
windows_edition_id
|
|
170
171
|
windows_installation_type
|
|
171
172
|
windows_product_name
|
|
@@ -301,6 +302,7 @@ module Facter
|
|
|
301
302
|
'macosx_productversion',
|
|
302
303
|
'macosx_productversion_major',
|
|
303
304
|
'macosx_productversion_minor',
|
|
305
|
+
'macosx_productversion_patch',
|
|
304
306
|
'manufacturer',
|
|
305
307
|
'memoryfree',
|
|
306
308
|
'memoryfree_mb',
|
|
@@ -53,6 +53,15 @@ module Facter
|
|
|
53
53
|
# @api private
|
|
54
54
|
attr_reader :fact
|
|
55
55
|
|
|
56
|
+
# Create a new aggregated resolution mechanism.
|
|
57
|
+
#
|
|
58
|
+
# @param name [String] The name of the resolution.
|
|
59
|
+
# @param fact [Facter::Fact] The fact to which this
|
|
60
|
+
# resolution will be added.
|
|
61
|
+
#
|
|
62
|
+
# @return [Facter::Util::Resolution] The created resolution
|
|
63
|
+
#
|
|
64
|
+
# @api private
|
|
56
65
|
def initialize(name, fact)
|
|
57
66
|
@name = name
|
|
58
67
|
@fact = fact
|
|
@@ -94,11 +94,15 @@ module Facter
|
|
|
94
94
|
end
|
|
95
95
|
log_stderr(stderr, command, logger)
|
|
96
96
|
rescue StandardError => e
|
|
97
|
-
|
|
97
|
+
message = "Failed while executing '#{command}': #{e.message}"
|
|
98
|
+
if logger
|
|
99
|
+
@log.debug(message)
|
|
100
|
+
return ''
|
|
101
|
+
end
|
|
102
|
+
|
|
98
103
|
return on_fail unless on_fail == :raise
|
|
99
104
|
|
|
100
|
-
raise Facter::Core::Execution::ExecutionFailure.new,
|
|
101
|
-
"Failed while executing '#{command}': #{e.message}"
|
|
105
|
+
raise Facter::Core::Execution::ExecutionFailure.new, message
|
|
102
106
|
end
|
|
103
107
|
|
|
104
108
|
[out.strip, stderr]
|
|
@@ -11,6 +11,8 @@ module Facter
|
|
|
11
11
|
module Core
|
|
12
12
|
module Execution
|
|
13
13
|
class Popen3
|
|
14
|
+
@log ||= Log.new(self)
|
|
15
|
+
|
|
14
16
|
def self.popen_rune(cmd, opts, child_io, parent_io) # :nodoc:
|
|
15
17
|
pid = spawn(*cmd, opts)
|
|
16
18
|
child_io.each(&:close)
|
|
@@ -20,7 +22,17 @@ module Facter
|
|
|
20
22
|
return yield(*result)
|
|
21
23
|
ensure
|
|
22
24
|
parent_io.each(&:close)
|
|
23
|
-
|
|
25
|
+
begin
|
|
26
|
+
Process.wait(pid)
|
|
27
|
+
rescue Errno::ENOENT
|
|
28
|
+
# For some reason, the first Process.wait executed in JRuby
|
|
29
|
+
# always fails with ENOENT. However, the command output is
|
|
30
|
+
# filled in so we just need to silently continue.
|
|
31
|
+
# https://github.com/jruby/jruby/issues/5971
|
|
32
|
+
raise unless RUBY_PLATFORM == 'java'
|
|
33
|
+
|
|
34
|
+
@log.debug('Caught ENOENT during Process.wait on JRuby, continuing...')
|
|
35
|
+
end
|
|
24
36
|
end
|
|
25
37
|
end
|
|
26
38
|
result
|
|
@@ -29,8 +29,8 @@ module Facter
|
|
|
29
29
|
!!(path =~ ABSOLUTE_PATH_REGEX)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
DOUBLE_QUOTED_COMMAND =
|
|
33
|
-
SINGLE_QUOTED_COMMAND =
|
|
32
|
+
DOUBLE_QUOTED_COMMAND = /\A"(.+?)"(?:\s+(.*))?/.freeze
|
|
33
|
+
SINGLE_QUOTED_COMMAND = /\A'(.+?)'(?:\s+(.*))?/.freeze
|
|
34
34
|
|
|
35
35
|
def expand_command(command)
|
|
36
36
|
exe = nil
|
|
@@ -59,6 +59,17 @@ module LegacyFacter
|
|
|
59
59
|
@on_flush_block&.call
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
+
# Resolves the fact's value or loggs an error if the value
|
|
63
|
+
# couldn't be resolved.
|
|
64
|
+
#
|
|
65
|
+
# @raise Facter::ResolveCustomFactError if an error was raised
|
|
66
|
+
# (except Timeout::Error or Narmalization::NarmalizationError
|
|
67
|
+
# in which case an error message is logged and the execution
|
|
68
|
+
# isn't suspended).
|
|
69
|
+
#
|
|
70
|
+
# @return value (hash, string, int, array, etc) or nil
|
|
71
|
+
#
|
|
72
|
+
# @api private
|
|
62
73
|
def value
|
|
63
74
|
result = nil
|
|
64
75
|
|
|
@@ -106,6 +106,11 @@ module LegacyFacter
|
|
|
106
106
|
@loaded = false
|
|
107
107
|
end
|
|
108
108
|
|
|
109
|
+
def custom_fact(fact_name)
|
|
110
|
+
internal_loader.load(fact_name)
|
|
111
|
+
@custom_facts = @facts.select { |_k, v| v.options[:fact_type] == :custom }
|
|
112
|
+
end
|
|
113
|
+
|
|
109
114
|
# Builds a hash of custom facts
|
|
110
115
|
def custom_facts
|
|
111
116
|
return @custom_facts if @valid_custom_facts
|
|
@@ -63,7 +63,7 @@ module LegacyFacter
|
|
|
63
63
|
Facter.log_exception(Exception.new("Caching is enabled for group \"#{basename}\" while "\
|
|
64
64
|
'there are at least two external facts files with the same filename'))
|
|
65
65
|
else
|
|
66
|
-
searched_fact = Facter::SearchedFact.new(basename, nil,
|
|
66
|
+
searched_fact = Facter::SearchedFact.new(basename, nil, nil, :file)
|
|
67
67
|
searched_fact.file = file
|
|
68
68
|
facts << searched_fact
|
|
69
69
|
end
|
|
@@ -5,7 +5,10 @@ module LegacyFacter
|
|
|
5
5
|
module Normalization
|
|
6
6
|
class NormalizationError < StandardError; end
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
# load Date and Time classes
|
|
9
|
+
require 'time'
|
|
10
|
+
|
|
11
|
+
VALID_TYPES = [Integer, Float, TrueClass, FalseClass, NilClass, Symbol, String, Array, Hash, Date, Time].freeze
|
|
9
12
|
|
|
10
13
|
module_function
|
|
11
14
|
|
|
@@ -16,8 +19,10 @@ module LegacyFacter
|
|
|
16
19
|
# @return [void]
|
|
17
20
|
def normalize(value)
|
|
18
21
|
case value
|
|
19
|
-
when Integer, Float, TrueClass, FalseClass, NilClass, Symbol
|
|
22
|
+
when Integer, Float, TrueClass, FalseClass, NilClass, Symbol
|
|
20
23
|
value
|
|
24
|
+
when Date, Time
|
|
25
|
+
value.iso8601
|
|
21
26
|
when String
|
|
22
27
|
normalize_string(value)
|
|
23
28
|
when Array
|
|
@@ -56,6 +56,8 @@ module Facter
|
|
|
56
56
|
# Create a new resolution mechanism.
|
|
57
57
|
#
|
|
58
58
|
# @param name [String] The name of the resolution.
|
|
59
|
+
# @param fact [Facter::Fact] The fact to which this
|
|
60
|
+
# resolution will be added.
|
|
59
61
|
#
|
|
60
62
|
# @return [Facter::Util::Resolution] The created resolution
|
|
61
63
|
#
|