facter 4.0.15 → 4.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.rubocop_todo.yml +5 -7
  4. data/CHANGELOG.md +33 -0
  5. data/VERSION +1 -1
  6. data/lib/custom_facts/util/parser.rb +1 -1
  7. data/lib/custom_facts/version.rb +1 -1
  8. data/lib/facter.rb +13 -17
  9. data/lib/facts/aix/partitions.rb +15 -0
  10. data/lib/facts/windows/ssh.rb +27 -0
  11. data/lib/facts_utils/uptime_parser.rb +3 -3
  12. data/lib/framework/cli/cli.rb +1 -1
  13. data/lib/framework/config/block_list.rb +1 -4
  14. data/lib/framework/config/config_reader.rb +29 -26
  15. data/lib/framework/core/fact_filter.rb +2 -2
  16. data/lib/framework/core/file_loader.rb +3 -3
  17. data/lib/framework/core/options.rb +57 -64
  18. data/lib/framework/core/options/config_file_options.rb +58 -48
  19. data/lib/framework/core/options/option_store.rb +156 -0
  20. data/lib/framework/core/options/options_validator.rb +42 -2
  21. data/lib/framework/logging/logger.rb +2 -0
  22. data/lib/framework/parsers/query_parser.rb +1 -1
  23. data/lib/models/fact_collection.rb +1 -1
  24. data/lib/resolvers/aix/filesystem_resolver.rb +3 -2
  25. data/lib/resolvers/aix/partitions.rb +86 -0
  26. data/lib/resolvers/aix/utils/odm_query.rb +2 -2
  27. data/lib/resolvers/debian_version.rb +2 -5
  28. data/lib/resolvers/disk_resolver.rb +2 -3
  29. data/lib/resolvers/dmi_resolver.rb +3 -3
  30. data/lib/resolvers/filesystems_resolver.rb +3 -3
  31. data/lib/resolvers/fips_enabled_resolver.rb +1 -4
  32. data/lib/resolvers/hostname_resolver.rb +4 -4
  33. data/lib/resolvers/load_averages_resolver.rb +1 -3
  34. data/lib/resolvers/memory_resolver.rb +2 -2
  35. data/lib/resolvers/mountpoints_resolver.rb +1 -3
  36. data/lib/resolvers/os_release_resolver.rb +3 -6
  37. data/lib/resolvers/partitions.rb +11 -6
  38. data/lib/resolvers/processors_resolver.rb +3 -3
  39. data/lib/resolvers/selinux_resolver.rb +9 -9
  40. data/lib/resolvers/solaris/filesystems_resolver.rb +1 -1
  41. data/lib/resolvers/ssh_resolver.rb +4 -43
  42. data/lib/resolvers/utils/ssh_helper.rb +27 -0
  43. data/lib/resolvers/windows/ssh.rb +47 -0
  44. data/lib/util/file_helper.rb +24 -0
  45. metadata +9 -6
  46. data/lib/framework/core/options/default_options.rb +0 -35
  47. data/lib/framework/core/options/helper_options.rb +0 -52
  48. data/lib/framework/core/options/priority_options.rb +0 -12
  49. data/lib/framework/core/options/validate_options.rb +0 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ac142ce04ba0e86b5a01726649b5b779562b472e162fb446261a15d9873efe4
4
- data.tar.gz: ed8f02efebff60c27c93be0b6073564c80b38f850b4c564a29e12994b1057636
3
+ metadata.gz: 2152e5f7eabbae2f7ecbd79149167e8ec542c55f9dbda10c606bd4e4cdd6cf06
4
+ data.tar.gz: 25cbcb4a4d7ac89508041cc1e0c1833dac198dc2702c0ca3505cb77295f55da8
5
5
  SHA512:
6
- metadata.gz: 19ca811ddbfeb3fd48f1376bb8a5694242ecb70ff83e85aff34c38eeeb55a43cf5ccf810494b6bbaebe26b6564e0a66dca5f8b9d578550447c757074b7a36bef
7
- data.tar.gz: db4abe8360068573b590dfcf648da8e99decf2f392870b1fd29daa6e32695547bd1bc141c5d82c6fdd28bc3f8025c2f2256891a72d7b0920f87d9aff36bd2f28
6
+ metadata.gz: 64ffad2e78106f6c15fc5712a32b3970ad67c2b44dd21e06192f61865c9a4b33fcca3f8ebc6c82810c6249b95b6e577dd9e975ef94c0edb55058e99e802ad6f4
7
+ data.tar.gz: 8f9efff21eb866000c71fe6bc4f481741248d39ddbfceda0d651d34612de38346a68818ebafcd89b22c5363444213bb6398d46960133a56a9cb5122b4fbdf193
@@ -93,6 +93,7 @@ Metrics/ClassLength:
93
93
  - 'lib/custom_facts/util/fact.rb'
94
94
  - 'lib/resolvers/windows/networking_resolver.rb'
95
95
  - 'lib/custom_facts/util/collection.rb'
96
+ - 'lib/framework/core/options/option_store.rb'
96
97
 
97
98
  Style/DoubleNegation:
98
99
  Exclude:
@@ -1,12 +1,12 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --exclude-limit 1000`
3
- # on 2020-04-07 19:23:35 +0300 using RuboCop version 0.74.0.
3
+ # on 2020-04-15 10:09:42 +0300 using RuboCop version 0.74.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 79
9
+ # Offense count: 80
10
10
  # Configuration parameters: CustomTransform, IgnoreMethods.
11
11
  RSpec/FilePath:
12
12
  Exclude:
@@ -80,6 +80,7 @@ RSpec/FilePath:
80
80
  - 'spec/framework/core/fact_loaders/fact_loader_spec.rb'
81
81
  - 'spec/framework/core/fact_loaders/internal_fact_loader_spec.rb'
82
82
  - 'spec/framework/core/fact_manager_spec.rb'
83
+ - 'spec/framework/core/options/option_store_spec.rb'
83
84
  - 'spec/framework/core/options/options_validator_spec.rb'
84
85
  - 'spec/framework/core/options_spec.rb'
85
86
  - 'spec/framework/core/session_cache_spec.rb'
@@ -108,7 +109,7 @@ RSpec/LeakyConstantDeclaration:
108
109
  - 'spec/facter/resolvers/macosx/mountpoints_resolver_spec.rb'
109
110
  - 'spec/facter/resolvers/utils/windows/network_utils_spec.rb'
110
111
 
111
- # Offense count: 121
112
+ # Offense count: 118
112
113
  # Configuration parameters: EnforcedStyle.
113
114
  # SupportedStyles: have_received, receive
114
115
  RSpec/MessageSpies:
@@ -176,7 +177,6 @@ RSpec/MessageSpies:
176
177
  - 'spec/facter/facts/windows/ruby/sitedir_spec.rb'
177
178
  - 'spec/facter/facts/windows/scope6_interfaces_spec.rb'
178
179
  - 'spec/facter/resolvers/utils/aix/odm_query_spec.rb'
179
- - 'spec/framework/config/config_reader_spec.rb'
180
180
  - 'spec/framework/core/fact_loaders/external_fact_loader_spec.rb'
181
181
 
182
182
  # Offense count: 26
@@ -190,7 +190,7 @@ RSpec/SubjectStub:
190
190
  - 'spec/custom_facts/util/fact_spec.rb'
191
191
  - 'spec/custom_facts/util/resolution_spec.rb'
192
192
 
193
- # Offense count: 193
193
+ # Offense count: 179
194
194
  # Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
195
195
  RSpec/VerifiedDoubles:
196
196
  Exclude:
@@ -233,7 +233,6 @@ RSpec/VerifiedDoubles:
233
233
  - 'spec/facter/resolvers/solaris/zfs_resolver_spec.rb'
234
234
  - 'spec/facter/resolvers/solaris/zone_resolver_spec.rb'
235
235
  - 'spec/facter/resolvers/solaris/zpool_resolver_spec.rb'
236
- - 'spec/facter/resolvers/ssh_resolver_spec.rb'
237
236
  - 'spec/facter/resolvers/utils/windows/network_utils_spec.rb'
238
237
  - 'spec/facter/resolvers/utils/windows/win32ole_spec.rb'
239
238
  - 'spec/facter/resolvers/windows/dmi_bios_resolver_spec.rb'
@@ -252,7 +251,6 @@ RSpec/VerifiedDoubles:
252
251
  - 'spec/framework/core/fact_loaders/external_fact_loader_spec.rb'
253
252
  - 'spec/framework/core/fact_loaders/fact_loader_spec.rb'
254
253
  - 'spec/framework/core/fact_manager_spec.rb'
255
- - 'spec/framework/core/options_spec.rb'
256
254
  - 'spec/framework/core/session_cache_spec.rb'
257
255
  - 'spec/framework/formatters/hocon_fact_formatter_spec.rb'
258
256
  - 'spec/framework/formatters/json_fact_formatter_spec.rb'
@@ -1,5 +1,38 @@
1
1
 
2
2
 
3
+ ## [4.0.16](https://github.com/puppetlabs/facter-ng/tree/4.0.16) (2020-04-15)
4
+
5
+ [Full Changelog](https://github.com/puppetlabs/facter-ng/compare/4.0.15...4.0.16)
6
+
7
+ ### Added
8
+
9
+ - \(FACT-2233\) Add AIX partitons fact [\#433](https://github.com/puppetlabs/facter-ng/pull/433) ([oanatmaria](https://github.com/oanatmaria))
10
+ - \(FACT-2330\) Add ssh fact for Windows OpenSSH feature [\#424](https://github.com/puppetlabs/facter-ng/pull/424) ([oanatmaria](https://github.com/oanatmaria))
11
+
12
+ ### Fixed
13
+
14
+ - \(FACT-2528\) Fix for tests/facts/ssh\_key.rb [\#442](https://github.com/puppetlabs/facter-ng/pull/442) ([oanatmaria](https://github.com/oanatmaria))
15
+ - \(FACT-2538\) Don't save core and legacy facts in collection if they have no value [\#441](https://github.com/puppetlabs/facter-ng/pull/441) ([IrimieBogdan](https://github.com/IrimieBogdan))
16
+
17
+
18
+
19
+ ## [4.0.15](https://github.com/puppetlabs/facter-ng/tree/4.0.15) (2020-04-08)
20
+
21
+ [Full Changelog](https://github.com/puppetlabs/facter-ng/compare/4.0.14...4.0.15)
22
+
23
+ ### Added
24
+
25
+ - \(FACT-2541\) Add TYPE for legacy facts [\#439](https://github.com/puppetlabs/facter-ng/pull/439) ([oanatmaria](https://github.com/oanatmaria))
26
+ - \(FACT-2535\) Allow interpolation of Facter.fact\('fact\_name'\) [\#435](https://github.com/puppetlabs/facter-ng/pull/435) ([sebastian-miclea](https://github.com/sebastian-miclea))
27
+ - \(FACT-2477\) Collect facts from alternative sources [\#422](https://github.com/puppetlabs/facter-ng/pull/422) ([oanatmaria](https://github.com/oanatmaria))
28
+
29
+ ### Fixed
30
+
31
+ - \(FACT-2513\) Updated how option aliases are displayed [\#434](https://github.com/puppetlabs/facter-ng/pull/434) ([sebastian-miclea](https://github.com/sebastian-miclea))
32
+ - \(FACT-2499\) Facts with aliases are resolved only once [\#429](https://github.com/puppetlabs/facter-ng/pull/429) ([IrimieBogdan](https://github.com/IrimieBogdan))
33
+
34
+
35
+
3
36
  ## [4.0.14](https://github.com/puppetlabs/facter-ng/tree/4.0.14) (2020-04-01)
4
37
 
5
38
  [Full Changelog](https://github.com/puppetlabs/facter-ng/compare/4.0.13...4.0.14)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.0.15
1
+ 4.0.16
@@ -50,7 +50,7 @@ module LegacyFacter
50
50
  end
51
51
 
52
52
  def content
53
- @content ||= File.read(filename)
53
+ @content ||= Facter::Util::FileHelper.safe_read(filename, nil)
54
54
  end
55
55
 
56
56
  # results on the base class is really meant to be just an exception handler
@@ -79,7 +79,7 @@ module LegacyFacter
79
79
  # @return [String] the version -- for example: "1.6.14-6-gea42046" or nil if the VERSION
80
80
  # file does not exist.
81
81
  def self.read_version_file(path)
82
- File.read(path).chomp if File.readable?(path)
82
+ Util::FileHelper.safe_read(path).chomp
83
83
  end
84
84
  private_class_method :read_version_file
85
85
  end
@@ -11,7 +11,7 @@ require "#{ROOT_DIR}/lib/framework/core/options/options_validator"
11
11
  module Facter
12
12
  class ResolveCustomFactError < StandardError; end
13
13
 
14
- @options = Options.instance
14
+ Options.init
15
15
  Log.add_legacy_logger(STDOUT)
16
16
  @logger = Log.new(self)
17
17
  @already_searched = {}
@@ -103,10 +103,7 @@ module Facter
103
103
  #
104
104
  # @api public
105
105
  def debugging(debug_bool)
106
- @options.priority_options[:debug] = debug_bool
107
- @options.refresh
108
-
109
- debug_bool
106
+ Facter::Options[:debug] = debug_bool
110
107
  end
111
108
 
112
109
  # Returns a fact object by name. If you use this, you still have to
@@ -187,14 +184,12 @@ module Facter
187
184
  #
188
185
  # @api public
189
186
  def to_hash
190
- @options.priority_options[:to_hash] = true
191
- @options.refresh
192
-
193
187
  log_blocked_facts
194
188
 
189
+ reset
195
190
  resolved_facts = Facter::FactManager.instance.resolve_facts
196
- SessionCache.invalidate_all_caches
197
- FactCollection.new.build_fact_collection!(resolved_facts)
191
+ Facter::SessionCache.invalidate_all_caches
192
+ Facter::FactCollection.new.build_fact_collection!(resolved_facts)
198
193
  end
199
194
 
200
195
  # Check whether printing stack trace is enabled
@@ -244,14 +239,14 @@ module Facter
244
239
  #
245
240
  # @api private
246
241
  def to_user_output(cli_options, *args)
247
- @options.priority_options = { is_cli: true }.merge!(cli_options.map { |(k, v)| [k.to_sym, v] }.to_h)
248
- @options.refresh(args)
242
+ cli_options = cli_options.map { |(k, v)| [k.to_sym, v] }.to_h
243
+ Facter::Options.init_from_cli(cli_options, args)
249
244
  @logger.info("executed with command line: #{ARGV.drop(1).join(' ')}")
250
245
  log_blocked_facts
251
246
 
252
247
  resolved_facts = Facter::FactManager.instance.resolve_facts(args)
253
248
  SessionCache.invalidate_all_caches
254
- fact_formatter = Facter::FormatterFactory.build(@options)
249
+ fact_formatter = Facter::FormatterFactory.build(Facter::Options.get)
255
250
 
256
251
  status = error_check(args, resolved_facts)
257
252
 
@@ -285,7 +280,6 @@ module Facter
285
280
  #
286
281
  # @return [ResolvedFact]
287
282
  def resolve_fact(user_query)
288
- @options.refresh([user_query])
289
283
  user_query = user_query.to_s
290
284
  resolved_facts = Facter::FactManager.instance.resolve_facts([user_query])
291
285
  SessionCache.invalidate_all_caches
@@ -311,7 +305,7 @@ module Facter
311
305
  #
312
306
  # @api private
313
307
  def error_check(args, resolved_facts)
314
- if Options.instance[:strict]
308
+ if Options[:strict]
315
309
  missing_names = args - resolved_facts.map(&:user_query).uniq
316
310
  if missing_names.count.positive?
317
311
  status = 1
@@ -330,8 +324,10 @@ module Facter
330
324
  #
331
325
  # @api private
332
326
  def log_blocked_facts
333
- block_list = BlockList.instance.block_list
334
- @logger.debug("blocking collection of #{block_list.join("\s")} facts") if block_list.any? && Options[:block]
327
+ block_list = Facter::BlockList.new(Facter::Options[:config]).block_list
328
+ return unless block_list.any? && Facter::Options[:block]
329
+
330
+ @logger.debug("blocking collection of #{block_list.join("\s")} facts")
335
331
  end
336
332
 
337
333
  # Used for printing errors regarding CLI user input validation
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Aix
5
+ class Partitions
6
+ FACT_NAME = 'partitions'
7
+
8
+ def call_the_resolver
9
+ partitions = Facter::Resolvers::Aix::Partitions.resolve(:partitions)
10
+
11
+ Facter::ResolvedFact.new(FACT_NAME, partitions.empty? ? nil : partitions)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Windows
5
+ class Ssh
6
+ FACT_NAME = 'ssh'
7
+
8
+ def call_the_resolver
9
+ privileged = Facter::Resolvers::Identity.resolve(:privileged)
10
+ ssh_info = Facter::Resolvers::Windows::Ssh.resolve(:ssh) if privileged
11
+ ssh_facts = {}
12
+ ssh_info&.each { |ssh| ssh_facts.merge!(create_ssh_fact(ssh)) }
13
+ Facter::ResolvedFact.new(FACT_NAME, ssh_facts.empty? ? nil : ssh_facts)
14
+ end
15
+
16
+ private
17
+
18
+ def create_ssh_fact(ssh)
19
+ { ssh.name.to_sym =>
20
+ { fingerprints: { sha1: ssh.fingerprint.sha1,
21
+ sha256: ssh.fingerprint.sha256 },
22
+ key: ssh.key,
23
+ type: ssh.type } }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -16,19 +16,19 @@ module Facter
16
16
  private
17
17
 
18
18
  def uptime_proc_uptime
19
- output, _status = Open3.capture2("/bin/cat #{uptime_file} 2>/dev/null")
19
+ output, _stderr, _status = Open3.capture3("/bin/cat #{uptime_file} 2>/dev/null")
20
20
 
21
21
  output.chomp.split(' ').first.to_i unless output.empty?
22
22
  end
23
23
 
24
24
  def uptime_sysctl
25
- output, _status = Open3.capture2("sysctl -n #{uptime_sysctl_variable} 2>/dev/null")
25
+ output, _stderr, _status = Open3.capture3("sysctl -n #{uptime_sysctl_variable} 2>/dev/null")
26
26
 
27
27
  compute_uptime(Time.at(output.match(/\d+/)[0].to_i)) unless output.empty?
28
28
  end
29
29
 
30
30
  def uptime_executable
31
- output, _status = Open3.capture2(uptime_executable_cmd + ' 2>/dev/null')
31
+ output, _stderr, _status = Open3.capture3(uptime_executable_cmd + ' 2>/dev/null')
32
32
  return unless output
33
33
 
34
34
  up = 0
@@ -122,7 +122,7 @@ module Facter
122
122
  desc '--list-block-groups', 'List block groups'
123
123
  map ['--list-block-groups'] => :list_block_groups
124
124
  def list_block_groups(*_args)
125
- puts Facter::BlockList.instance.block_groups.to_yaml.lines[1..-1].join
125
+ puts Facter::BlockList.new.block_groups.to_yaml.lines[1..-1].join
126
126
  end
127
127
 
128
128
  def self.exit_on_failure?
@@ -2,8 +2,6 @@
2
2
 
3
3
  module Facter
4
4
  class BlockList
5
- include Singleton
6
-
7
5
  attr_reader :block_groups, :block_list
8
6
 
9
7
  def initialize(block_list_path = nil)
@@ -28,8 +26,7 @@ module Facter
28
26
 
29
27
  def load_block_groups
30
28
  @block_groups = File.readable?(@block_groups_file_path) ? Hocon.load(@block_groups_file_path) : {}
31
- options = Options.instance
32
- @block_list = ConfigReader.new(options[:config]).block_list || {}
29
+ @block_list = ConfigReader.init(Options[:config]).block_list || {}
33
30
  end
34
31
  end
35
32
  end
@@ -2,42 +2,45 @@
2
2
 
3
3
  module Facter
4
4
  class ConfigReader
5
- attr_accessor :conf
5
+ class << self
6
+ attr_accessor :conf
6
7
 
7
- def initialize(config_path = nil)
8
- @config_file_path = config_path || default_path
9
- refresh_config
10
- end
8
+ def init(config_path = nil)
9
+ config_path ||= default_path
10
+ refresh_config(config_path)
11
+ self
12
+ end
11
13
 
12
- def block_list
13
- @conf['facts'] && @conf['facts']['blocklist']
14
- end
14
+ def block_list
15
+ @conf['facts'] && @conf['facts']['blocklist']
16
+ end
15
17
 
16
- def ttls
17
- @conf['facts'] && @conf['facts']['ttls']
18
- end
18
+ def ttls
19
+ @conf['facts'] && @conf['facts']['ttls']
20
+ end
19
21
 
20
- def global
21
- @conf['global']
22
- end
22
+ def global
23
+ @conf['global']
24
+ end
23
25
 
24
- def cli
25
- @conf['cli']
26
- end
26
+ def cli
27
+ @conf['cli']
28
+ end
27
29
 
28
- def refresh_config
29
- @conf = File.readable?(@config_file_path) ? Hocon.load(@config_file_path) : {}
30
- end
30
+ def refresh_config(config_path)
31
+ @conf = File.readable?(config_path) ? Hocon.load(config_path) : {}
32
+ end
31
33
 
32
- private
34
+ private
33
35
 
34
- def default_path
35
- os = OsDetector.instance.identifier
36
+ def default_path
37
+ os = OsDetector.instance.identifier
36
38
 
37
- windows_path = File.join('C:', 'ProgramData', 'PuppetLabs', 'facter', 'etc', 'facter.conf')
38
- linux_path = File.join('/', 'etc', 'puppetlabs', 'facter', 'facter.conf')
39
+ windows_path = File.join('C:', 'ProgramData', 'PuppetLabs', 'facter', 'etc', 'facter.conf')
40
+ linux_path = File.join('/', 'etc', 'puppetlabs', 'facter', 'facter.conf')
39
41
 
40
- os == :windows ? windows_path : linux_path
42
+ os == :windows ? windows_path : linux_path
43
+ end
41
44
  end
42
45
  end
43
46
  end
@@ -19,9 +19,9 @@ module Facter
19
19
  private
20
20
 
21
21
  def filter_legacy_facts!(resolved_facts)
22
- return if Options[:show_legacy]
22
+ return unless !Options[:show_legacy] && Options[:user_query].empty?
23
23
 
24
- resolved_facts.reject!(&:legacy?) unless Options[:user_query]
24
+ resolved_facts.reject!(&:legacy?)
25
25
  end
26
26
  end
27
27
  end
@@ -25,17 +25,17 @@ require "#{ROOT_DIR}/lib/framework/core/options"
25
25
  require "#{ROOT_DIR}/lib/framework/logging/multilogger"
26
26
  require "#{ROOT_DIR}/lib/framework/logging/logger"
27
27
 
28
+ require "#{ROOT_DIR}/lib/util/file_helper"
29
+
28
30
  require "#{ROOT_DIR}/lib/resolvers/base_resolver"
29
31
  require "#{ROOT_DIR}/lib/framework/detector/os_detector"
30
32
 
31
33
  require "#{ROOT_DIR}/lib/framework/config/config_reader"
32
34
  require "#{ROOT_DIR}/lib/framework/config/block_list"
33
- require "#{ROOT_DIR}/lib/resolvers/utils/fingerprint.rb"
34
- require "#{ROOT_DIR}/lib/resolvers/utils/ssh.rb"
35
- require "#{ROOT_DIR}/lib/resolvers/utils/filesystem_helper.rb"
36
35
 
37
36
  load_dir(['config'])
38
37
 
38
+ load_lib_dirs('resolvers', 'utils')
39
39
  load_lib_dirs('resolvers')
40
40
  load_lib_dirs('facts_utils')
41
41
  load_lib_dirs('framework', 'core')
@@ -2,70 +2,63 @@
2
2
 
3
3
  module Facter
4
4
  class Options
5
- include Facter::DefaultOptions
6
- include Facter::ConfigFileOptions
7
- include Facter::PriorityOptions
8
- include Facter::HelperOptions
9
- include Facter::ValidateOptions
10
-
11
- include Singleton
12
-
13
- attr_accessor :priority_options
14
-
15
- def initialize
16
- @options = {}
17
- @priority_options = {}
18
- end
19
-
20
- def refresh(user_query = [])
21
- @user_query = user_query
22
- initialize_options
23
-
24
- @options
25
- end
26
-
27
- def get
28
- @options
29
- end
30
-
31
- def [](option)
32
- @options.fetch(option, nil)
33
- end
34
-
35
- def custom_dir?
36
- @options[:custom_dir] && @options[:custom_facts]
37
- end
38
-
39
- def custom_dir
40
- @options[:custom_dir]
41
- end
42
-
43
- def external_dir?
44
- @options[:external_dir] && @options[:external_facts]
45
- end
46
-
47
- def external_dir
48
- @options[:external_dir]
49
- end
50
-
51
- def self.method_missing(name, *args, &block)
52
- Facter::Options.instance.send(name.to_s, *args, &block)
53
- rescue NoMethodError
54
- super
55
- end
56
-
57
- def self.respond_to_missing?(name, include_private) end
58
-
59
- private
60
-
61
- def initialize_options
62
- @options = { config: @priority_options[:config] }
63
- augment_with_defaults!
64
- augment_with_to_hash_defaults! if @priority_options[:to_hash]
65
- augment_with_config_file_options!(@options[:config])
66
- augment_with_priority_options!(@priority_options)
67
- validate_configs
68
- augment_with_helper_options!(@user_query)
5
+ class << self
6
+ def cli?
7
+ OptionStore.cli
8
+ end
9
+
10
+ def get
11
+ OptionStore.all
12
+ end
13
+
14
+ def [](key)
15
+ OptionStore.send(key.to_sym)
16
+ end
17
+
18
+ def []=(key, value)
19
+ OptionStore.send("#{key}=".to_sym, value)
20
+ end
21
+
22
+ def custom_dir?
23
+ OptionStore.custom_dir && OptionStore.custom_facts
24
+ end
25
+
26
+ def custom_dir
27
+ OptionStore.custom_dir.flatten
28
+ end
29
+
30
+ def external_dir?
31
+ OptionStore.external_dir && OptionStore.external_facts
32
+ end
33
+
34
+ def external_dir
35
+ OptionStore.external_dir
36
+ end
37
+
38
+ def init
39
+ OptionStore.cli = false
40
+ ConfigFileOptions.init
41
+ store(ConfigFileOptions.get)
42
+ end
43
+
44
+ def init_from_cli(cli_options = {}, user_query = nil)
45
+ Facter::OptionStore.cli = true
46
+ Facter::OptionStore.show_legacy = false
47
+ Facter::OptionStore.user_query = user_query
48
+ OptionStore.set(:config, cli_options[:config])
49
+ ConfigFileOptions.init(cli_options[:config])
50
+ store(ConfigFileOptions.get)
51
+ store(cli_options)
52
+
53
+ Facter::OptionsValidator.validate_configs(get)
54
+ end
55
+
56
+ def store(options)
57
+ options.each do |key, value|
58
+ value = '' if key == 'log_level' && value == 'log_level'
59
+ OptionStore.set(key, value)
60
+ end
61
+ end
69
62
  end
70
63
  end
71
64
  end