facter 4.1.1 → 4.2.0
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/lib/facter.rb +1 -1
- data/lib/facter/config.rb +2 -0
- data/lib/facter/custom_facts/core/execution/posix.rb +2 -2
- data/lib/facter/custom_facts/core/execution/windows.rb +1 -1
- data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
- data/lib/facter/custom_facts/util/windows_root.rb +2 -1
- data/lib/facter/facts/freebsd/is_virtual.rb +1 -5
- data/lib/facter/facts/freebsd/virtual.rb +1 -2
- data/lib/facter/facts/linux/az_metadata.rb +1 -5
- data/lib/facter/facts/linux/cloud/provider.rb +1 -5
- data/lib/facter/facts/linux/ec2_metadata.rb +1 -5
- data/lib/facter/facts/linux/ec2_userdata.rb +1 -5
- data/lib/facter/facts/linux/hypervisors/xen.rb +1 -2
- data/lib/facter/facts/linux/is_virtual.rb +1 -5
- data/lib/facter/facts/linux/virtual.rb +1 -2
- data/lib/facter/facts/macosx/os/macosx/version.rb +6 -3
- data/lib/facter/facts/windows/az_metadata.rb +1 -1
- data/lib/facter/facts/windows/cloud/provider.rb +1 -1
- data/lib/facter/facts/windows/ec2_metadata.rb +1 -1
- data/lib/facter/facts/windows/ec2_userdata.rb +1 -1
- data/lib/facter/facts/windows/gce.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/hyperv.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/kvm.rb +2 -1
- data/lib/facter/facts/windows/hypervisors/virtualbox.rb +2 -2
- data/lib/facter/facts/windows/hypervisors/vmware.rb +1 -1
- data/lib/facter/facts/windows/hypervisors/xen.rb +3 -1
- data/lib/facter/facts/windows/is_virtual.rb +15 -0
- data/lib/facter/facts/windows/virtual.rb +15 -0
- data/lib/facter/framework/core/cache_manager.rb +2 -2
- data/lib/facter/framework/core/fact/external/external_fact_manager.rb +0 -1
- data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +41 -39
- data/lib/facter/framework/core/fact_filter.rb +4 -14
- data/lib/facter/framework/core/file_loader.rb +1 -1
- data/lib/facter/framework/parsers/query_parser.rb +5 -12
- data/lib/facter/models/fact_collection.rb +20 -3
- data/lib/facter/models/resolved_fact.rb +2 -3
- data/lib/facter/models/searched_fact.rb +2 -3
- data/lib/facter/resolvers/linux/networking.rb +18 -0
- data/lib/facter/resolvers/mountpoints.rb +16 -8
- data/lib/facter/resolvers/partitions.rb +1 -1
- data/lib/facter/resolvers/ruby.rb +1 -1
- data/lib/facter/resolvers/windows/ffi/identity_ffi.rb +5 -0
- data/lib/facter/resolvers/windows/identity.rb +1 -6
- data/lib/facter/resolvers/windows/virtualization.rb +46 -44
- data/lib/facter/resolvers/xen.rb +6 -1
- data/lib/facter/util/facts/posix/virtual_detector.rb +74 -0
- data/lib/facter/util/linux/if_inet6.rb +73 -0
- data/lib/facter/version.rb +1 -1
- metadata +26 -9
- data/lib/facter/facts/windows/virtualization/is_virtual.rb +0 -17
- data/lib/facter/facts/windows/virtualization/virtual.rb +0 -17
- data/lib/facter/framework/core/fact_augmenter.rb +0 -54
- data/lib/facter/util/facts/virtual_detector.rb +0 -83
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ipaddr'
|
4
|
+
|
5
|
+
module Facter
|
6
|
+
module Util
|
7
|
+
module Linux
|
8
|
+
class IfInet6
|
9
|
+
class << self
|
10
|
+
IFA_FLAGS = {
|
11
|
+
'temporary' => 0x01,
|
12
|
+
'noad' => 0x02,
|
13
|
+
'optimistic' => 0x04,
|
14
|
+
'dadfailed' => 0x08,
|
15
|
+
'homeaddress' => 0x10,
|
16
|
+
'deprecated' => 0x20,
|
17
|
+
'tentative' => 0x40,
|
18
|
+
'permanent' => 0x80
|
19
|
+
# /proc/net/if_inet6 only supports the old 8bit flags
|
20
|
+
# I have been unable to find a simple solution to accesses
|
21
|
+
# the full 32bit flags. netlink is all I can could find but
|
22
|
+
# that will likely be ugly
|
23
|
+
# 'managetempaddr' => 0x100,
|
24
|
+
# 'noprefixroute' => 0x200,
|
25
|
+
# 'mcautojoin' => 0x400,
|
26
|
+
# 'stableprivacy' => 0x800
|
27
|
+
}.freeze
|
28
|
+
|
29
|
+
def read_flags
|
30
|
+
return read_flags_from_proc if File.exist?('/proc/net/if_inet6')
|
31
|
+
|
32
|
+
{}
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def read_flags_from_proc
|
38
|
+
flags = init_flags
|
39
|
+
Facter::Util::FileHelper.safe_read('/proc/net/if_inet6', nil).each_line do |line|
|
40
|
+
iface = line.split
|
41
|
+
next unless iface.size == 6
|
42
|
+
|
43
|
+
ip = parse_ip(iface[0])
|
44
|
+
flags[iface[5]][ip] = parse_ifa_flags(iface[4])
|
45
|
+
end
|
46
|
+
flags
|
47
|
+
end
|
48
|
+
|
49
|
+
def init_flags
|
50
|
+
Hash.new { |h1, k1| h1[k1] = Hash.new { |h2, k2| h2[k2] = [] } }
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_ifa_flags(flag)
|
54
|
+
flag = flag.hex
|
55
|
+
flags = []
|
56
|
+
IFA_FLAGS.each_pair do |name, value|
|
57
|
+
next if (flag & value).zero?
|
58
|
+
|
59
|
+
flags << name
|
60
|
+
end
|
61
|
+
flags
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_ip(ip)
|
65
|
+
# The ip address in if_net6 is a long string wit no colons
|
66
|
+
ip = ip.scan(/(\h{4})/).join(':')
|
67
|
+
IPAddr.new(ip).to_s
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/facter/version.rb
CHANGED
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.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.3'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.12'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.12'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: yard
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,7 +170,7 @@ dependencies:
|
|
156
170
|
- - "<"
|
157
171
|
- !ruby/object:Gem::Version
|
158
172
|
version: '2.0'
|
159
|
-
description:
|
173
|
+
description: You can prove anything with facts!
|
160
174
|
email:
|
161
175
|
- team-nw@puppet.com
|
162
176
|
executables:
|
@@ -774,6 +788,7 @@ files:
|
|
774
788
|
- lib/facter/facts/windows/interfaces.rb
|
775
789
|
- lib/facter/facts/windows/ipaddress6_interfaces.rb
|
776
790
|
- lib/facter/facts/windows/ipaddress_interfaces.rb
|
791
|
+
- lib/facter/facts/windows/is_virtual.rb
|
777
792
|
- lib/facter/facts/windows/kernel.rb
|
778
793
|
- lib/facter/facts/windows/kernelmajversion.rb
|
779
794
|
- lib/facter/facts/windows/kernelrelease.rb
|
@@ -836,8 +851,7 @@ files:
|
|
836
851
|
- lib/facter/facts/windows/system_uptime/seconds.rb
|
837
852
|
- lib/facter/facts/windows/system_uptime/uptime.rb
|
838
853
|
- lib/facter/facts/windows/timezone.rb
|
839
|
-
- lib/facter/facts/windows/
|
840
|
-
- lib/facter/facts/windows/virtualization/virtual.rb
|
854
|
+
- lib/facter/facts/windows/virtual.rb
|
841
855
|
- lib/facter/framework/benchmarking/timer.rb
|
842
856
|
- lib/facter/framework/cli/cli.rb
|
843
857
|
- lib/facter/framework/cli/cli_launcher.rb
|
@@ -847,7 +861,6 @@ files:
|
|
847
861
|
- lib/facter/framework/core/fact/external/external_fact_manager.rb
|
848
862
|
- lib/facter/framework/core/fact/internal/core_fact.rb
|
849
863
|
- lib/facter/framework/core/fact/internal/internal_fact_manager.rb
|
850
|
-
- lib/facter/framework/core/fact_augmenter.rb
|
851
864
|
- lib/facter/framework/core/fact_filter.rb
|
852
865
|
- lib/facter/framework/core/fact_loaders/class_discoverer.rb
|
853
866
|
- lib/facter/framework/core/fact_loaders/external_fact_loader.rb
|
@@ -1011,12 +1024,13 @@ files:
|
|
1011
1024
|
- lib/facter/util/aix/odm_query.rb
|
1012
1025
|
- lib/facter/util/api_debugger.rb
|
1013
1026
|
- lib/facter/util/facts/facts_utils.rb
|
1027
|
+
- lib/facter/util/facts/posix/virtual_detector.rb
|
1014
1028
|
- lib/facter/util/facts/unit_converter.rb
|
1015
1029
|
- lib/facter/util/facts/uptime_parser.rb
|
1016
|
-
- lib/facter/util/facts/virtual_detector.rb
|
1017
1030
|
- lib/facter/util/facts/windows_release_finder.rb
|
1018
1031
|
- lib/facter/util/file_helper.rb
|
1019
1032
|
- lib/facter/util/linux/dhcp.rb
|
1033
|
+
- lib/facter/util/linux/if_inet6.rb
|
1020
1034
|
- lib/facter/util/linux/routing_table.rb
|
1021
1035
|
- lib/facter/util/linux/socket_parser.rb
|
1022
1036
|
- lib/facter/util/macosx/system_profile_executor.rb
|
@@ -1045,9 +1059,12 @@ require_paths:
|
|
1045
1059
|
- lib
|
1046
1060
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1047
1061
|
requirements:
|
1048
|
-
- - "
|
1062
|
+
- - ">="
|
1049
1063
|
- !ruby/object:Gem::Version
|
1050
1064
|
version: '2.3'
|
1065
|
+
- - "<"
|
1066
|
+
- !ruby/object:Gem::Version
|
1067
|
+
version: '4.0'
|
1051
1068
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1052
1069
|
requirements:
|
1053
1070
|
- - ">="
|
@@ -1057,5 +1074,5 @@ requirements: []
|
|
1057
1074
|
rubygems_version: 3.0.8
|
1058
1075
|
signing_key:
|
1059
1076
|
specification_version: 4
|
1060
|
-
summary:
|
1077
|
+
summary: Facter, a system inventory tool
|
1061
1078
|
test_files: []
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Facts
|
4
|
-
module Windows
|
5
|
-
module Virtualization
|
6
|
-
class IsVirtual
|
7
|
-
FACT_NAME = 'is_virtual'
|
8
|
-
|
9
|
-
def call_the_resolver
|
10
|
-
fact_value = Facter::Resolvers::Virtualization.resolve(:is_virtual)
|
11
|
-
|
12
|
-
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Facts
|
4
|
-
module Windows
|
5
|
-
module Virtualization
|
6
|
-
class Virtual
|
7
|
-
FACT_NAME = 'virtual'
|
8
|
-
|
9
|
-
def call_the_resolver
|
10
|
-
fact_value = Facter::Resolvers::Virtualization.resolve(:virtual)
|
11
|
-
|
12
|
-
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Facter
|
4
|
-
module FactAugmenter
|
5
|
-
def self.augment_resolved_facts(searched_facts, resolved_facts)
|
6
|
-
augumented_resolved_facts = []
|
7
|
-
searched_facts.each do |searched_fact|
|
8
|
-
matched_facts = get_resolved_facts_for_searched_fact(searched_fact, resolved_facts)
|
9
|
-
augment_resolved_fact_for_user_query!(searched_fact, matched_facts)
|
10
|
-
augumented_resolved_facts.concat(matched_facts)
|
11
|
-
end
|
12
|
-
|
13
|
-
augumented_resolved_facts
|
14
|
-
end
|
15
|
-
|
16
|
-
private_class_method def self.get_resolved_facts_for_searched_fact(searched_fact, resolved_facts)
|
17
|
-
if searched_fact.name.include?('.*')
|
18
|
-
resolved_facts
|
19
|
-
.select { |resolved_fact| resolved_fact.name.match(searched_fact.name) }
|
20
|
-
.reject(&:user_query)
|
21
|
-
.uniq(&:name)
|
22
|
-
else
|
23
|
-
resolved_facts.select do |resolved_fact|
|
24
|
-
valid_fact(searched_fact, resolved_fact)
|
25
|
-
end.reject(&:user_query).uniq(&:name)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
private_class_method def self.augment_resolved_fact_for_user_query!(searched_fact, matched_facts)
|
30
|
-
matched_facts.each do |matched_fact|
|
31
|
-
matched_fact.user_query = searched_fact.user_query
|
32
|
-
matched_fact.filter_tokens = searched_fact.filter_tokens
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
private_class_method def self.valid_fact(searched_fact, resolved_fact)
|
37
|
-
return false unless searched_fact.name.eql?(resolved_fact.name)
|
38
|
-
|
39
|
-
if searched_fact.filter_tokens.any?
|
40
|
-
case resolved_fact.value
|
41
|
-
when Array, Hash
|
42
|
-
begin
|
43
|
-
resolved_fact.value.dig(*searched_fact.filter_tokens)
|
44
|
-
rescue TypeError
|
45
|
-
return false
|
46
|
-
end
|
47
|
-
else
|
48
|
-
return false
|
49
|
-
end
|
50
|
-
end
|
51
|
-
true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Facter
|
4
|
-
module Util
|
5
|
-
module Facts
|
6
|
-
class VirtualDetector
|
7
|
-
def initialize
|
8
|
-
@log = Facter::Log.new(self)
|
9
|
-
end
|
10
|
-
|
11
|
-
def platform
|
12
|
-
@@fact_value ||= check_docker_lxc || check_freebsd || check_gce || retrieve_from_virt_what
|
13
|
-
@@fact_value ||= check_vmware || check_open_vz || check_vserver || check_xen || check_other_facts
|
14
|
-
@@fact_value ||= check_lspci || 'physical'
|
15
|
-
|
16
|
-
@@fact_value
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def check_docker_lxc
|
22
|
-
@log.debug('Checking Docker and LXC')
|
23
|
-
Facter::Resolvers::Containers.resolve(:vm)
|
24
|
-
end
|
25
|
-
|
26
|
-
def check_gce
|
27
|
-
@log.debug('Checking GCE')
|
28
|
-
bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
|
29
|
-
'gce' if bios_vendor&.include?('Google')
|
30
|
-
end
|
31
|
-
|
32
|
-
def check_vmware
|
33
|
-
@log.debug('Checking VMware')
|
34
|
-
Facter::Resolvers::Vmware.resolve(:vm)
|
35
|
-
end
|
36
|
-
|
37
|
-
def retrieve_from_virt_what
|
38
|
-
@log.debug('Checking virtual_what')
|
39
|
-
Facter::Resolvers::VirtWhat.resolve(:vm)
|
40
|
-
end
|
41
|
-
|
42
|
-
def check_open_vz
|
43
|
-
@log.debug('Checking OpenVZ')
|
44
|
-
Facter::Resolvers::OpenVz.resolve(:vm)
|
45
|
-
end
|
46
|
-
|
47
|
-
def check_vserver
|
48
|
-
@log.debug('Checking VServer')
|
49
|
-
Facter::Resolvers::VirtWhat.resolve(:vserver)
|
50
|
-
end
|
51
|
-
|
52
|
-
def check_xen
|
53
|
-
@log.debug('Checking XEN')
|
54
|
-
Facter::Resolvers::Xen.resolve(:vm)
|
55
|
-
end
|
56
|
-
|
57
|
-
def check_freebsd
|
58
|
-
return unless Object.const_defined?('Facter::Resolvers::Freebsd::Virtual')
|
59
|
-
|
60
|
-
@log.debug('Checking if jailed')
|
61
|
-
Facter::Resolvers::Freebsd::Virtual.resolve(:vm)
|
62
|
-
end
|
63
|
-
|
64
|
-
def check_other_facts
|
65
|
-
@log.debug('Checking others')
|
66
|
-
product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
|
67
|
-
bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
|
68
|
-
return 'kvm' if bios_vendor&.include?('Amazon EC2')
|
69
|
-
return unless product_name
|
70
|
-
|
71
|
-
Facter::Util::Facts::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
|
72
|
-
|
73
|
-
nil
|
74
|
-
end
|
75
|
-
|
76
|
-
def check_lspci
|
77
|
-
@log.debug('Checking lspci')
|
78
|
-
Facter::Resolvers::Lspci.resolve(:vm)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|