facter 4.3.1 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/docs/generate_cli.rb +1 -1
- data/lib/facter/custom_facts/core/execution/base.rb +2 -1
- data/lib/facter/custom_facts/core/execution/posix.rb +1 -1
- data/lib/facter/custom_facts/core/execution/windows.rb +2 -2
- data/lib/facter/custom_facts/core/file_loader.rb +23 -24
- data/lib/facter/custom_facts/core/legacy_facter.rb +1 -1
- data/lib/facter/custom_facts/util/normalization.rb +8 -23
- data/lib/facter/custom_facts/util/windows_root.rb +1 -1
- data/lib/facter/facts/debian/architecture.rb +1 -1
- data/lib/facter/facts/linux/hypervisors/kvm.rb +2 -2
- data/lib/facter/facts/linux/os/architecture.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/kvm.rb +2 -2
- data/lib/facter/framework/cli/cli_launcher.rb +3 -3
- data/lib/facter/framework/config/fact_groups.rb +2 -2
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +1 -1
- data/lib/facter/framework/core/file_loader.rb +893 -38
- data/lib/facter/framework/detector/os_hierarchy.rb +1 -1
- data/lib/facter/framework/formatters/legacy_fact_formatter.rb +1 -1
- data/lib/facter/framework/formatters/yaml_fact_formatter.rb +2 -2
- data/lib/facter/patches/sysfilesystem/sys/statvfs.rb +4 -4
- data/lib/facter/resolvers/aix/architecture.rb +1 -1
- data/lib/facter/resolvers/aix/filesystem.rb +1 -1
- data/lib/facter/resolvers/aix/hardware.rb +1 -1
- data/lib/facter/resolvers/aix/memory.rb +1 -1
- data/lib/facter/resolvers/aix/mountpoints.rb +2 -2
- data/lib/facter/resolvers/aix/networking.rb +1 -1
- data/lib/facter/resolvers/aix/partitions.rb +2 -2
- data/lib/facter/resolvers/bsd/processors.rb +1 -1
- data/lib/facter/resolvers/freebsd/processors.rb +2 -2
- data/lib/facter/resolvers/linux/hostname.rb +2 -2
- data/lib/facter/resolvers/load_averages.rb +1 -1
- data/lib/facter/resolvers/lspci.rb +1 -1
- data/lib/facter/resolvers/networking.rb +1 -1
- data/lib/facter/resolvers/open_vz.rb +1 -1
- data/lib/facter/resolvers/os_release.rb +2 -2
- data/lib/facter/resolvers/selinux.rb +3 -3
- data/lib/facter/resolvers/solaris/filesystems.rb +1 -1
- data/lib/facter/resolvers/virt_what.rb +6 -6
- data/lib/facter/resolvers/windows/ffi/hardware_ffi.rb +2 -2
- data/lib/facter/resolvers/windows/ffi/identity_ffi.rb +1 -1
- data/lib/facter/resolvers/windows/ffi/kernel_ffi.rb +2 -2
- data/lib/facter/resolvers/windows/ffi/memory_ffi.rb +2 -2
- data/lib/facter/resolvers/windows/ffi/networking_ffi.rb +3 -3
- data/lib/facter/resolvers/windows/ffi/system32_ffi.rb +1 -1
- data/lib/facter/resolvers/windows/ffi/winnls_ffi.rb +1 -1
- data/lib/facter/resolvers/windows/hardware_architecture.rb +1 -1
- data/lib/facter/resolvers/windows/identity.rb +1 -1
- data/lib/facter/resolvers/windows/kernel.rb +1 -1
- data/lib/facter/resolvers/windows/memory.rb +1 -1
- data/lib/facter/resolvers/windows/networking.rb +1 -1
- data/lib/facter/resolvers/windows/system32.rb +1 -1
- data/lib/facter/resolvers/windows/timezone.rb +1 -1
- data/lib/facter/resolvers/windows/virtualization.rb +2 -2
- data/lib/facter/resolvers/xen.rb +1 -1
- data/lib/facter/util/facts/windows_release_finder.rb +2 -2
- data/lib/facter/util/linux/dhcp.rb +1 -1
- data/lib/facter/util/utils.rb +1 -1
- data/lib/facter/version.rb +1 -1
- data/lib/facter.rb +15 -6
- metadata +7 -7
@@ -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
|
@@ -52,9 +52,9 @@ module Facter
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def needs_quote?(value)
|
55
|
-
return false if
|
55
|
+
return false if /true|false/.match?(value)
|
56
56
|
return false if value[/^[0-9]+$/]
|
57
|
-
return true if
|
57
|
+
return true if /y|Y|yes|Yes|YES|n|N|no|No|NO|True|TRUE|False|FALSE|on|On|ON|off|Off|OFF|:/.match?(value)
|
58
58
|
return false if value[/[a-zA-Z]/]
|
59
59
|
return false if value[/[0-9]+\.[0-9]+/]
|
60
60
|
|
@@ -10,7 +10,7 @@ module Sys
|
|
10
10
|
# it the second time will make FFI log a warning message.
|
11
11
|
remove_instance_variable(:@layout) if @layout
|
12
12
|
|
13
|
-
if RbConfig::CONFIG['host_os']
|
13
|
+
if /darwin|osx|mach/i.match?(RbConfig::CONFIG['host_os'])
|
14
14
|
layout(
|
15
15
|
:f_bsize, :ulong,
|
16
16
|
:f_frsize, :ulong,
|
@@ -24,7 +24,7 @@ module Sys
|
|
24
24
|
:f_flag, :ulong,
|
25
25
|
:f_namemax, :ulong
|
26
26
|
)
|
27
|
-
elsif RbConfig::CONFIG['host']
|
27
|
+
elsif /bsd/i.match?(RbConfig::CONFIG['host'])
|
28
28
|
layout(
|
29
29
|
:f_bavail, :uint64,
|
30
30
|
:f_bfree, :uint64,
|
@@ -38,7 +38,7 @@ module Sys
|
|
38
38
|
:f_fsid, :ulong,
|
39
39
|
:f_namemax, :ulong
|
40
40
|
)
|
41
|
-
elsif RbConfig::CONFIG['host']
|
41
|
+
elsif /sunos|solaris/i.match?(RbConfig::CONFIG['host'])
|
42
42
|
layout(
|
43
43
|
:f_bsize, :ulong,
|
44
44
|
:f_frsize, :ulong,
|
@@ -55,7 +55,7 @@ module Sys
|
|
55
55
|
:f_fstr, [:char, 32],
|
56
56
|
:f_filler, [:ulong, 16]
|
57
57
|
)
|
58
|
-
elsif RbConfig::CONFIG['host']
|
58
|
+
elsif /i686/i.match?(RbConfig::CONFIG['host'])
|
59
59
|
layout(
|
60
60
|
:f_bsize, :ulong,
|
61
61
|
:f_frsize, :ulong,
|
@@ -18,7 +18,7 @@ module Facter
|
|
18
18
|
return if file_content.empty?
|
19
19
|
|
20
20
|
file_content = file_content.map do |line|
|
21
|
-
next if line
|
21
|
+
next if /#|%/.match?(line) # skip lines that are comments or defaultvfs line
|
22
22
|
|
23
23
|
line.split(' ').first
|
24
24
|
end
|
@@ -25,7 +25,7 @@ module Facter
|
|
25
25
|
|
26
26
|
result.each_line do |line|
|
27
27
|
@fact_list[:system] = populate_system(line, pagesize) if line.include?('memory')
|
28
|
-
@fact_list[:swap] = populate_swap(line, pagesize) if
|
28
|
+
@fact_list[:swap] = populate_swap(line, pagesize) if /pg\sspace/.match?(line)
|
29
29
|
end
|
30
30
|
|
31
31
|
@fact_list[fact_name]
|
@@ -19,7 +19,7 @@ module Facter
|
|
19
19
|
@fact_list[:mountpoints] = {}
|
20
20
|
output = Facter::Core::Execution.execute('mount', logger: log)
|
21
21
|
output.split("\n").drop(2).map do |line|
|
22
|
-
next if
|
22
|
+
next if /procfs|ahafs/.match?(line)
|
23
23
|
|
24
24
|
add_mount_points_fact(line)
|
25
25
|
end
|
@@ -40,7 +40,7 @@ module Facter
|
|
40
40
|
def retrieve_sizes_for_mounts
|
41
41
|
output = Facter::Core::Execution.execute('df -P', logger: log)
|
42
42
|
output.split("\n").drop(1).map do |line|
|
43
|
-
next if
|
43
|
+
next if /-\s+-\s+-/.match?(line)
|
44
44
|
|
45
45
|
mount_info = line.split("\s")
|
46
46
|
mount_info[3] = translate_to_bytes(mount_info[3])
|
@@ -43,7 +43,7 @@ module Facter
|
|
43
43
|
def populate_with_mtu_and_mac!(interfaces)
|
44
44
|
output = Facter::Core::Execution.execute('netstat -in', logger: log)
|
45
45
|
output.each_line do |line|
|
46
|
-
next if
|
46
|
+
next if /Name\s/.match?(line)
|
47
47
|
|
48
48
|
info = line.split("\s")
|
49
49
|
interface_name = info[0]
|
@@ -50,8 +50,8 @@ module Facter
|
|
50
50
|
}
|
51
51
|
mount = info_hash['MOUNT POINT']
|
52
52
|
label = info_hash['LABEL']
|
53
|
-
part_info[:mount] = mount unless %r{N/A}
|
54
|
-
part_info[:label] = label.strip unless /None
|
53
|
+
part_info[:mount] = mount unless %r{N/A}.match?(mount)
|
54
|
+
part_info[:label] = label.strip unless /None/.match?(label)
|
55
55
|
part_info
|
56
56
|
end
|
57
57
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../../../facter/resolvers/bsd/processors'
|
4
4
|
|
5
5
|
module Facter
|
6
6
|
module Resolvers
|
@@ -17,7 +17,7 @@ module Facter
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def collect_processors_info(fact_name)
|
20
|
-
|
20
|
+
require_relative '../../../facter/resolvers/freebsd/ffi/ffi_helper'
|
21
21
|
|
22
22
|
count = logical_count
|
23
23
|
model = processors_model
|
@@ -40,7 +40,7 @@ module Facter
|
|
40
40
|
output = Socket.gethostname || ''
|
41
41
|
if output.empty? || output['0.0.0.0']
|
42
42
|
begin
|
43
|
-
|
43
|
+
require_relative '../../../facter/util/resolvers/ffi/hostname'
|
44
44
|
|
45
45
|
output = Facter::Util::Resolvers::Ffi::Hostname.getffihostname
|
46
46
|
rescue LoadError => e
|
@@ -76,7 +76,7 @@ module Facter
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def retrieve_fqdn_for_host_with_ffi(host)
|
79
|
-
|
79
|
+
require_relative '../../../facter/util/resolvers/ffi/hostname'
|
80
80
|
|
81
81
|
fqdn = Facter::Util::Resolvers::Ffi::Hostname.getffiaddrinfo(host)
|
82
82
|
log.debug("FFI getaddrinfo was called and it retrieved: #{fqdn}")
|
@@ -13,7 +13,7 @@ module Facter
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def read_load_averages(fact_name)
|
16
|
-
|
16
|
+
require_relative '../../facter/util/resolvers/ffi/load_averages'
|
17
17
|
|
18
18
|
log.debug('loading cpu load averages')
|
19
19
|
@fact_list[:load_averages] = %w[1m 5m 15m].zip(Facter::Util::Resolvers::Ffi::LoadAverages
|
@@ -26,7 +26,7 @@ module Facter
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def retrieve_vm(output)
|
29
|
-
output.each_line { |line| REGEX_VALUES.each { |key, value| return value if
|
29
|
+
output.each_line { |line| REGEX_VALUES.each { |key, value| return value if /#{key}/.match?(line) } }
|
30
30
|
|
31
31
|
nil
|
32
32
|
end
|
@@ -71,7 +71,7 @@ module Facter
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def extract_dhcp(interface_name, raw_data, parsed_interface_data)
|
74
|
-
return unless
|
74
|
+
return unless /status:\s+active/.match?(raw_data)
|
75
75
|
|
76
76
|
result = Facter::Core::Execution.execute("ipconfig getoption #{interface_name} " \
|
77
77
|
'server_identifier', logger: log)
|
@@ -63,13 +63,13 @@ module Facter
|
|
63
63
|
def process_version_id
|
64
64
|
return unless @fact_list[:version_id]
|
65
65
|
|
66
|
-
@fact_list[:version_id] = "#{@fact_list[:version_id]}.0" unless @fact_list[:version_id]
|
66
|
+
@fact_list[:version_id] = "#{@fact_list[:version_id]}.0" unless /\./.match?(@fact_list[:version_id])
|
67
67
|
end
|
68
68
|
|
69
69
|
def process_id
|
70
70
|
return unless @fact_list[:id]
|
71
71
|
|
72
|
-
@fact_list[:id] = 'opensuse' if @fact_list[:id]
|
72
|
+
@fact_list[:id] = 'opensuse' if /opensuse/i.match?(@fact_list[:id])
|
73
73
|
end
|
74
74
|
|
75
75
|
def process_name
|
@@ -26,7 +26,7 @@ module Facter
|
|
26
26
|
mountpoint = ''
|
27
27
|
|
28
28
|
output.each_line do |line|
|
29
|
-
next unless
|
29
|
+
next unless /selinuxfs/.match?(line)
|
30
30
|
|
31
31
|
mountpoint = line.split("\s")[1]
|
32
32
|
break
|
@@ -54,8 +54,8 @@ module Facter
|
|
54
54
|
file_lines = Facter::Util::FileHelper.safe_readlines('/etc/selinux/config')
|
55
55
|
|
56
56
|
file_lines.map do |line|
|
57
|
-
@fact_list[:config_mode] = line.split('=').last.strip if
|
58
|
-
@fact_list[:config_policy] = line.split('=').last.strip if
|
57
|
+
@fact_list[:config_mode] = line.split('=').last.strip if /^SELINUX=/.match?(line)
|
58
|
+
@fact_list[:config_policy] = line.split('=').last.strip if /^SELINUXTYPE=/.match?(line)
|
59
59
|
end
|
60
60
|
|
61
61
|
!file_lines.empty? ? true : false
|
@@ -18,7 +18,7 @@ module Facter
|
|
18
18
|
|
19
19
|
file_content = Facter::Core::Execution.execute('/usr/sbin/sysdef', logger: log)
|
20
20
|
files = file_content.split("\n").map do |line|
|
21
|
-
line.split('/').last if
|
21
|
+
line.split('/').last if /^fs\.*/.match?(line)
|
22
22
|
end
|
23
23
|
|
24
24
|
@fact_list[:file_systems] = files.compact.sort.join(',')
|
@@ -28,9 +28,9 @@ module Facter
|
|
28
28
|
return unless xen_info
|
29
29
|
|
30
30
|
xen_info = xen_info.to_s
|
31
|
-
return 'xenu' if
|
32
|
-
return 'xenhvm' if
|
33
|
-
return 'xen0' if
|
31
|
+
return 'xenu' if /xen-domu/.match?(xen_info)
|
32
|
+
return 'xenhvm' if /xen-hvm/.match?(xen_info)
|
33
|
+
return 'xen0' if /xen-dom0/.match?(xen_info)
|
34
34
|
end
|
35
35
|
|
36
36
|
def determine_other(output)
|
@@ -38,8 +38,8 @@ module Facter
|
|
38
38
|
other_vm = values.first
|
39
39
|
return unless other_vm
|
40
40
|
|
41
|
-
return 'zlinux' if
|
42
|
-
return retrieve_vserver if
|
41
|
+
return 'zlinux' if /ibm_systemz/.match?(other_vm)
|
42
|
+
return retrieve_vserver if /linux_vserver/.match?(other_vm)
|
43
43
|
return (values - ['redhat']).first if values.include?('redhat')
|
44
44
|
|
45
45
|
other_vm
|
@@ -53,7 +53,7 @@ module Facter
|
|
53
53
|
parts = line.split("\s")
|
54
54
|
next unless parts.size.equal?(2)
|
55
55
|
|
56
|
-
next unless parts[0]
|
56
|
+
next unless /^s_context:|^VxID:/.match?(parts[0])
|
57
57
|
return @fact_list[:vserver] = 'vserver_host' if parts[1] == '0'
|
58
58
|
|
59
59
|
return @fact_list[:vserver] = 'vserver'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative '../../../../facter/resolvers/windows/ffi/ffi'
|
4
|
+
require_relative '../../../../facter/resolvers/windows/ffi/system_info'
|
5
5
|
|
6
6
|
module HardwareFFI
|
7
7
|
extend FFI::Library
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative '../../../../facter/resolvers/windows/ffi/ffi'
|
4
|
+
require_relative '../../../../facter/resolvers/windows/ffi/os_version_info_ex'
|
5
5
|
|
6
6
|
module KernelFFI
|
7
7
|
extend FFI::Library
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative '../../../../facter/resolvers/windows/ffi/ffi'
|
4
|
+
require_relative '../../../../facter/resolvers/windows/ffi/performance_information'
|
5
5
|
|
6
6
|
module MemoryFFI
|
7
7
|
extend FFI::Library
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require_relative '../../../../facter/resolvers/windows/ffi/ffi'
|
4
|
+
require_relative '../../../../facter/resolvers/windows/ffi/network_utils'
|
5
|
+
require_relative '../../../../facter/resolvers/windows/ffi/ip_adapter_addresses_lh'
|
6
6
|
|
7
7
|
module NetworkingFFI
|
8
8
|
extend FFI::Library
|
@@ -13,7 +13,7 @@ module Facter
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def read_hardware_information(fact_name)
|
16
|
-
|
16
|
+
require_relative '../../../facter/resolvers/windows/ffi/hardware_ffi'
|
17
17
|
|
18
18
|
sys_info_ptr = FFI::MemoryPointer.new(SystemInfo.size)
|
19
19
|
HardwareFFI::GetNativeSystemInfo(sys_info_ptr)
|
@@ -16,7 +16,7 @@ module Facter
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def find_username
|
19
|
-
|
19
|
+
require_relative '../../../facter/resolvers/windows/ffi/identity_ffi'
|
20
20
|
|
21
21
|
size_ptr = FFI::MemoryPointer.new(:win32_ulong, 1)
|
22
22
|
IdentityFFI::GetUserNameExW(NAME_SAM_COMPATIBLE, FFI::Pointer::NULL, size_ptr)
|
@@ -15,7 +15,7 @@ module Facter
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def read_os_version_information(fact_name)
|
18
|
-
|
18
|
+
require_relative '../../../facter/resolvers/windows/ffi/kernel_ffi'
|
19
19
|
|
20
20
|
ver_ptr = FFI::MemoryPointer.new(OsVersionInfoEx.size)
|
21
21
|
ver = OsVersionInfoEx.new(ver_ptr)
|
@@ -15,7 +15,7 @@ module Facter
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def read_performance_information
|
18
|
-
|
18
|
+
require_relative '../../../facter/resolvers/windows/ffi/memory_ffi'
|
19
19
|
|
20
20
|
state_ptr = FFI::MemoryPointer.new(PerformanceInformation.size)
|
21
21
|
if MemoryFFI::GetPerformanceInfo(state_ptr, state_ptr.size) == FFI::WIN32FALSE
|
@@ -15,7 +15,7 @@ module Facter
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def read_network_information(fact_name)
|
18
|
-
|
18
|
+
require_relative '../../../facter/resolvers/windows/ffi/networking_ffi'
|
19
19
|
|
20
20
|
size_ptr = FFI::MemoryPointer.new(NetworkingFFI::BUFFER_LENGTH)
|
21
21
|
adapter_addresses = FFI::MemoryPointer.new(IpAdapterAddressesLh.size, NetworkingFFI::BUFFER_LENGTH)
|
@@ -42,9 +42,9 @@ module Facter
|
|
42
42
|
manufacturer = comp.Manufacturer
|
43
43
|
if comp.Model =~ /^Virtual Machine/ && manufacturer =~ /^Microsoft/
|
44
44
|
'hyperv'
|
45
|
-
elsif
|
45
|
+
elsif /^Xen/.match?(manufacturer)
|
46
46
|
'xen'
|
47
|
-
elsif
|
47
|
+
elsif /^Amazon EC2/.match?(manufacturer)
|
48
48
|
'kvm'
|
49
49
|
else
|
50
50
|
'physical'
|
data/lib/facter/resolvers/xen.rb
CHANGED
@@ -13,7 +13,7 @@ module Facter
|
|
13
13
|
description = input[:description]
|
14
14
|
kernel_version = input[:kernel_version]
|
15
15
|
|
16
|
-
if
|
16
|
+
if /10.0/.match?(version)
|
17
17
|
check_version_10_11(consumerrel, kernel_version)
|
18
18
|
else
|
19
19
|
check_version_6(version, consumerrel) || check_version_5(version, consumerrel, description) || version
|
@@ -47,7 +47,7 @@ module Facter
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def check_version_5(version, consumerrel, description)
|
50
|
-
return unless
|
50
|
+
return unless /5.2/.match?(version)
|
51
51
|
return 'XP' if consumerrel
|
52
52
|
|
53
53
|
description == 'R2' ? '2003 R2' : '2003'
|
@@ -45,7 +45,7 @@ module Facter
|
|
45
45
|
|
46
46
|
lease_files.select do |file|
|
47
47
|
content = Facter::Util::FileHelper.safe_read("#{dir}#{file}", nil)
|
48
|
-
next unless
|
48
|
+
next unless /interface.*#{interface_name}/.match?(content)
|
49
49
|
|
50
50
|
dhcp = content.match(/dhcp-server-identifier ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/)
|
51
51
|
return dhcp[1] if dhcp
|
data/lib/facter/util/utils.rb
CHANGED
@@ -14,7 +14,7 @@ module Facter
|
|
14
14
|
|
15
15
|
def self.split_user_query(user_query)
|
16
16
|
queries = user_query.split('.')
|
17
|
-
queries.map! { |query|
|
17
|
+
queries.map! { |query| /^[0-9]+$/.match?(query) ? query.to_i : query }
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.deep_stringify_keys(object)
|
data/lib/facter/version.rb
CHANGED
data/lib/facter.rb
CHANGED
@@ -3,9 +3,9 @@
|
|
3
3
|
require 'pathname'
|
4
4
|
require_relative 'util/api_debugger' if ENV['API_DEBUG']
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
require_relative 'facter/version'
|
7
|
+
require_relative 'facter/framework/core/file_loader'
|
8
|
+
require_relative 'facter/framework/core/options/options_validator'
|
9
9
|
|
10
10
|
module Facter
|
11
11
|
class ResolveCustomFactError < StandardError; end
|
@@ -22,7 +22,7 @@ module Facter
|
|
22
22
|
#
|
23
23
|
# @api private
|
24
24
|
def resolve(args_as_string)
|
25
|
-
|
25
|
+
require_relative 'facter/framework/cli/cli_launcher'
|
26
26
|
|
27
27
|
args = args_as_string.split(' ')
|
28
28
|
Facter::OptionsValidator.validate(args)
|
@@ -380,7 +380,14 @@ module Facter
|
|
380
380
|
resolved_facts = Facter::FactManager.instance.resolve_facts
|
381
381
|
resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
|
382
382
|
collection = Facter::FactCollection.new.build_fact_collection!(resolved_facts)
|
383
|
-
|
383
|
+
|
384
|
+
# Ensures order of keys in hash returned from Facter.to_hash() and
|
385
|
+
# Facter.resolve() is always stable
|
386
|
+
if collection.empty?
|
387
|
+
Hash[collection]
|
388
|
+
else
|
389
|
+
Hash[Facter::Utils.sort_hash_by_key(collection)]
|
390
|
+
end
|
384
391
|
end
|
385
392
|
|
386
393
|
# Check whether printing stack trace is enabled
|
@@ -510,8 +517,10 @@ module Facter
|
|
510
517
|
resolved_facts = Facter::FactManager.instance.resolve_facts(user_query)
|
511
518
|
resolved_facts.reject! { |fact| fact.type == :custom && fact.value.nil? }
|
512
519
|
|
520
|
+
# Ensures order of keys in hash returned from Facter.to_hash() and
|
521
|
+
# Facter.resolve() is always stable
|
513
522
|
if user_query.count.zero?
|
514
|
-
Facter::FactCollection.new.build_fact_collection!(resolved_facts)
|
523
|
+
Facter::Utils.sort_hash_by_key(Facter::FactCollection.new.build_fact_collection!(resolved_facts))
|
515
524
|
else
|
516
525
|
FormatterHelper.retrieve_facts_to_display_for_user_query(user_query, resolved_facts)
|
517
526
|
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.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '13.0'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 13.0.6
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '13.0'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 13.0.6
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rspec
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1085,7 +1085,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1085
1085
|
- !ruby/object:Gem::Version
|
1086
1086
|
version: '0'
|
1087
1087
|
requirements: []
|
1088
|
-
rubygems_version: 3.
|
1088
|
+
rubygems_version: 3.4.12
|
1089
1089
|
signing_key:
|
1090
1090
|
specification_version: 4
|
1091
1091
|
summary: Facter, a system inventory tool
|