facter 4.5.1 → 4.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/facter +1 -1
- data/lib/docs/generate.rb +1 -6
- data/lib/facter/custom_facts/core/directed_graph.rb +2 -4
- data/lib/facter/custom_facts/core/execution/base.rb +1 -1
- data/lib/facter/custom_facts/core/execution/posix.rb +6 -2
- data/lib/facter/custom_facts/core/execution/windows.rb +4 -1
- data/lib/facter/custom_facts/core/execution.rb +1 -1
- data/lib/facter/custom_facts/core/file_loader.rb +0 -4
- data/lib/facter/custom_facts/core/suitable.rb +1 -1
- data/lib/facter/custom_facts/util/collection.rb +2 -4
- data/lib/facter/custom_facts/util/confine.rb +4 -1
- data/lib/facter/custom_facts/util/fact.rb +1 -1
- data/lib/facter/custom_facts/util/loader.rb +2 -2
- data/lib/facter/custom_facts/util/resolution.rb +8 -4
- data/lib/facter/custom_facts/util/values.rb +1 -1
- data/lib/facter/facts/amzn/os/distro/release.rb +6 -1
- data/lib/facter/facts/amzn/os/release.rb +5 -0
- data/lib/facter/facts/linux/dmi/product/version.rb +19 -0
- data/lib/facter/facts/linux/kernelmajversion.rb +1 -1
- data/lib/facter/facts/macosx/is_virtual.rb +1 -1
- data/lib/facter/facts/macosx/virtual.rb +3 -3
- data/lib/facter/facts/mariner/os/release.rb +1 -1
- data/lib/facter/facts/photon/os/release.rb +1 -1
- data/lib/facter/facts/solaris/kernelmajversion.rb +1 -1
- data/lib/facter/facts/solaris/ldom.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/kvm.rb +1 -1
- data/lib/facter/facts/windows/interfaces.rb +1 -1
- data/lib/facter/framework/benchmarking/timer.rb +2 -2
- data/lib/facter/framework/cli/cli.rb +6 -8
- data/lib/facter/framework/cli/cli_launcher.rb +1 -1
- data/lib/facter/framework/config/fact_groups.rb +1 -1
- data/lib/facter/framework/core/cache_manager.rb +5 -6
- data/lib/facter/framework/core/fact_loaders/class_discoverer.rb +4 -3
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +1 -3
- data/lib/facter/framework/core/fact_manager.rb +4 -4
- data/lib/facter/framework/core/file_loader.rb +736 -733
- data/lib/facter/framework/core/options/config_file_options.rb +4 -6
- data/lib/facter/framework/formatters/hocon_fact_formatter.rb +3 -2
- data/lib/facter/framework/formatters/legacy_fact_formatter.rb +4 -4
- data/lib/facter/framework/logging/logger.rb +6 -6
- data/lib/facter/framework/logging/logger_helper.rb +10 -11
- data/lib/facter/framework/parsers/query_parser.rb +24 -20
- data/lib/facter/resolvers/aix/disks.rb +1 -1
- data/lib/facter/resolvers/aix/ffi/ffi_helper.rb +1 -1
- data/lib/facter/resolvers/aix/networking.rb +1 -1
- data/lib/facter/resolvers/aix/partitions.rb +2 -2
- data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
- data/lib/facter/resolvers/amzn/os_release_rpm.rb +40 -0
- data/lib/facter/resolvers/dmi.rb +2 -1
- data/lib/facter/resolvers/fips_enabled.rb +1 -1
- data/lib/facter/resolvers/freebsd/dmi.rb +1 -1
- data/lib/facter/resolvers/freebsd/swap_memory.rb +1 -1
- data/lib/facter/resolvers/freebsd/system_memory.rb +15 -7
- data/lib/facter/resolvers/freebsd/virtual.rb +1 -1
- data/lib/facter/resolvers/linux/hostname.rb +1 -1
- data/lib/facter/resolvers/macosx/dmi.rb +1 -1
- data/lib/facter/resolvers/macosx/filesystems.rb +1 -1
- data/lib/facter/resolvers/memory.rb +1 -1
- data/lib/facter/resolvers/networking.rb +3 -3
- data/lib/facter/resolvers/os_release.rb +1 -1
- data/lib/facter/resolvers/partitions.rb +2 -2
- data/lib/facter/resolvers/processors_lscpu.rb +2 -2
- data/lib/facter/resolvers/solaris/ffi/ffi.rb +2 -2
- data/lib/facter/resolvers/solaris/ffi/functions.rb +2 -2
- data/lib/facter/resolvers/solaris/mountpoints.rb +1 -1
- data/lib/facter/resolvers/solaris/networking.rb +2 -2
- data/lib/facter/resolvers/solaris/os_release.rb +2 -2
- data/lib/facter/resolvers/uname.rb +10 -6
- data/lib/facter/resolvers/virt_what.rb +2 -1
- data/lib/facter/resolvers/windows/memory.rb +3 -2
- data/lib/facter/resolvers/windows/product_release.rb +7 -7
- data/lib/facter/resolvers/xen.rb +3 -1
- data/lib/facter/util/aix/info_extractor.rb +1 -1
- data/lib/facter/util/aix/odm_query.rb +1 -1
- data/lib/facter/util/api_debugger.rb +2 -2
- data/lib/facter/util/facts/facts_utils.rb +2 -1
- data/lib/facter/util/facts/posix/virtual_detector.rb +8 -5
- data/lib/facter/util/facts/unit_converter.rb +2 -2
- data/lib/facter/util/file_helper.rb +1 -2
- data/lib/facter/util/macosx/system_profile_executor.rb +3 -3
- data/lib/facter/util/resolvers/fingerprint.rb +1 -7
- data/lib/facter/util/resolvers/networking/networking.rb +4 -3
- data/lib/facter/util/resolvers/networking/primary_interface.rb +2 -0
- data/lib/facter/util/resolvers/ssh.rb +1 -9
- data/lib/facter/util/resolvers/ssh_helper.rb +2 -0
- data/lib/facter/util/utils.rb +2 -2
- data/lib/facter/version.rb +1 -1
- data/lib/facter.rb +7 -0
- metadata +11 -9
@@ -60,10 +60,8 @@ module Facter
|
|
60
60
|
def augment_custom(file_global_conf)
|
61
61
|
return unless file_global_conf
|
62
62
|
|
63
|
-
if Options.cli?
|
64
|
-
|
65
|
-
@options[:no_custom_facts] = file_global_conf['no-custom-facts']
|
66
|
-
end
|
63
|
+
if Options.cli? && !file_global_conf['no-custom-facts'].nil?
|
64
|
+
@options[:no_custom_facts] = file_global_conf['no-custom-facts']
|
67
65
|
end
|
68
66
|
|
69
67
|
@options[:custom_dir] = file_global_conf['custom-dir'] unless file_global_conf['custom-dir'].nil?
|
@@ -73,8 +71,8 @@ module Facter
|
|
73
71
|
def augment_external(global_conf)
|
74
72
|
return unless global_conf
|
75
73
|
|
76
|
-
if Options.cli?
|
77
|
-
@options[:no_external_facts] = global_conf['no-external-facts']
|
74
|
+
if Options.cli? && !global_conf['no-external-facts'].nil?
|
75
|
+
@options[:no_external_facts] = global_conf['no-external-facts']
|
78
76
|
end
|
79
77
|
|
80
78
|
@options[:external_dir] = [global_conf['external-dir']].flatten unless global_conf['external-dir'].nil?
|
@@ -14,7 +14,8 @@ module Facter
|
|
14
14
|
|
15
15
|
user_query = user_queries.first
|
16
16
|
return format_for_no_query(resolved_facts) if user_query.empty?
|
17
|
-
|
17
|
+
|
18
|
+
format_for_single_user_query(user_queries.first, resolved_facts) unless user_query.empty?
|
18
19
|
end
|
19
20
|
|
20
21
|
private
|
@@ -39,7 +40,7 @@ module Facter
|
|
39
40
|
|
40
41
|
return '' unless fact_value
|
41
42
|
|
42
|
-
fact_value.
|
43
|
+
fact_value.instance_of?(Hash) ? hash_to_hocon(fact_value) : fact_value
|
43
44
|
end
|
44
45
|
|
45
46
|
def hash_to_hocon(fact_collection)
|
@@ -42,7 +42,7 @@ module Facter
|
|
42
42
|
pretty_json = handle_newlines(pretty_json)
|
43
43
|
|
44
44
|
@log.debug('Remove quotes from value if value is a string')
|
45
|
-
pretty_json.gsub(/^(\S*) =>
|
45
|
+
pretty_json.gsub(/^(\S*) => "(.*)"/, '\1 => \2')
|
46
46
|
end
|
47
47
|
|
48
48
|
def format_for_single_user_query(user_query, resolved_facts)
|
@@ -55,7 +55,7 @@ module Facter
|
|
55
55
|
pretty_json = fact_value.nil? ? '' : hash_to_facter_format(fact_value)
|
56
56
|
|
57
57
|
@log.debug('Remove quotes from value if it is a simple string')
|
58
|
-
pretty_json.gsub(/^"(.*)
|
58
|
+
pretty_json.gsub(/^"(.*)"/, '\1')
|
59
59
|
end
|
60
60
|
|
61
61
|
def hash_to_facter_format(facts_hash)
|
@@ -66,7 +66,7 @@ module Facter
|
|
66
66
|
pretty_json.gsub!(/":\s/, '" => ')
|
67
67
|
|
68
68
|
@log.debug('Remove quotes from parent nodes')
|
69
|
-
pretty_json.gsub!(
|
69
|
+
pretty_json.gsub!(/"(.*)"\ =>/, '\1 =>')
|
70
70
|
|
71
71
|
@log.debug('Remove double backslashes from paths')
|
72
72
|
pretty_json.gsub(/\\\\/, '\\')
|
@@ -95,7 +95,7 @@ module Facter
|
|
95
95
|
# quotation marks that come after \ are not removed
|
96
96
|
@log.debug('Remove unnecessary comma and quotation marks on root facts')
|
97
97
|
output.split("\n")
|
98
|
-
.map! { |line|
|
98
|
+
.map! { |line| /^\s+/.match?(line) ? line : line.gsub(/,$|(?<!\\)"/, '').gsub('\\"', '"') }.join("\n")
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -107,7 +107,7 @@ module Facter
|
|
107
107
|
@@message_callback.call(:debug, msg)
|
108
108
|
else
|
109
109
|
msg = colorize(msg, CYAN) if Options[:color]
|
110
|
-
@@logger.debug(@class_name
|
110
|
+
@@logger.debug("#{@class_name} - #{msg}")
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -128,7 +128,7 @@ module Facter
|
|
128
128
|
@@message_callback.call(:info, msg)
|
129
129
|
else
|
130
130
|
msg = colorize(msg, GREEN) if Options[:color]
|
131
|
-
@@logger.info(@class_name
|
131
|
+
@@logger.info("#{@class_name} - #{msg}")
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
@@ -137,7 +137,7 @@ module Facter
|
|
137
137
|
@@message_callback.call(:warn, msg)
|
138
138
|
else
|
139
139
|
msg = colorize(msg, YELLOW) if Options[:color]
|
140
|
-
@@logger.warn(@class_name
|
140
|
+
@@logger.warn("#{@class_name} - #{msg}")
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
@@ -149,20 +149,20 @@ module Facter
|
|
149
149
|
warn(message_string)
|
150
150
|
end
|
151
151
|
|
152
|
-
def error(msg, colorize = false)
|
152
|
+
def error(msg, colorize = false) # rubocop:disable Style/OptionalBooleanParameter
|
153
153
|
@@has_errors = true
|
154
154
|
|
155
155
|
if @@message_callback && Options[:allow_external_loggers]
|
156
156
|
@@message_callback.call(:error, msg)
|
157
157
|
else
|
158
158
|
msg = colorize(msg, RED) if colorize || Options[:color]
|
159
|
-
@@logger.error(@class_name
|
159
|
+
@@logger.error("#{@class_name} - #{msg}")
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
163
|
def log_exception(exception)
|
164
164
|
msg = exception.message
|
165
|
-
msg += "\n
|
165
|
+
msg += "\n#{exception.backtrace.join("\n")}" if Options[:trace]
|
166
166
|
|
167
167
|
error(msg, true)
|
168
168
|
end
|
@@ -3,17 +3,16 @@
|
|
3
3
|
class LoggerHelper
|
4
4
|
class << self
|
5
5
|
def determine_callers_name(sender_self)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
class_name
|
6
|
+
case sender_self
|
7
|
+
when String
|
8
|
+
sender_self
|
9
|
+
when Class
|
10
|
+
sender_self.name
|
11
|
+
when Module
|
12
|
+
sender_self.name
|
13
|
+
else # when class is singleton
|
14
|
+
sender_self.class.name
|
15
|
+
end
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -18,18 +18,18 @@ module Facter
|
|
18
18
|
# Because a root fact will always be resolved by a collection of child facts,
|
19
19
|
# we can return one or more child facts for each parent.
|
20
20
|
#
|
21
|
-
#
|
22
|
-
#
|
21
|
+
# @param query_list [Array] The list of facts to search for
|
22
|
+
# @param loaded_facts [Array] All of the fact definitions for the current operating system
|
23
23
|
#
|
24
|
-
#
|
25
|
-
def parse(query_list,
|
24
|
+
# @return [Array<SearchedFact>] a list of searchable facts that resolve the user's query
|
25
|
+
def parse(query_list, loaded_facts)
|
26
26
|
matched_facts = []
|
27
27
|
@query_list = query_list
|
28
28
|
|
29
|
-
return no_user_query(
|
29
|
+
return no_user_query(loaded_facts) unless query_list.any?
|
30
30
|
|
31
31
|
query_list.each do |query|
|
32
|
-
found_facts = search_for_facts(query,
|
32
|
+
found_facts = search_for_facts(query, loaded_facts)
|
33
33
|
matched_facts << found_facts
|
34
34
|
end
|
35
35
|
|
@@ -44,15 +44,17 @@ module Facter
|
|
44
44
|
searched_facts
|
45
45
|
end
|
46
46
|
|
47
|
-
def search_for_facts(query,
|
47
|
+
def search_for_facts(query, loaded_facts)
|
48
48
|
resolvable_fact_list = []
|
49
49
|
query = query.to_s
|
50
50
|
query_tokens = query.end_with?('.*') ? [query] : query.split('.')
|
51
51
|
size = query_tokens.size
|
52
52
|
|
53
|
+
# Try to match the most specific query_tokens to the least, returning the first match
|
53
54
|
size.times do |i|
|
54
55
|
query_token_range = 0..size - i - 1
|
55
|
-
|
56
|
+
query_fact = query_tokens[query_token_range].join('.')
|
57
|
+
resolvable_fact_list = get_facts_matching_tokens(query_tokens, query_fact, loaded_facts)
|
56
58
|
|
57
59
|
return resolvable_fact_list if resolvable_fact_list.any?
|
58
60
|
end
|
@@ -62,12 +64,10 @@ module Facter
|
|
62
64
|
resolvable_fact_list
|
63
65
|
end
|
64
66
|
|
65
|
-
def get_facts_matching_tokens(query_tokens,
|
67
|
+
def get_facts_matching_tokens(query_tokens, query_fact, loaded_facts)
|
66
68
|
resolvable_fact_list = []
|
67
69
|
|
68
|
-
|
69
|
-
query_fact = query_tokens[query_token_range].join('.')
|
70
|
-
|
70
|
+
loaded_facts.each do |loaded_fact|
|
71
71
|
next unless found_fact?(loaded_fact.name, query_fact)
|
72
72
|
|
73
73
|
searched_fact = construct_loaded_fact(query_tokens, loaded_fact)
|
@@ -79,16 +79,20 @@ module Facter
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def found_fact?(fact_name, query_fact)
|
82
|
+
# This is the case where the fact_name contains a wildcard like
|
83
|
+
# blockdevice_.*_model and we're querying for the legacy fact
|
84
|
+
# specifically using 'blockdevice_sba_model' and we don't want the query
|
85
|
+
# 'blockdevice.sba.model' to match
|
82
86
|
fact_with_wildcard = fact_name.include?('.*') && !query_fact.include?('.')
|
83
87
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
88
|
+
if fact_with_wildcard
|
89
|
+
# fact_name contains wildcard, so we're intentially not escaping.
|
90
|
+
query_fact.match("^#{fact_name}$")
|
91
|
+
else
|
92
|
+
processed_equery_fact = query_fact.gsub('\\', '\\\\\\\\')
|
93
|
+
# Must escape metacharacters (like dots) to ensure the correct fact is found
|
94
|
+
fact_name.match("^#{Regexp.escape(processed_equery_fact)}($|\\.)")
|
95
|
+
end
|
92
96
|
end
|
93
97
|
|
94
98
|
def construct_loaded_fact(query_tokens, loaded_fact)
|
@@ -47,7 +47,7 @@ module Facter
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def compute_size(size_hash)
|
50
|
-
physical_partitions = size_hash['TOTAL PPs'].to_i
|
50
|
+
physical_partitions = size_hash['TOTAL PPs'].to_i
|
51
51
|
size_physical_partition = size_hash['PP SIZE']
|
52
52
|
exp = if size_physical_partition[/mega/]
|
53
53
|
Facter::Util::Aix::InfoExtractor::MEGABYTES_EXPONENT
|
@@ -47,7 +47,7 @@ module Facter
|
|
47
47
|
|
48
48
|
info = line.split("\s")
|
49
49
|
interface_name = info[0]
|
50
|
-
mac = info[3][/^([0-9a-f]{1,2}[
|
50
|
+
mac = info[3][/^([0-9a-f]{1,2}[.:-]){5}([0-9a-f]{1,2})$/]
|
51
51
|
if interfaces[interface_name]
|
52
52
|
interfaces[interface_name][:mtu] = info[1].to_i
|
53
53
|
interfaces[interface_name][:mac] = format_mac_address(mac) if mac
|
@@ -56,14 +56,14 @@ module Facter
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def compute_size(info_hash)
|
59
|
-
|
59
|
+
logical_partitions = info_hash['LPs'].to_i
|
60
60
|
size_physical_partition = info_hash['PP SIZE']
|
61
61
|
exp = if size_physical_partition[/mega/]
|
62
62
|
Facter::Util::Aix::InfoExtractor::MEGABYTES_EXPONENT
|
63
63
|
else
|
64
64
|
Facter::Util::Aix::InfoExtractor::GIGABYTES_EXPONENT
|
65
65
|
end
|
66
|
-
size_physical_partition.to_i *
|
66
|
+
size_physical_partition.to_i * logical_partitions * exp
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Resolvers
|
5
|
+
module Amzn
|
6
|
+
class OsReleaseRpm < BaseResolver
|
7
|
+
init_resolver
|
8
|
+
|
9
|
+
class << self
|
10
|
+
private
|
11
|
+
|
12
|
+
def post_resolve(fact_name, _options)
|
13
|
+
@fact_list.fetch(fact_name) { rpm_system_call(fact_name) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def rpm_system_call(fact_name)
|
17
|
+
output = Facter::Core::Execution.execute(
|
18
|
+
'rpm -q --qf \'%<NAME>s\n%<VERSION>s\n%<RELEASE>s\n%<VENDOR>s\' -f /etc/os-release',
|
19
|
+
logger: log
|
20
|
+
)
|
21
|
+
build_fact_list(output)
|
22
|
+
|
23
|
+
@fact_list[fact_name]
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_fact_list(output)
|
27
|
+
rpm_results = output.split("\n")
|
28
|
+
|
29
|
+
return if rpm_results.empty?
|
30
|
+
|
31
|
+
@fact_list[:package],
|
32
|
+
@fact_list[:version],
|
33
|
+
@fact_list[:release],
|
34
|
+
@fact_list[:vendor] = rpm_results.map(&:strip)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/facter/resolvers/dmi.rb
CHANGED
@@ -22,6 +22,7 @@ module Facter
|
|
22
22
|
# :product_serial
|
23
23
|
# :product_name
|
24
24
|
# :product_uuid
|
25
|
+
# :product_version
|
25
26
|
|
26
27
|
private
|
27
28
|
|
@@ -32,7 +33,7 @@ module Facter
|
|
32
33
|
def read_facts(fact_name)
|
33
34
|
files = %w[bios_date bios_vendor bios_version board_asset_tag board_vendor board_name
|
34
35
|
board_serial chassis_asset_tag chassis_type sys_vendor product_name
|
35
|
-
product_serial product_uuid]
|
36
|
+
product_serial product_uuid product_version]
|
36
37
|
return unless File.directory?('/sys/class/dmi')
|
37
38
|
|
38
39
|
file_content = Facter::Util::FileHelper.safe_read("/sys/class/dmi/id/#{fact_name}", nil)
|
@@ -15,7 +15,7 @@ module Facter
|
|
15
15
|
|
16
16
|
def read_swap_memory(fact_name)
|
17
17
|
output = Facter::Core::Execution.execute('swapinfo -k', logger: log)
|
18
|
-
data = output.split("\n")[1
|
18
|
+
data = output.split("\n")[1..].map { |line| line.split(/\s+/) }
|
19
19
|
|
20
20
|
unless data.empty?
|
21
21
|
@fact_list[:total_bytes] = kilobytes_to_bytes(data.map { |line| line[1].to_i }.inject(:+))
|
@@ -15,25 +15,33 @@ module Facter
|
|
15
15
|
|
16
16
|
def calculate_system_memory(fact_name)
|
17
17
|
read_total_memory_in_bytes
|
18
|
-
|
18
|
+
read_used_memory_in_bytes
|
19
19
|
|
20
|
-
@fact_list[:
|
20
|
+
@fact_list[:available_bytes] = @fact_list[:total_bytes] - @fact_list[:used_bytes]
|
21
21
|
@fact_list[:capacity] = Facter::Util::Resolvers::FilesystemHelper
|
22
22
|
.compute_capacity(@fact_list[:used_bytes], @fact_list[:total_bytes])
|
23
23
|
|
24
24
|
@fact_list[fact_name]
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
def pagesize
|
28
|
+
@pagesize ||= Facter::Freebsd::FfiHelper.sysctl_by_name(:long, 'vm.stats.vm.v_page_size')
|
29
|
+
end
|
30
|
+
|
31
|
+
def read_used_memory_in_bytes
|
32
|
+
require_relative 'ffi/ffi_helper'
|
33
|
+
|
34
|
+
@fact_list[:used_bytes] = pagesize * (
|
35
|
+
Facter::Freebsd::FfiHelper.sysctl_by_name(:long, 'vm.stats.vm.v_active_count') +
|
36
|
+
Facter::Freebsd::FfiHelper.sysctl_by_name(:long, 'vm.stats.vm.v_wire_count')
|
37
|
+
)
|
31
38
|
end
|
32
39
|
|
33
40
|
def read_total_memory_in_bytes
|
34
41
|
require_relative 'ffi/ffi_helper'
|
35
42
|
|
36
|
-
@fact_list[:total_bytes] =
|
43
|
+
@fact_list[:total_bytes] = pagesize *
|
44
|
+
Facter::Freebsd::FfiHelper.sysctl_by_name(:long, 'vm.stats.vm.v_page_count')
|
37
45
|
end
|
38
46
|
end
|
39
47
|
end
|
@@ -16,7 +16,7 @@ module Facter
|
|
16
16
|
|
17
17
|
def read_filesystems(fact_name)
|
18
18
|
output = Facter::Core::Execution.execute('mount', logger: log)
|
19
|
-
filesystems = output.scan(/\(([a-z]+)
|
19
|
+
filesystems = output.scan(/\(([a-z]+),*/).flatten
|
20
20
|
@fact_list[:macosx_filesystems] = filesystems.uniq.sort.join(',')
|
21
21
|
@fact_list[fact_name]
|
22
22
|
end
|
@@ -57,7 +57,7 @@ module Facter
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def compute_capacity(used, total)
|
60
|
-
format('%<computed_capacity>.2f', computed_capacity: (used / total.to_f * 100))
|
60
|
+
"#{format('%<computed_capacity>.2f', computed_capacity: (used / total.to_f * 100))}%"
|
61
61
|
end
|
62
62
|
|
63
63
|
def compute_used(total, free)
|
@@ -39,12 +39,12 @@ module Facter
|
|
39
39
|
# convert ip ranges into single ip. eg. 10.16.132.213 --> 10.16.132.213 is converted to 10.16.132.213
|
40
40
|
# convert ip6 ranges into single ip. eg. 2001:db8:cafe::132:213 -->
|
41
41
|
# 2001:db8:cafe::132:213 is converted to 2001:db8:cafe::132:213
|
42
|
-
response.gsub!(/([\da-fA-F]+([
|
42
|
+
response.gsub!(/([\da-fA-F]+([.:]+[\da-fA-F]+)*)\s+-->\s+[\da-fA-F]+([.:]+[\da-fA-F]+)*/, '\\1')
|
43
43
|
end
|
44
44
|
|
45
45
|
def parse_interfaces_response(response)
|
46
46
|
parsed_interfaces_data = {}
|
47
|
-
interfaces_data = Hash[*response.split(/^([A-Za-z0-9_
|
47
|
+
interfaces_data = Hash[*response.split(/^([A-Za-z0-9_.]+): /)[1..]]
|
48
48
|
|
49
49
|
interfaces_data.each do |interface_name, raw_data|
|
50
50
|
parsed_interface_data = {}
|
@@ -66,7 +66,7 @@ module Facter
|
|
66
66
|
|
67
67
|
def extract_mac(raw_data, parsed_interface_data)
|
68
68
|
mac = raw_data.match(/(?:ether|lladdr)\s+((?:\w?\w:){5}\w?\w)|(?:infiniband)\s+((?:\w?\w:){19}\w?\w)/)
|
69
|
-
|
69
|
+
&.captures&.compact&.first
|
70
70
|
parsed_interface_data[:mac] = mac unless mac.nil?
|
71
71
|
end
|
72
72
|
|
@@ -110,7 +110,7 @@ module Facter
|
|
110
110
|
|
111
111
|
def append_linux_to_os_name
|
112
112
|
os_name = @fact_list[:name]
|
113
|
-
@fact_list[:name] = os_name
|
113
|
+
@fact_list[:name] = "#{os_name}Linux" if os_name.downcase.start_with?('virtuozzo')
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -112,9 +112,9 @@ module Facter
|
|
112
112
|
|
113
113
|
def execute_and_extract_blkid_info
|
114
114
|
stdout = Facter::Core::Execution.execute('blkid', logger: log)
|
115
|
-
output_hash = Hash[*stdout.split(/^([^:]+):/)[1
|
115
|
+
output_hash = Hash[*stdout.split(/^([^:]+):/)[1..]]
|
116
116
|
output_hash.each do |key, value|
|
117
|
-
output_hash[key] = Hash[*value.delete('"').chomp.rstrip.split(/ ([^= ]+)=/)[1
|
117
|
+
output_hash[key] = Hash[*value.delete('"').chomp.rstrip.split(/ ([^= ]+)=/)[1..]]
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -10,7 +10,7 @@ module Facter
|
|
10
10
|
|
11
11
|
attach_function :ioctl_base, :ioctl, %i[int int pointer], :int
|
12
12
|
attach_function :open_socket, :socket, %i[int int int], :int
|
13
|
-
attach_function :close_socket, :
|
13
|
+
attach_function :close_socket, :close, %i[int], :int
|
14
14
|
attach_function :inet_ntop, %i[int pointer pointer uint], :string
|
15
15
|
|
16
16
|
def self.ioctl(call_const, pointer, address_family = AF_INET)
|
@@ -18,7 +18,7 @@ module Facter
|
|
18
18
|
begin
|
19
19
|
ioctl_base(fd, call_const, pointer)
|
20
20
|
ensure
|
21
|
-
Ioctl.close_socket(fd
|
21
|
+
Ioctl.close_socket(fd)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'ffi/ffi
|
3
|
+
require_relative 'ffi/ffi'
|
4
4
|
module Facter
|
5
5
|
module Resolvers
|
6
6
|
module Solaris
|
@@ -79,7 +79,7 @@ module Facter
|
|
79
79
|
ioctl = FFI::Ioctl.ioctl(FFI::SIOCGLIFMTU, lifreq, lifreq.ss_family)
|
80
80
|
|
81
81
|
if ioctl == -1
|
82
|
-
@log.error("
|
82
|
+
@log.error("Could not read MTU, error code is: #{::FFI::LastError.error}")
|
83
83
|
return
|
84
84
|
end
|
85
85
|
|
@@ -26,7 +26,7 @@ module Facter
|
|
26
26
|
|
27
27
|
@fact_list[:major] = major
|
28
28
|
@fact_list[:minor] = minor
|
29
|
-
@fact_list[:full] = major == '10' ? major
|
29
|
+
@fact_list[:full] = major == '10' ? "#{major}_u#{minor}" : "#{major}.#{minor}"
|
30
30
|
break
|
31
31
|
end
|
32
32
|
@fact_list[fact_name]
|
@@ -36,7 +36,7 @@ module Facter
|
|
36
36
|
result = text.match(regex_pattern)
|
37
37
|
major, minor = result.captures if result
|
38
38
|
minor = regex_pattern == /Solaris (\d+)/ ? '0' : minor
|
39
|
-
|
39
|
+
[major, minor] if major && minor
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -28,12 +28,16 @@ module Facter
|
|
28
28
|
def build_fact_list(output)
|
29
29
|
uname_results = output.split("\n")
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
if !uname_results.empty?
|
32
|
+
@fact_list[:machine],
|
33
|
+
@fact_list[:nodename],
|
34
|
+
@fact_list[:processor],
|
35
|
+
@fact_list[:kernelrelease],
|
36
|
+
@fact_list[:kernelname],
|
37
|
+
@fact_list[:kernelversion] = uname_results.map(&:strip)
|
38
|
+
else
|
39
|
+
log.warn('Request to uname returned no output. Uname related facts are not populated.')
|
40
|
+
end
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|