facter 4.4.0 → 4.4.1
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/custom_facts/core/execution/base.rb +3 -3
- data/lib/facter/custom_facts/core/execution.rb +1 -1
- data/lib/facter/facts/linux/partitions.rb +4 -0
- data/lib/facter/facts/linux/processors/isa.rb +1 -10
- data/lib/facter/facts/ol/lsbdistdescription.rb +16 -0
- data/lib/facter/facts/ol/lsbdistid.rb +16 -0
- data/lib/facter/facts/ol/os/distro/description.rb +19 -0
- data/lib/facter/facts/ol/os/distro/id.rb +19 -0
- data/lib/facter/framework/config/config_reader.rb +4 -0
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +13 -1
- data/lib/facter/framework/core/file_loader.rb +4 -1
- data/lib/facter/framework/core/options/config_file_options.rb +4 -0
- data/lib/facter/framework/core/options/options_validator.rb +9 -2
- data/lib/facter/framework/parsers/query_parser.rb +2 -1
- data/lib/facter/resolvers/aix/networking.rb +4 -2
- data/lib/facter/resolvers/freebsd/swap_memory.rb +1 -1
- data/lib/facter/resolvers/gce.rb +9 -0
- data/lib/facter/resolvers/macosx/swap_memory.rb +1 -1
- data/lib/facter/resolvers/os_release.rb +1 -1
- data/lib/facter/resolvers/solaris/ffi/functions.rb +5 -3
- data/lib/facter/resolvers/solaris/mountpoints.rb +1 -1
- data/lib/facter/util/api_debugger.rb +1 -1
- data/lib/facter/util/resolvers/ffi/hostname.rb +1 -1
- data/lib/facter/version.rb +1 -1
- metadata +6 -3
- data/lib/facter/facts/windows/augeas/version.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74662429c9115d4eb8feca42d49031fa3be3ff42c200a8c6ee58c664f8afa9da
|
4
|
+
data.tar.gz: e1c21ea94af446c6700c27db8c24f150671f7ee8410b8e070436e709ff85fc87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a1a2529c0fe5df5da517bbcc8b76b2a53c5c138af5d83ebf8dc25b051d28861816ed4b8ab6c1e167ec4c6bcef50df7d68a34abd22f04442f44eaebd499f3bef
|
7
|
+
data.tar.gz: 6c31e966940c2d1a525c5fb1f416b5af15e2b8c57516c92eab6e74be361d198bd6494e26b85316758e7e42ff1eecc6fc3480c3f718b8de2e7d452bcde39911f0
|
@@ -8,7 +8,7 @@ module Facter
|
|
8
8
|
class Base
|
9
9
|
STDERR_MESSAGE = 'Command %s completed with the following stderr message: %s'
|
10
10
|
VALID_OPTIONS = %i[on_fail expand logger timeout].freeze
|
11
|
-
|
11
|
+
DEFAULT_EXECUTION_TIMEOUT = 300
|
12
12
|
def initialize
|
13
13
|
@log = Log.new(self)
|
14
14
|
end
|
@@ -65,7 +65,7 @@ module Facter
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def execute_command(command, on_fail = nil, logger = nil, timeout = nil)
|
68
|
-
timeout ||=
|
68
|
+
timeout ||= DEFAULT_EXECUTION_TIMEOUT
|
69
69
|
begin
|
70
70
|
# Set LC_ALL and LANG to force i18n to C for the duration of this exec;
|
71
71
|
# this ensures that any code that parses the
|
@@ -98,7 +98,7 @@ module Facter
|
|
98
98
|
message = "Failed while executing '#{command}': #{e.message}"
|
99
99
|
if logger
|
100
100
|
@log.debug(message)
|
101
|
-
return ''
|
101
|
+
return +''
|
102
102
|
end
|
103
103
|
|
104
104
|
return on_fail unless on_fail == :raise
|
@@ -131,7 +131,7 @@ module Facter
|
|
131
131
|
#
|
132
132
|
# @param on_fail[Object] How to behave when the command could
|
133
133
|
# not be run. Specifying :raise will raise an error, anything else will
|
134
|
-
# return that object on failure. Default is
|
134
|
+
# return that object on failure. Default is to not raise.
|
135
135
|
# @param logger Optional logger used to log the command's stderr.
|
136
136
|
# @param timeout Optional time out for the specified command. If no timeout is passed,
|
137
137
|
# a default of 300 seconds is used.
|
@@ -11,6 +11,10 @@ module Facts
|
|
11
11
|
|
12
12
|
def partitions
|
13
13
|
parts = Facter::Resolvers::Partitions.resolve(:partitions)
|
14
|
+
# We should exit early if we are running on a node with no partitions
|
15
|
+
# (e.g. a diskless, netbooted VM)
|
16
|
+
return nil unless parts
|
17
|
+
|
14
18
|
mountpoints = Facter::Resolvers::Mountpoints.resolve(:mountpoints)
|
15
19
|
return parts unless mountpoints
|
16
20
|
|
@@ -9,16 +9,7 @@ module Facts
|
|
9
9
|
|
10
10
|
def call_the_resolver
|
11
11
|
fact_value = Facter::Resolvers::Uname.resolve(:processor)
|
12
|
-
|
13
|
-
|
14
|
-
[Facter::ResolvedFact.new(FACT_NAME, isa), Facter::ResolvedFact.new(ALIASES, isa, :legacy)]
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def get_isa(fact_value)
|
20
|
-
value_split = fact_value.split('.')
|
21
|
-
value_split.last
|
12
|
+
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
22
13
|
end
|
23
14
|
end
|
24
15
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facts
|
4
|
+
module Ol
|
5
|
+
class Lsbdistdescription
|
6
|
+
FACT_NAME = 'lsbdistdescription'
|
7
|
+
TYPE = :legacy
|
8
|
+
|
9
|
+
def call_the_resolver
|
10
|
+
fact_value = Facter::Resolvers::LsbRelease.resolve(:description)
|
11
|
+
|
12
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facts
|
4
|
+
module Ol
|
5
|
+
class Lsbdistid
|
6
|
+
FACT_NAME = 'lsbdistid'
|
7
|
+
TYPE = :legacy
|
8
|
+
|
9
|
+
def call_the_resolver
|
10
|
+
fact_value = Facter::Resolvers::LsbRelease.resolve(:distributor_id)
|
11
|
+
|
12
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facts
|
4
|
+
module Ol
|
5
|
+
module Os
|
6
|
+
module Distro
|
7
|
+
class Description
|
8
|
+
FACT_NAME = 'os.distro.description'
|
9
|
+
|
10
|
+
def call_the_resolver
|
11
|
+
fact_value = Facter::Resolvers::OsRelease.resolve(:pretty_name)
|
12
|
+
|
13
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Facts
|
4
|
+
module Ol
|
5
|
+
module Os
|
6
|
+
module Distro
|
7
|
+
class Id
|
8
|
+
FACT_NAME = 'os.distro.id'
|
9
|
+
|
10
|
+
def call_the_resolver
|
11
|
+
fact_value = Facter::Resolvers::OsRelease.resolve(:id).capitalize
|
12
|
+
|
13
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -21,7 +21,19 @@ module Facter
|
|
21
21
|
def load(user_query, options)
|
22
22
|
@internal_facts = load_internal_facts(user_query, options)
|
23
23
|
@custom_facts = load_custom_facts(options)
|
24
|
-
|
24
|
+
if ENV['INSIDE_FACTER']
|
25
|
+
@log.debug('INSIDE_FACTER env var detected, not loading external facts to prevent recursion')
|
26
|
+
if options[:external_facts]
|
27
|
+
@log.warn('Recursion detected, skipping external facts. Silence this warning by adding --no-external-facts')
|
28
|
+
end
|
29
|
+
else
|
30
|
+
begin
|
31
|
+
ENV['INSIDE_FACTER'] = 'true'
|
32
|
+
@external_facts = load_external_facts(options)
|
33
|
+
ensure
|
34
|
+
ENV.delete('INSIDE_FACTER')
|
35
|
+
end
|
36
|
+
end
|
25
37
|
|
26
38
|
filter_env_facts
|
27
39
|
|
@@ -642,6 +642,10 @@ os_hierarchy.each do |os|
|
|
642
642
|
|
643
643
|
when 'ol'
|
644
644
|
require_relative '../../facts/ol/os/release.rb'
|
645
|
+
require_relative '../../facts/ol/lsbdistdescription.rb'
|
646
|
+
require_relative '../../facts/ol/lsbdistid.rb'
|
647
|
+
require_relative '../../facts/ol/os/distro/description.rb'
|
648
|
+
require_relative '../../facts/ol/os/distro/id.rb'
|
645
649
|
|
646
650
|
when 'openwrt'
|
647
651
|
require_relative '../../facts/openwrt/os/release.rb'
|
@@ -802,7 +806,6 @@ os_hierarchy.each do |os|
|
|
802
806
|
require_relative '../../util/windows/win32ole.rb'
|
803
807
|
|
804
808
|
require_relative '../../facts/windows/aio_agent_version.rb'
|
805
|
-
require_relative '../../facts/windows/augeas/version.rb'
|
806
809
|
require_relative '../../facts/windows/az_metadata.rb'
|
807
810
|
require_relative '../../facts/windows/cloud/provider.rb'
|
808
811
|
require_relative '../../facts/windows/dhcp_servers.rb'
|
@@ -55,8 +55,15 @@ module Facter
|
|
55
55
|
no_custom_facts = !options[:custom_facts]
|
56
56
|
puppet = options[:puppet]
|
57
57
|
custom_dir = options[:custom_dir].nil? ? false : options[:custom_dir].any?
|
58
|
-
|
59
|
-
|
58
|
+
default_external_dir = Facter::OptionStore.default_external_dir
|
59
|
+
# --puppet/-p option adds an external directory and is not an explicitly
|
60
|
+
# set external_dir from cli or config file
|
61
|
+
default_external_dir += [Puppet[:pluginfactdest]] if puppet && const_defined?('Puppet')
|
62
|
+
external_dir = if options[:external_dir].nil? || options[:external_dir].none?
|
63
|
+
false
|
64
|
+
else
|
65
|
+
options[:external_dir] != default_external_dir
|
66
|
+
end
|
60
67
|
[
|
61
68
|
{ 'no-ruby' => no_ruby, 'custom-dir' => custom_dir },
|
62
69
|
{ 'no-external-facts' => !options[:external_facts], 'external-dir' => external_dir },
|
@@ -85,7 +85,8 @@ module Facter
|
|
85
85
|
|
86
86
|
return false if fact_with_wildcard && !query_fact.match("^#{fact_name}$")
|
87
87
|
|
88
|
-
|
88
|
+
# Must escape metacharacters (like dots) to ensure the correct fact is found
|
89
|
+
return false unless fact_with_wildcard || fact_name.match("^#{Regexp.escape(processed_equery_fact)}($|\\.)")
|
89
90
|
|
90
91
|
true
|
91
92
|
end
|
@@ -48,8 +48,10 @@ module Facter
|
|
48
48
|
info = line.split("\s")
|
49
49
|
interface_name = info[0]
|
50
50
|
mac = info[3][/^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/]
|
51
|
-
interfaces[interface_name]
|
52
|
-
|
51
|
+
if interfaces[interface_name]
|
52
|
+
interfaces[interface_name][:mtu] = info[1].to_i
|
53
|
+
interfaces[interface_name][:mac] = format_mac_address(mac) if mac
|
54
|
+
end
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
@@ -13,7 +13,7 @@ module Facter
|
|
13
13
|
@fact_list.fetch(fact_name) { read_swap_memory(fact_name) }
|
14
14
|
end
|
15
15
|
|
16
|
-
def read_swap_memory(fact_name)
|
16
|
+
def read_swap_memory(fact_name)
|
17
17
|
output = Facter::Core::Execution.execute('swapinfo -k', logger: log)
|
18
18
|
data = output.split("\n")[1..-1].map { |line| line.split(/\s+/) }
|
19
19
|
|
data/lib/facter/resolvers/gce.rb
CHANGED
@@ -39,6 +39,15 @@ module Facter
|
|
39
39
|
instance_data = gce_data['instance']
|
40
40
|
return if instance_data.nil? || instance_data.empty?
|
41
41
|
|
42
|
+
# See https://cloud.google.com/compute/docs/metadata for information about these values
|
43
|
+
%w[sshKeys ssh-keys].each do |name|
|
44
|
+
keys = gce_data.dig('project', 'attributes', name)
|
45
|
+
gce_data['project']['attributes'][name] = keys.strip.split("\n") if keys
|
46
|
+
|
47
|
+
keys = instance_data.dig('attributes', name)
|
48
|
+
instance_data['attributes'][name] = keys.strip.split("\n") if keys
|
49
|
+
end
|
50
|
+
|
42
51
|
%w[image machineType zone].each do |key|
|
43
52
|
instance_data[key] = instance_data[key].split('/').last if instance_data[key]
|
44
53
|
end
|
@@ -13,7 +13,7 @@ module Facter
|
|
13
13
|
@fact_list.fetch(fact_name) { read_swap_memory(fact_name) }
|
14
14
|
end
|
15
15
|
|
16
|
-
def read_swap_memory(fact_name)
|
16
|
+
def read_swap_memory(fact_name)
|
17
17
|
output = Facter::Core::Execution.execute('sysctl -n vm.swapusage', logger: log)
|
18
18
|
data = output.match(/^total = ([\d.]+)M used = ([\d.]+)M free = ([\d.]+)M (\(encrypted\))$/)
|
19
19
|
|
@@ -15,9 +15,11 @@ module Facter
|
|
15
15
|
|
16
16
|
def self.ioctl(call_const, pointer, address_family = AF_INET)
|
17
17
|
fd = Ioctl.open_socket(address_family, SOCK_DGRAM, 0)
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
begin
|
19
|
+
ioctl_base(fd, call_const, pointer)
|
20
|
+
ensure
|
21
|
+
Ioctl.close_socket(fd, 2)
|
22
|
+
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Facter
|
4
4
|
module Util
|
5
5
|
module ApiDebugger
|
6
|
-
def self.prepended(receiver)
|
6
|
+
def self.prepended(receiver)
|
7
7
|
exclude, print_caller = parse_options(ENV['API_DEBUG'])
|
8
8
|
|
9
9
|
receiver_methods = receiver.instance_methods - Object.methods
|
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.
|
4
|
+
version: 4.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -649,6 +649,10 @@ files:
|
|
649
649
|
- lib/facter/facts/mariner/os/release.rb
|
650
650
|
- lib/facter/facts/meego/os/release.rb
|
651
651
|
- lib/facter/facts/oel/os/release.rb
|
652
|
+
- lib/facter/facts/ol/lsbdistdescription.rb
|
653
|
+
- lib/facter/facts/ol/lsbdistid.rb
|
654
|
+
- lib/facter/facts/ol/os/distro/description.rb
|
655
|
+
- lib/facter/facts/ol/os/distro/id.rb
|
652
656
|
- lib/facter/facts/ol/os/release.rb
|
653
657
|
- lib/facter/facts/openwrt/os/release.rb
|
654
658
|
- lib/facter/facts/ovs/os/release.rb
|
@@ -776,7 +780,6 @@ files:
|
|
776
780
|
- lib/facter/facts/ubuntu/os/distro/release.rb
|
777
781
|
- lib/facter/facts/ubuntu/os/release.rb
|
778
782
|
- lib/facter/facts/windows/aio_agent_version.rb
|
779
|
-
- lib/facter/facts/windows/augeas/version.rb
|
780
783
|
- lib/facter/facts/windows/az_metadata.rb
|
781
784
|
- lib/facter/facts/windows/cloud/provider.rb
|
782
785
|
- lib/facter/facts/windows/dhcp_servers.rb
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Facts
|
4
|
-
module Windows
|
5
|
-
module Augeas
|
6
|
-
class Version
|
7
|
-
FACT_NAME = 'augeas.version'
|
8
|
-
ALIASES = 'augeasversion'
|
9
|
-
|
10
|
-
def call_the_resolver
|
11
|
-
fact_value = Facter::Resolvers::Augeas.resolve(:augeas_version)
|
12
|
-
|
13
|
-
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
|
14
|
-
Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|