openfact 5.7.0 → 6.1.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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docs/generate.rb +1 -5
  3. data/lib/docs/template.erb +1 -1
  4. data/lib/facter/custom_facts/core/aggregate.rb +2 -4
  5. data/lib/facter/custom_facts/core/execution/base.rb +10 -6
  6. data/lib/facter/custom_facts/core/execution/posix.rb +5 -5
  7. data/lib/facter/custom_facts/core/execution/windows.rb +5 -5
  8. data/lib/facter/custom_facts/core/execution.rb +3 -1
  9. data/lib/facter/custom_facts/core/resolvable.rb +4 -6
  10. data/lib/facter/custom_facts/util/collection.rb +0 -2
  11. data/lib/facter/custom_facts/util/config.rb +1 -1
  12. data/lib/facter/custom_facts/util/directory_loader.rb +3 -7
  13. data/lib/facter/custom_facts/util/fact.rb +2 -21
  14. data/lib/facter/custom_facts/util/parser.rb +5 -5
  15. data/lib/facter/custom_facts/util/resolution.rb +15 -8
  16. data/lib/facter/facts/aix/networking/interfaces.rb +1 -1
  17. data/lib/facter/facts/freebsd/ec2_metadata.rb +1 -1
  18. data/lib/facter/facts/freebsd/ec2_userdata.rb +1 -1
  19. data/lib/facter/facts/linux/az_metadata.rb +1 -1
  20. data/lib/facter/facts/linux/dhcp_servers.rb +1 -1
  21. data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
  22. data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
  23. data/lib/facter/facts/macosx/dhcp_servers.rb +1 -1
  24. data/lib/facter/facts/openbsd/ec2_metadata.rb +1 -1
  25. data/lib/facter/facts/openbsd/ec2_userdata.rb +1 -1
  26. data/lib/facter/facts/solaris/dhcp_servers.rb +1 -1
  27. data/lib/facter/facts/windows/az_metadata.rb +1 -1
  28. data/lib/facter/facts/windows/dhcp_servers.rb +1 -1
  29. data/lib/facter/facts/windows/ec2_metadata.rb +1 -1
  30. data/lib/facter/facts/windows/ec2_userdata.rb +1 -1
  31. data/lib/facter/framework/cli/cli.rb +7 -7
  32. data/lib/facter/framework/config/config_reader.rb +1 -1
  33. data/lib/facter/framework/core/cache_manager.rb +3 -6
  34. data/lib/facter/framework/core/options/option_store.rb +1 -1
  35. data/lib/facter/framework/core/options.rb +1 -1
  36. data/lib/facter/framework/formatters/legacy_fact_formatter.rb +1 -1
  37. data/lib/facter/framework/logging/logger.rb +1 -1
  38. data/lib/facter/models/fact_collection.rb +1 -3
  39. data/lib/facter/resolvers/aix/ffi/ffi_helper.rb +1 -1
  40. data/lib/facter/resolvers/aix/mountpoints.rb +3 -3
  41. data/lib/facter/resolvers/aix/networking.rb +1 -1
  42. data/lib/facter/resolvers/az.rb +1 -1
  43. data/lib/facter/resolvers/ec2.rb +20 -8
  44. data/lib/facter/resolvers/gce.rb +1 -1
  45. data/lib/facter/resolvers/linux/docker_uptime.rb +1 -1
  46. data/lib/facter/resolvers/linux/hostname.rb +1 -1
  47. data/lib/facter/resolvers/linux/processors.rb +1 -1
  48. data/lib/facter/resolvers/macosx/mountpoints.rb +1 -0
  49. data/lib/facter/resolvers/mountpoints.rb +1 -1
  50. data/lib/facter/resolvers/networking.rb +1 -2
  51. data/lib/facter/resolvers/path.rb +1 -1
  52. data/lib/facter/resolvers/selinux.rb +1 -1
  53. data/lib/facter/resolvers/solaris/ffi/functions.rb +1 -0
  54. data/lib/facter/resolvers/solaris/ffi/structs.rb +38 -38
  55. data/lib/facter/resolvers/solaris/mountpoints.rb +1 -0
  56. data/lib/facter/resolvers/solaris/networking.rb +1 -2
  57. data/lib/facter/resolvers/solaris/os_release.rb +1 -1
  58. data/lib/facter/resolvers/solaris/processors.rb +1 -1
  59. data/lib/facter/resolvers/uname.rb +3 -3
  60. data/lib/facter/resolvers/windows/netkvm.rb +1 -2
  61. data/lib/facter/resolvers/windows/processors.rb +6 -6
  62. data/lib/facter/resolvers/windows/ssh.rb +1 -1
  63. data/lib/facter/resolvers/windows/system32.rb +1 -1
  64. data/lib/facter/resolvers/windows/timezone.rb +1 -1
  65. data/lib/facter/resolvers/windows/uptime.rb +1 -2
  66. data/lib/facter/resolvers/windows/virtualization.rb +1 -2
  67. data/lib/facter/resolvers/windows/win_os_description.rb +1 -2
  68. data/lib/facter/util/api_debugger.rb +1 -1
  69. data/lib/facter/util/facts/posix/virtual_detector.rb +2 -2
  70. data/lib/facter/util/facts/unit_converter.rb +2 -2
  71. data/lib/facter/util/facts/uptime_parser.rb +9 -9
  72. data/lib/facter/util/file_helper.rb +3 -4
  73. data/lib/facter/util/macosx/system_profile_executor.rb +1 -1
  74. data/lib/facter/util/resolvers/ffi/hostname.rb +1 -0
  75. data/lib/facter/util/resolvers/ffi/load_averages.rb +1 -0
  76. data/lib/facter/util/resolvers/http.rb +34 -5
  77. data/lib/facter/util/resolvers/networking/networking.rb +3 -3
  78. data/lib/facter/version.rb +1 -1
  79. data/lib/facter.rb +9 -9
  80. metadata +9 -21
@@ -15,19 +15,18 @@ module Facter
15
15
  default_return
16
16
  end
17
17
 
18
- # rubocop:disable Style/SpecialGlobalVars
18
+ # rubocop:disable-next Style/SpecialGlobalVars
19
19
  def safe_readlines(path, default_return = [], sep = $/, chomp: false)
20
20
  return File.readlines(path, sep, chomp: chomp, encoding: Encoding::UTF_8) if File.readable?(path)
21
21
 
22
22
  log_failed_to_read(path)
23
23
  default_return
24
24
  end
25
- # rubocop:enable Style/SpecialGlobalVars
26
25
 
27
26
  # This previously acted as a helper method for versions of Ruby older
28
27
  # than 2.5, before Dir.children was added. As it isn't a private
29
- # method, we can't remove it entirely until the next major Facter
30
- # release (presumably Facter 5).
28
+ # method, we can't remove it entirely until the next major OpenFact
29
+ # release.
31
30
  def dir_children(path)
32
31
  Dir.children(path)
33
32
  end
@@ -28,7 +28,7 @@ module Facter
28
28
 
29
29
  def normalize_keys(system_profiler_hash)
30
30
  system_profiler_hash.transform_keys do |k|
31
- k.downcase.tr(' ', '_').delete("\(\)").to_sym
31
+ k.downcase.tr(' ', '_').delete('()').to_sym
32
32
  end.to_h
33
33
  end
34
34
  end
@@ -21,6 +21,7 @@ module Facter
21
21
  HOST_NAME_MAX = 64
22
22
 
23
23
  extend ::FFI::Library
24
+
24
25
  ffi_lib ::FFI::Library::LIBC
25
26
 
26
27
  attach_function :getaddrinfo, %i[string string pointer pointer], :int
@@ -8,6 +8,7 @@ module Facter
8
8
  module Ffi
9
9
  module LoadAverages
10
10
  extend ::FFI::Library
11
+
11
12
  ffi_lib ::FFI::Library::LIBC
12
13
 
13
14
  attach_function :getloadavg, %i[pointer int], :int
@@ -6,6 +6,8 @@ module Facter
6
6
  module Http
7
7
  @log = Facter::Log.new(self)
8
8
 
9
+ class RequestError < StandardError; end
10
+
9
11
  class << self
10
12
  CONNECTION_TIMEOUT = 0.6
11
13
  SESSION_TIMEOUT = 5
@@ -27,6 +29,15 @@ module Facter
27
29
  make_request(url, headers, timeouts, 'GET', proxy)
28
30
  end
29
31
 
32
+ # Makes a GET HTTP request and returns its response body.
33
+ #
34
+ # Unlike get_request, this method raises when the response code is
35
+ # not 200 or when the request fails. A successful empty response is
36
+ # still returned as an empty string.
37
+ def get_request!(url, headers = {}, timeouts = {}, proxy = true)
38
+ make_request!(url, headers, timeouts, 'GET', proxy)
39
+ end
40
+
30
41
  # Makes a PUT HTTP request and returns its response
31
42
  # @param (see #get_request)
32
43
  # @return (see #get_request)
@@ -37,6 +48,28 @@ module Facter
37
48
  private
38
49
 
39
50
  def make_request(url, headers, timeouts, request_type, proxy)
51
+ response = perform_request(url, headers, timeouts, request_type, proxy)
52
+
53
+ successful_response?(response) ? response.body : ''
54
+ rescue StandardError => e
55
+ @log.debug("Trying to connect to #{url} but got: #{e.message}")
56
+ ''
57
+ end
58
+
59
+ def make_request!(url, headers, timeouts, request_type, proxy)
60
+ response = perform_request(url, headers, timeouts, request_type, proxy)
61
+
62
+ return response.body if successful_response?(response)
63
+
64
+ raise RequestError, "Request to #{url} failed with HTTP status #{response.code}"
65
+ rescue RequestError
66
+ raise
67
+ rescue StandardError => e
68
+ @log.debug("Trying to connect to #{url} but got: #{e.message}")
69
+ raise
70
+ end
71
+
72
+ def perform_request(url, headers, timeouts, request_type, proxy)
40
73
  require 'net/http'
41
74
 
42
75
  uri = URI.parse(url)
@@ -52,11 +85,7 @@ module Facter
52
85
  # Make the request
53
86
  response = http.request(request)
54
87
  response.uri = url
55
-
56
- successful_response?(response) ? response.body : ''
57
- rescue StandardError => e
58
- @log.debug("Trying to connect to #{url} but got: #{e.message}")
59
- ''
88
+ response
60
89
  end
61
90
 
62
91
  def http_obj(parsed_url, timeouts, proxy)
@@ -117,9 +117,9 @@ module Facter
117
117
  binding = find_valid_binding(bindings)
118
118
  ip_protocol_type = ipv4_type ? '' : '6'
119
119
 
120
- values["ip#{ip_protocol_type}".to_sym] = binding[:address]
121
- values["netmask#{ip_protocol_type}".to_sym] = binding[:netmask]
122
- values["network#{ip_protocol_type}".to_sym] = binding[:network]
120
+ values[:"ip#{ip_protocol_type}"] = binding[:address]
121
+ values[:"netmask#{ip_protocol_type}"] = binding[:netmask]
122
+ values[:"network#{ip_protocol_type}"] = binding[:network]
123
123
  values[:scope6] = get_scope(binding[:address]) unless ipv4_type
124
124
  end
125
125
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Facter
4
- VERSION = '5.7.0' unless defined?(VERSION)
4
+ VERSION = '6.1.0' unless defined?(VERSION)
5
5
  end
data/lib/facter.rb CHANGED
@@ -15,7 +15,7 @@ module Facter
15
15
  @already_searched = {}
16
16
 
17
17
  class << self
18
- # Method used by puppet-agent to retrieve facts
18
+ # Method used by openvox-agent to retrieve facts
19
19
  # @param args_as_string [string] facter cli arguments
20
20
  #
21
21
  # @return [Hash<String, Object>]
@@ -45,8 +45,8 @@ module Facter
45
45
  Hash[queried_facts(cli.args)]
46
46
  end
47
47
 
48
- # Method used by cli to set puppet paths
49
- # in order to retrieve puppet custom and external facts
48
+ # Method used by cli to set OpenVox paths
49
+ # in order to retrieve OpenVox custom and external facts
50
50
  #
51
51
  # @return nil
52
52
  #
@@ -54,7 +54,7 @@ module Facter
54
54
  def puppet_facts
55
55
  require 'puppet'
56
56
 
57
- # don't allow puppet logger to be injected in Facter
57
+ # don't allow the OpenVox logger to be injected in OpenFact
58
58
  Options[:allow_external_loggers] = false
59
59
 
60
60
  Puppet.initialize_settings
@@ -69,7 +69,7 @@ module Facter
69
69
  end
70
70
  end
71
71
  rescue LoadError => e
72
- logger.error("Could not load puppet gem, got #{e}")
72
+ logger.error("Could not load the openvox gem, got #{e}")
73
73
  end
74
74
 
75
75
  # Alias method for Facter.fact()
@@ -375,7 +375,7 @@ module Facter
375
375
  # @api public
376
376
  def to_hash
377
377
  log_blocked_facts
378
- logger.debug("Facter version: #{Facter::VERSION}")
378
+ logger.debug("OpenFact version: #{Facter::VERSION}")
379
379
 
380
380
  resolved_facts = Facter::FactManager.instance.resolve_facts
381
381
  resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
@@ -439,7 +439,7 @@ module Facter
439
439
  @already_searched[user_query]
440
440
  end
441
441
 
442
- # Returns Facter version
442
+ # Returns OpenFact version
443
443
  #
444
444
  # @return [String] Current version
445
445
  #
@@ -456,7 +456,7 @@ module Facter
456
456
  def to_user_output(cli_options, *args)
457
457
  init_cli_options(cli_options)
458
458
  logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
459
- logger.debug("Facter version: #{Facter::VERSION}")
459
+ logger.debug("OpenFact version: #{Facter::VERSION}")
460
460
  log_blocked_facts
461
461
  resolved_facts = resolve_facts_for_user_query(args)
462
462
  fact_formatter = Facter::FormatterFactory.build(Facter::Options.get)
@@ -530,7 +530,7 @@ module Facter
530
530
  resolved_facts = Facter::FactManager.instance.resolve_facts(user_query)
531
531
  user_querie = resolved_facts.uniq(&:user_query).map(&:user_query).first
532
532
 
533
- resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? } if user_querie&.empty?
533
+ resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? } if user_querie && user_querie.empty?
534
534
 
535
535
  resolved_facts
536
536
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openfact
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.7.0
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenVox Project
@@ -87,20 +87,14 @@ dependencies:
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '1.28'
91
- - - "<"
92
- - !ruby/object:Gem::Version
93
- version: '1.85'
90
+ version: 1.90.0
94
91
  type: :development
95
92
  prerelease: false
96
93
  version_requirements: !ruby/object:Gem::Requirement
97
94
  requirements:
98
95
  - - "~>"
99
96
  - !ruby/object:Gem::Version
100
- version: '1.28'
101
- - - "<"
102
- - !ruby/object:Gem::Version
103
- version: '1.85'
97
+ version: 1.90.0
104
98
  - !ruby/object:Gem::Dependency
105
99
  name: rubocop-performance
106
100
  requirement: !ruby/object:Gem::Requirement
@@ -285,22 +279,16 @@ dependencies:
285
279
  name: thor
286
280
  requirement: !ruby/object:Gem::Requirement
287
281
  requirements:
288
- - - ">="
289
- - !ruby/object:Gem::Version
290
- version: 1.0.1
291
- - - "<"
282
+ - - "~>"
292
283
  - !ruby/object:Gem::Version
293
- version: '2'
284
+ version: '1.5'
294
285
  type: :runtime
295
286
  prerelease: false
296
287
  version_requirements: !ruby/object:Gem::Requirement
297
288
  requirements:
298
- - - ">="
299
- - !ruby/object:Gem::Version
300
- version: 1.0.1
301
- - - "<"
289
+ - - "~>"
302
290
  - !ruby/object:Gem::Version
303
- version: '2'
291
+ version: '1.5'
304
292
  - !ruby/object:Gem::Dependency
305
293
  name: tsort
306
294
  requirement: !ruby/object:Gem::Requirement
@@ -1292,14 +1280,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
1292
1280
  requirements:
1293
1281
  - - ">="
1294
1282
  - !ruby/object:Gem::Version
1295
- version: '2.5'
1283
+ version: '3.0'
1296
1284
  required_rubygems_version: !ruby/object:Gem::Requirement
1297
1285
  requirements:
1298
1286
  - - ">="
1299
1287
  - !ruby/object:Gem::Version
1300
1288
  version: '0'
1301
1289
  requirements: []
1302
- rubygems_version: 4.0.10
1290
+ rubygems_version: 4.0.16
1303
1291
  specification_version: 4
1304
1292
  summary: OpenFact, a system inventory tool
1305
1293
  test_files: []