facter 4.0.35 → 4.0.40
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/bin/facter +3 -4
- data/lib/facter.rb +163 -23
- data/lib/facter/custom_facts/core/execution/base.rb +36 -6
- data/lib/facter/custom_facts/util/directory_loader.rb +13 -3
- data/lib/facter/custom_facts/util/fact.rb +4 -1
- data/lib/facter/fact_groups.conf +140 -1
- data/lib/facter/facts/aix/disks.rb +17 -2
- data/lib/facter/facts/aix/kernel.rb +1 -1
- data/lib/facter/facts/aix/kernelmajversion.rb +1 -1
- data/lib/facter/facts/aix/kernelrelease.rb +1 -1
- data/lib/facter/facts/aix/kernelversion.rb +1 -1
- data/lib/facter/facts/aix/networking/scope6.rb +3 -1
- data/lib/facter/facts/aix/os/release.rb +1 -1
- data/lib/facter/facts/aix/scope6_interfaces.rb +0 -2
- data/lib/facter/facts/aix/serialnumber.rb +20 -0
- data/lib/facter/facts/aix/sshalgorithmkey.rb +17 -0
- data/lib/facter/facts/aix/sshfp_algorithm.rb +20 -0
- data/lib/facter/facts/debian/os/distro/release.rb +6 -1
- data/lib/facter/facts/freebsd/sshalgorithmkey.rb +17 -0
- data/lib/facter/facts/freebsd/sshfp_algorithm.rb +20 -0
- data/lib/facter/facts/linux/cloud.rb +15 -0
- data/lib/facter/facts/linux/disks.rb +20 -1
- data/lib/facter/facts/linux/dmi/board/asset_tag.rb +19 -0
- data/lib/facter/facts/linux/ec2_metadata.rb +11 -6
- data/lib/facter/facts/linux/ec2_userdata.rb +7 -4
- data/lib/facter/facts/linux/gce.rb +16 -0
- data/lib/facter/facts/linux/is_virtual.rb +1 -3
- data/lib/facter/facts/linux/networking/scope6.rb +3 -1
- data/lib/facter/facts/linux/partitions.rb +1 -1
- data/lib/facter/facts/linux/processors/speed.rb +17 -0
- data/lib/facter/facts/linux/scope6_interfaces.rb +1 -2
- data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/linux/xen.rb +28 -0
- data/lib/facter/facts/macosx/networking/scope6.rb +3 -1
- data/lib/facter/facts/macosx/scope6_interfaces.rb +0 -2
- data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
- data/lib/facter/facts/rhel/os/release.rb +2 -2
- data/lib/facter/facts/solaris/disks.rb +21 -2
- data/lib/facter/facts/solaris/hypervisors/ldom.rb +24 -0
- data/lib/facter/facts/solaris/hypervisors/zone.rb +39 -0
- data/lib/facter/facts/solaris/is_virtual.rb +64 -0
- data/lib/facter/facts/solaris/kernelmajversion.rb +1 -1
- data/lib/facter/facts/solaris/ldom.rb +35 -0
- data/lib/facter/facts/solaris/sshalgorithmkey.rb +17 -0
- data/lib/facter/facts/solaris/sshfp_algorithm.rb +20 -0
- data/lib/facter/facts/solaris/virtual.rb +60 -0
- data/lib/facter/facts/solaris/zones.rb +1 -1
- data/lib/facter/facts/ubuntu/lsbdistrelease.rb +23 -0
- data/lib/facter/facts/windows/ec2_metadata.rb +5 -3
- data/lib/facter/facts/windows/ec2_userdata.rb +5 -3
- data/lib/facter/facts/windows/gce.rb +16 -0
- data/lib/facter/facts/windows/networking/scope6.rb +3 -1
- data/lib/facter/facts/windows/sshalgorithmkey.rb +22 -0
- data/lib/facter/facts/windows/sshfp_algorithm.rb +25 -0
- data/lib/facter/facts_utils/facts_utils.rb +2 -0
- data/lib/facter/framework/benchmarking/timer.rb +23 -0
- data/lib/facter/framework/cli/cli.rb +86 -34
- data/lib/facter/framework/cli/cli_launcher.rb +34 -38
- data/lib/facter/framework/config/fact_groups.rb +36 -2
- data/lib/facter/framework/core/cache_manager.rb +30 -18
- data/lib/facter/framework/core/fact/internal/core_fact.rb +2 -0
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +11 -25
- data/lib/facter/framework/core/fact_filter.rb +13 -0
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +38 -12
- data/lib/facter/framework/core/fact_loaders/internal_fact_loader.rb +7 -7
- data/lib/facter/framework/core/file_loader.rb +2 -0
- data/lib/facter/framework/core/options/config_file_options.rb +5 -3
- data/lib/facter/framework/core/options/option_store.rb +30 -11
- data/lib/facter/framework/core/session_cache.rb +1 -4
- data/lib/facter/framework/formatters/legacy_fact_formatter.rb +8 -1
- data/lib/facter/framework/formatters/yaml_fact_formatter.rb +1 -1
- data/lib/facter/framework/logging/logger.rb +3 -11
- data/lib/facter/patches/sysfilesystem/sys/statvfs.rb +92 -0
- data/lib/facter/resolvers/aio_agent_version.rb +0 -1
- data/lib/facter/resolvers/aix/architecture_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/disks.rb +2 -3
- data/lib/facter/resolvers/aix/filesystem_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/hardware_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/load_averages_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/memory.rb +2 -3
- data/lib/facter/resolvers/aix/mountpoints.rb +0 -1
- data/lib/facter/resolvers/aix/networking_resolver.rb +0 -1
- data/lib/facter/resolvers/aix/nim.rb +0 -1
- data/lib/facter/resolvers/aix/os_level.rb +27 -0
- data/lib/facter/resolvers/aix/partitions.rb +2 -3
- data/lib/facter/resolvers/aix/processors.rb +0 -1
- data/lib/facter/resolvers/aix/serialnumber.rb +36 -0
- data/lib/facter/resolvers/augeas_resolver.rb +0 -1
- data/lib/facter/resolvers/base_resolver.rb +9 -4
- data/lib/facter/resolvers/bsd/processors.rb +0 -1
- data/lib/facter/resolvers/cloud.rb +39 -0
- data/lib/facter/resolvers/containers.rb +0 -1
- data/lib/facter/resolvers/debian_version.rb +0 -1
- data/lib/facter/resolvers/disk_resolver.rb +0 -1
- data/lib/facter/resolvers/dmi_decode.rb +0 -1
- data/lib/facter/resolvers/dmi_resolver.rb +4 -4
- data/lib/facter/resolvers/ec2.rb +4 -19
- data/lib/facter/resolvers/eos_release_resolver.rb +0 -1
- data/lib/facter/resolvers/facterversion_resolver.rb +0 -1
- data/lib/facter/resolvers/filesystems_resolver.rb +0 -1
- data/lib/facter/resolvers/fips_enabled_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/dmi_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/freebsd_version_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/geom_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/processors.rb +0 -1
- data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/gce.rb +53 -0
- data/lib/facter/resolvers/hostname_resolver.rb +0 -1
- data/lib/facter/resolvers/identity_resolver.rb +0 -1
- data/lib/facter/resolvers/linux/docker_uptime.rb +0 -1
- data/lib/facter/resolvers/linux/load_averages.rb +0 -1
- data/lib/facter/resolvers/load_averages.rb +0 -1
- data/lib/facter/resolvers/lpar_resolver.rb +0 -1
- data/lib/facter/resolvers/lsb_release_resolver.rb +0 -1
- data/lib/facter/resolvers/lspci.rb +0 -1
- data/lib/facter/resolvers/macosx/dmi_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/filesystems_resolver.rb +1 -6
- data/lib/facter/resolvers/macosx/load_averages_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +3 -3
- data/lib/facter/resolvers/macosx/processor_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/swap_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/system_memory_resolver.rb +0 -1
- data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +0 -1
- data/lib/facter/resolvers/memory_resolver.rb +13 -2
- data/lib/facter/resolvers/mountpoints_resolver.rb +0 -1
- data/lib/facter/resolvers/networking_linux_resolver.rb +0 -1
- data/lib/facter/resolvers/networking_resolver.rb +0 -1
- data/lib/facter/resolvers/open_vz.rb +0 -1
- data/lib/facter/resolvers/os_release_resolver.rb +0 -1
- data/lib/facter/resolvers/partitions.rb +37 -2
- data/lib/facter/resolvers/path_resolver.rb +0 -1
- data/lib/facter/resolvers/processors_resolver.rb +24 -3
- data/lib/facter/resolvers/puppet_version_resolver.rb +0 -1
- data/lib/facter/resolvers/redhat_release_resolver.rb +0 -1
- data/lib/facter/resolvers/ruby_resolver.rb +0 -1
- data/lib/facter/resolvers/selinux_resolver.rb +0 -1
- data/lib/facter/resolvers/solaris/disks.rb +0 -1
- data/lib/facter/resolvers/solaris/dmi.rb +0 -1
- data/lib/facter/resolvers/solaris/dmi_sparc.rb +0 -1
- data/lib/facter/resolvers/solaris/filesystems.rb +0 -1
- data/lib/facter/resolvers/solaris/ipaddress.rb +0 -1
- data/lib/facter/resolvers/solaris/ldom.rb +69 -0
- data/lib/facter/resolvers/solaris/memory.rb +0 -1
- data/lib/facter/resolvers/solaris/networking.rb +0 -1
- data/lib/facter/resolvers/solaris/os_release.rb +0 -1
- data/lib/facter/resolvers/solaris/processors.rb +0 -1
- data/lib/facter/resolvers/solaris/zone.rb +0 -1
- data/lib/facter/resolvers/solaris/zone_name.rb +0 -1
- data/lib/facter/resolvers/ssh_resolver.rb +0 -1
- data/lib/facter/resolvers/suse_release_resolver.rb +0 -1
- data/lib/facter/resolvers/sw_vers_resolver.rb +0 -1
- data/lib/facter/resolvers/timezone_resolver.rb +0 -1
- data/lib/facter/resolvers/uname_resolver.rb +0 -1
- data/lib/facter/resolvers/uptime_resolver.rb +0 -1
- data/lib/facter/resolvers/utils/filesystem_helper.rb +3 -1
- data/lib/facter/resolvers/utils/http.rb +68 -0
- data/lib/facter/resolvers/virt_what.rb +0 -1
- data/lib/facter/resolvers/vmware.rb +0 -1
- data/lib/facter/resolvers/windows/aio_agent_version.rb +0 -1
- data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/fips_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/hardware_architecture_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/identity_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/kernel_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/memory_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/netkvm_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/networking_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/processors_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/product_release_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/ssh.rb +0 -1
- data/lib/facter/resolvers/windows/system32_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/uptime_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/virtualization_resolver.rb +0 -1
- data/lib/facter/resolvers/windows/win_os_description_resolver.rb +0 -1
- data/lib/facter/resolvers/wpar_resolver.rb +0 -1
- data/lib/facter/resolvers/xen.rb +28 -1
- data/lib/facter/resolvers/zfs.rb +0 -1
- data/lib/facter/resolvers/zpool.rb +0 -1
- data/lib/facter/version.rb +1 -1
- metadata +31 -4
- data/lib/facter/resolvers/aix/os_level_resolver.rb +0 -26
- data/lib/facter/resolvers/os_level_resolver.rb +0 -29
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Facter
|
|
4
4
|
class FactGroups
|
|
5
|
-
attr_reader :groups, :block_list
|
|
5
|
+
attr_reader :groups, :block_list, :facts_ttls
|
|
6
6
|
|
|
7
7
|
@groups_ttls = []
|
|
8
8
|
|
|
@@ -14,6 +14,10 @@ module Facter
|
|
|
14
14
|
@groups ||= File.readable?(@groups_file_path) ? Hocon.load(@groups_file_path) : {}
|
|
15
15
|
load_groups
|
|
16
16
|
load_groups_from_options
|
|
17
|
+
load_facts_ttls
|
|
18
|
+
|
|
19
|
+
# Reverse sort facts so that children have precedence when caching. eg: os.macosx vs os
|
|
20
|
+
@facts_ttls = @facts_ttls.sort.reverse.to_h
|
|
17
21
|
end
|
|
18
22
|
|
|
19
23
|
# Breakes down blocked groups in blocked facts
|
|
@@ -31,6 +35,9 @@ module Facter
|
|
|
31
35
|
|
|
32
36
|
# Get the group name a fact is part of
|
|
33
37
|
def get_fact_group(fact_name)
|
|
38
|
+
fact = get_fact(fact_name)
|
|
39
|
+
return fact[:group] if fact
|
|
40
|
+
|
|
34
41
|
@groups.detect { |k, v| break k if Array(v).find { |f| fact_name =~ /^#{f}.*/ } }
|
|
35
42
|
end
|
|
36
43
|
|
|
@@ -41,6 +48,15 @@ module Facter
|
|
|
41
48
|
ttls_to_seconds(ttls[group_name])
|
|
42
49
|
end
|
|
43
50
|
|
|
51
|
+
def get_fact(fact_name)
|
|
52
|
+
return @facts_ttls[fact_name] if @facts_ttls[fact_name]
|
|
53
|
+
|
|
54
|
+
result = @facts_ttls.select { |name, fact| break fact if fact_name =~ /^#{name}\..*/ }
|
|
55
|
+
return nil if result == {}
|
|
56
|
+
|
|
57
|
+
result
|
|
58
|
+
end
|
|
59
|
+
|
|
44
60
|
private
|
|
45
61
|
|
|
46
62
|
def load_groups_from_options
|
|
@@ -55,10 +71,28 @@ module Facter
|
|
|
55
71
|
end
|
|
56
72
|
end
|
|
57
73
|
|
|
74
|
+
def load_facts_ttls
|
|
75
|
+
@facts_ttls ||= {}
|
|
76
|
+
return if @groups_ttls == []
|
|
77
|
+
|
|
78
|
+
@groups_ttls.reduce(:merge).each do |group, ttls|
|
|
79
|
+
ttls = ttls_to_seconds(ttls)
|
|
80
|
+
if @groups[group]
|
|
81
|
+
@groups[group].each do |fact|
|
|
82
|
+
if (@facts_ttls[fact] && @facts_ttls[fact][:ttls] < ttls) || @facts_ttls[fact].nil?
|
|
83
|
+
@facts_ttls[fact] = { ttls: ttls, group: group }
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
@facts_ttls[group] = { ttls: ttls, group: group }
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
58
92
|
def load_groups
|
|
59
93
|
config = ConfigReader.init(Options[:config])
|
|
60
94
|
@block_list = config.block_list || {}
|
|
61
|
-
@groups_ttls = config.ttls ||
|
|
95
|
+
@groups_ttls = config.ttls || []
|
|
62
96
|
@groups.merge!(config.fact_groups) if config.fact_groups
|
|
63
97
|
end
|
|
64
98
|
|
|
@@ -40,31 +40,42 @@ module Facter
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
def
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
def fact_cache_enabled?(fact_name)
|
|
44
|
+
fact = @fact_groups.get_fact(fact_name)
|
|
45
|
+
cached = if fact
|
|
46
|
+
!fact[:ttls].nil?
|
|
47
|
+
else
|
|
48
|
+
false
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
fact_group = @fact_groups.get_fact_group(fact_name)
|
|
52
|
+
delete_cache(fact_group) if fact_group && !cached
|
|
46
53
|
cached
|
|
47
54
|
end
|
|
48
55
|
|
|
49
56
|
private
|
|
50
57
|
|
|
51
58
|
def resolve_fact(searched_fact)
|
|
52
|
-
|
|
53
|
-
searched_fact.name
|
|
54
|
-
else
|
|
55
|
-
@fact_groups.get_fact_group(searched_fact.name)
|
|
56
|
-
end
|
|
59
|
+
return unless fact_cache_enabled?(searched_fact.name)
|
|
57
60
|
|
|
58
|
-
|
|
61
|
+
fact = if searched_fact.file
|
|
62
|
+
@fact_groups.get_fact(File.basename(searched_fact.file))
|
|
63
|
+
else
|
|
64
|
+
@fact_groups.get_fact(searched_fact.name)
|
|
65
|
+
end
|
|
59
66
|
|
|
60
|
-
return unless
|
|
67
|
+
return unless fact
|
|
61
68
|
|
|
62
|
-
return unless check_ttls?(
|
|
69
|
+
return unless check_ttls?(fact[:group], fact[:ttls])
|
|
63
70
|
|
|
64
|
-
|
|
71
|
+
read_fact(searched_fact, fact[:group])
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def read_fact(searched_fact, fact_group)
|
|
75
|
+
data = read_group_json(fact_group)
|
|
65
76
|
return unless data
|
|
66
77
|
|
|
67
|
-
@log.debug("loading cached values for #{
|
|
78
|
+
@log.debug("loading cached values for #{searched_fact.name} facts")
|
|
68
79
|
|
|
69
80
|
create_facts(searched_fact, data)
|
|
70
81
|
end
|
|
@@ -93,7 +104,7 @@ module Facter
|
|
|
93
104
|
end
|
|
94
105
|
return if !group_name || fact.value.nil?
|
|
95
106
|
|
|
96
|
-
return unless
|
|
107
|
+
return unless fact_cache_enabled?(fact.name)
|
|
97
108
|
|
|
98
109
|
@groups[group_name] ||= {}
|
|
99
110
|
@groups[group_name][fact.name] = fact.value
|
|
@@ -106,10 +117,12 @@ module Facter
|
|
|
106
117
|
end
|
|
107
118
|
|
|
108
119
|
@groups.each do |group_name, data|
|
|
109
|
-
next unless check_ttls?(group_name)
|
|
120
|
+
next unless check_ttls?(group_name, @fact_groups.get_group_ttls(group_name))
|
|
110
121
|
|
|
111
|
-
@log.debug("caching values for #{group_name} facts")
|
|
112
122
|
cache_file_name = File.join(@cache_dir, group_name)
|
|
123
|
+
next if File.readable?(cache_file_name)
|
|
124
|
+
|
|
125
|
+
@log.debug("caching values for #{group_name} facts")
|
|
113
126
|
File.write(cache_file_name, JSON.pretty_generate(data))
|
|
114
127
|
end
|
|
115
128
|
end
|
|
@@ -128,8 +141,7 @@ module Facter
|
|
|
128
141
|
@groups[group_name] = data
|
|
129
142
|
end
|
|
130
143
|
|
|
131
|
-
def check_ttls?(group_name)
|
|
132
|
-
ttls = @fact_groups.get_group_ttls(group_name)
|
|
144
|
+
def check_ttls?(group_name, ttls)
|
|
133
145
|
return false unless ttls
|
|
134
146
|
|
|
135
147
|
cache_file_name = File.join(@cache_dir, group_name)
|
|
@@ -6,9 +6,8 @@ module Facter
|
|
|
6
6
|
|
|
7
7
|
def resolve_facts(searched_facts)
|
|
8
8
|
internal_searched_facts = filter_internal_facts(searched_facts)
|
|
9
|
-
threads = start_threads(internal_searched_facts)
|
|
10
|
-
resolved_facts = join_threads(threads, internal_searched_facts)
|
|
11
9
|
|
|
10
|
+
resolved_facts = resolve(internal_searched_facts)
|
|
12
11
|
nil_resolved_facts = resolve_nil_facts(searched_facts)
|
|
13
12
|
|
|
14
13
|
resolved_facts.concat(nil_resolved_facts)
|
|
@@ -29,36 +28,23 @@ module Facter
|
|
|
29
28
|
resolved_facts
|
|
30
29
|
end
|
|
31
30
|
|
|
32
|
-
def
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
def resolve(searched_facts)
|
|
32
|
+
resolved_facts = []
|
|
33
|
+
|
|
35
34
|
searched_facts
|
|
36
35
|
.uniq { |searched_fact| searched_fact.fact_class.name }
|
|
37
36
|
.each do |searched_fact|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
end
|
|
37
|
+
begin
|
|
38
|
+
fact = CoreFact.new(searched_fact)
|
|
39
|
+
fact_value = nil
|
|
40
|
+
Facter::Framework::Benchmarking::Timer.measure(searched_fact.name) { fact_value = fact.create }
|
|
41
|
+
resolved_facts << fact_value unless fact_value.nil?
|
|
42
|
+
rescue StandardError => e
|
|
43
|
+
@@log.log_exception(e)
|
|
46
44
|
end
|
|
47
45
|
end
|
|
48
46
|
|
|
49
|
-
threads
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def join_threads(threads, searched_facts)
|
|
53
|
-
resolved_facts = []
|
|
54
|
-
|
|
55
|
-
threads.each do |thread|
|
|
56
|
-
thread.join
|
|
57
|
-
resolved_facts << thread.value unless thread.value.nil?
|
|
58
|
-
end
|
|
59
|
-
|
|
60
47
|
resolved_facts.flatten!
|
|
61
|
-
|
|
62
48
|
FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts)
|
|
63
49
|
end
|
|
64
50
|
end
|
|
@@ -7,6 +7,8 @@ module Facter
|
|
|
7
7
|
class FactFilter
|
|
8
8
|
def filter_facts!(searched_facts)
|
|
9
9
|
filter_legacy_facts!(searched_facts)
|
|
10
|
+
filter_blocked_legacy_facts!(searched_facts)
|
|
11
|
+
|
|
10
12
|
searched_facts.each do |fact|
|
|
11
13
|
fact.value = if fact.filter_tokens.any? && fact.value.respond_to?(:dig)
|
|
12
14
|
fact.value.dig(*fact.filter_tokens)
|
|
@@ -18,6 +20,17 @@ module Facter
|
|
|
18
20
|
|
|
19
21
|
private
|
|
20
22
|
|
|
23
|
+
# This will filter out the legacy facts that should be blocked. Because some legacy facts are just aliases
|
|
24
|
+
# to the core ones, even if they are blocked, facter will resolved them but they won't be displayed.
|
|
25
|
+
|
|
26
|
+
def filter_blocked_legacy_facts!(facts)
|
|
27
|
+
blocked_facts = Options[:blocked_facts] || []
|
|
28
|
+
|
|
29
|
+
facts.reject! do |fact|
|
|
30
|
+
blocked_facts.select { |blocked_fact| fact.name.match(/^#{blocked_fact}/) && fact.type == :legacy }.any?
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
21
34
|
def filter_legacy_facts!(resolved_facts)
|
|
22
35
|
return unless !Options[:show_legacy] && Options[:user_query].empty?
|
|
23
36
|
|
|
@@ -20,55 +20,81 @@ module Facter
|
|
|
20
20
|
|
|
21
21
|
@facts = []
|
|
22
22
|
@external_facts = []
|
|
23
|
-
load_internal_facts(options)
|
|
24
|
-
load_external_facts(options)
|
|
25
23
|
|
|
26
|
-
@
|
|
24
|
+
@internal_facts = load_internal_facts(options)
|
|
25
|
+
@external_facts = load_external_facts(options)
|
|
26
|
+
|
|
27
|
+
@facts = @internal_facts + @external_facts
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
private
|
|
30
31
|
|
|
31
32
|
def load_internal_facts(options)
|
|
32
33
|
@log.debug('Loading internal facts')
|
|
34
|
+
internal_facts = []
|
|
33
35
|
|
|
34
36
|
if options[:user_query] || options[:show_legacy]
|
|
35
37
|
# if we have a user query, then we must search in core facts and legacy facts
|
|
36
38
|
@log.debug('Loading all internal facts')
|
|
37
|
-
|
|
39
|
+
internal_facts = @internal_loader.facts
|
|
38
40
|
else
|
|
39
41
|
@log.debug('Load only core facts')
|
|
40
|
-
|
|
42
|
+
internal_facts = @internal_loader.core_facts
|
|
41
43
|
end
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
@facts.concat(@internal_facts)
|
|
45
|
+
block_facts(internal_facts, options)
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
def load_external_facts(options)
|
|
48
49
|
@log.debug('Loading external facts')
|
|
50
|
+
external_facts = []
|
|
51
|
+
|
|
49
52
|
if options[:custom_facts]
|
|
50
53
|
@log.debug('Loading custom facts')
|
|
51
|
-
|
|
54
|
+
external_facts += @external_fact_loader.custom_facts
|
|
52
55
|
end
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
external_facts = block_facts(external_facts, options)
|
|
55
58
|
|
|
56
59
|
if options[:external_facts]
|
|
57
60
|
@log.debug('Loading external facts')
|
|
58
|
-
|
|
61
|
+
external_facts += @external_fact_loader.external_facts
|
|
59
62
|
end
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
external_facts
|
|
62
65
|
end
|
|
63
66
|
|
|
64
67
|
def block_facts(facts, options)
|
|
65
68
|
blocked_facts = options[:blocked_facts] || []
|
|
66
69
|
|
|
70
|
+
reject_list_core, reject_list_legacy = construct_reject_lists(blocked_facts, facts)
|
|
71
|
+
|
|
67
72
|
facts = facts.reject do |fact|
|
|
68
|
-
|
|
73
|
+
reject_list_core.include?(fact) || reject_list_core.find do |fact_to_block|
|
|
74
|
+
fact_to_block.klass == fact.klass
|
|
75
|
+
end || reject_list_legacy.include?(fact)
|
|
69
76
|
end
|
|
70
77
|
|
|
71
78
|
facts
|
|
72
79
|
end
|
|
80
|
+
|
|
81
|
+
def construct_reject_lists(blocked_facts, facts)
|
|
82
|
+
reject_list_core = []
|
|
83
|
+
reject_list_legacy = []
|
|
84
|
+
|
|
85
|
+
blocked_facts.each do |blocked|
|
|
86
|
+
facts.each do |fact|
|
|
87
|
+
next unless fact.name =~ /^#{blocked}/
|
|
88
|
+
|
|
89
|
+
if fact.type == :core
|
|
90
|
+
reject_list_core << fact
|
|
91
|
+
else
|
|
92
|
+
reject_list_legacy << fact
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
[reject_list_core, reject_list_legacy]
|
|
98
|
+
end
|
|
73
99
|
end
|
|
74
100
|
end
|
|
@@ -30,18 +30,18 @@ module Facter
|
|
|
30
30
|
def load_for_os(operating_system)
|
|
31
31
|
# select only classes
|
|
32
32
|
classes = ClassDiscoverer.instance.discover_classes(operating_system)
|
|
33
|
-
|
|
34
33
|
classes.each do |class_name|
|
|
35
34
|
fact_name = class_name::FACT_NAME
|
|
36
|
-
|
|
37
35
|
# if fact is already loaded, skip it
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
unless @facts.any? { |fact| fact.name == fact_name }
|
|
37
|
+
type = class_name.const_defined?('TYPE') ? class_name::TYPE : :core
|
|
38
|
+
load_fact(fact_name, class_name, type)
|
|
39
|
+
end
|
|
42
40
|
next unless class_name.const_defined?('ALIASES')
|
|
43
41
|
|
|
44
|
-
[*class_name::ALIASES].each
|
|
42
|
+
[*class_name::ALIASES].each do |fact_alias|
|
|
43
|
+
load_fact(fact_alias, class_name, :legacy) unless @facts.any? { |fact| fact.name == fact_alias }
|
|
44
|
+
end
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -39,6 +39,8 @@ load_dir(['resolvers'])
|
|
|
39
39
|
load_dir(['facts_utils'])
|
|
40
40
|
load_dir(%w[framework core])
|
|
41
41
|
load_dir(['models'])
|
|
42
|
+
load_dir(%w[framework benchmarking])
|
|
43
|
+
|
|
42
44
|
load_dir(%w[framework core fact_loaders])
|
|
43
45
|
load_dir(%w[framework core fact internal])
|
|
44
46
|
load_dir(%w[framework core fact external])
|
|
@@ -46,7 +46,9 @@ module Facter
|
|
|
46
46
|
return unless file_global_conf
|
|
47
47
|
|
|
48
48
|
if Options.cli?
|
|
49
|
-
|
|
49
|
+
unless file_global_conf['no-custom-facts'].nil?
|
|
50
|
+
@options[:no_custom_facts] = file_global_conf['no-custom-facts']
|
|
51
|
+
end
|
|
50
52
|
end
|
|
51
53
|
|
|
52
54
|
@options[:custom_dir] = file_global_conf['custom-dir'] unless file_global_conf['custom-dir'].nil?
|
|
@@ -57,7 +59,7 @@ module Facter
|
|
|
57
59
|
return unless global_conf
|
|
58
60
|
|
|
59
61
|
if Options.cli?
|
|
60
|
-
@options[:
|
|
62
|
+
@options[:no_external_facts] = global_conf['no-external-facts'] unless global_conf['no-external-facts'].nil?
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
@options[:external_dir] = [global_conf['external-dir']].flatten unless global_conf['external-dir'].nil?
|
|
@@ -67,7 +69,7 @@ module Facter
|
|
|
67
69
|
def augment_ruby(global_conf)
|
|
68
70
|
return unless global_conf
|
|
69
71
|
|
|
70
|
-
@options[:
|
|
72
|
+
@options[:no_ruby] = global_conf['no-ruby'].nil? ? false : global_conf['no-ruby']
|
|
71
73
|
end
|
|
72
74
|
|
|
73
75
|
def augment_show_legacy(global_conf)
|
|
@@ -22,16 +22,17 @@ module Facter
|
|
|
22
22
|
@user_query = []
|
|
23
23
|
@block_list = {}
|
|
24
24
|
@fact_groups = {}
|
|
25
|
-
@color =
|
|
25
|
+
@color = true
|
|
26
|
+
@timing = false
|
|
26
27
|
|
|
27
28
|
class << self
|
|
28
|
-
attr_reader :debug, :verbose, :log_level, :show_legacy,
|
|
29
|
-
:custom_facts, :blocked_facts
|
|
29
|
+
attr_reader :debug, :verbose, :log_level, :show_legacy,
|
|
30
|
+
:custom_facts, :blocked_facts, :ruby, :external_facts
|
|
30
31
|
|
|
31
|
-
attr_accessor :config, :user_query, :strict, :json, :haml,
|
|
32
|
+
attr_accessor :config, :user_query, :strict, :json, :haml,
|
|
32
33
|
:cache, :yaml, :puppet, :ttls, :block, :cli, :config_file_custom_dir,
|
|
33
34
|
:config_file_external_dir, :default_external_dir, :fact_groups,
|
|
34
|
-
:block_list, :color, :trace
|
|
35
|
+
:block_list, :color, :trace, :timing
|
|
35
36
|
|
|
36
37
|
attr_writer :external_dir
|
|
37
38
|
|
|
@@ -44,16 +45,28 @@ module Facter
|
|
|
44
45
|
options
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
def
|
|
48
|
-
if bool
|
|
49
|
-
@ruby = true
|
|
50
|
-
else
|
|
48
|
+
def no_ruby=(bool)
|
|
49
|
+
if bool
|
|
51
50
|
@ruby = false
|
|
52
51
|
@custom_facts = false
|
|
53
52
|
@blocked_facts << 'ruby'
|
|
53
|
+
else
|
|
54
|
+
@ruby = true
|
|
54
55
|
end
|
|
55
56
|
end
|
|
56
57
|
|
|
58
|
+
def no_block=(bool)
|
|
59
|
+
@block = !bool
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def no_cache=(bool)
|
|
63
|
+
@cache = !bool
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def no_color=(bool)
|
|
67
|
+
@color = !bool
|
|
68
|
+
end
|
|
69
|
+
|
|
57
70
|
def external_dir
|
|
58
71
|
return fallback_external_dir if @external_dir.empty? && @external_facts
|
|
59
72
|
|
|
@@ -98,8 +111,8 @@ module Facter
|
|
|
98
111
|
end
|
|
99
112
|
end
|
|
100
113
|
|
|
101
|
-
def
|
|
102
|
-
if bool ==
|
|
114
|
+
def no_custom_facts=(bool)
|
|
115
|
+
if bool == false
|
|
103
116
|
@custom_facts = true
|
|
104
117
|
@ruby = true
|
|
105
118
|
else
|
|
@@ -107,6 +120,10 @@ module Facter
|
|
|
107
120
|
end
|
|
108
121
|
end
|
|
109
122
|
|
|
123
|
+
def no_external_facts=(bool)
|
|
124
|
+
@external_facts = !bool
|
|
125
|
+
end
|
|
126
|
+
|
|
110
127
|
def log_level=(level)
|
|
111
128
|
level = level.to_sym
|
|
112
129
|
case level
|
|
@@ -155,10 +172,12 @@ module Facter
|
|
|
155
172
|
@custom_facts = true
|
|
156
173
|
@external_dir = []
|
|
157
174
|
@default_external_dir = []
|
|
175
|
+
@config_file_external_dir = []
|
|
158
176
|
@external_facts = true
|
|
159
177
|
@blocked_facts = []
|
|
160
178
|
@fact_groups = {}
|
|
161
179
|
@block_list = {}
|
|
180
|
+
@timing = false
|
|
162
181
|
end
|
|
163
182
|
|
|
164
183
|
def fallback_external_dir
|