facter 4.0.42 → 4.0.43

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffa55de7f92a74b84788507b7e9667f158edc68abef1412f40ab5d3beb8f6aad
4
- data.tar.gz: e92ff5798a9abab30f1887c5e4f934d75cef67975b2485e53ba6dc58b59ee899
3
+ metadata.gz: 02e89a2638e45004e55f6b0ec4d902946c844b5253ee4e27139ab01d1ee12a92
4
+ data.tar.gz: bd4405449c4804a3c872510042a33c2cd6cf7fd588df8f95a99893fcb9248291
5
5
  SHA512:
6
- metadata.gz: 4841268cf5f76f1ad2b0ed2bf16b2527dd73e4d41728c64dbe13986b1a574759f900e2748e72ce72f6c677cf754d8a4f5115530140285412a07943e13b6312a5
7
- data.tar.gz: bd48e0942af375429188957956a5555963297d62a9bc6549529ae1713b7670b41bfc5eea6b894d961e3e32507963e394779c372ad3b12a6422b5218f94b0f9e4
6
+ metadata.gz: 31feabfeb9c2008ae30f16b6469cdf689b78e8711d64e3b614481a3e98b41d8271822b6cb26511a56ba5e19394f2ea811552b29168484d8ee377dbd3697f6655
7
+ data.tar.gz: f579f81b0dc6fedf937d016e531650c183bc4f89ce66c918f47932af01e97bfc19f0e0f012adcfe36a52e4a9a314685765055fe23bde5aa4cf5b2f92353a450c
@@ -17,6 +17,12 @@ module Facter
17
17
  @warn_once = []
18
18
 
19
19
  class << self
20
+ # Method used by puppet-agent to retrieve facts
21
+ # @param args_as_string [string] facter cli arguments
22
+ #
23
+ # @return nil
24
+ #
25
+ # @api private
20
26
  def resolve(args_as_string)
21
27
  require 'facter/framework/cli/cli_launcher'
22
28
 
@@ -36,10 +42,7 @@ module Facter
36
42
  else
37
43
  cli.invoke(:arg_parser)
38
44
  end
39
- end
40
-
41
- def clear_messages
42
- logger.debug('clear_messages is not implemented')
45
+ nil
43
46
  end
44
47
 
45
48
  # Alias method for Facter.fact()
@@ -83,8 +86,16 @@ module Facter
83
86
  Options[:custom_dir] = []
84
87
  LegacyFacter.collection.invalidate_custom_facts
85
88
  LegacyFacter.collection.reload_custom_facts
89
+ SessionCache.invalidate_all_caches
90
+ nil
86
91
  end
87
92
 
93
+ # Gets the value for a core fact, external or custom facts are
94
+ # not returned with this call. Returns `nil` if no such fact exists.
95
+ #
96
+ # @return [FactCollection] hash with fact names and values
97
+ #
98
+ # @api private
88
99
  def core_value(user_query)
89
100
  user_query = user_query.to_s
90
101
  resolved_facts = Facter::FactManager.instance.resolve_core([user_query])
@@ -136,8 +147,16 @@ module Facter
136
147
  LegacyFacter.define_fact(name, options, &block)
137
148
  end
138
149
 
150
+ # Stores a proc that will be used to output custom messages.
151
+ # The proc must receive one parameter that will be the message to log.
152
+ # @param block [Proc] a block defining messages handler
153
+ #
154
+ # @return [nil]
155
+ #
156
+ # @api public
139
157
  def on_message(&block)
140
158
  Facter::Log.on_message(&block)
159
+ nil
141
160
  end
142
161
 
143
162
  # Check whether debugging is enabled
@@ -170,7 +189,6 @@ module Facter
170
189
  def each
171
190
  log_blocked_facts
172
191
  resolved_facts = Facter::FactManager.instance.resolve_facts
173
- SessionCache.invalidate_all_caches
174
192
 
175
193
  resolved_facts.each do |fact|
176
194
  yield(fact.name, fact.value)
@@ -206,6 +224,7 @@ module Facter
206
224
  LegacyFacter.reset
207
225
  Options[:custom_dir] = []
208
226
  Options[:external_dir] = []
227
+ SessionCache.invalidate_all_caches
209
228
  nil
210
229
  end
211
230
 
@@ -220,26 +239,26 @@ module Facter
220
239
  end
221
240
 
222
241
  # Register directories to be searched for custom facts. The registered directories
223
- # must be absolute paths or they will be ignored.
224
- #
242
+ # must be absolute paths or they will be ignored.
225
243
  # @param dirs [Array<String>] An array of searched directories
226
244
  #
227
- # @return [void]
245
+ # @return [nil]
228
246
  #
229
247
  # @api public
230
248
  def search(*dirs)
231
249
  Options[:custom_dir] += dirs
250
+ nil
232
251
  end
233
252
 
234
253
  # Registers directories to be searched for external facts.
235
- #
236
254
  # @param dirs [Array<String>] An array of searched directories
237
255
  #
238
- # @return [void]
256
+ # @return [nil]
239
257
  #
240
258
  # @api public
241
259
  def search_external(dirs)
242
260
  Options[:external_dir] += dirs
261
+ nil
243
262
  end
244
263
 
245
264
  # Returns the registered search directories.for external facts.
@@ -263,14 +282,13 @@ module Facter
263
282
  # Gets a hash mapping fact names to their values
264
283
  # The hash contains core facts, legacy facts, custom facts and external facts (all facts that can be resolved).
265
284
  #
266
- # @return [FactCollection] the hash of fact names and values
285
+ # @return [FactCollection] hash with fact names and values
267
286
  #
268
287
  # @api public
269
288
  def to_hash
270
289
  log_blocked_facts
271
290
 
272
291
  resolved_facts = Facter::FactManager.instance.resolve_facts
273
- Facter::SessionCache.invalidate_all_caches
274
292
  Facter::FactCollection.new.build_fact_collection!(resolved_facts)
275
293
  end
276
294
 
@@ -286,7 +304,7 @@ module Facter
286
304
  # Enable or disable trace
287
305
  # @param bool [bool] Set trace on debug state
288
306
  #
289
- # @return [type] [description]
307
+ # @return [bool] Value of trace debug state
290
308
  #
291
309
  # @api public
292
310
  def trace(bool)
@@ -305,10 +323,19 @@ module Facter
305
323
  @already_searched[user_query]&.value
306
324
  end
307
325
 
326
+ # Gets the values for multiple facts.
327
+ #
328
+ # @param options [Hash] parameters for the fact - attributes
329
+ # of {Facter::Util::Fact} and {Facter::Util::Resolution} can be
330
+ # supplied here
331
+ # @param user_queries [String] the fact names
332
+ #
333
+ # @return [FactCollection] hash with fact names and values
334
+ #
335
+ # @api public
308
336
  def values(options, user_queries)
309
337
  init_cli_options(options, user_queries)
310
338
  resolved_facts = Facter::FactManager.instance.resolve_facts(user_queries)
311
- Facter::SessionCache.invalidate_all_caches
312
339
 
313
340
  if user_queries.count.zero?
314
341
  Facter::FactCollection.new.build_fact_collection!(resolved_facts)
@@ -336,7 +363,6 @@ module Facter
336
363
  logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
337
364
  log_blocked_facts
338
365
  resolved_facts = Facter::FactManager.instance.resolve_facts(args)
339
- SessionCache.invalidate_all_caches
340
366
  fact_formatter = Facter::FormatterFactory.build(Facter::Options.get)
341
367
 
342
368
  status = error_check(resolved_facts)
@@ -344,6 +370,11 @@ module Facter
344
370
  [fact_formatter.format(resolved_facts), status || 0]
345
371
  end
346
372
 
373
+ # Logs an exception and an optional message
374
+ #
375
+ # @return [nil]
376
+ #
377
+ # @api public
347
378
  def log_exception(exception, message = nil)
348
379
  error_message = []
349
380
 
@@ -351,10 +382,10 @@ module Facter
351
382
 
352
383
  parse_exception(exception, error_message)
353
384
  logger.error(error_message.flatten.join("\n"))
385
+ nil
354
386
  end
355
387
 
356
388
  # Returns a list with the names of all solved facts
357
- #
358
389
  # @return [Array] the list with all the fact names
359
390
  #
360
391
  # @api public
@@ -363,7 +394,6 @@ module Facter
363
394
  end
364
395
 
365
396
  # Logs the message parameter as a warning.
366
- #
367
397
  # @param message [Object] the warning object to be displayed
368
398
  #
369
399
  # @return [nil]
@@ -375,7 +405,6 @@ module Facter
375
405
  end
376
406
 
377
407
  # Logs only once the same warning message.
378
- #
379
408
  # @param message [Object] the warning message object
380
409
  #
381
410
  # @return [nil]
@@ -426,7 +455,6 @@ module Facter
426
455
  def resolve_fact(user_query)
427
456
  user_query = user_query.to_s
428
457
  resolved_facts = Facter::FactManager.instance.resolve_facts([user_query])
429
- SessionCache.invalidate_all_caches
430
458
  # we must make a distinction between custom facts that return nil and nil facts
431
459
  # Nil facts should not be packaged as ResolvedFacts! (add_fact_to_searched_facts packages facts)
432
460
  resolved_facts = resolved_facts.reject { |fact| fact.type == :nil }
@@ -18,22 +18,31 @@ module Facter
18
18
  include LegacyFacter::Core::Resolvable
19
19
 
20
20
  # @!attribute [r] name
21
- # @return [Symbol] The name of the aggregate resolution
21
+ #
22
+ # @return [Symbol] The name of the aggregate resolution
23
+ #
24
+ # @api public
22
25
  attr_reader :name
23
26
 
24
27
  # @!attribute [r] deps
25
- # @api private
26
- # @return [LegacyFacter::Core::DirectedGraph]
28
+ #
29
+ # @return [LegacyFacter::Core::DirectedGraph]
30
+ #
31
+ # @api private
27
32
  attr_reader :deps
28
33
 
29
34
  # @!attribute [r] confines
30
- # @return [Array<LegacyFacter::Core::Confine>] An array of confines restricting
31
- # this to a specific platform
32
- # @see Facter::Core::Suitable
35
+ #
36
+ # @return [Array<LegacyFacter::Core::Confine>] An array of confines restricting
37
+ # this to a specific platform
38
+ #
39
+ # @api private
33
40
  attr_reader :confines
34
41
 
35
42
  # @!attribute [r] fact
43
+ #
36
44
  # @return [Facter::Util::Fact]
45
+ #
37
46
  # @api private
38
47
  attr_reader :fact
39
48
 
@@ -48,10 +57,20 @@ module Facter
48
57
  @deps = LegacyFacter::Core::DirectedGraph.new
49
58
  end
50
59
 
60
+ # Compares the weight of two aggregate facts
61
+ #
62
+ # @return [bool] Weight comparison result
63
+ #
64
+ # @api private
51
65
  def <=>(other)
52
66
  weight <=> other.weight
53
67
  end
54
68
 
69
+ # Sets options for the aggregate fact
70
+ #
71
+ # @return [nil]
72
+ #
73
+ # @api private
55
74
  def options(options)
56
75
  accepted_options = %i[name timeout weight fact_type]
57
76
  accepted_options.each do |option_name|
@@ -60,14 +79,17 @@ module Facter
60
79
  raise ArgumentError, "Invalid aggregate options #{options.keys.inspect}" unless options.keys.empty?
61
80
  end
62
81
 
82
+ # Evaluates the given block
83
+ #
84
+ # @return [String] Result of the block's evaluation
85
+ #
86
+ # @api private
63
87
  def evaluate(&block)
64
88
  instance_eval(&block)
65
89
  end
66
90
 
67
91
  # Define a new chunk for the given aggregate
68
92
  #
69
- # @api public
70
- #
71
93
  # @example Defining a chunk with no dependencies
72
94
  # aggregate.chunk(:mountpoints) do
73
95
  # # generate mountpoint information
@@ -80,14 +102,14 @@ module Facter
80
102
  # end
81
103
  #
82
104
  # @param name [Symbol] A name unique to this aggregate describing the chunk
83
- # @param opts [Hash]
84
- # @options opts [Array<Symbol>, Symbol] :require One or more chunks
85
- # to evaluate and pass to this block.
86
- # @yield [*Object] Zero or more chunk results
87
105
  #
88
- # @return [void]
106
+ # @param opts [Hash] Hash with options for the aggregate fact
107
+ #
108
+ # @return [Facter::Core::Aggregate] The aggregate object
109
+ #
110
+ # @api public
89
111
  def chunk(name, opts = {}, &block)
90
- raise ArgumentError, "#{self.class.name}#chunk requires a block" unless block_given?
112
+ evaluate_params(name, &block)
91
113
 
92
114
  deps = Array(opts.delete(:require))
93
115
 
@@ -97,12 +119,11 @@ module Facter
97
119
 
98
120
  @deps[name] = deps
99
121
  @chunks[name] = block
122
+ self
100
123
  end
101
124
 
102
125
  # Define how all chunks should be combined
103
126
  #
104
- # @api public
105
- #
106
127
  # @example Merge all chunks
107
128
  # aggregate.aggregate do |chunks|
108
129
  # final_result = {}
@@ -124,19 +145,32 @@ module Facter
124
145
  # @yield [Hash<Symbol, Object>] A hash containing chunk names and
125
146
  # chunk values
126
147
  #
127
- # @return [void]
148
+ # @return [Facter::Core::Aggregate] The aggregate fact
149
+ #
150
+ # @api public
128
151
  def aggregate(&block)
129
152
  raise ArgumentError, "#{self.class.name}#aggregate requires a block" unless block_given?
130
153
 
131
154
  @aggregate = block
155
+ self
132
156
  end
133
157
 
158
+ # Returns the fact's resolution type
159
+ #
160
+ # @return [Symbol] The fact's type
161
+ #
162
+ # @api private
134
163
  def resolution_type
135
164
  :aggregate
136
165
  end
137
166
 
138
167
  private
139
168
 
169
+ def evaluate_params(name)
170
+ raise ArgumentError, "#{self.class.name}#chunk requires a block" unless block_given?
171
+ raise ArgumentError, "#{self.class.name}#expected chunk name to be a Symbol" unless name.is_a? Symbol
172
+ end
173
+
140
174
  # Evaluate the results of this aggregate.
141
175
  #
142
176
  # @see Facter::Core::Resolvable#value
@@ -3,10 +3,6 @@
3
3
  module Facter
4
4
  module Core
5
5
  module Execution
6
- # require_relative 'execution/base'
7
- # require_relative 'execution/windows'
8
- # require_relative 'execution/posix'
9
-
10
6
  @@impl = if LegacyFacter::Util::Config.windows?
11
7
  Facter::Core::Execution::Windows.new
12
8
  else
@@ -20,24 +16,22 @@ module Facter
20
16
  module_function
21
17
 
22
18
  # Returns the locations to be searched when looking for a binary. This
23
- # is currently determined by the +PATH+ environment variable plus
24
- # `/sbin` and `/usr/sbin` when run on unix
19
+ # is currently determined by the +PATH+ environment variable plus
20
+ # `/sbin` and `/usr/sbin` when run on unix
21
+ #
22
+ # @return [Array<String>] The paths to be searched for binaries
25
23
  #
26
- # @return [Array<String>] the paths to be searched for binaries
27
24
  # @api private
28
25
  def search_paths
29
26
  @@impl.search_paths
30
27
  end
31
28
 
32
29
  # Determines the full path to a binary. If the supplied filename does not
33
- # already describe an absolute path then different locations (determined
34
- # by {search_paths}) will be searched for a match.
30
+ # already describe an absolute path then different locations (determined
31
+ # by {search_paths}) will be searched for a match.
32
+ # @param bin [String] The executable to locate
35
33
  #
36
- # Returns nil if no matching executable can be found otherwise returns
37
- # the expanded pathname.
38
- #
39
- # @param bin [String] the executable to locate
40
- # @return [String,nil] the full path to the executable or nil if not
34
+ # @return [String/nil] The full path to the executable or nil if not
41
35
  # found
42
36
  #
43
37
  # @api public
@@ -46,10 +40,12 @@ module Facter
46
40
  end
47
41
 
48
42
  # Determine in a platform-specific way whether a path is absolute. This
49
- # defaults to the local platform if none is specified.
43
+ # defaults to the local platform if none is specified.
44
+ # @param path [String] The path to check
45
+
46
+ # @param platform [:posix/:windows/nil] The platform logic to use
50
47
  #
51
- # @param path [String] the path to check
52
- # @param platform [:posix,:windows,nil] the platform logic to use
48
+ # @api private
53
49
  def absolute_path?(path, platform = nil)
54
50
  case platform
55
51
  when :posix
@@ -62,38 +58,35 @@ module Facter
62
58
  end
63
59
 
64
60
  # Given a command line, this returns the command line with the
65
- # executable written as an absolute path. If the executable contains
66
- # spaces, it has be put in double quotes to be properly recognized.
67
- #
61
+ # executable written as an absolute path. If the executable contains
62
+ # spaces, it has to be put in double quotes to be properly recognized.
68
63
  # @param command [String] the command line
69
64
  #
70
- # @return [String, nil] the command line with the executable's path
71
- # expanded, or nil if the executable cannot be found.
65
+ # @return [String/nil] The command line with the executable's path
66
+ # expanded, or nil if the executable cannot be found.
67
+ #
68
+ # @api private
72
69
  def expand_command(command)
73
70
  @@impl.expand_command(command)
74
71
  end
75
72
 
76
73
  # Overrides environment variables within a block of code. The
77
- # specified values will be set for the duration of the block, after
78
- # which the original values (if any) will be restored.
79
- #
80
- # @overload with_env(values, { || ... })
81
- #
74
+ # specified values will be set for the duration of the block, after
75
+ # which the original values (if any) will be restored.
82
76
  # @param values [Hash<String=>String>] A hash of the environment
83
77
  # variables to override
84
78
  #
85
- # @return [void]
79
+ # @return [String] The block's return string
86
80
  #
87
- # @api public
81
+ # @api private
88
82
  def with_env(values, &block)
89
83
  @@impl.with_env(values, &block)
90
84
  end
91
85
 
92
86
  # Try to execute a command and return the output.
87
+ # @param command [String] Command to run
93
88
  #
94
- # @param code [String] the program to run
95
- #
96
- # @return [String] the output of the program, or nil if the command does
89
+ # @return [String/nil] Output of the program, or nil if the command does
97
90
  # not exist or could not be executed.
98
91
  #
99
92
  # @deprecated Use #{execute} instead
@@ -103,9 +96,9 @@ module Facter
103
96
  end
104
97
 
105
98
  # Execute a command and return the output of that program.
99
+ # @param command [String] Command to run
106
100
  #
107
- # @param code [String] the program to run
108
- # @param options [Hash]
101
+ # @param options [Hash] Hash with options for the aggregate fact
109
102
  #
110
103
  # @option options [Object] :on_fail How to behave when the command could
111
104
  # not be run. Specifying :raise will raise an error, anything else will
@@ -118,7 +111,6 @@ module Facter
118
111
  # command execution failed and :on_fail was specified.
119
112
  #
120
113
  # @api public
121
- # @since 2.0.1
122
114
  def execute(command, options = {})
123
115
  @@impl.execute(command, options)
124
116
  end
@@ -14,6 +14,8 @@ module Facter
14
14
  class Resolution
15
15
  # @api private
16
16
  attr_accessor :code, :fact_type
17
+
18
+ # @api private
17
19
  attr_writer :value
18
20
 
19
21
  extend Facter::Core::Execution
@@ -24,7 +26,12 @@ module Facter
24
26
  # compatibility.
25
27
  #
26
28
  # @deprecated
27
- public :search_paths, :which, :absolute_path?, :expand_command, :with_env, :exec
29
+ #
30
+ # @api public
31
+ public :which, :exec
32
+
33
+ # @api private
34
+ public :with_env
28
35
  end
29
36
 
30
37
  include LegacyFacter::Core::Resolvable
@@ -32,22 +39,27 @@ module Facter
32
39
 
33
40
  # @!attribute [rw] name
34
41
  # The name of this resolution. The resolution name should be unique with
35
- # respect to the given fact.
42
+ # respect to the given fact.
43
+ #
36
44
  # @return [String]
45
+ #
37
46
  # @api public
38
47
  attr_accessor :name
39
48
 
40
49
  # @!attribute [r] fact
41
- # @return [Facter::Util::Fact]
50
+ #
51
+ # @return [Facter::Util::Fact] Associated fact with this resolution.
52
+ #
42
53
  # @api private
43
54
  attr_reader :fact
44
55
 
45
56
  # Create a new resolution mechanism.
46
57
  #
47
58
  # @param name [String] The name of the resolution.
48
- # @return [void]
49
59
  #
50
- # @api private
60
+ # @return [Facter::Util::Resolution] The created resolution
61
+ #
62
+ # @api public
51
63
  def initialize(name, fact)
52
64
  @name = name
53
65
  @fact = fact
@@ -57,6 +69,11 @@ module Facter
57
69
  @weight = nil
58
70
  end
59
71
 
72
+ # Returns the fact's resolution type
73
+ #
74
+ # @return [Symbol] The fact's type
75
+ #
76
+ # @api private
60
77
  def resolution_type
61
78
  :simple
62
79
  end
@@ -64,7 +81,9 @@ module Facter
64
81
  # Evaluate the given block in the context of this resolution. If a block has
65
82
  # already been evaluated emit a warning to that effect.
66
83
  #
67
- # @return [void]
84
+ # @return [String] Result of the block's evaluation
85
+ #
86
+ # @api private
68
87
  def evaluate(&block)
69
88
  if @last_evaluated
70
89
  msg = "Already evaluated #{@name}"
@@ -85,6 +104,11 @@ module Facter
85
104
  end
86
105
  end
87
106
 
107
+ # Sets options for the aggregate fact
108
+ #
109
+ # @return [nil]
110
+ #
111
+ # @api private
88
112
  def options(options)
89
113
  accepted_options = %i[name value timeout weight fact_type file]
90
114
 
@@ -98,8 +122,6 @@ module Facter
98
122
  # Sets the code block or external program that will be evaluated to
99
123
  # get the value of the fact.
100
124
  #
101
- # @return [void]
102
- #
103
125
  # @overload setcode(string)
104
126
  # Sets an external program to call to get the value of the resolution
105
127
  # @param [String] string the external program to run to get the
@@ -111,6 +133,8 @@ module Facter
111
133
  # This block is run when the fact is evaluated. Errors raised from
112
134
  # inside the block are rescued and printed to stderr.
113
135
  #
136
+ # @return [Facter::Util::Resolution] Returns itself
137
+ #
114
138
  # @api public
115
139
  def setcode(string = nil, &block)
116
140
  if string
@@ -127,11 +151,16 @@ module Facter
127
151
  else
128
152
  raise ArgumentError, 'You must pass either code or a block'
129
153
  end
154
+ self
130
155
  end
131
156
 
132
- # Comparation is done based on weight and fact type.
133
- # The greatter the weight, the higher the priority.
134
- # If weights are equal, we consider external facts greater than custom facts
157
+ # Comparison is done based on weight and fact type.
158
+ # The greater the weight, the higher the priority.
159
+ # If weights are equal, we consider external facts greater than custom facts.
160
+ #
161
+ # @return [bool] Weight comparison result
162
+ #
163
+ # @api private
135
164
  def <=>(other)
136
165
  return compare_equal_weights(other) if weight == other.weight
137
166
  return 1 if weight > other.weight
@@ -28,7 +28,7 @@ module Facts
28
28
  end
29
29
 
30
30
  resolved_facts << Facter::ResolvedFact.new('solaris_zones.zones', zones)
31
- resolved_facts << Facter::ResolvedFact.new('zones', results.count.to_s, :legacy)
31
+ resolved_facts << Facter::ResolvedFact.new('zones', results.count, :legacy)
32
32
 
33
33
  resolved_facts.flatten
34
34
  end
@@ -22,7 +22,7 @@ module Facter
22
22
  @log.debug('Checking DMI')
23
23
  vendor = Facter::Resolvers::DmiDecode.resolve(:vendor)
24
24
  @log.debug("dmi detected vendor: #{vendor}")
25
- return 'aws' if vendor =~ /Amazon/
25
+ return 'kvm' if vendor =~ /Amazon/
26
26
 
27
27
  'xen' if vendor =~ /Xen/
28
28
  end
@@ -79,6 +79,11 @@ module Facter
79
79
  type: :boolean,
80
80
  desc: 'Show legacy facts when querying all facts.'
81
81
 
82
+ class_option :puppet,
83
+ type: :boolean,
84
+ aliases: '-p',
85
+ desc: 'Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
86
+
82
87
  class_option :yaml,
83
88
  aliases: '-y',
84
89
  type: :boolean,
@@ -152,12 +157,6 @@ module Facter
152
157
  puts cache_groups
153
158
  end
154
159
 
155
- desc '--puppet, -p', '(NOT SUPPORTED)Load the Puppet libraries, thus allowing Facter to load Puppet-specific facts.'
156
- map ['--puppet', '-p'] => :puppet
157
- def puppet(*_args)
158
- puts '`facter --puppet` and `facter -p` are no longer supported, use `puppet facts show` instead'
159
- end
160
-
161
160
  desc 'help', 'Help for all arguments'
162
161
  def help(*args)
163
162
  help_string = +''
@@ -36,9 +36,9 @@ module Facter
36
36
 
37
37
  file_content = Util::FileHelper.safe_read("/sys/class/dmi/id/#{fact_name}", nil)
38
38
  if files.include?(fact_name.to_s) && file_content
39
- @fact_list[fact_name] = file_content.strip
39
+ file_content = file_content.strip
40
+ @fact_list[fact_name] = file_content unless file_content.empty?
40
41
  chassis_to_name(@fact_list[fact_name]) if fact_name == :chassis_type
41
-
42
42
  end
43
43
  @fact_list[fact_name]
44
44
  end
@@ -10,7 +10,7 @@ module Facter
10
10
  private
11
11
 
12
12
  def post_resolve(fact_name)
13
- @fact_list.fetch(fact_name) { read_mounts }
13
+ @fact_list.fetch(fact_name) { read_mounts(fact_name) }
14
14
  end
15
15
 
16
16
  def root_device
@@ -26,7 +26,8 @@ module Facter
26
26
  device
27
27
  end
28
28
 
29
- def read_mounts # rubocop:disable Metrics/AbcSize
29
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
30
+ def read_mounts(fact_name)
30
31
  mounts = []
31
32
  FilesystemHelper.read_mountpoints.each do |fs|
32
33
  device = compute_device(fs.name)
@@ -52,7 +53,9 @@ module Facter
52
53
  .map { |v| binding.local_variable_get(v) })]
53
54
  end
54
55
  @fact_list[:mountpoints] = mounts
56
+ @fact_list[fact_name]
55
57
  end
58
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
56
59
  end
57
60
  end
58
61
  end
@@ -59,9 +59,14 @@ module Facter
59
59
  return if !network_info[interface_name] || network_info[interface_name][:dhcp]
60
60
 
61
61
  index = tokens[0].delete(':')
62
- dhcp = Util::FileHelper.safe_read("/run/systemd/netif/leases/#{index}", nil)
63
- network_info[interface_name][:dhcp] = dhcp.match(/SERVER_ADDRESS=(.*)/)[1] if dhcp
64
- network_info[interface_name][:dhcp] ||= retrieve_from_other_directories(interface_name)
62
+ file_content = Util::FileHelper.safe_read("/run/systemd/netif/leases/#{index}", nil)
63
+ dhcp = file_content.match(/SERVER_ADDRESS=(.*)/) if file_content
64
+ if dhcp
65
+ network_info[interface_name][:dhcp] = dhcp[1]
66
+ else
67
+ alternate_dhcp = retrieve_from_other_directories(interface_name)
68
+ network_info[interface_name][:dhcp] = alternate_dhcp if alternate_dhcp
69
+ end
65
70
  end
66
71
 
67
72
  def retrieve_from_other_directories(interface_name)
@@ -75,7 +80,8 @@ module Facter
75
80
  content = Util::FileHelper.safe_read("#{dir}#{file}", nil)
76
81
  next unless content =~ /interface.*#{interface_name}/
77
82
 
78
- return content.match(/dhcp-server-identifier ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/)[1]
83
+ dhcp = content.match(/dhcp-server-identifier ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/)
84
+ return dhcp[1] if dhcp
79
85
  end
80
86
  end
81
87
  return unless File.readable?('/var/lib/NetworkManager/')
@@ -60,7 +60,11 @@ module Facter
60
60
  def physical_devices_count
61
61
  Dir.entries('/sys/devices/system/cpu')
62
62
  .select { |dir| dir =~ /cpu[0-9]+$/ }
63
- .count { |dir| File.exist?("/sys/devices/system/cpu/#{dir}/topology/physical_package_id") }
63
+ .select { |dir| File.exist?("/sys/devices/system/cpu/#{dir}/topology/physical_package_id") }
64
+ .map do |dir|
65
+ Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
66
+ end
67
+ .uniq.count
64
68
  end
65
69
 
66
70
  def build_speed(tokens)
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Solaris
6
+ class Mountpoints < BaseResolver
7
+ include Facter::FilesystemHelper
8
+ @fact_list ||= {}
9
+ @log = Facter::Log.new(self)
10
+ class << self
11
+ private
12
+
13
+ def post_resolve(fact_name)
14
+ @fact_list.fetch(fact_name) { read_mounts(fact_name) }
15
+ end
16
+
17
+ def root_device
18
+ cmdline = Util::FileHelper.safe_read('/proc/cmdline')
19
+ match = cmdline.match(/root=([^\s]+)/)
20
+ match&.captures&.first
21
+ end
22
+
23
+ def compute_device(device)
24
+ # If the "root" device, lookup the actual device from the kernel options
25
+ # This is done because not all systems symlink /dev/root
26
+ device = root_device if device == '/dev/root'
27
+ device
28
+ end
29
+
30
+ def read_mounts(fact_name) # rubocop:disable Metrics/AbcSize
31
+ mounts = []
32
+ FilesystemHelper.read_mountpoints.each do |fs|
33
+ device = compute_device(fs.name)
34
+ filesystem = fs.mount_type
35
+ path = fs.mount_point
36
+ options = fs.options.split(',').map(&:strip)
37
+
38
+ stats = FilesystemHelper.read_mountpoint_stats(path)
39
+ size_bytes = stats.bytes_total.abs
40
+ available_bytes = stats.bytes_available.abs
41
+
42
+ used_bytes = stats.bytes_used.abs
43
+ total_bytes = used_bytes + available_bytes
44
+ capacity = FilesystemHelper.compute_capacity(used_bytes, total_bytes)
45
+
46
+ size = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(size_bytes)
47
+ available = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(available_bytes)
48
+ used = Facter::FactsUtils::UnitConverter.bytes_to_human_readable(used_bytes)
49
+
50
+ mounts << Hash[FilesystemHelper::MOUNT_KEYS.zip(FilesystemHelper::MOUNT_KEYS
51
+ .map { |v| binding.local_variable_get(v) })]
52
+ end
53
+ @fact_list[:mountpoints] = mounts
54
+ @fact_list[fact_name]
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -66,7 +66,7 @@ module Facter
66
66
 
67
67
  @log.debug("Error! #{::FFI::LastError.error}") if ioctl == -1
68
68
 
69
- @interfaces[lifreq.name][:mtu] = lifreq[:lifr_lifru][:lifru_metric]
69
+ @interfaces[lifreq.name][:mtu] ||= lifreq[:lifr_lifru][:lifru_metric]
70
70
  end
71
71
 
72
72
  def load_netmask(lifreq)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Facter
4
- VERSION = '4.0.42' unless defined?(VERSION)
4
+ VERSION = '4.0.43' unless defined?(VERSION)
5
5
  end
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.0.42
4
+ version: 4.0.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-07 00:00:00.000000000 Z
11
+ date: 2020-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -936,6 +936,7 @@ files:
936
936
  - lib/facter/resolvers/solaris/ipaddress.rb
937
937
  - lib/facter/resolvers/solaris/ldom.rb
938
938
  - lib/facter/resolvers/solaris/memory.rb
939
+ - lib/facter/resolvers/solaris/mountpoints.rb
939
940
  - lib/facter/resolvers/solaris/networking.rb
940
941
  - lib/facter/resolvers/solaris/os_release.rb
941
942
  - lib/facter/resolvers/solaris/processors.rb