facter 4.1.1 → 4.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +202 -0
  3. data/lib/facter.rb +11 -17
  4. data/lib/facter/config.rb +2 -0
  5. data/lib/facter/custom_facts/core/execution/posix.rb +2 -2
  6. data/lib/facter/custom_facts/core/execution/windows.rb +1 -1
  7. data/lib/facter/custom_facts/core/file_loader.rb +0 -1
  8. data/lib/facter/custom_facts/core/legacy_facter.rb +0 -2
  9. data/lib/facter/custom_facts/core/resolvable.rb +1 -1
  10. data/lib/facter/custom_facts/util/collection.rb +6 -4
  11. data/lib/facter/custom_facts/util/confine.rb +9 -3
  12. data/lib/facter/custom_facts/util/directory_loader.rb +19 -7
  13. data/lib/facter/custom_facts/util/fact.rb +12 -10
  14. data/lib/facter/custom_facts/util/loader.rb +5 -1
  15. data/lib/facter/custom_facts/util/parser.rb +8 -2
  16. data/lib/facter/custom_facts/util/resolution.rb +5 -1
  17. data/lib/facter/custom_facts/util/windows_root.rb +2 -1
  18. data/lib/facter/facts/freebsd/is_virtual.rb +1 -5
  19. data/lib/facter/facts/freebsd/virtual.rb +1 -2
  20. data/lib/facter/facts/linux/az_metadata.rb +1 -5
  21. data/lib/facter/facts/linux/cloud/provider.rb +1 -5
  22. data/lib/facter/facts/linux/ec2_metadata.rb +1 -5
  23. data/lib/facter/facts/linux/ec2_userdata.rb +1 -5
  24. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -2
  25. data/lib/facter/facts/linux/is_virtual.rb +1 -5
  26. data/lib/facter/facts/linux/virtual.rb +1 -2
  27. data/lib/facter/facts/macosx/os/macosx/version.rb +6 -3
  28. data/lib/facter/facts/windows/az_metadata.rb +1 -1
  29. data/lib/facter/facts/windows/cloud/provider.rb +1 -1
  30. data/lib/facter/facts/windows/ec2_metadata.rb +1 -1
  31. data/lib/facter/facts/windows/ec2_userdata.rb +1 -1
  32. data/lib/facter/facts/windows/gce.rb +1 -1
  33. data/lib/facter/facts/windows/hypervisors/hyperv.rb +1 -1
  34. data/lib/facter/facts/windows/hypervisors/kvm.rb +2 -1
  35. data/lib/facter/facts/windows/hypervisors/virtualbox.rb +2 -2
  36. data/lib/facter/facts/windows/hypervisors/vmware.rb +1 -1
  37. data/lib/facter/facts/windows/hypervisors/xen.rb +3 -1
  38. data/lib/facter/facts/windows/is_virtual.rb +15 -0
  39. data/lib/facter/facts/windows/virtual.rb +15 -0
  40. data/lib/facter/framework/cli/cli.rb +13 -15
  41. data/lib/facter/framework/core/cache_manager.rb +2 -2
  42. data/lib/facter/framework/core/fact/external/external_fact_manager.rb +0 -1
  43. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +39 -39
  44. data/lib/facter/framework/core/fact_filter.rb +4 -14
  45. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +0 -1
  46. data/lib/facter/framework/core/fact_manager.rb +11 -0
  47. data/lib/facter/framework/core/file_loader.rb +1 -1
  48. data/lib/facter/framework/logging/logger.rb +61 -0
  49. data/lib/facter/framework/parsers/query_parser.rb +6 -16
  50. data/lib/facter/models/fact_collection.rb +20 -3
  51. data/lib/facter/models/resolved_fact.rb +2 -3
  52. data/lib/facter/models/searched_fact.rb +2 -3
  53. data/lib/facter/resolvers/ec2.rb +8 -1
  54. data/lib/facter/resolvers/linux/networking.rb +18 -1
  55. data/lib/facter/resolvers/lsb_release.rb +1 -2
  56. data/lib/facter/resolvers/mountpoints.rb +16 -8
  57. data/lib/facter/resolvers/networking.rb +3 -1
  58. data/lib/facter/resolvers/os_release.rb +7 -4
  59. data/lib/facter/resolvers/partitions.rb +1 -3
  60. data/lib/facter/resolvers/ruby.rb +1 -1
  61. data/lib/facter/resolvers/windows/ffi/identity_ffi.rb +5 -0
  62. data/lib/facter/resolvers/windows/ffi/kernel_ffi.rb +1 -1
  63. data/lib/facter/resolvers/windows/identity.rb +1 -6
  64. data/lib/facter/resolvers/windows/virtualization.rb +46 -44
  65. data/lib/facter/resolvers/xen.rb +6 -1
  66. data/lib/facter/util/facts/posix/virtual_detector.rb +74 -0
  67. data/lib/facter/util/linux/dhcp.rb +4 -1
  68. data/lib/facter/util/linux/if_inet6.rb +73 -0
  69. data/lib/facter/util/linux/socket_parser.rb +17 -2
  70. data/lib/facter/version.rb +1 -1
  71. metadata +48 -11
  72. data/lib/facter/custom_facts/core/logging.rb +0 -203
  73. data/lib/facter/facts/windows/virtualization/is_virtual.rb +0 -17
  74. data/lib/facter/facts/windows/virtualization/virtual.rb +0 -17
  75. data/lib/facter/framework/core/fact_augmenter.rb +0 -54
  76. 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
- LegacyFacter
91
- .log_exception(e, "Unable to add resolve #{resolution_name.inspect} for fact #{@name}: #{e.message}")
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
- LegacyFacter.debug format('No resolves for %<name>s', name: @name)
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
- LegacyFacter.warnonce('ldapname is deprecated and will be removed in a future version')
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
- @log.debug("#{resolve.fact_type} fact #{fact.name} got resolved from: #{fact.location}")
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
- LegacyFacter.debug format('Found no suitable resolves of %<resolver_length> for %<name>s',
232
- resolver_length: @resolves.length, name: @name)
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
- LegacyFacter.debug(format('value for %<name>s is still nil', name: @name)) if value.nil?
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
- LegacyFacter.warn "Excluding #{path} from search path. Fact file paths must be an absolute directory"
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
- LegacyFacter.warnonce "Cannot parse JSON data file #{filename} without the json library."
141
- LegacyFacter.warnonce 'Suggested next step is `gem install json` to install the json library.'
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
- LegacyFacter.warn msg
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
@@ -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