facter 4.0.35 → 4.0.40
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/facter +3 -4
- data/lib/facter.rb +163 -23
- data/lib/facter/custom_facts/core/execution/base.rb +36 -6
- data/lib/facter/custom_facts/util/directory_loader.rb +13 -3
- data/lib/facter/custom_facts/util/fact.rb +4 -1
- data/lib/facter/fact_groups.conf +140 -1
- data/lib/facter/facts/aix/disks.rb +17 -2
- data/lib/facter/facts/aix/kernel.rb +1 -1
- data/lib/facter/facts/aix/kernelmajversion.rb +1 -1
- data/lib/facter/facts/aix/kernelrelease.rb +1 -1
- data/lib/facter/facts/aix/kernelversion.rb +1 -1
- data/lib/facter/facts/aix/networking/scope6.rb +3 -1
- data/lib/facter/facts/aix/os/release.rb +1 -1
- data/lib/facter/facts/aix/scope6_interfaces.rb +0 -2
- data/lib/facter/facts/aix/serialnumber.rb +20 -0
- data/lib/facter/facts/aix/sshalgorithmkey.rb +17 -0
- data/lib/facter/facts/aix/sshfp_algorithm.rb +20 -0
- data/lib/facter/facts/debian/os/distro/release.rb +6 -1
- data/lib/facter/facts/freebsd/sshalgorithmkey.rb +17 -0
- data/lib/facter/facts/freebsd/sshfp_algorithm.rb +20 -0
- data/lib/facter/facts/linux/cloud.rb +15 -0
- data/lib/facter/facts/linux/disks.rb +20 -1
- data/lib/facter/facts/linux/dmi/board/asset_tag.rb +19 -0
- data/lib/facter/facts/linux/ec2_metadata.rb +11 -6
- data/lib/facter/facts/linux/ec2_userdata.rb +7 -4
- data/lib/facter/facts/linux/gce.rb +16 -0
- data/lib/facter/facts/linux/is_virtual.rb +1 -3
- data/lib/facter/facts/linux/networking/scope6.rb +3 -1
- data/lib/facter/facts/linux/partitions.rb +1 -1
- data/lib/facter/facts/linux/processors/speed.rb +17 -0
- data/lib/facter/facts/linux/scope6_interfaces.rb +1 -2
- data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/linux/xen.rb +28 -0
- data/lib/facter/facts/macosx/networking/scope6.rb +3 -1
- data/lib/facter/facts/macosx/scope6_interfaces.rb +0 -2
- data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/rhel/os/release.rb +2 -2
- data/lib/facter/facts/solaris/disks.rb +21 -2
- data/lib/facter/facts/solaris/hypervisors/ldom.rb +24 -0
- data/lib/facter/facts/solaris/hypervisors/zone.rb +39 -0
- data/lib/facter/facts/solaris/is_virtual.rb +64 -0
- data/lib/facter/facts/solaris/kernelmajversion.rb +1 -1
- data/lib/facter/facts/solaris/ldom.rb +35 -0
- data/lib/facter/facts/solaris/sshalgorithmkey.rb +17 -0
- data/lib/facter/facts/solaris/sshfp_algorithm.rb +20 -0
- data/lib/facter/facts/solaris/virtual.rb +60 -0
- data/lib/facter/facts/solaris/zones.rb +1 -1
- data/lib/facter/facts/ubuntu/lsbdistrelease.rb +23 -0
- data/lib/facter/facts/windows/ec2_metadata.rb +5 -3
- data/lib/facter/facts/windows/ec2_userdata.rb +5 -3
- data/lib/facter/facts/windows/gce.rb +16 -0
- data/lib/facter/facts/windows/networking/scope6.rb +3 -1
- data/lib/facter/facts/windows/sshalgorithmkey.rb +22 -0
- data/lib/facter/facts/windows/sshfp_algorithm.rb +25 -0
- data/lib/facter/facts_utils/facts_utils.rb +2 -0
- data/lib/facter/framework/benchmarking/timer.rb +23 -0
- data/lib/facter/framework/cli/cli.rb +86 -34
- data/lib/facter/framework/cli/cli_launcher.rb +34 -38
- data/lib/facter/framework/config/fact_groups.rb +36 -2
- data/lib/facter/framework/core/cache_manager.rb +30 -18
- data/lib/facter/framework/core/fact/internal/core_fact.rb +2 -0
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +11 -25
- data/lib/facter/framework/core/fact_filter.rb +13 -0
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +38 -12
- data/lib/facter/framework/core/fact_loaders/internal_fact_loader.rb +7 -7
- data/lib/facter/framework/core/file_loader.rb +2 -0
- data/lib/facter/framework/core/options/config_file_options.rb +5 -3
- data/lib/facter/framework/core/options/option_store.rb +30 -11
- data/lib/facter/framework/core/session_cache.rb +1 -4
- data/lib/facter/framework/formatters/legacy_fact_formatter.rb +8 -1
- data/lib/facter/framework/formatters/yaml_fact_formatter.rb +1 -1
- data/lib/facter/framework/logging/logger.rb +3 -11
- data/lib/facter/patches/sysfilesystem/sys/statvfs.rb +92 -0
- data/lib/facter/resolvers/aio_agent_version.rb +0 -1
- data/lib/facter/resolvers/aix/architecture_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/disks.rb +2 -3
- data/lib/facter/resolvers/aix/filesystem_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/hardware_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/load_averages_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/memory.rb +2 -3
- data/lib/facter/resolvers/aix/mountpoints.rb +0 -1
- data/lib/facter/resolvers/aix/networking_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/nim.rb +0 -1
- data/lib/facter/resolvers/aix/os_level.rb +27 -0
- data/lib/facter/resolvers/aix/partitions.rb +2 -3
- data/lib/facter/resolvers/aix/processors.rb +0 -1
- data/lib/facter/resolvers/aix/serialnumber.rb +36 -0
- data/lib/facter/resolvers/augeas_resolver.rb +0 -1
- data/lib/facter/resolvers/base_resolver.rb +9 -4
- data/lib/facter/resolvers/bsd/processors.rb +0 -1
- data/lib/facter/resolvers/cloud.rb +39 -0
- data/lib/facter/resolvers/containers.rb +0 -1
- data/lib/facter/resolvers/debian_version.rb +0 -1
- data/lib/facter/resolvers/disk_resolver.rb +0 -1
- data/lib/facter/resolvers/dmi_decode.rb +0 -1
- data/lib/facter/resolvers/dmi_resolver.rb +4 -4
- data/lib/facter/resolvers/ec2.rb +4 -19
- data/lib/facter/resolvers/eos_release_resolver.rb +0 -1
- data/lib/facter/resolvers/facterversion_resolver.rb +0 -1
- data/lib/facter/resolvers/filesystems_resolver.rb +0 -1
- data/lib/facter/resolvers/fips_enabled_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/dmi_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/freebsd_version_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/geom_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/processors.rb +0 -1
- data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/gce.rb +53 -0
- data/lib/facter/resolvers/hostname_resolver.rb +0 -1
- data/lib/facter/resolvers/identity_resolver.rb +0 -1
- data/lib/facter/resolvers/linux/docker_uptime.rb +0 -1
- data/lib/facter/resolvers/linux/load_averages.rb +0 -1
- data/lib/facter/resolvers/load_averages.rb +0 -1
- data/lib/facter/resolvers/lpar_resolver.rb +0 -1
- data/lib/facter/resolvers/lsb_release_resolver.rb +0 -1
- data/lib/facter/resolvers/lspci.rb +0 -1
- data/lib/facter/resolvers/macosx/dmi_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/filesystems_resolver.rb +1 -6
- data/lib/facter/resolvers/macosx/load_averages_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +3 -3
- data/lib/facter/resolvers/macosx/processor_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/swap_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/system_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +0 -1
- data/lib/facter/resolvers/memory_resolver.rb +13 -2
- data/lib/facter/resolvers/mountpoints_resolver.rb +0 -1
- data/lib/facter/resolvers/networking_linux_resolver.rb +0 -1
- data/lib/facter/resolvers/networking_resolver.rb +0 -1
- data/lib/facter/resolvers/open_vz.rb +0 -1
- data/lib/facter/resolvers/os_release_resolver.rb +0 -1
- data/lib/facter/resolvers/partitions.rb +37 -2
- data/lib/facter/resolvers/path_resolver.rb +0 -1
- data/lib/facter/resolvers/processors_resolver.rb +24 -3
- data/lib/facter/resolvers/puppet_version_resolver.rb +0 -1
- data/lib/facter/resolvers/redhat_release_resolver.rb +0 -1
- data/lib/facter/resolvers/ruby_resolver.rb +0 -1
- data/lib/facter/resolvers/selinux_resolver.rb +0 -1
- data/lib/facter/resolvers/solaris/disks.rb +0 -1
- data/lib/facter/resolvers/solaris/dmi.rb +0 -1
- data/lib/facter/resolvers/solaris/dmi_sparc.rb +0 -1
- data/lib/facter/resolvers/solaris/filesystems.rb +0 -1
- data/lib/facter/resolvers/solaris/ipaddress.rb +0 -1
- data/lib/facter/resolvers/solaris/ldom.rb +69 -0
- data/lib/facter/resolvers/solaris/memory.rb +0 -1
- data/lib/facter/resolvers/solaris/networking.rb +0 -1
- data/lib/facter/resolvers/solaris/os_release.rb +0 -1
- data/lib/facter/resolvers/solaris/processors.rb +0 -1
- data/lib/facter/resolvers/solaris/zone.rb +0 -1
- data/lib/facter/resolvers/solaris/zone_name.rb +0 -1
- data/lib/facter/resolvers/ssh_resolver.rb +0 -1
- data/lib/facter/resolvers/suse_release_resolver.rb +0 -1
- data/lib/facter/resolvers/sw_vers_resolver.rb +0 -1
- data/lib/facter/resolvers/timezone_resolver.rb +0 -1
- data/lib/facter/resolvers/uname_resolver.rb +0 -1
- data/lib/facter/resolvers/uptime_resolver.rb +0 -1
- data/lib/facter/resolvers/utils/filesystem_helper.rb +3 -1
- data/lib/facter/resolvers/utils/http.rb +68 -0
- data/lib/facter/resolvers/virt_what.rb +0 -1
- data/lib/facter/resolvers/vmware.rb +0 -1
- data/lib/facter/resolvers/windows/aio_agent_version.rb +0 -1
- data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/fips_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/hardware_architecture_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/identity_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/kernel_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/memory_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/netkvm_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/networking_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/processors_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/product_release_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/ssh.rb +0 -1
- data/lib/facter/resolvers/windows/system32_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/uptime_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/virtualization_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/win_os_description_resolver.rb +0 -1
- data/lib/facter/resolvers/wpar_resolver.rb +0 -1
- data/lib/facter/resolvers/xen.rb +28 -1
- data/lib/facter/resolvers/zfs.rb +0 -1
- data/lib/facter/resolvers/zpool.rb +0 -1
- data/lib/facter/version.rb +1 -1
- metadata +31 -4
- data/lib/facter/resolvers/aix/os_level_resolver.rb +0 -26
- data/lib/facter/resolvers/os_level_resolver.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64bb37710d33d522370161fab93516fed5961615ff3fc44609ee6700318efda4
|
4
|
+
data.tar.gz: 47e222b78a6a4ce13ee4d0fc91cbcca942b4b3c9357e35debbc2ea61d401867c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bb85c358a104d83fde58ad5ce0733736f5e2295324d1041e79d24c5c08cf284f2eb32c30b9024a5f216713b8a12a92a01249aab0346aec016ebeecc1c77d82f
|
7
|
+
data.tar.gz: 2f079a4fc5788d5e4c5698d0b5ad31cfc7affa352b19d636c077faa3125e342ba14e4d1c3d53a1684112cd9a76c27365fe9f2f9713502ea52b8d4ceffd56eee7
|
data/bin/facter
CHANGED
@@ -4,8 +4,7 @@
|
|
4
4
|
require 'pathname'
|
5
5
|
require 'facter/framework/cli/cli_launcher.rb'
|
6
6
|
|
7
|
-
|
7
|
+
Facter::OptionsValidator.validate(ARGV)
|
8
|
+
processed_arguments = CliLauncher.prepare_arguments(ARGV)
|
8
9
|
|
9
|
-
|
10
|
-
cli_launcher.prepare_arguments
|
11
|
-
cli_launcher.start
|
10
|
+
CliLauncher.start(processed_arguments)
|
data/lib/facter.rb
CHANGED
@@ -13,8 +13,31 @@ module Facter
|
|
13
13
|
Options.init
|
14
14
|
Log.output(STDOUT)
|
15
15
|
@already_searched = {}
|
16
|
+
@debug_once = []
|
17
|
+
@warn_once = []
|
16
18
|
|
17
19
|
class << self
|
20
|
+
def resolve(args_as_string)
|
21
|
+
require 'facter/framework/cli/cli_launcher'
|
22
|
+
|
23
|
+
args = args_as_string.split(' ')
|
24
|
+
|
25
|
+
Facter::OptionsValidator.validate(args)
|
26
|
+
processed_arguments = CliLauncher.prepare_arguments(args, nil)
|
27
|
+
|
28
|
+
cli = Facter::Cli.new([], processed_arguments)
|
29
|
+
|
30
|
+
if cli.args.include?(:version)
|
31
|
+
cli.invoke(:version, [])
|
32
|
+
elsif cli.args.include?('--list-cache-groups')
|
33
|
+
cli.invoke(:list_cache_groups, [])
|
34
|
+
elsif cli.args.include?('--list-block-groups')
|
35
|
+
cli.invoke(:list_block_groups, [])
|
36
|
+
else
|
37
|
+
cli.invoke(:arg_parser)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
18
41
|
def clear_messages
|
19
42
|
logger.debug('clear_messages is not implemented')
|
20
43
|
end
|
@@ -54,6 +77,8 @@ module Facter
|
|
54
77
|
# @api public
|
55
78
|
def clear
|
56
79
|
@already_searched = {}
|
80
|
+
@debug_once = []
|
81
|
+
@warn_once = []
|
57
82
|
LegacyFacter.clear
|
58
83
|
Options[:custom_dir] = []
|
59
84
|
LegacyFacter.collection.invalidate_custom_facts
|
@@ -68,24 +93,54 @@ module Facter
|
|
68
93
|
fact_collection.dig(*splitted_user_query)
|
69
94
|
end
|
70
95
|
|
71
|
-
#
|
72
|
-
# @param
|
96
|
+
# Logs debug message when debug option is set to true
|
97
|
+
# @param message [Object] Message object to be logged
|
98
|
+
#
|
99
|
+
# @return [nil]
|
100
|
+
#
|
101
|
+
# @api public
|
102
|
+
def debug(message)
|
103
|
+
return unless debugging?
|
104
|
+
|
105
|
+
logger.debug(message.to_s)
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
|
109
|
+
# Logs the same debug message only once when debug option is set to true
|
110
|
+
# @param message [Object] Message object to be logged
|
73
111
|
#
|
74
112
|
# @return [nil]
|
75
113
|
#
|
76
114
|
# @api public
|
77
|
-
def
|
115
|
+
def debugonce(message)
|
78
116
|
return unless debugging?
|
79
117
|
|
80
|
-
|
118
|
+
message_string = message.to_s
|
119
|
+
return if @debug_once.include? message_string
|
120
|
+
|
121
|
+
@debug_once << message_string
|
122
|
+
logger.debug(message_string)
|
81
123
|
nil
|
82
124
|
end
|
83
125
|
|
126
|
+
# Define a new fact or extend an existing fact.
|
127
|
+
#
|
128
|
+
# @param name [Symbol] The name of the fact to define
|
129
|
+
# @param options [Hash] A hash of options to set on the fact
|
130
|
+
#
|
131
|
+
# @return [Facter::Util::Fact] The fact that was defined
|
132
|
+
#
|
133
|
+
# @api public
|
134
|
+
def define_fact(name, options = {}, &block)
|
135
|
+
options[:fact_type] = :custom
|
136
|
+
LegacyFacter.define_fact(name, options, &block)
|
137
|
+
end
|
138
|
+
|
84
139
|
def on_message(&block)
|
85
140
|
Facter::Log.on_message(&block)
|
86
141
|
end
|
87
142
|
|
88
|
-
# Check whether
|
143
|
+
# Check whether debugging is enabled
|
89
144
|
#
|
90
145
|
# @return [bool]
|
91
146
|
#
|
@@ -104,11 +159,31 @@ module Facter
|
|
104
159
|
Facter::Options[:debug] = debug_bool
|
105
160
|
end
|
106
161
|
|
162
|
+
# Iterates over fact names and values
|
163
|
+
#
|
164
|
+
# @yieldparam [String] name the fact name
|
165
|
+
# @yieldparam [String] value the current value of the fact
|
166
|
+
#
|
167
|
+
# @return [Facter]
|
168
|
+
#
|
169
|
+
# @api public
|
170
|
+
def each
|
171
|
+
log_blocked_facts
|
172
|
+
resolved_facts = Facter::FactManager.instance.resolve_facts
|
173
|
+
SessionCache.invalidate_all_caches
|
174
|
+
|
175
|
+
resolved_facts.each do |fact|
|
176
|
+
yield(fact.name, fact.value)
|
177
|
+
end
|
178
|
+
|
179
|
+
self
|
180
|
+
end
|
181
|
+
|
107
182
|
# Returns a fact object by name. If you use this, you still have to
|
108
183
|
# call {Facter::Util::Fact#value `value`} on it to retrieve the actual
|
109
184
|
# value.
|
110
185
|
#
|
111
|
-
# @param
|
186
|
+
# @param user_query [String] the name of the fact
|
112
187
|
#
|
113
188
|
# @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
|
114
189
|
# is found.
|
@@ -134,6 +209,16 @@ module Facter
|
|
134
209
|
nil
|
135
210
|
end
|
136
211
|
|
212
|
+
# Loads all facts
|
213
|
+
#
|
214
|
+
# @return [nil]
|
215
|
+
#
|
216
|
+
# @api public
|
217
|
+
def loadfacts
|
218
|
+
LegacyFacter.loadfacts
|
219
|
+
nil
|
220
|
+
end
|
221
|
+
|
137
222
|
# Register directories to be searched for custom facts. The registered directories
|
138
223
|
# must be absolute paths or they will be ignored.
|
139
224
|
#
|
@@ -199,7 +284,7 @@ module Facter
|
|
199
284
|
end
|
200
285
|
|
201
286
|
# Enable or disable trace
|
202
|
-
# @param
|
287
|
+
# @param bool [bool] Set trace on debug state
|
203
288
|
#
|
204
289
|
# @return [type] [description]
|
205
290
|
#
|
@@ -210,7 +295,7 @@ module Facter
|
|
210
295
|
|
211
296
|
# Gets the value for a fact. Returns `nil` if no such fact exists.
|
212
297
|
#
|
213
|
-
# @param
|
298
|
+
# @param user_query [String] the fact name
|
214
299
|
# @return [String] the value of the fact, or nil if no fact is found
|
215
300
|
#
|
216
301
|
# @api public
|
@@ -220,6 +305,18 @@ module Facter
|
|
220
305
|
@already_searched[user_query]&.value
|
221
306
|
end
|
222
307
|
|
308
|
+
def values(options, user_queries)
|
309
|
+
init_cli_options(options, user_queries)
|
310
|
+
resolved_facts = Facter::FactManager.instance.resolve_facts(user_queries)
|
311
|
+
Facter::SessionCache.invalidate_all_caches
|
312
|
+
|
313
|
+
if user_queries.count.zero?
|
314
|
+
Facter::FactCollection.new.build_fact_collection!(resolved_facts)
|
315
|
+
else
|
316
|
+
FormatterHelper.retrieve_facts_to_display_for_user_query(user_queries, resolved_facts)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
223
320
|
# Returns Facter version
|
224
321
|
#
|
225
322
|
# @return [String] Current version
|
@@ -247,23 +344,67 @@ module Facter
|
|
247
344
|
[fact_formatter.format(resolved_facts), status || 0]
|
248
345
|
end
|
249
346
|
|
250
|
-
def log_exception(exception, message =
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
elsif message
|
255
|
-
arr << message
|
256
|
-
end
|
257
|
-
if Options[:trace]
|
258
|
-
arr << 'backtrace:'
|
259
|
-
arr.concat(exception.backtrace)
|
260
|
-
end
|
347
|
+
def log_exception(exception, message = nil)
|
348
|
+
error_message = []
|
349
|
+
|
350
|
+
error_message << message.to_s unless message.nil? || (message.is_a?(String) && message.empty?)
|
261
351
|
|
262
|
-
|
352
|
+
parse_exception(exception, error_message)
|
353
|
+
logger.error(error_message.flatten.join("\n"))
|
354
|
+
end
|
355
|
+
|
356
|
+
# Returns a list with the names of all solved facts
|
357
|
+
#
|
358
|
+
# @return [Array] the list with all the fact names
|
359
|
+
#
|
360
|
+
# @api public
|
361
|
+
def list
|
362
|
+
to_hash.keys.sort
|
363
|
+
end
|
364
|
+
|
365
|
+
# Logs the message parameter as a warning.
|
366
|
+
#
|
367
|
+
# @param message [Object] the warning object to be displayed
|
368
|
+
#
|
369
|
+
# @return [nil]
|
370
|
+
#
|
371
|
+
# @api public
|
372
|
+
def warn(message)
|
373
|
+
logger.warn(message.to_s)
|
374
|
+
nil
|
375
|
+
end
|
376
|
+
|
377
|
+
# Logs only once the same warning message.
|
378
|
+
#
|
379
|
+
# @param message [Object] the warning message object
|
380
|
+
#
|
381
|
+
# @return [nil]
|
382
|
+
#
|
383
|
+
# @api public
|
384
|
+
def warnonce(message)
|
385
|
+
message_string = message.to_s
|
386
|
+
return if @warn_once.include? message_string
|
387
|
+
|
388
|
+
@warn_once << message_string
|
389
|
+
logger.warn(message_string)
|
390
|
+
nil
|
263
391
|
end
|
264
392
|
|
265
393
|
private
|
266
394
|
|
395
|
+
def parse_exception(exception, error_message)
|
396
|
+
if exception.is_a?(Exception)
|
397
|
+
error_message << exception.message if error_message.empty?
|
398
|
+
|
399
|
+
if Options[:trace] && !exception.backtrace.nil?
|
400
|
+
error_message << 'backtrace:'
|
401
|
+
error_message.concat(exception.backtrace)
|
402
|
+
end
|
403
|
+
elsif error_message.empty?
|
404
|
+
error_message << exception.to_s
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
267
408
|
def logger
|
268
409
|
@logger ||= Log.new(self)
|
269
410
|
end
|
@@ -303,10 +444,9 @@ module Facter
|
|
303
444
|
# Returns exit status when user query contains facts that do
|
304
445
|
# not exist
|
305
446
|
#
|
306
|
-
# @param
|
307
|
-
# @param dirs [Array] List of resolved facts
|
447
|
+
# @param resolved_facts [Array] List of resolved facts
|
308
448
|
#
|
309
|
-
# @return [
|
449
|
+
# @return [1/nil] Will return status 1 if user query contains
|
310
450
|
# facts that are not found or resolved, otherwise it will return nil
|
311
451
|
#
|
312
452
|
# @api private
|
@@ -6,6 +6,10 @@ module Facter
|
|
6
6
|
class Base
|
7
7
|
STDERR_MESSAGE = 'Command %s resulted with the following stderr message: %s'
|
8
8
|
|
9
|
+
def initialize
|
10
|
+
@log = Log.new(self)
|
11
|
+
end
|
12
|
+
|
9
13
|
# This is part of the public API. No race condition can happen
|
10
14
|
# here because custom facts are executed sequentially
|
11
15
|
def with_env(values)
|
@@ -36,9 +40,7 @@ module Facter
|
|
36
40
|
end
|
37
41
|
|
38
42
|
def execute(command, options = {})
|
39
|
-
on_fail = options
|
40
|
-
expand = options.fetch(:expand, true)
|
41
|
-
logger = options[:logger]
|
43
|
+
on_fail, expand, logger, time_limit = extract_options(options)
|
42
44
|
|
43
45
|
expanded_command = if !expand && builtin_command?(command) || logger
|
44
46
|
command
|
@@ -55,11 +57,21 @@ module Facter
|
|
55
57
|
return on_fail
|
56
58
|
end
|
57
59
|
|
58
|
-
execute_command(expanded_command, on_fail, logger)
|
60
|
+
execute_command(expanded_command, on_fail, logger, time_limit)
|
59
61
|
end
|
60
62
|
|
61
63
|
private
|
62
64
|
|
65
|
+
def extract_options(options)
|
66
|
+
on_fail = options.fetch(:on_fail, :raise)
|
67
|
+
expand = options.fetch(:expand, true)
|
68
|
+
logger = options[:logger]
|
69
|
+
time_limit = options[:limit].to_i
|
70
|
+
time_limit = time_limit.positive? ? time_limit : nil
|
71
|
+
|
72
|
+
[on_fail, expand, logger, time_limit]
|
73
|
+
end
|
74
|
+
|
63
75
|
def log_stderr(msg, command, logger)
|
64
76
|
return if !msg || msg.empty?
|
65
77
|
|
@@ -77,12 +89,30 @@ module Facter
|
|
77
89
|
output.chomp =~ /builtin/ ? true : false
|
78
90
|
end
|
79
91
|
|
80
|
-
def execute_command(command, on_fail, logger = nil)
|
92
|
+
def execute_command(command, on_fail, logger = nil, time_limit = nil)
|
93
|
+
time_limit ||= 1.5
|
81
94
|
begin
|
82
95
|
# Set LC_ALL and LANG to force i18n to C for the duration of this exec;
|
83
96
|
# this ensures that any code that parses the
|
84
97
|
# output of the command can expect it to be in a consistent / predictable format / locale
|
85
|
-
|
98
|
+
opts = { 'LC_ALL' => 'C', 'LANG' => 'C' }
|
99
|
+
require 'timeout'
|
100
|
+
@log.debug("Executing command: #{command}")
|
101
|
+
out, stderr = Open3.popen3(opts, command.to_s) do |_, stdout, stderr, wait_thr|
|
102
|
+
pid = wait_thr.pid
|
103
|
+
output = +''
|
104
|
+
err = +''
|
105
|
+
begin
|
106
|
+
Timeout.timeout(time_limit) do
|
107
|
+
output << stdout.read
|
108
|
+
err << stderr.read
|
109
|
+
end
|
110
|
+
rescue Timeout::Error
|
111
|
+
@log.debug("Timeout encounter after #{time_limit}s, killing process with pid: #{pid}")
|
112
|
+
Process.kill('KILL', pid)
|
113
|
+
end
|
114
|
+
[output, err]
|
115
|
+
end
|
86
116
|
log_stderr(stderr, command, logger)
|
87
117
|
rescue StandardError => e
|
88
118
|
return '' if logger
|
@@ -35,6 +35,7 @@ module LegacyFacter
|
|
35
35
|
def initialize(dir = LegacyFacter::Util::Config.external_facts_dirs, weight = EXTERNAL_FACT_WEIGHT)
|
36
36
|
@directories = [dir].flatten
|
37
37
|
@weight = weight
|
38
|
+
@log ||= Facter::Log.new(self)
|
38
39
|
end
|
39
40
|
|
40
41
|
# Load facts from files in fact directory using the relevant parser classes to
|
@@ -58,7 +59,7 @@ module LegacyFacter
|
|
58
59
|
basename = File.basename(file)
|
59
60
|
next if file_blocked?(basename)
|
60
61
|
|
61
|
-
if facts.find { |f| f.name == basename } && cm.
|
62
|
+
if facts.find { |f| f.name == basename } && cm.fact_cache_enabled?(basename)
|
62
63
|
Facter.log_exception(Exception.new("Caching is enabled for group \"#{basename}\" while "\
|
63
64
|
'there are at least two external facts files with the same filename'))
|
64
65
|
else
|
@@ -83,11 +84,12 @@ module LegacyFacter
|
|
83
84
|
parser = LegacyFacter::Util::Parser.parser_for(fact.file)
|
84
85
|
next if parser.nil?
|
85
86
|
|
86
|
-
data = parser
|
87
|
+
data = resolve_fact(fact, parser)
|
88
|
+
|
87
89
|
if data == false
|
88
90
|
LegacyFacter.warn "Could not interpret fact file #{fact.file}"
|
89
91
|
elsif (data == {}) || data.nil?
|
90
|
-
|
92
|
+
@log.debug("Fact file #{fact.file} was parsed but no key=>value data was returned")
|
91
93
|
else
|
92
94
|
data.each do |p, v|
|
93
95
|
collection.add(p, value: v, fact_type: :external,
|
@@ -97,6 +99,14 @@ module LegacyFacter
|
|
97
99
|
end
|
98
100
|
end
|
99
101
|
|
102
|
+
def resolve_fact(fact, parser)
|
103
|
+
data = nil
|
104
|
+
fact_name = File.basename(fact.file)
|
105
|
+
Facter::Framework::Benchmarking::Timer.measure(fact_name) { data = parser.results }
|
106
|
+
|
107
|
+
data
|
108
|
+
end
|
109
|
+
|
100
110
|
def entries
|
101
111
|
dirs = @directories.select { |directory| File.directory?(directory) }.map do |directory|
|
102
112
|
Dir.entries(directory).map { |directory_entry| File.join(directory, directory_entry) }
|
@@ -118,7 +118,10 @@ module Facter
|
|
118
118
|
|
119
119
|
searching do
|
120
120
|
suitable_resolutions = sort_by_weight(find_suitable_resolutions(@resolves))
|
121
|
-
|
121
|
+
|
122
|
+
Facter::Framework::Benchmarking::Timer.measure(@name) do
|
123
|
+
@value = find_first_real_value(suitable_resolutions)
|
124
|
+
end
|
122
125
|
|
123
126
|
announce_when_no_suitable_resolution(suitable_resolutions)
|
124
127
|
announce_when_no_value_found(@value)
|
data/lib/facter/fact_groups.conf
CHANGED
@@ -165,5 +165,144 @@
|
|
165
165
|
"virtual",
|
166
166
|
"is_virtual",
|
167
167
|
"cloud"
|
168
|
+
],
|
169
|
+
"legacy": [
|
170
|
+
"architecture",
|
171
|
+
"augeasversion",
|
172
|
+
"bios_release_date",
|
173
|
+
"bios_vendor",
|
174
|
+
"bios_version",
|
175
|
+
"blockdevice_*_model",
|
176
|
+
"blockdevice_*_size",
|
177
|
+
"blockdevice_*_vendor",
|
178
|
+
"blockdevices",
|
179
|
+
"boardassettag",
|
180
|
+
"boardmanufacturer",
|
181
|
+
"boardproductname",
|
182
|
+
"boardserialnumber",
|
183
|
+
"chassisassettag",
|
184
|
+
"chassistype",
|
185
|
+
"dhcp_servers",
|
186
|
+
"domain",
|
187
|
+
"fqdn",
|
188
|
+
"gid",
|
189
|
+
"hardwareisa",
|
190
|
+
"hardwaremodel",
|
191
|
+
"hostname",
|
192
|
+
"id",
|
193
|
+
"interfaces",
|
194
|
+
"ipaddress",
|
195
|
+
"ipaddress_.*",
|
196
|
+
"ipaddress_*",
|
197
|
+
"ipaddress6",
|
198
|
+
"ipaddress6_.*",
|
199
|
+
"ipaddress6_*",
|
200
|
+
"ldom_*",
|
201
|
+
"lsbdistcodename",
|
202
|
+
"lsbdistdescription",
|
203
|
+
"lsbdistid",
|
204
|
+
"lsbdistrelease",
|
205
|
+
"lsbmajdistrelease",
|
206
|
+
"lsbminordistrelease",
|
207
|
+
"lsbrelease",
|
208
|
+
"macaddress",
|
209
|
+
"macaddress_.*",
|
210
|
+
"macaddress_*",
|
211
|
+
"macosx_buildversion",
|
212
|
+
"macosx_productname",
|
213
|
+
"macosx_productversion",
|
214
|
+
"macosx_productversion_major",
|
215
|
+
"macosx_productversion_minor",
|
216
|
+
"manufacturer",
|
217
|
+
"memoryfree",
|
218
|
+
"memoryfree_mb",
|
219
|
+
"memorysize",
|
220
|
+
"memorysize_mb",
|
221
|
+
"mtu_.*",
|
222
|
+
"mtu_*",
|
223
|
+
"netmask",
|
224
|
+
"netmask_.*",
|
225
|
+
"netmask_*",
|
226
|
+
"netmask6",
|
227
|
+
"netmask6_.*",
|
228
|
+
"netmask6_*",
|
229
|
+
"network",
|
230
|
+
"network_.*",
|
231
|
+
"network_*",
|
232
|
+
"network6",
|
233
|
+
"network6_.*",
|
234
|
+
"network6_*",
|
235
|
+
"operatingsystem",
|
236
|
+
"operatingsystemmajrelease",
|
237
|
+
"operatingsystemrelease",
|
238
|
+
"osfamily",
|
239
|
+
"physicalprocessorcount",
|
240
|
+
"processor.*",
|
241
|
+
"processor*",
|
242
|
+
"processorcount",
|
243
|
+
"productname",
|
244
|
+
"rubyplatform",
|
245
|
+
"rubysitedir",
|
246
|
+
"rubyversion",
|
247
|
+
"scope6",
|
248
|
+
"scope6_.*",
|
249
|
+
"selinux",
|
250
|
+
"selinux_config_mode",
|
251
|
+
"selinux_config_policy",
|
252
|
+
"selinux_current_mode",
|
253
|
+
"selinux_enforced",
|
254
|
+
"selinux_policyversion",
|
255
|
+
"serialnumber",
|
256
|
+
"sp_*",
|
257
|
+
"sp_boot_mode",
|
258
|
+
"sp_boot_rom_version",
|
259
|
+
"sp_boot_volume",
|
260
|
+
"sp_cpu_type",
|
261
|
+
"sp_current_processor_speed",
|
262
|
+
"sp_kernel_version",
|
263
|
+
"sp_l2_cache_core",
|
264
|
+
"sp_l3_cache",
|
265
|
+
"sp_local_host_name",
|
266
|
+
"sp_machine_model",
|
267
|
+
"sp_machine_name",
|
268
|
+
"sp_number_processors",
|
269
|
+
"sp_os_version",
|
270
|
+
"sp_packages",
|
271
|
+
"sp_physical_memory",
|
272
|
+
"sp_platform_uuid",
|
273
|
+
"sp_secure_vm",
|
274
|
+
"sp_serial_number",
|
275
|
+
"sp_smc_version_system",
|
276
|
+
"sp_uptime",
|
277
|
+
"sp_user_name",
|
278
|
+
"ssh.*key",
|
279
|
+
"ssh*key",
|
280
|
+
"sshfp_.*",
|
281
|
+
"sshfp_*",
|
282
|
+
"swapencrypted",
|
283
|
+
"swapfree",
|
284
|
+
"swapfree_mb",
|
285
|
+
"swapsize",
|
286
|
+
"swapsize_mb",
|
287
|
+
"system32",
|
288
|
+
"uptime",
|
289
|
+
"uptime_days",
|
290
|
+
"uptime_hours",
|
291
|
+
"uptime_seconds",
|
292
|
+
"uuid",
|
293
|
+
"windows_edition_id",
|
294
|
+
"windows_installation_type",
|
295
|
+
"windows_product_name",
|
296
|
+
"windows_release_id",
|
297
|
+
"xendomains",
|
298
|
+
"zone_*_brand",
|
299
|
+
"zone_*_id",
|
300
|
+
"zone_*_iptype",
|
301
|
+
"zone_*_name",
|
302
|
+
"zone_*_path",
|
303
|
+
"zone_*_status",
|
304
|
+
"zone_*_uuid",
|
305
|
+
"zonename",
|
306
|
+
"zones"
|
168
307
|
]
|
169
|
-
}
|
308
|
+
}
|