facter 4.1.1 → 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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facter.rb +1 -1
  3. data/lib/facter/config.rb +2 -0
  4. data/lib/facter/custom_facts/core/execution/posix.rb +2 -2
  5. data/lib/facter/custom_facts/core/execution/windows.rb +1 -1
  6. data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
  7. data/lib/facter/custom_facts/util/windows_root.rb +2 -1
  8. data/lib/facter/facts/freebsd/is_virtual.rb +1 -5
  9. data/lib/facter/facts/freebsd/virtual.rb +1 -2
  10. data/lib/facter/facts/linux/az_metadata.rb +1 -5
  11. data/lib/facter/facts/linux/cloud/provider.rb +1 -5
  12. data/lib/facter/facts/linux/ec2_metadata.rb +1 -5
  13. data/lib/facter/facts/linux/ec2_userdata.rb +1 -5
  14. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -2
  15. data/lib/facter/facts/linux/is_virtual.rb +1 -5
  16. data/lib/facter/facts/linux/virtual.rb +1 -2
  17. data/lib/facter/facts/macosx/os/macosx/version.rb +6 -3
  18. data/lib/facter/facts/windows/az_metadata.rb +1 -1
  19. data/lib/facter/facts/windows/cloud/provider.rb +1 -1
  20. data/lib/facter/facts/windows/ec2_metadata.rb +1 -1
  21. data/lib/facter/facts/windows/ec2_userdata.rb +1 -1
  22. data/lib/facter/facts/windows/gce.rb +1 -1
  23. data/lib/facter/facts/windows/hypervisors/hyperv.rb +1 -1
  24. data/lib/facter/facts/windows/hypervisors/kvm.rb +2 -1
  25. data/lib/facter/facts/windows/hypervisors/virtualbox.rb +2 -2
  26. data/lib/facter/facts/windows/hypervisors/vmware.rb +1 -1
  27. data/lib/facter/facts/windows/hypervisors/xen.rb +3 -1
  28. data/lib/facter/facts/windows/is_virtual.rb +15 -0
  29. data/lib/facter/facts/windows/virtual.rb +15 -0
  30. data/lib/facter/framework/core/cache_manager.rb +2 -2
  31. data/lib/facter/framework/core/fact/external/external_fact_manager.rb +0 -1
  32. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +41 -39
  33. data/lib/facter/framework/core/fact_filter.rb +4 -14
  34. data/lib/facter/framework/core/file_loader.rb +1 -1
  35. data/lib/facter/framework/parsers/query_parser.rb +5 -12
  36. data/lib/facter/models/fact_collection.rb +20 -3
  37. data/lib/facter/models/resolved_fact.rb +2 -3
  38. data/lib/facter/models/searched_fact.rb +2 -3
  39. data/lib/facter/resolvers/linux/networking.rb +18 -0
  40. data/lib/facter/resolvers/mountpoints.rb +16 -8
  41. data/lib/facter/resolvers/partitions.rb +1 -1
  42. data/lib/facter/resolvers/ruby.rb +1 -1
  43. data/lib/facter/resolvers/windows/ffi/identity_ffi.rb +5 -0
  44. data/lib/facter/resolvers/windows/identity.rb +1 -6
  45. data/lib/facter/resolvers/windows/virtualization.rb +46 -44
  46. data/lib/facter/resolvers/xen.rb +6 -1
  47. data/lib/facter/util/facts/posix/virtual_detector.rb +74 -0
  48. data/lib/facter/util/linux/if_inet6.rb +73 -0
  49. data/lib/facter/version.rb +1 -1
  50. metadata +26 -9
  51. data/lib/facter/facts/windows/virtualization/is_virtual.rb +0 -17
  52. data/lib/facter/facts/windows/virtualization/virtual.rb +0 -17
  53. data/lib/facter/framework/core/fact_augmenter.rb +0 -54
  54. data/lib/facter/util/facts/virtual_detector.rb +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6ca2540a7ccad083604f2a0a1142cd0e870714dae635dc2fd8d60baa1b1bcbf
4
- data.tar.gz: 25cec4e7c98a145d3950dd8c345ae04ee2bdc1b04ae78b08acb1674678c24d64
3
+ metadata.gz: 9921e9c05d22c7fe9c84a9061a374dd9b31b2f7a28bfa292a62fd0e33ec7eb16
4
+ data.tar.gz: 44606e1ec31a336cb71971be5b6c21138f0d33b88d023bb71955526550a54fd2
5
5
  SHA512:
6
- metadata.gz: e43bf9233eca175b442b0cbda693efcae3f3b0f1e370b9b9ef5bca1c81a9450e4bfc3000d957463cbf49900abc6bf9769ba9664cc6750c17f58ad8abd4cf9730
7
- data.tar.gz: 47c5a45dd7dfc505cda3d71634258ed7c7ca13e24ee6858219d89480f9b260e278cd8b602a59501a24ec61a7fcb62f1b929330cc5c4b54d34b13718b818280d5
6
+ metadata.gz: c01cbeb07ac105bbcfcd41598a818962dae3634a72b24f5e850c9dd8b0410c31d52eef1553d9fcc2f3111166d24cba5cb8ae129c3470a1c67a9fc8be12a669cf
7
+ data.tar.gz: d53fe66fd09af1c5d73a3789160a38c236eacf45e43a5096357ab5eb719dcff38d251e8e29dab09a1763d0e2056909977758453e9fb0a272a229f30d70d85ba1
data/lib/facter.rb CHANGED
@@ -555,7 +555,7 @@ module Facter
555
555
  begin
556
556
  value = fact_collection.value(user_query)
557
557
  add_fact_to_searched_facts(user_query, value)
558
- rescue KeyError
558
+ rescue KeyError, TypeError
559
559
  nil
560
560
  end
561
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',
@@ -29,8 +29,8 @@ module Facter
29
29
  !!(path =~ ABSOLUTE_PATH_REGEX)
30
30
  end
31
31
 
32
- DOUBLE_QUOTED_COMMAND = /^"(.+?)"(?:\s+(.*))?/.freeze
33
- SINGLE_QUOTED_COMMAND = /^'(.+?)'(?:\s+(.*))?/.freeze
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
@@ -38,7 +38,7 @@ module Facter
38
38
  !!(path =~ ABSOLUTE_PATH_REGEX)
39
39
  end
40
40
 
41
- DOUBLE_QUOTED_COMMAND = /^"(.+?)"(?:\s+(.*))?/.freeze
41
+ DOUBLE_QUOTED_COMMAND = /\A"(.+?)"(?:\s+(.*))?/.freeze
42
42
 
43
43
  def expand_command(command)
44
44
  exe = nil
@@ -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, [], nil, :file)
66
+ searched_fact = Facter::SearchedFact.new(basename, nil, nil, :file)
67
67
  searched_fact.file = file
68
68
  facts << searched_fact
69
69
  end
@@ -4,7 +4,8 @@ module LegacyFacter
4
4
  module Util
5
5
  module Root
6
6
  def self.root?
7
- Facter::Resolvers::Identity.resolve(:privileged)
7
+ require 'facter/resolvers/windows/ffi/identity_ffi'
8
+ IdentityFFI.privileged?
8
9
  end
9
10
  end
10
11
  end
@@ -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 = @virtual.platform
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 = @virtual.platform
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
- @virtual.platform == 'hyperv'
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 @virtual.platform
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
- @virtual.platform =~ /kvm|xen|aws/
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
- @virtual.platform =~ /kvm|xen|aws/
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
- @virtual.platform =~ /xen/
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 = @virtual.platform
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 = @virtual.platform
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].freeze
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' => "#{versions[1]}.#{versions[-1]}" }
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
@@ -16,7 +16,7 @@ module Facts
16
16
  private
17
17
 
18
18
  def azure_hypervisor?
19
- Facter::Resolvers::Virtualization.resolve(:virtual) == 'hyperv'
19
+ Facter::Resolvers::Windows::Virtualization.resolve(:virtual) == 'hyperv'
20
20
  end
21
21
  end
22
22
  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?
@@ -16,7 +16,7 @@ module Facts
16
16
  private
17
17
 
18
18
  def aws_hypervisors?
19
- virtual = Facter::Resolvers::Virtualization.resolve(:virtual)
19
+ virtual = Facter::Resolvers::Windows::Virtualization.resolve(:virtual)
20
20
 
21
21
  virtual == 'kvm' || virtual =~ /xen/
22
22
  end
@@ -16,7 +16,7 @@ module Facts
16
16
  private
17
17
 
18
18
  def aws_hypervisors?
19
- virtual = Facter::Resolvers::Virtualization.resolve(:virtual)
19
+ virtual = Facter::Resolvers::Windows::Virtualization.resolve(:virtual)
20
20
 
21
21
  virtual == 'kvm' || virtual =~ /xen/
22
22
  end
@@ -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' || Facter::Resolvers::NetKVM.resolve(: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
- fact_value = { context: hvm? ? 'hvm' : 'pv' } if Facter::Resolvers::Virtualization.resolve(:virtual) == 'xen'
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
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Windows
5
+ class Virtual
6
+ FACT_NAME = 'virtual'
7
+
8
+ def call_the_resolver
9
+ fact_value = Facter::Resolvers::Windows::Virtualization.resolve(:virtual)
10
+
11
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -123,7 +123,7 @@ cache_format_version is incorrect!")
123
123
  return unless data[searched_fact.name]
124
124
 
125
125
  [Facter::ResolvedFact.new(searched_fact.name, data[searched_fact.name], searched_fact.type,
126
- searched_fact.user_query, searched_fact.filter_tokens)]
126
+ searched_fact.user_query)]
127
127
  end
128
128
  end
129
129
 
@@ -133,7 +133,7 @@ cache_format_version is incorrect!")
133
133
  next if fact_name == 'cache_format_version'
134
134
 
135
135
  fact = Facter::ResolvedFact.new(fact_name, fact_value, searched_fact.type,
136
- searched_fact.user_query, searched_fact.filter_tokens)
136
+ searched_fact.user_query)
137
137
  fact.file = searched_fact.file
138
138
  facts << fact
139
139
  end
@@ -19,7 +19,6 @@ module Facter
19
19
  custom_facts.each do |custom_fact|
20
20
  fact = LegacyFacter[custom_fact.name]
21
21
  resolved_fact = ResolvedFact.new(custom_fact.name, fact.value, :custom)
22
- resolved_fact.filter_tokens = []
23
22
  resolved_fact.user_query = custom_fact.user_query
24
23
  resolved_fact.file = fact.options[:file]
25
24
 
@@ -2,20 +2,25 @@
2
2
 
3
3
  module Facter
4
4
  class InternalFactManager
5
- @@log = Facter::Log.new(self)
6
-
5
+ # resolves each SearchFact and filter out facts that do not match the given user query
6
+ # @param searched_facts [Array<Facter::SearchedFact>] array of searched facts
7
+ #
8
+ # @return [Array<Facter::ResolvedFact>]
9
+ #
10
+ # @api private
7
11
  def resolve_facts(searched_facts)
8
12
  internal_searched_facts = filter_internal_facts(searched_facts)
9
-
10
13
  resolved_facts = if Options[:sequential]
11
- @@log.debug('Resolving facts sequentially')
14
+ log.debug('Resolving facts sequentially')
12
15
  resolve_sequentially(internal_searched_facts)
13
16
  else
14
- @@log.debug('Resolving fact in parallel')
15
- threads = start_threads(internal_searched_facts)
16
- join_threads(threads, internal_searched_facts)
17
+ log.debug('Resolving fact in parallel')
18
+ resolve_in_parallel(internal_searched_facts)
17
19
  end
18
20
 
21
+ resolved_facts.flatten!
22
+ resolved_facts.compact!
23
+
19
24
  nil_resolved_facts = resolve_nil_facts(searched_facts)
20
25
 
21
26
  resolved_facts.concat(nil_resolved_facts)
@@ -27,6 +32,17 @@ module Facter
27
32
  searched_facts.select { |searched_fact| %i[core legacy].include? searched_fact.type }
28
33
  end
29
34
 
35
+ def valid_fact?(searched_fact, resolved_fact)
36
+ return if resolved_fact.value.nil?
37
+
38
+ searched_fact_name = searched_fact.name
39
+ if searched_fact_name.include?('.*')
40
+ resolved_fact.name.match(searched_fact_name)
41
+ else
42
+ resolved_fact.name == searched_fact_name
43
+ end
44
+ end
45
+
30
46
  def resolve_nil_facts(searched_facts)
31
47
  resolved_facts = []
32
48
  searched_facts.select { |fact| fact.type == :nil }.each do |fact|
@@ -37,49 +53,35 @@ module Facter
37
53
  end
38
54
 
39
55
  def resolve_sequentially(searched_facts)
40
- resolved_facts = []
41
-
42
- searched_facts
43
- .uniq { |searched_fact| searched_fact.fact_class.name }
44
- .each do |searched_fact|
45
- begin
46
- fact = CoreFact.new(searched_fact)
47
- fact_value = fact.create
48
- resolved_facts << fact_value unless fact_value.nil?
49
- rescue StandardError => e
50
- @@log.log_exception(e)
51
- end
52
- end
56
+ searched_facts.map! { |searched_fact| resolve_fact(searched_fact) }
57
+ end
53
58
 
54
- resolved_facts.flatten!
55
- FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts)
59
+ def resolve_in_parallel(searched_facts)
60
+ searched_facts.map! do |searched_fact|
61
+ Thread.new { resolve_fact(searched_fact) }
62
+ end.map!(&:value)
56
63
  end
57
64
 
58
- def start_threads(searched_facts)
59
- # only resolve a fact once, even if multiple search facts depend on that fact
60
- searched_facts
61
- .uniq { |searched_fact| searched_fact.fact_class.name }
62
- .map do |searched_fact|
63
- Thread.new do
64
- resolve_fact(searched_fact)
65
+ def resolve_fact(searched_fact)
66
+ fact_value = core_fact(searched_fact)
67
+ Array(fact_value).map! do |resolved_fact|
68
+ if valid_fact?(searched_fact, resolved_fact)
69
+ resolved_fact.user_query = searched_fact.user_query
70
+ resolved_fact
65
71
  end
66
72
  end
67
73
  end
68
74
 
69
- def join_threads(threads, searched_facts)
70
- resolved_facts = threads.map(&:value)
71
- resolved_facts.compact!
72
- resolved_facts.flatten!
73
-
74
- FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts)
75
- end
76
-
77
- def resolve_fact(searched_fact)
75
+ def core_fact(searched_fact)
78
76
  fact = CoreFact.new(searched_fact)
79
77
  fact.create
80
78
  rescue StandardError => e
81
- @@log.log_exception(e)
79
+ log.log_exception(e)
82
80
  nil
83
81
  end
82
+
83
+ def log
84
+ @log ||= Facter::Log.new(self)
85
+ end
84
86
  end
85
87
  end