facter 4.0.7.pre → 4.0.8.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +17 -4
- data/.rubocop_todo.yml +119 -0
- data/Gemfile +3 -2
- data/VERSION +1 -1
- data/facter.gemspec +2 -0
- data/lib/custom_facts/core/execution/posix.rb +1 -1
- data/lib/custom_facts/core/execution/windows.rb +1 -1
- data/lib/custom_facts/core/logging.rb +6 -3
- data/lib/custom_facts/core/resolvable.rb +3 -2
- data/lib/custom_facts/util/confine.rb +1 -1
- data/lib/custom_facts/util/fact.rb +10 -6
- data/lib/custom_facts/util/resolution.rb +1 -1
- data/lib/facter.rb +4 -2
- data/lib/facts/solaris/zfs_featurenumbers.rb +14 -0
- data/lib/facts/solaris/zfs_version.rb +14 -0
- data/lib/facts/solaris/zpool_featurenumbers.rb +14 -0
- data/lib/facts/solaris/zpool_version.rb +14 -0
- data/lib/framework/config/config_reader.rb +0 -1
- data/lib/framework/core/file_loader.rb +2 -3
- data/lib/framework/core/options.rb +3 -0
- data/lib/framework/core/options/config_file_options.rb +12 -6
- data/lib/framework/core/options/default_options.rb +3 -1
- data/lib/framework/core/options/validate_options.rb +47 -0
- data/lib/framework/formatters/legacy_fact_formatter.rb +1 -1
- data/lib/resolvers/aix/networking_resolver.rb +1 -1
- data/lib/resolvers/hostname_resolver.rb +2 -2
- data/lib/resolvers/macosx/system_profiler_resolver.rb +1 -1
- data/lib/resolvers/selinux_resolver.rb +1 -1
- data/lib/resolvers/solaris/zfs_resolver.rb +35 -0
- data/lib/resolvers/solaris/zpool_resolver.rb +35 -0
- data/lib/resolvers/windows/ffi/ffi.rb +6 -9
- data/lib/resolvers/windows/ffi/network_utils.rb +2 -1
- data/lib/resolvers/windows/identity_resolver.rb +2 -2
- data/lib/resolvers/windows/memory_resolver.rb +1 -1
- data/lib/resolvers/windows/netkvm_resolver.rb +2 -0
- data/lib/resolvers/windows/system32_resolver.rb +1 -1
- metadata +38 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 476e88581612a000fbf67c3eb00d8dc338cf15085a3717b32dea1a6214856469
|
4
|
+
data.tar.gz: bb0258fe0e3df51439f90427c5e2afeee3b6057e4e98291f410d9869e44ed350
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2048f930daed9ea2e5b008b8941246af8d094b7d84de1e465828804ef04122812fa7e0b9115a4b76b74de33da46f0ffa2cc321399d6794985858e58c6a55911b
|
7
|
+
data.tar.gz: 40741371996abb97ccfd30d60dfe9a8e6279b757f8eb4fa8f6af1dfaf9f0d2457edbe14ba2ff943a397c13f302cd76f88a819e321259a53c8cfae777fbb1686c
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,13 +1,16 @@
|
|
1
|
+
---
|
2
|
+
inherit_from: .rubocop_todo.yml
|
3
|
+
|
4
|
+
require:
|
5
|
+
- rubocop-performance
|
6
|
+
- rubocop-rspec
|
7
|
+
|
1
8
|
Documentation:
|
2
9
|
Enabled: false
|
3
10
|
|
4
11
|
Metrics/LineLength:
|
5
12
|
Max: 120
|
6
13
|
|
7
|
-
Metrics/ModuleLength:
|
8
|
-
Exclude:
|
9
|
-
- 'lib/facter-ng.rb'
|
10
|
-
|
11
14
|
Metrics/MethodLength:
|
12
15
|
Max: 20
|
13
16
|
Exclude:
|
@@ -24,14 +27,17 @@ Metrics/ModuleLength:
|
|
24
27
|
Metrics/BlockLength:
|
25
28
|
Exclude:
|
26
29
|
- !ruby/regexp /(?:(?!.+_spec.rb).)*$/
|
30
|
+
|
27
31
|
Style/ClassVars:
|
28
32
|
Exclude:
|
29
33
|
- !ruby/regexp /(?:(?!.+_resolver.rb).)*$/
|
34
|
+
|
30
35
|
Naming/ClassAndModuleCamelCase:
|
31
36
|
Exclude:
|
32
37
|
- 'spec/mocks/**/*'
|
33
38
|
|
34
39
|
Metrics/AbcSize:
|
40
|
+
Max: 16
|
35
41
|
Exclude:
|
36
42
|
- 'spec/custom_facts/util/parser_spec.rb'
|
37
43
|
- 'spec/custom_facts/core/logging_spec.rb'
|
@@ -41,6 +47,7 @@ Metrics/AbcSize:
|
|
41
47
|
- 'lib/custom_facts/util/confine.rb'
|
42
48
|
- 'lib/custom_facts/core/execution/windows.rb'
|
43
49
|
- 'lib/custom_facts/core/execution/base.rb'
|
50
|
+
- 'lib/custom_facts/core/resolvable.rb'
|
44
51
|
|
45
52
|
Style/FrozenStringLiteralComment:
|
46
53
|
Exclude:
|
@@ -120,3 +127,9 @@ Naming/FileName:
|
|
120
127
|
Exclude:
|
121
128
|
- 'lib/facter.rb'
|
122
129
|
- 'agent/lib/facter-ng.rb'
|
130
|
+
|
131
|
+
RSpec/ExampleLength:
|
132
|
+
Enabled: false
|
133
|
+
|
134
|
+
RSpec/DescribedClass:
|
135
|
+
EnforcedStyle: explicit
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2020-02-21 22:34:28 +0200 using RuboCop version 0.74.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 75
|
10
|
+
RSpec/AnyInstance:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
# Offense count: 79
|
14
|
+
# Configuration parameters: Prefixes.
|
15
|
+
# Prefixes: when, with, without
|
16
|
+
RSpec/ContextWording:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
# Offense count: 82
|
20
|
+
RSpec/ExpectInHook:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
# Offense count: 412
|
24
|
+
# Configuration parameters: CustomTransform, IgnoreMethods.
|
25
|
+
RSpec/FilePath:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
# Offense count: 15
|
29
|
+
# Configuration parameters: AssignmentOnly.
|
30
|
+
RSpec/InstanceVariable:
|
31
|
+
Exclude:
|
32
|
+
- 'spec/custom_facts/core/execution/fact_manager_spec.rb'
|
33
|
+
- 'spec/custom_facts/util/collection_spec.rb'
|
34
|
+
- 'spec/custom_facts/util/confine_spec.rb'
|
35
|
+
|
36
|
+
# Offense count: 2
|
37
|
+
RSpec/IteratedExpectation:
|
38
|
+
Exclude:
|
39
|
+
- 'spec/custom_facts/core/aggregate_spec.rb'
|
40
|
+
- 'spec/custom_facts/core/suitable_spec.rb'
|
41
|
+
|
42
|
+
# Offense count: 16
|
43
|
+
RSpec/LeakyConstantDeclaration:
|
44
|
+
Exclude:
|
45
|
+
- 'spec/custom_facts/core/resolvable_spec.rb'
|
46
|
+
- 'spec/custom_facts/core/suitable_spec.rb'
|
47
|
+
- 'spec/custom_facts/shared_contexts/platform.rb'
|
48
|
+
- 'spec/custom_facts/util/collection_spec.rb'
|
49
|
+
- 'spec/facter/resolvers/macosx/mountpoints_resolver_spec.rb'
|
50
|
+
- 'spec/facter/resolvers/utils/windows/network_utils_spec.rb'
|
51
|
+
|
52
|
+
# Offense count: 428
|
53
|
+
# Configuration parameters: EnforcedStyle.
|
54
|
+
# SupportedStyles: have_received, receive
|
55
|
+
RSpec/MessageSpies:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
# Offense count: 146
|
59
|
+
# Configuration parameters: AggregateFailuresByDefault.
|
60
|
+
RSpec/MultipleExpectations:
|
61
|
+
Max: 9
|
62
|
+
|
63
|
+
# Offense count: 250
|
64
|
+
# Configuration parameters: IgnoreSharedExamples.
|
65
|
+
RSpec/NamedSubject:
|
66
|
+
Exclude:
|
67
|
+
- 'spec/custom_facts/core/aggregate_spec.rb'
|
68
|
+
- 'spec/custom_facts/core/execution/fact_manager_spec.rb'
|
69
|
+
- 'spec/custom_facts/core/execution/posix_spec.rb'
|
70
|
+
- 'spec/custom_facts/core/execution/windows_spec.rb'
|
71
|
+
- 'spec/custom_facts/core/execution_spec.rb'
|
72
|
+
- 'spec/custom_facts/core/logging_spec.rb'
|
73
|
+
- 'spec/custom_facts/core/resolvable_spec.rb'
|
74
|
+
- 'spec/custom_facts/core/suitable_spec.rb'
|
75
|
+
- 'spec/custom_facts/util/directory_loader_spec.rb'
|
76
|
+
- 'spec/custom_facts/util/fact_spec.rb'
|
77
|
+
- 'spec/custom_facts/util/normalization_spec.rb'
|
78
|
+
- 'spec/custom_facts/util/resolution_spec.rb'
|
79
|
+
- 'spec/facter/resolvers/linux/networking_linux_resolver_spec.rb'
|
80
|
+
- 'spec/framework/core/options_spec.rb'
|
81
|
+
|
82
|
+
# Offense count: 22
|
83
|
+
RSpec/NestedGroups:
|
84
|
+
Max: 4
|
85
|
+
|
86
|
+
# Offense count: 7
|
87
|
+
RSpec/RepeatedDescription:
|
88
|
+
Exclude:
|
89
|
+
- 'spec/custom_facts/util/confine_spec.rb'
|
90
|
+
- 'spec/facter/resolvers/macosx/system_memory_resolver_spec.rb'
|
91
|
+
- 'spec/facter/resolvers/windows/uptime_resolver_spec.rb'
|
92
|
+
|
93
|
+
# Offense count: 4
|
94
|
+
RSpec/RepeatedExampleGroupDescription:
|
95
|
+
Exclude:
|
96
|
+
- 'spec/custom_facts/util/parser_spec.rb'
|
97
|
+
- 'spec/facter/resolvers/windows/fips_resolver_spec.rb'
|
98
|
+
|
99
|
+
# Offense count: 7
|
100
|
+
RSpec/ScatteredLet:
|
101
|
+
Exclude:
|
102
|
+
- 'spec/facter/resolvers/windows/product_release_resolver_spec.rb'
|
103
|
+
|
104
|
+
# Offense count: 39
|
105
|
+
RSpec/SubjectStub:
|
106
|
+
Exclude:
|
107
|
+
- 'spec/custom_facts/core/aggregate_spec.rb'
|
108
|
+
- 'spec/custom_facts/core/execution/fact_manager_spec.rb'
|
109
|
+
- 'spec/custom_facts/core/execution/posix_spec.rb'
|
110
|
+
- 'spec/custom_facts/core/execution/windows_spec.rb'
|
111
|
+
- 'spec/custom_facts/core/logging_spec.rb'
|
112
|
+
- 'spec/custom_facts/core/resolvable_spec.rb'
|
113
|
+
- 'spec/custom_facts/util/fact_spec.rb'
|
114
|
+
- 'spec/custom_facts/util/resolution_spec.rb'
|
115
|
+
|
116
|
+
# Offense count: 392
|
117
|
+
# Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
|
118
|
+
RSpec/VerifiedDoubles:
|
119
|
+
Enabled: false
|
data/Gemfile
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
source ENV['GEM_SOURCE'] || 'https://rubygems.org'
|
4
4
|
|
5
|
-
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
6
|
-
|
7
5
|
gemspec name: 'facter'
|
6
|
+
|
7
|
+
local_gemfile = File.expand_path('Gemfile.local', __dir__)
|
8
|
+
eval_gemfile(local_gemfile) if File.exist?(local_gemfile)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.0.
|
1
|
+
4.0.8.pre
|
data/facter.gemspec
CHANGED
@@ -40,6 +40,8 @@ Gem::Specification.new do |spec|
|
|
40
40
|
spec.add_development_dependency 'rake', '~> 10.0'
|
41
41
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
42
42
|
spec.add_development_dependency 'rubocop', '~> 0.74.0'
|
43
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.5'
|
44
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.38'
|
43
45
|
spec.add_development_dependency 'rubycritic', '~> 4.1.0'
|
44
46
|
spec.add_development_dependency 'sys-filesystem', '~> 1.3'
|
45
47
|
|
@@ -48,7 +48,7 @@ module LegacyFacter
|
|
48
48
|
return unless debugging?
|
49
49
|
|
50
50
|
if msg.nil? || msg.empty?
|
51
|
-
invoker = caller
|
51
|
+
invoker = caller(1..1).first.slice(/.*:\d+/)
|
52
52
|
self.warn "#{self.class}#debug invoked with invalid message #{msg.inspect}:#{msg.class} at #{invoker}"
|
53
53
|
elsif @@message_callback
|
54
54
|
@@message_callback.call(:debug, msg)
|
@@ -79,7 +79,7 @@ module LegacyFacter
|
|
79
79
|
# @return [void]
|
80
80
|
def warn(msg)
|
81
81
|
if msg.nil? || msg.empty?
|
82
|
-
invoker = caller
|
82
|
+
invoker = caller(1..1).first.slice(/.*:\d+/)
|
83
83
|
msg = "#{self.class}#debug invoked with invalid message #{msg.inspect}:#{msg.class} at #{invoker}"
|
84
84
|
end
|
85
85
|
if @@message_callback
|
@@ -119,7 +119,10 @@ module LegacyFacter
|
|
119
119
|
arr << message
|
120
120
|
end
|
121
121
|
|
122
|
-
|
122
|
+
if trace
|
123
|
+
arr << 'backtrace:'
|
124
|
+
arr.concat(exception.backtrace)
|
125
|
+
end
|
123
126
|
|
124
127
|
"#{RED}#{arr.flatten.join("\n")}#{RESET}"
|
125
128
|
end
|
@@ -75,8 +75,9 @@ module LegacyFacter
|
|
75
75
|
LegacyFacter.log_exception(e, "Fact resolution #{qualified_name} resolved to an invalid value: #{e.message}")
|
76
76
|
nil
|
77
77
|
rescue StandardError => e
|
78
|
-
LegacyFacter.log_exception(e, "
|
79
|
-
|
78
|
+
LegacyFacter.log_exception(e, "Error while resolving custom fact #{qualified_name}: #{e.message}")
|
79
|
+
at_exit { exit 1 }
|
80
|
+
raise Facter::ResolveCustomFactError
|
80
81
|
end
|
81
82
|
|
82
83
|
private
|
@@ -48,7 +48,7 @@ module LegacyFacter
|
|
48
48
|
#
|
49
49
|
# @param options [Hash] A hash of options to set on the resolution
|
50
50
|
#
|
51
|
-
# @return [
|
51
|
+
# @return [Facter::Util::Resolution]
|
52
52
|
#
|
53
53
|
# @api private
|
54
54
|
def add(options = {}, &block)
|
@@ -61,7 +61,7 @@ module LegacyFacter
|
|
61
61
|
#
|
62
62
|
# @param resolution_name [String] The name of the resolve to define or look up
|
63
63
|
# @param options [Hash] A hash of options to set on the resolution
|
64
|
-
# @return [
|
64
|
+
# @return [Facter::Util::Resolution]
|
65
65
|
#
|
66
66
|
# @api public
|
67
67
|
def define_resolution(resolution_name, options = {}, &block)
|
@@ -82,7 +82,7 @@ module LegacyFacter
|
|
82
82
|
#
|
83
83
|
# @param name [String]
|
84
84
|
#
|
85
|
-
# @return [
|
85
|
+
# @return [Facter::Util::Resolution, nil] The resolution if exists, nil if
|
86
86
|
# it doesn't exist or name is nil
|
87
87
|
def resolution(name)
|
88
88
|
return nil if name.nil?
|
@@ -163,7 +163,11 @@ module LegacyFacter
|
|
163
163
|
|
164
164
|
def find_first_real_value(resolutions)
|
165
165
|
resolutions.each do |resolve|
|
166
|
-
|
166
|
+
begin
|
167
|
+
value = resolve.value
|
168
|
+
rescue Facter::ResolveCustomFactError
|
169
|
+
break
|
170
|
+
end
|
167
171
|
@used_resolution_weight = resolve.weight
|
168
172
|
return value unless value.nil?
|
169
173
|
end
|
@@ -173,7 +177,7 @@ module LegacyFacter
|
|
173
177
|
def announce_when_no_suitable_resolution(resolutions)
|
174
178
|
return unless resolutions.empty?
|
175
179
|
|
176
|
-
LegacyFacter.debug format('Found no suitable resolves of %<
|
180
|
+
LegacyFacter.debug format('Found no suitable resolves of %<resolver_length> for %<name>s',
|
177
181
|
resolver_length: @resolves.length, name: @name)
|
178
182
|
end
|
179
183
|
|
@@ -192,7 +196,7 @@ module LegacyFacter
|
|
192
196
|
else
|
193
197
|
case resolution_type
|
194
198
|
when :simple
|
195
|
-
resolve =
|
199
|
+
resolve = Facter::Util::Resolution.new(resolution_name, self)
|
196
200
|
when :aggregate
|
197
201
|
resolve = LegacyFacter::Core::Aggregate.new(resolution_name, self)
|
198
202
|
else
|
data/lib/facter.rb
CHANGED
@@ -8,6 +8,8 @@ require "#{ROOT_DIR}/lib/framework/core/file_loader"
|
|
8
8
|
require "#{ROOT_DIR}/lib/framework/core/options/options_validator"
|
9
9
|
|
10
10
|
module Facter
|
11
|
+
class ResolveCustomFactError < StandardError; end
|
12
|
+
|
11
13
|
@options = Options.instance
|
12
14
|
|
13
15
|
def self.[](name)
|
@@ -44,7 +46,7 @@ module Facter
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def self.debugging(debug_bool)
|
47
|
-
@options.priority_options = { debug:
|
49
|
+
@options.priority_options = { debug: debug_bool }
|
48
50
|
@options.refresh
|
49
51
|
|
50
52
|
debug_bool
|
@@ -108,7 +110,7 @@ module Facter
|
|
108
110
|
end
|
109
111
|
|
110
112
|
def self.to_user_output(cli_options, *args)
|
111
|
-
@options.priority_options = cli_options
|
113
|
+
@options.priority_options = { is_cli: true }.merge!(cli_options.map { |(k, v)| [k.to_sym, v] }.to_h)
|
112
114
|
@options.refresh(args)
|
113
115
|
|
114
116
|
resolved_facts = Facter::FactManager.instance.resolve_facts(@options, args)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Solaris
|
5
|
+
class ZFSFeatureNumbers
|
6
|
+
FACT_NAME = 'zfs_featurenumbers'
|
7
|
+
|
8
|
+
def call_the_resolver
|
9
|
+
fact_value = Resolvers::Solaris::ZFS.resolve(:zfs_featurenumbers)
|
10
|
+
ResolvedFact.new(FACT_NAME, fact_value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Solaris
|
5
|
+
class ZFSVersion
|
6
|
+
FACT_NAME = 'zfs_version'
|
7
|
+
|
8
|
+
def call_the_resolver
|
9
|
+
fact_value = Resolvers::Solaris::ZFS.resolve(:zfs_version)
|
10
|
+
ResolvedFact.new(FACT_NAME, fact_value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Solaris
|
5
|
+
class ZPoolFeatureNumbers
|
6
|
+
FACT_NAME = 'zpool_featurenumbers'
|
7
|
+
|
8
|
+
def call_the_resolver
|
9
|
+
fact_value = Resolvers::Solaris::ZPool.resolve(:zpool_featurenumbers)
|
10
|
+
ResolvedFact.new(FACT_NAME, fact_value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Solaris
|
5
|
+
class ZPoolVersion
|
6
|
+
FACT_NAME = 'zpool_version'
|
7
|
+
|
8
|
+
def call_the_resolver
|
9
|
+
fact_value = Resolvers::Solaris::ZPool.resolve(:zpool_version)
|
10
|
+
ResolvedFact.new(FACT_NAME, fact_value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -40,7 +40,6 @@ load_dir(['config'])
|
|
40
40
|
|
41
41
|
load_lib_dirs('resolvers')
|
42
42
|
load_lib_dirs('facts_utils')
|
43
|
-
load_lib_dirs('utils')
|
44
43
|
load_lib_dirs('framework', 'core')
|
45
44
|
load_lib_dirs('models')
|
46
45
|
load_lib_dirs('framework', 'core', 'fact_loaders')
|
@@ -53,8 +52,8 @@ os_hierarchy.each { |operating_system| load_lib_dirs('facts', operating_system.d
|
|
53
52
|
os_hierarchy.each { |operating_system| load_lib_dirs('resolvers', operating_system.downcase, '**') }
|
54
53
|
|
55
54
|
require "#{ROOT_DIR}/lib/custom_facts/core/legacy_facter"
|
56
|
-
|
57
|
-
|
55
|
+
load_lib_dirs('framework', 'utils')
|
56
|
+
load_lib_dirs('util')
|
58
57
|
|
59
58
|
require "#{ROOT_DIR}/lib/framework/core/fact_augmenter"
|
60
59
|
require "#{ROOT_DIR}/lib/framework/parsers/query_parser"
|
@@ -6,6 +6,7 @@ module Facter
|
|
6
6
|
include Facter::ConfigFileOptions
|
7
7
|
include Facter::PriorityOptions
|
8
8
|
include Facter::HelperOptions
|
9
|
+
include Facter::ValidateOptions
|
9
10
|
|
10
11
|
include Singleton
|
11
12
|
|
@@ -58,10 +59,12 @@ module Facter
|
|
58
59
|
private
|
59
60
|
|
60
61
|
def initialize_options
|
62
|
+
@options = {}
|
61
63
|
augment_with_defaults!
|
62
64
|
augment_with_to_hash_defaults! if @priority_options[:to_hash]
|
63
65
|
augment_with_config_file_options!(@priority_options[:config])
|
64
66
|
augment_with_priority_options!(@priority_options)
|
67
|
+
validate_configs
|
65
68
|
augment_with_helper_options!(@user_query)
|
66
69
|
end
|
67
70
|
end
|
@@ -6,10 +6,12 @@ module Facter
|
|
6
6
|
conf_reader = Facter::ConfigReader.new(config_path)
|
7
7
|
|
8
8
|
augment_config_path(config_path)
|
9
|
-
|
9
|
+
if @priority_options[:is_cli]
|
10
|
+
augment_cli(conf_reader.cli)
|
11
|
+
augment_ruby(conf_reader.global)
|
12
|
+
end
|
10
13
|
augment_custom(conf_reader.global)
|
11
14
|
augment_external(conf_reader.global)
|
12
|
-
augment_ruby(conf_reader.global)
|
13
15
|
augment_show_legacy(conf_reader.global)
|
14
16
|
augment_facts(conf_reader.ttls)
|
15
17
|
end
|
@@ -32,15 +34,19 @@ module Facter
|
|
32
34
|
def augment_custom(file_global_conf)
|
33
35
|
return unless file_global_conf
|
34
36
|
|
35
|
-
@
|
36
|
-
|
37
|
+
if @priority_options[:is_cli]
|
38
|
+
@options[:custom_facts] = !file_global_conf['no-custom-facts'] unless file_global_conf['no-custom-facts'].nil?
|
39
|
+
end
|
40
|
+
@options[:custom_dir] = [file_global_conf['custom-dir']].flatten unless file_global_conf['custom-dir'].nil?
|
37
41
|
end
|
38
42
|
|
39
43
|
def augment_external(global_conf)
|
40
44
|
return unless global_conf
|
41
45
|
|
42
|
-
@
|
43
|
-
|
46
|
+
if @priority_options[:is_cli]
|
47
|
+
@options[:external_facts] = !global_conf['no-external-facts'] unless global_conf['no-external-facts'].nil?
|
48
|
+
end
|
49
|
+
@options[:external_dir] = [global_conf['external-dir']].flatten unless global_conf['external-dir'].nil?
|
44
50
|
end
|
45
51
|
|
46
52
|
def augment_ruby(global_conf)
|
@@ -7,6 +7,8 @@ module Facter
|
|
7
7
|
global_defaults
|
8
8
|
end
|
9
9
|
|
10
|
+
DEFAULT_LOG_LEVEL = :warn
|
11
|
+
|
10
12
|
def augment_with_to_hash_defaults!
|
11
13
|
@options[:show_legacy] = true
|
12
14
|
end
|
@@ -17,7 +19,7 @@ module Facter
|
|
17
19
|
@options[:debug] ||= false
|
18
20
|
@options[:trace] ||= false
|
19
21
|
@options[:verbose] ||= false
|
20
|
-
@options[:log_level] ||=
|
22
|
+
@options[:log_level] ||= DEFAULT_LOG_LEVEL
|
21
23
|
@options[:show_legacy] ||= false
|
22
24
|
end
|
23
25
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module ValidateOptions
|
5
|
+
def validate_configs
|
6
|
+
conflicting_configs.each do |op|
|
7
|
+
if op.values[0] && op.values[1]
|
8
|
+
raise_error("#{op.keys[0]} and #{op.keys[1]} options conflict: please specify only one")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
validate_log_options
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def conflicting_configs
|
17
|
+
no_ruby = !@options[:ruby]
|
18
|
+
no_custom_facts = !@options[:custom_facts]
|
19
|
+
puppet = @options[:puppet]
|
20
|
+
custom_dir = @options[:custom_dir].nil? ? false : @options[:custom_dir].any?
|
21
|
+
external_dir = @options[:external_dir].nil? ? false : @options[:external_dir].any?
|
22
|
+
|
23
|
+
[
|
24
|
+
{ 'no-ruby' => no_ruby, 'custom-dir' => custom_dir },
|
25
|
+
{ 'no-external-facts' => !@options[:external_facts], 'external-dir' => external_dir },
|
26
|
+
{ 'no-custom-facts' => no_custom_facts, 'custom-fir' => custom_dir },
|
27
|
+
{ 'no-ruby' => no_ruby, 'puppet' => puppet },
|
28
|
+
{ 'no-custom-facts' => no_custom_facts, 'puppet' => puppet }
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
def validate_log_options
|
33
|
+
return unless [@options[:debug],
|
34
|
+
@options[:verbose],
|
35
|
+
@options[:log_level] != Facter::DefaultOptions::DEFAULT_LOG_LEVEL]
|
36
|
+
.count(true) > 1
|
37
|
+
|
38
|
+
raise_error('debug, verbose, and log-level options conflict: please specify only one.')
|
39
|
+
end
|
40
|
+
|
41
|
+
def raise_error(message)
|
42
|
+
log = Facter::Log.new(self)
|
43
|
+
log.error(message, true)
|
44
|
+
raise ArgumentError, message
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -84,7 +84,7 @@ module Facter
|
|
84
84
|
|
85
85
|
def remove_comma_and_quation(output)
|
86
86
|
@log.debug('Remove unnecessary comma and quotation marks on root facts')
|
87
|
-
output.split("\n").map! { |line| line
|
87
|
+
output.split("\n").map! { |line| line =~ /^[\s]+/ ? line : line.gsub(/,$|\"/, '') }.join("\n")
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -23,7 +23,7 @@ module Facter
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def get_primary_interface_info(output)
|
26
|
-
primary_interface_info = output.
|
26
|
+
primary_interface_info = output.find { |line| line =~ /=>/ }.split(' ')
|
27
27
|
@fact_list[:primary] = primary_interface_info[5]
|
28
28
|
@fact_list[:ip] = primary_interface_info[1]
|
29
29
|
end
|
@@ -32,9 +32,9 @@ module Facter
|
|
32
32
|
domain = Regexp.last_match(1)
|
33
33
|
elsif File.exist?('/etc/resolv.conf')
|
34
34
|
file = File.read('/etc/resolv.conf')
|
35
|
-
if file
|
35
|
+
if file =~ /^search\s+(\S+)/
|
36
36
|
domain = Regexp.last_match(1)
|
37
|
-
elsif file
|
37
|
+
elsif file =~ /^domain\s+(\S+)/
|
38
38
|
domain = Regexp.last_match(1)
|
39
39
|
end
|
40
40
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Resolvers
|
5
|
+
module Solaris
|
6
|
+
class ZFS < BaseResolver
|
7
|
+
@log = Facter::Log.new(self)
|
8
|
+
@semaphore = Mutex.new
|
9
|
+
@fact_list ||= {}
|
10
|
+
class << self
|
11
|
+
private
|
12
|
+
|
13
|
+
def post_resolve(fact_name)
|
14
|
+
@fact_list.fetch(fact_name) { zfs_fact(fact_name) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def zfs_fact(fact_name)
|
18
|
+
build_zfs_facts
|
19
|
+
@fact_list[fact_name]
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_zfs_facts
|
23
|
+
output, _status = Open3.capture2('zfs upgrade -v')
|
24
|
+
features_list = output.scan(/^\s+(\d+)/).flatten
|
25
|
+
|
26
|
+
return if features_list.empty?
|
27
|
+
|
28
|
+
@fact_list[:zfs_featurenumbers] = features_list.join(',')
|
29
|
+
@fact_list[:zfs_version] = features_list.last
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Resolvers
|
5
|
+
module Solaris
|
6
|
+
class ZPool < BaseResolver
|
7
|
+
@log = Facter::Log.new(self)
|
8
|
+
@semaphore = Mutex.new
|
9
|
+
@fact_list ||= {}
|
10
|
+
class << self
|
11
|
+
private
|
12
|
+
|
13
|
+
def post_resolve(fact_name)
|
14
|
+
@fact_list.fetch(fact_name) { zpool_fact(fact_name) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def zpool_fact(fact_name)
|
18
|
+
build_zpool_facts
|
19
|
+
@fact_list[fact_name]
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_zpool_facts
|
23
|
+
output, _status = Open3.capture2('zpool upgrade -v')
|
24
|
+
features_list = output.scan(/^\s+(\d+)/).flatten
|
25
|
+
|
26
|
+
return if features_list.empty?
|
27
|
+
|
28
|
+
@fact_list[:zpool_featurenumbers] = features_list.join(',')
|
29
|
+
@fact_list[:zpool_version] = features_list.last
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -23,13 +23,10 @@ ERROR_MORE_DATA = 234
|
|
23
23
|
MAX_PATH = 32_767
|
24
24
|
|
25
25
|
module FFI
|
26
|
-
|
26
|
+
WIN32FALSE = 0
|
27
27
|
END_OF_WCHAR_STRING = "\0\0".encode('UTF-16LE')
|
28
28
|
|
29
29
|
class Pointer
|
30
|
-
alias write_dword write_uint32
|
31
|
-
alias read_dword read_uint32
|
32
|
-
|
33
30
|
def read_wide_string_with_length(char_length)
|
34
31
|
# char_length is number of wide chars (typically excluding NULLs), *not* bytes
|
35
32
|
str = get_bytes(0, char_length * 2).force_encoding('UTF-16LE')
|
@@ -39,27 +36,27 @@ module FFI
|
|
39
36
|
def read_wide_string_without_length
|
40
37
|
wide_character = get_bytes(0, 2)
|
41
38
|
i = 2
|
42
|
-
str =
|
39
|
+
str = []
|
43
40
|
|
44
41
|
while wide_character.encode('UTF-16LE') != END_OF_WCHAR_STRING
|
45
|
-
str
|
42
|
+
str << wide_character
|
46
43
|
wide_character = get_bytes(i, 2)
|
47
44
|
i += 2
|
48
45
|
end
|
49
|
-
str.force_encoding('UTF-16LE').encode('UTF-8')
|
46
|
+
str.join.force_encoding('UTF-16LE').encode('UTF-8')
|
50
47
|
end
|
51
48
|
|
52
49
|
def read_win32_bool
|
53
50
|
# BOOL is always a 32-bit integer in Win32
|
54
51
|
# some Win32 APIs return 1 for true, while others are non-0
|
55
|
-
read_int32 !=
|
52
|
+
read_int32 != WIN32FALSE
|
56
53
|
end
|
57
54
|
end
|
58
55
|
|
59
56
|
class Struct
|
60
57
|
def self.read_list(first_address)
|
61
58
|
instance = new(first_address)
|
62
|
-
while instance.to_ptr !=
|
59
|
+
while instance.to_ptr != Pointer::NULL
|
63
60
|
yield(instance)
|
64
61
|
instance = new(instance[:Next])
|
65
62
|
end
|
@@ -47,7 +47,7 @@ class NetworkUtils
|
|
47
47
|
|
48
48
|
def get_scope(sockaddr)
|
49
49
|
require 'socket'
|
50
|
-
scope6 =
|
50
|
+
scope6 = []
|
51
51
|
addrinfo = Addrinfo.new(['AF_INET6', 0, nil, sockaddr], :INET6)
|
52
52
|
|
53
53
|
scope6 << 'compat,' if addrinfo.ipv6_v4compat?
|
@@ -59,6 +59,7 @@ class NetworkUtils
|
|
59
59
|
'host'
|
60
60
|
else 'global'
|
61
61
|
end
|
62
|
+
scope6.join
|
62
63
|
end
|
63
64
|
end
|
64
65
|
end
|
@@ -26,7 +26,7 @@ module Facter
|
|
26
26
|
end
|
27
27
|
|
28
28
|
name_ptr = FFI::MemoryPointer.new(:wchar, size_ptr.read_uint32)
|
29
|
-
if IdentityFFI::GetUserNameExW(NAME_SAM_COMPATIBLE, name_ptr, size_ptr) == FFI::
|
29
|
+
if IdentityFFI::GetUserNameExW(NAME_SAM_COMPATIBLE, name_ptr, size_ptr) == FFI::WIN32FALSE
|
30
30
|
@log.debug "failure resolving identity facts: #{FFI.errno}"
|
31
31
|
return
|
32
32
|
end
|
@@ -36,7 +36,7 @@ module Facter
|
|
36
36
|
|
37
37
|
def privileged?
|
38
38
|
result = IdentityFFI::IsUserAnAdmin()
|
39
|
-
result && result != FFI::
|
39
|
+
result && result != FFI::WIN32FALSE
|
40
40
|
end
|
41
41
|
|
42
42
|
def retrieve_facts(fact_name)
|
@@ -17,7 +17,7 @@ module Facter
|
|
17
17
|
require "#{ROOT_DIR}/lib/resolvers/windows/ffi/memory_ffi"
|
18
18
|
|
19
19
|
state_ptr = FFI::MemoryPointer.new(PerformanceInformation.size)
|
20
|
-
if MemoryFFI::GetPerformanceInfo(state_ptr, state_ptr.size) == FFI::
|
20
|
+
if MemoryFFI::GetPerformanceInfo(state_ptr, state_ptr.size) == FFI::WIN32FALSE
|
21
21
|
@log.debug 'Resolving memory facts failed'
|
22
22
|
return
|
23
23
|
end
|
@@ -24,7 +24,7 @@ module Facter
|
|
24
24
|
end
|
25
25
|
|
26
26
|
bool_ptr = FFI::MemoryPointer.new(:win32_bool, 1)
|
27
|
-
if System32FFI::IsWow64Process(System32FFI::GetCurrentProcess(), bool_ptr) == FFI::
|
27
|
+
if System32FFI::IsWow64Process(System32FFI::GetCurrentProcess(), bool_ptr) == FFI::WIN32FALSE
|
28
28
|
@log.debug 'IsWow64Process failed'
|
29
29
|
return
|
30
30
|
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.
|
4
|
+
version: 4.0.8.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.74.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-performance
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.5'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.38'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.38'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rubycritic
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,6 +182,7 @@ files:
|
|
154
182
|
- ".jrubyrc"
|
155
183
|
- ".rspec"
|
156
184
|
- ".rubocop.yml"
|
185
|
+
- ".rubocop_todo.yml"
|
157
186
|
- ".rubycritic.yml"
|
158
187
|
- ".travis.yml"
|
159
188
|
- CODEOWNERS
|
@@ -457,6 +486,10 @@ files:
|
|
457
486
|
- lib/facts/solaris/ruby/version.rb
|
458
487
|
- lib/facts/solaris/solaris_zones/current.rb
|
459
488
|
- lib/facts/solaris/solaris_zones/zone.rb
|
489
|
+
- lib/facts/solaris/zfs_featurenumbers.rb
|
490
|
+
- lib/facts/solaris/zfs_version.rb
|
491
|
+
- lib/facts/solaris/zpool_featurenumbers.rb
|
492
|
+
- lib/facts/solaris/zpool_version.rb
|
460
493
|
- lib/facts/windows/dhcp_servers.rb
|
461
494
|
- lib/facts/windows/dmi/manufacturer.rb
|
462
495
|
- lib/facts/windows/dmi/product/name.rb
|
@@ -558,6 +591,7 @@ files:
|
|
558
591
|
- lib/framework/core/options/helper_options.rb
|
559
592
|
- lib/framework/core/options/options_validator.rb
|
560
593
|
- lib/framework/core/options/priority_options.rb
|
594
|
+
- lib/framework/core/options/validate_options.rb
|
561
595
|
- lib/framework/detector/os_detector.rb
|
562
596
|
- lib/framework/formatters/formatter_factory.rb
|
563
597
|
- lib/framework/formatters/formatter_helper.rb
|
@@ -617,7 +651,9 @@ files:
|
|
617
651
|
- lib/resolvers/solaris/ipaddress_resolver.rb
|
618
652
|
- lib/resolvers/solaris/solaris_os_release_resolver.rb
|
619
653
|
- lib/resolvers/solaris/solaris_zone_name.rb
|
654
|
+
- lib/resolvers/solaris/zfs_resolver.rb
|
620
655
|
- lib/resolvers/solaris/zone_resolver.rb
|
656
|
+
- lib/resolvers/solaris/zpool_resolver.rb
|
621
657
|
- lib/resolvers/ssh_resolver.rb
|
622
658
|
- lib/resolvers/suse_release_resolver.rb
|
623
659
|
- lib/resolvers/sw_vers_resolver.rb
|