facter 4.2.4 → 4.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/facter/custom_facts/core/execution/base.rb +14 -9
- data/lib/facter/custom_facts/core/execution.rb +25 -17
- data/lib/facter/facts/windows/os/windows/display_version.rb +19 -0
- data/lib/facter/framework/cli/cli.rb +4 -0
- data/lib/facter/framework/core/fact_manager.rb +3 -1
- data/lib/facter/framework/core/options/option_store.rb +3 -1
- data/lib/facter/models/resolved_fact.rb +4 -0
- data/lib/facter/resolvers/aix/processors.rb +2 -1
- data/lib/facter/resolvers/windows/product_release.rb +13 -4
- data/lib/facter/util/facts/windows_release_finder.rb +4 -2
- data/lib/facter/util/resolvers/http.rb +3 -0
- data/lib/facter/version.rb +1 -1
- data/lib/facter.rb +19 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5fa80567c0c01b5ceed0181b78f9e9e813d4eea3c70905733ba1aa5e9298ad15
|
4
|
+
data.tar.gz: 1541ade4a87eacbbaa569c0ace340312dfde0c8299b12cd1973d8861449a798f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea3608714cc012b4f64de7f4b472c904152e82387b980d7b3740a318b3b500228dc2e57a41bab27c113d7d6cb9ce8985394d69db2c6ef49d0fd1483b0608b220
|
7
|
+
data.tar.gz: 33f8a676b5a70c964f90f2576e4b1a65d5e2b27c9b2b09edd12145f77da20f303ab295ee3de1998aed74eff967e4765ac0ad48a885a9ffbe175bbda2f6ce3b20
|
@@ -42,7 +42,7 @@ module Facter
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def execute(command, options = {})
|
45
|
-
on_fail, expand, logger,
|
45
|
+
on_fail, expand, logger, timeout = extract_options(options)
|
46
46
|
|
47
47
|
expanded_command = if !expand && builtin_command?(command) || logger
|
48
48
|
command
|
@@ -59,12 +59,12 @@ module Facter
|
|
59
59
|
return on_fail
|
60
60
|
end
|
61
61
|
|
62
|
-
out, = execute_command(expanded_command, on_fail, logger,
|
62
|
+
out, = execute_command(expanded_command, on_fail, logger, timeout)
|
63
63
|
out
|
64
64
|
end
|
65
65
|
|
66
|
-
def execute_command(command, on_fail = nil, logger = nil,
|
67
|
-
|
66
|
+
def execute_command(command, on_fail = nil, logger = nil, timeout = nil)
|
67
|
+
timeout ||= 300
|
68
68
|
begin
|
69
69
|
# Set LC_ALL and LANG to force i18n to C for the duration of this exec;
|
70
70
|
# this ensures that any code that parses the
|
@@ -78,12 +78,12 @@ module Facter
|
|
78
78
|
out_reader = Thread.new { stdout.read }
|
79
79
|
err_reader = Thread.new { stderr.read }
|
80
80
|
begin
|
81
|
-
Timeout.timeout(
|
81
|
+
Timeout.timeout(timeout) do
|
82
82
|
stdout_messages << out_reader.value
|
83
83
|
stderr_messages << err_reader.value
|
84
84
|
end
|
85
85
|
rescue Timeout::Error
|
86
|
-
message = "Timeout encounter after #{
|
86
|
+
message = "Timeout encounter after #{timeout}s, killing process with pid: #{pid}"
|
87
87
|
Process.kill('KILL', pid)
|
88
88
|
on_fail == :raise ? (raise StandardError, message) : @log.debug(message)
|
89
89
|
ensure
|
@@ -114,10 +114,15 @@ module Facter
|
|
114
114
|
on_fail = options.fetch(:on_fail, :raise)
|
115
115
|
expand = options.fetch(:expand, true)
|
116
116
|
logger = options[:logger]
|
117
|
-
|
118
|
-
|
117
|
+
timeout = (options[:timeout] || options[:time_limit] || options[:limit]).to_i
|
118
|
+
timeout = timeout.positive? ? timeout : nil
|
119
119
|
|
120
|
-
[on_fail
|
120
|
+
extra_keys = options.keys - %i[on_fail expand logger timeout]
|
121
|
+
unless extra_keys.empty?
|
122
|
+
@log.warn("Unexpected key passed to Facter::Core::Execution.execute option: #{options.keys.join(',')}")
|
123
|
+
end
|
124
|
+
|
125
|
+
[on_fail, expand, logger, timeout]
|
121
126
|
end
|
122
127
|
|
123
128
|
def log_stderr(msg, command, logger)
|
@@ -15,9 +15,9 @@ module Facter
|
|
15
15
|
|
16
16
|
module_function
|
17
17
|
|
18
|
-
# Returns the locations to be searched when looking for a binary. This
|
19
|
-
#
|
20
|
-
#
|
18
|
+
# Returns the locations to be searched when looking for a binary. This is
|
19
|
+
# currently determined by the +PATH+ environment variable plus `/sbin`
|
20
|
+
# and `/usr/sbin` when run on unix
|
21
21
|
#
|
22
22
|
# @return [Array<String>] The paths to be searched for binaries
|
23
23
|
#
|
@@ -27,8 +27,9 @@ module Facter
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Determines the full path to a binary. If the supplied filename does not
|
30
|
-
#
|
31
|
-
#
|
30
|
+
# already describe an absolute path then different locations (determined
|
31
|
+
# by {search_paths}) will be searched for a match.
|
32
|
+
#
|
32
33
|
# @param bin [String] The executable to locate
|
33
34
|
#
|
34
35
|
# @return [String/nil] The full path to the executable or nil if not
|
@@ -40,7 +41,8 @@ module Facter
|
|
40
41
|
end
|
41
42
|
|
42
43
|
# Determine in a platform-specific way whether a path is absolute. This
|
43
|
-
#
|
44
|
+
# defaults to the local platform if none is specified.
|
45
|
+
#
|
44
46
|
# @param path [String] The path to check
|
45
47
|
|
46
48
|
# @param platform [:posix/:windows/nil] The platform logic to use
|
@@ -58,8 +60,9 @@ module Facter
|
|
58
60
|
end
|
59
61
|
|
60
62
|
# Given a command line, this returns the command line with the
|
61
|
-
#
|
62
|
-
#
|
63
|
+
# executable written as an absolute path. If the executable contains
|
64
|
+
# spaces, it has to be put in double quotes to be properly recognized.
|
65
|
+
#
|
63
66
|
# @param command [String] the command line
|
64
67
|
#
|
65
68
|
# @return [String/nil] The command line with the executable's path
|
@@ -71,8 +74,9 @@ module Facter
|
|
71
74
|
end
|
72
75
|
|
73
76
|
# Overrides environment variables within a block of code. The
|
74
|
-
#
|
75
|
-
#
|
77
|
+
# specified values will be set for the duration of the block, after
|
78
|
+
# which the original values (if any) will be restored.
|
79
|
+
#
|
76
80
|
# @param values [Hash<String=>String>] A hash of the environment
|
77
81
|
# variables to override
|
78
82
|
#
|
@@ -84,6 +88,7 @@ module Facter
|
|
84
88
|
end
|
85
89
|
|
86
90
|
# Try to execute a command and return the output.
|
91
|
+
#
|
87
92
|
# @param command [String] Command to run
|
88
93
|
#
|
89
94
|
# @return [String/nil] Output of the program, or nil if the command does
|
@@ -96,16 +101,18 @@ module Facter
|
|
96
101
|
end
|
97
102
|
|
98
103
|
# Execute a command and return the output of that program.
|
104
|
+
#
|
99
105
|
# @param command [String] Command to run
|
100
106
|
#
|
101
107
|
# @param options [Hash] Hash with options for the command
|
102
108
|
#
|
103
|
-
#
|
109
|
+
# @option options [Object] :on_fail How to behave when the command could
|
104
110
|
# not be run. Specifying :raise will raise an error, anything else will
|
105
111
|
# return that object on failure. Default is :raise.
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
112
|
+
# @option options [Object] :logger Optional logger used to log the
|
113
|
+
# command's stderr.
|
114
|
+
# @option options :timeout Optional time out for the specified
|
115
|
+
# command. If no timeout is passed, a default of 300 seconds is used.
|
109
116
|
#
|
110
117
|
# @raise [Facter::Core::Execution::ExecutionFailure] If the command does
|
111
118
|
# not exist or could not be executed and :on_fail is set to :raise
|
@@ -119,13 +126,14 @@ module Facter
|
|
119
126
|
end
|
120
127
|
|
121
128
|
# Execute a command and return the stdout and stderr of that program.
|
129
|
+
#
|
122
130
|
# @param command [String] Command to run
|
123
131
|
#
|
124
132
|
# @param on_fail[Object] How to behave when the command could
|
125
133
|
# not be run. Specifying :raise will raise an error, anything else will
|
126
134
|
# return that object on failure. Default is :raise.
|
127
135
|
# @param logger Optional logger used to log the command's stderr.
|
128
|
-
# @param
|
136
|
+
# @param timeout Optional time out for the specified command. If no timeout is passed,
|
129
137
|
# a default of 300 seconds is used.
|
130
138
|
#
|
131
139
|
# @raise [Facter::Core::Execution::ExecutionFailure] If the command does
|
@@ -135,8 +143,8 @@ module Facter
|
|
135
143
|
# :on_fail if command execution failed and :on_fail was specified.
|
136
144
|
#
|
137
145
|
# @api private
|
138
|
-
def execute_command(command, on_fail = nil, logger = nil,
|
139
|
-
@@impl.execute_command(command, on_fail, logger,
|
146
|
+
def execute_command(command, on_fail = nil, logger = nil, timeout = nil)
|
147
|
+
@@impl.execute_command(command, on_fail, logger, timeout)
|
140
148
|
end
|
141
149
|
|
142
150
|
class ExecutionFailure < StandardError; end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facts
|
4
|
+
module Windows
|
5
|
+
module Os
|
6
|
+
module Windows
|
7
|
+
class DisplayVersion
|
8
|
+
FACT_NAME = 'os.windows.display_version'
|
9
|
+
|
10
|
+
def call_the_resolver
|
11
|
+
fact_value = Facter::Resolvers::ProductRelease.resolve(:display_version)
|
12
|
+
|
13
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -97,6 +97,10 @@ module Facter
|
|
97
97
|
type: :boolean,
|
98
98
|
desc: 'Resolve facts sequentially'
|
99
99
|
|
100
|
+
class_option :http_debug,
|
101
|
+
type: :boolean,
|
102
|
+
desc: 'Whether to write HTTP request and responses to stderr. This should never be used in production.'
|
103
|
+
|
100
104
|
class_option :puppet,
|
101
105
|
type: :boolean,
|
102
106
|
aliases: '-p',
|
@@ -51,7 +51,9 @@ module Facter
|
|
51
51
|
core_and_external_facts = core_or_external_fact(user_query) || []
|
52
52
|
resolved_facts = core_and_external_facts + custom_facts
|
53
53
|
|
54
|
-
resolved_facts
|
54
|
+
if resolved_facts.empty? || resolved_facts.none? { |rf| rf.resolves?(user_query) }
|
55
|
+
resolved_facts.concat(all_custom_facts(user_query))
|
56
|
+
end
|
55
57
|
|
56
58
|
@cache_manager.cache_facts(resolved_facts)
|
57
59
|
|
@@ -36,6 +36,7 @@ module Facter
|
|
36
36
|
@hocon = false
|
37
37
|
@allow_external_loggers = true
|
38
38
|
@force_dot_resolution = false
|
39
|
+
@http_debug = false
|
39
40
|
|
40
41
|
class << self
|
41
42
|
attr_reader :debug, :verbose, :log_level, :show_legacy,
|
@@ -44,7 +45,7 @@ module Facter
|
|
44
45
|
attr_accessor :config, :strict, :json,
|
45
46
|
:cache, :yaml, :puppet, :ttls, :block, :cli, :config_file_custom_dir,
|
46
47
|
:config_file_external_dir, :default_external_dir, :fact_groups, :force_dot_resolution,
|
47
|
-
:block_list, :color, :trace, :sequential, :timing, :hocon, :allow_external_loggers
|
48
|
+
:block_list, :color, :trace, :sequential, :timing, :hocon, :allow_external_loggers, :http_debug
|
48
49
|
|
49
50
|
attr_writer :external_dir
|
50
51
|
|
@@ -179,6 +180,7 @@ module Facter
|
|
179
180
|
@ttls = []
|
180
181
|
@block = true
|
181
182
|
@cli = nil
|
183
|
+
@http_debug = false
|
182
184
|
reset_config
|
183
185
|
end
|
184
186
|
|
@@ -42,8 +42,9 @@ module Facter
|
|
42
42
|
return unless result
|
43
43
|
|
44
44
|
names = retrieve_from_array(result.scan(/name\s=\s.*/), 1)
|
45
|
+
status = retrieve_from_array(result.scan(/\s+status\s=\s.*/), 1)
|
45
46
|
|
46
|
-
names.
|
47
|
+
names.each_with_index { |elem, idx| query_cuat(elem) if status[idx] == '1' }
|
47
48
|
end
|
48
49
|
|
49
50
|
def query_cuat(name)
|
@@ -24,10 +24,19 @@ module Facter
|
|
24
24
|
|
25
25
|
def build_fact_list(reg)
|
26
26
|
reg.each do |name, _value|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
case name
|
28
|
+
when 'EditionID'
|
29
|
+
@fact_list[:edition_id] = reg[name]
|
30
|
+
when 'InstallationType'
|
31
|
+
@fact_list[:installation_type] = reg[name]
|
32
|
+
when 'ProductName'
|
33
|
+
@fact_list[:product_name] = reg[name]
|
34
|
+
when 'DisplayVersion'
|
35
|
+
@fact_list[:release_id] = reg[name]
|
36
|
+
@fact_list[:display_version] = reg[name]
|
37
|
+
when 'ReleaseId'
|
38
|
+
@fact_list[:release_id] = reg[name] unless @fact_list[:release_id]
|
39
|
+
end
|
31
40
|
end
|
32
41
|
end
|
33
42
|
end
|
@@ -23,9 +23,11 @@ module Facter
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def check_version_10(consumerrel, kernel_version)
|
26
|
+
return '10' if consumerrel
|
27
|
+
|
26
28
|
build_number = kernel_version[/([^.]*)$/].to_i
|
27
|
-
if
|
28
|
-
'
|
29
|
+
if build_number >= 20_348
|
30
|
+
'2022'
|
29
31
|
elsif build_number >= 17_623
|
30
32
|
'2019'
|
31
33
|
else
|
@@ -60,6 +60,9 @@ module Facter
|
|
60
60
|
http = Net::HTTP.new(parsed_url.host)
|
61
61
|
http.read_timeout = timeouts[:session] || SESSION_TIMEOUT
|
62
62
|
http.open_timeout = timeouts[:connection] || CONNECTION_TIMEOUT
|
63
|
+
|
64
|
+
http.set_debug_output($stderr) if Options[:http_debug]
|
65
|
+
|
63
66
|
http
|
64
67
|
end
|
65
68
|
|
data/lib/facter/version.rb
CHANGED
data/lib/facter.rb
CHANGED
@@ -205,6 +205,25 @@ module Facter
|
|
205
205
|
Facter::Options[:debug] = debug_bool
|
206
206
|
end
|
207
207
|
|
208
|
+
# Check whether http debugging is enabled
|
209
|
+
#
|
210
|
+
# @return [bool]
|
211
|
+
#
|
212
|
+
# @api public
|
213
|
+
def http_debug?
|
214
|
+
Options[:http_debug]
|
215
|
+
end
|
216
|
+
|
217
|
+
# Enable or disable http debugging
|
218
|
+
# @param debug_bool [bool] State which http debugging should have
|
219
|
+
#
|
220
|
+
# @return [type] [description]
|
221
|
+
#
|
222
|
+
# @api public
|
223
|
+
def http_debug(http_debug_bool)
|
224
|
+
Facter::Options[:http_debug] = http_debug_bool
|
225
|
+
end
|
226
|
+
|
208
227
|
# Enable sequential resolving of facts
|
209
228
|
#
|
210
229
|
# @return [bool]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -846,6 +846,7 @@ files:
|
|
846
846
|
- lib/facter/facts/windows/os/hardware.rb
|
847
847
|
- lib/facter/facts/windows/os/name.rb
|
848
848
|
- lib/facter/facts/windows/os/release.rb
|
849
|
+
- lib/facter/facts/windows/os/windows/display_version.rb
|
849
850
|
- lib/facter/facts/windows/os/windows/edition_id.rb
|
850
851
|
- lib/facter/facts/windows/os/windows/installation_type.rb
|
851
852
|
- lib/facter/facts/windows/os/windows/product_name.rb
|