facter 4.0.46 → 4.0.47
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/docs/generate.rb +32 -0
- data/lib/docs/template.erb +34 -0
- data/lib/facter.rb +38 -6
- data/lib/facter/config.rb +32 -1
- data/lib/facter/custom_facts/util/collection.rb +1 -2
- data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
- data/lib/facter/custom_facts/util/fact.rb +18 -1
- data/lib/facter/custom_facts/util/loader.rb +1 -1
- data/lib/facter/custom_facts/util/resolution.rb +1 -1
- data/lib/facter/facts/aix/interfaces.rb +1 -0
- data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
- data/lib/facter/facts/aix/memory/system/available.rb +1 -1
- data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/system/total.rb +1 -1
- data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/aix/memory/system/used.rb +1 -1
- data/lib/facter/facts/aix/processors/speed.rb +1 -1
- data/lib/facter/facts/bsd/processors/speed.rb +1 -1
- data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
- data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
- data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
- data/lib/facter/facts/freebsd/virtual.rb +22 -0
- data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
- data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
- data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
- data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
- data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
- data/lib/facter/facts/linux/interfaces.rb +1 -0
- data/lib/facter/facts/linux/is_virtual.rb +2 -2
- data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
- data/lib/facter/facts/linux/memory/system/available.rb +1 -1
- data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/system/total.rb +1 -1
- data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/linux/memory/system/used.rb +1 -1
- data/lib/facter/facts/linux/processors/speed.rb +1 -1
- data/lib/facter/facts/linux/virtual.rb +1 -1
- data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
- data/lib/facter/facts/macosx/interfaces.rb +1 -0
- data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
- data/lib/facter/facts/macosx/processors/speed.rb +1 -1
- data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
- data/lib/facter/facts/solaris/interfaces.rb +1 -0
- data/lib/facter/facts/solaris/is_virtual.rb +2 -2
- data/lib/facter/facts/solaris/ldom.rb +31 -4
- data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
- data/lib/facter/facts/solaris/processors/speed.rb +1 -1
- data/lib/facter/facts/solaris/virtual.rb +1 -1
- data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
- data/lib/facter/facts/windows/interfaces.rb +1 -0
- data/lib/facter/facts/windows/memory/system/available.rb +1 -1
- data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
- data/lib/facter/facts/windows/memory/system/total.rb +1 -1
- data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
- data/lib/facter/facts/windows/memory/system/used.rb +1 -1
- data/lib/facter/facts/windows/os/release.rb +1 -1
- data/lib/facter/framework/cli/cli.rb +1 -1
- data/lib/facter/framework/core/cache_manager.rb +1 -1
- data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -2
- data/lib/facter/framework/core/fact_loaders/fact_loader.rb +16 -0
- data/lib/facter/framework/core/fact_manager.rb +14 -2
- data/lib/facter/framework/core/file_loader.rb +6 -2
- data/lib/facter/framework/core/options/option_store.rb +2 -2
- data/lib/facter/framework/logging/logger.rb +3 -3
- data/lib/facter/models/fact_collection.rb +11 -1
- data/lib/facter/models/loaded_fact.rb +2 -1
- data/lib/facter/resolvers/aio_agent_version.rb +1 -1
- data/lib/facter/resolvers/aix/architecture_resolver.rb +3 -3
- data/lib/facter/resolvers/aix/disks.rb +4 -4
- data/lib/facter/resolvers/aix/filesystem_resolver.rb +1 -1
- data/lib/facter/resolvers/aix/hardware_resolver.rb +2 -2
- data/lib/facter/resolvers/aix/memory.rb +2 -2
- data/lib/facter/resolvers/aix/mountpoints.rb +4 -4
- data/lib/facter/resolvers/aix/networking_resolver.rb +3 -2
- data/lib/facter/resolvers/aix/partitions.rb +5 -5
- data/lib/facter/resolvers/aix/processors.rb +3 -3
- data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
- data/lib/facter/resolvers/base_resolver.rb +3 -0
- data/lib/facter/resolvers/cloud.rb +1 -1
- data/lib/facter/resolvers/containers.rb +3 -3
- data/lib/facter/resolvers/debian_version.rb +1 -1
- data/lib/facter/resolvers/disk_resolver.rb +2 -2
- data/lib/facter/resolvers/dmi_resolver.rb +1 -1
- data/lib/facter/resolvers/ec2.rb +3 -1
- data/lib/facter/resolvers/eos_release_resolver.rb +1 -1
- data/lib/facter/resolvers/filesystems_resolver.rb +1 -1
- data/lib/facter/resolvers/fips_enabled_resolver.rb +1 -1
- data/lib/facter/resolvers/freebsd/geom_resolver.rb +1 -1
- data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +3 -2
- data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +2 -1
- data/lib/facter/resolvers/freebsd/virtual_resolver.rb +45 -0
- data/lib/facter/resolvers/gce.rb +1 -1
- data/lib/facter/resolvers/hostname_resolver.rb +67 -20
- data/lib/facter/resolvers/linux/docker_uptime.rb +1 -1
- data/lib/facter/resolvers/linux/load_averages.rb +1 -1
- data/lib/facter/resolvers/load_averages.rb +3 -2
- data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +7 -7
- data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +3 -3
- data/lib/facter/resolvers/memory_resolver.rb +1 -1
- data/lib/facter/resolvers/mountpoints_resolver.rb +8 -8
- data/lib/facter/resolvers/networking_linux_resolver.rb +183 -85
- data/lib/facter/resolvers/networking_resolver.rb +8 -5
- data/lib/facter/resolvers/open_vz.rb +1 -3
- data/lib/facter/resolvers/os_release_resolver.rb +1 -1
- data/lib/facter/resolvers/partitions.rb +5 -5
- data/lib/facter/resolvers/processors_resolver.rb +2 -2
- data/lib/facter/resolvers/redhat_release_resolver.rb +1 -1
- data/lib/facter/resolvers/selinux_resolver.rb +3 -3
- data/lib/facter/resolvers/solaris/disks.rb +1 -1
- data/lib/facter/resolvers/solaris/memory.rb +2 -2
- data/lib/facter/resolvers/solaris/mountpoints.rb +11 -10
- data/lib/facter/resolvers/solaris/networking.rb +49 -41
- data/lib/facter/resolvers/solaris/os_release.rb +1 -1
- data/lib/facter/resolvers/ssh_resolver.rb +3 -2
- data/lib/facter/resolvers/suse_release_resolver.rb +1 -1
- data/lib/facter/resolvers/uptime_resolver.rb +2 -2
- data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
- data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/memory_resolver.rb +4 -0
- data/lib/facter/resolvers/windows/networking_resolver.rb +3 -3
- data/lib/facter/resolvers/windows/processors_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/ssh.rb +2 -2
- data/lib/facter/resolvers/windows/uptime_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/virtualization_resolver.rb +1 -1
- data/lib/facter/resolvers/windows/win_os_description_resolver.rb +1 -1
- data/lib/facter/resolvers/xen.rb +1 -1
- data/lib/facter/util/aix/info_extractor.rb +24 -0
- data/lib/facter/util/aix/odm_query.rb +46 -0
- data/lib/facter/util/api_debugger.rb +33 -29
- data/lib/facter/util/facts/facts_utils.rb +14 -0
- data/lib/facter/util/facts/unit_converter.rb +61 -0
- data/lib/facter/util/facts/uptime_parser.rb +128 -0
- data/lib/facter/util/facts/virtual_detector.rb +90 -0
- data/lib/facter/util/facts/windows_release_finder.rb +55 -0
- data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
- data/lib/facter/util/resolvers/aws_token.rb +37 -0
- data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
- data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
- data/lib/facter/util/resolvers/fingerprint.rb +15 -0
- data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
- data/lib/facter/util/resolvers/networking.rb +90 -0
- data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
- data/lib/facter/util/resolvers/networking/networking.rb +109 -0
- data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
- data/lib/facter/util/resolvers/ssh.rb +17 -0
- data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
- data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
- data/lib/facter/{framework/utils → util}/utils.rb +0 -0
- data/lib/facter/util/windows/win32ole.rb +30 -0
- data/lib/facter/version.rb +1 -1
- metadata +29 -41
- data/lib/facter/facts/aix/puppet_version.rb +0 -15
- data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
- data/lib/facter/facts/linux/puppet_version.rb +0 -15
- data/lib/facter/facts/macosx/puppet_version.rb +0 -15
- data/lib/facter/facts/solaris/puppet_version.rb +0 -15
- data/lib/facter/facts/windows/puppet_version.rb +0 -15
- data/lib/facter/facts_utils/facts_utils.rb +0 -12
- data/lib/facter/facts_utils/unit_converter.rb +0 -59
- data/lib/facter/facts_utils/uptime_parser.rb +0 -124
- data/lib/facter/facts_utils/virtual_detector.rb +0 -78
- data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
- data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
- data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
- data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
- data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
- data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
- data/lib/facter/resolvers/utils/networking.rb +0 -88
- data/lib/facter/resolvers/utils/ssh.rb +0 -13
- data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
- data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
|
@@ -0,0 +1,90 @@
|
|
|
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_dmi || 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
|
+
def check_docker_lxc
|
|
20
|
+
@log.debug('Checking Docker and LXC')
|
|
21
|
+
Facter::Resolvers::Containers.resolve(:vm)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def check_dmi
|
|
25
|
+
@log.debug('Checking DMI')
|
|
26
|
+
vendor = Facter::Resolvers::DmiDecode.resolve(:vendor)
|
|
27
|
+
@log.debug("dmi detected vendor: #{vendor}")
|
|
28
|
+
return 'kvm' if vendor =~ /Amazon/
|
|
29
|
+
|
|
30
|
+
'xen' if vendor =~ /Xen/
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def check_gce
|
|
34
|
+
@log.debug('Checking GCE')
|
|
35
|
+
bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
|
|
36
|
+
'gce' if bios_vendor&.include?('Google')
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def check_vmware
|
|
40
|
+
@log.debug('Checking VMware')
|
|
41
|
+
Facter::Resolvers::Vmware.resolve(:vm)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def retrieve_from_virt_what
|
|
45
|
+
@log.debug('Checking virtual_what')
|
|
46
|
+
Facter::Resolvers::VirtWhat.resolve(:vm)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def check_open_vz
|
|
50
|
+
@log.debug('Checking OpenVZ')
|
|
51
|
+
Facter::Resolvers::OpenVz.resolve(:vm)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def check_vserver
|
|
55
|
+
@log.debug('Checking VServer')
|
|
56
|
+
Facter::Resolvers::VirtWhat.resolve(:vserver)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def check_xen
|
|
60
|
+
@log.debug('Checking XEN')
|
|
61
|
+
Facter::Resolvers::Xen.resolve(:vm)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def check_freebsd
|
|
65
|
+
return unless Object.const_defined?('Facter::Resolvers::Freebsd::Virtual')
|
|
66
|
+
|
|
67
|
+
@log.debug('Checking if jailed')
|
|
68
|
+
Facter::Resolvers::Freebsd::Virtual.resolve(:vm)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def check_other_facts
|
|
72
|
+
@log.debug('Checking others')
|
|
73
|
+
product_name = Facter::Resolvers::Linux::DmiBios.resolve(:product_name)
|
|
74
|
+
bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
|
|
75
|
+
return 'kvm' if bios_vendor&.include?('Amazon EC2')
|
|
76
|
+
return unless product_name
|
|
77
|
+
|
|
78
|
+
Facter::Util::Facts::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
|
|
79
|
+
|
|
80
|
+
nil
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def check_lspci
|
|
84
|
+
@log.debug('Checking lspci')
|
|
85
|
+
Facter::Resolvers::Lspci.resolve(:vm)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Facts
|
|
6
|
+
class WindowsReleaseFinder
|
|
7
|
+
class << self
|
|
8
|
+
def find_release(input)
|
|
9
|
+
version = input[:version]
|
|
10
|
+
return unless version
|
|
11
|
+
|
|
12
|
+
consumerrel = input[:consumerrel]
|
|
13
|
+
description = input[:description]
|
|
14
|
+
kernel_version = input[:kernel_version]
|
|
15
|
+
|
|
16
|
+
if version =~ /10.0/
|
|
17
|
+
check_version_10(consumerrel, kernel_version)
|
|
18
|
+
else
|
|
19
|
+
check_version_6(version, consumerrel) || check_version_5(version, consumerrel, description) || version
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def check_version_10(consumerrel, kernel_version)
|
|
26
|
+
build_number = kernel_version[/([^.]*)$/].to_i
|
|
27
|
+
if consumerrel
|
|
28
|
+
'10'
|
|
29
|
+
elsif build_number >= 17_623
|
|
30
|
+
'2019'
|
|
31
|
+
else
|
|
32
|
+
'2016'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def check_version_6(version, consumerrel)
|
|
37
|
+
hash = {}
|
|
38
|
+
hash['6.3'] = consumerrel ? '8.1' : '2012 R2'
|
|
39
|
+
hash['6.2'] = consumerrel ? '8' : '2012'
|
|
40
|
+
hash['6.1'] = consumerrel ? '7' : '2008 R2'
|
|
41
|
+
hash['6.0'] = consumerrel ? 'Vista' : '2008'
|
|
42
|
+
hash[version]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def check_version_5(version, consumerrel, description)
|
|
46
|
+
return unless version =~ /5.2/
|
|
47
|
+
return 'XP' if consumerrel
|
|
48
|
+
|
|
49
|
+
description == 'R2' ? '2003 R2' : '2003'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Resolvers
|
|
6
|
+
module AwsToken
|
|
7
|
+
attr_reader :token
|
|
8
|
+
|
|
9
|
+
@log = Facter::Log.new(self)
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
AWS_API_TOKEN_URL = 'http://169.254.169.254/latest/api/token'
|
|
13
|
+
|
|
14
|
+
def get(lifetime = 100)
|
|
15
|
+
@expiry ||= Time.now
|
|
16
|
+
|
|
17
|
+
return @token if @token && @expiry > Time.now
|
|
18
|
+
|
|
19
|
+
@token = nil
|
|
20
|
+
@expiry = Time.now + lifetime
|
|
21
|
+
|
|
22
|
+
headers = {
|
|
23
|
+
'X-aws-ec2-metadata-token-ttl-seconds' => lifetime.to_s
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@token = Facter::Util::Resolvers::Http.put_request(AWS_API_TOKEN_URL, headers)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def reset
|
|
30
|
+
@expiry = nil
|
|
31
|
+
@token = nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Resolvers
|
|
6
|
+
module FilesystemHelper
|
|
7
|
+
MOUNT_KEYS = %i[device filesystem path options
|
|
8
|
+
available available_bytes size
|
|
9
|
+
size_bytes used used_bytes capacity].freeze
|
|
10
|
+
class << self
|
|
11
|
+
def read_mountpoints
|
|
12
|
+
# TODO: this require must be replaced with "require 'sys/filesystem'" when a new release of
|
|
13
|
+
# djberg96/sys-filesystem gem is available
|
|
14
|
+
require_relative '../../patches/sysfilesystem/sys/statvfs.rb'
|
|
15
|
+
force_utf(Sys::Filesystem.mounts)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def read_mountpoint_stats(path)
|
|
19
|
+
require 'sys/filesystem'
|
|
20
|
+
Sys::Filesystem.stat(path)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def compute_capacity(used, total)
|
|
24
|
+
if used == total
|
|
25
|
+
'100%'
|
|
26
|
+
elsif used.positive?
|
|
27
|
+
"#{format('%<value>.2f', value: (used / total.to_f * 100))}%"
|
|
28
|
+
else
|
|
29
|
+
'0%'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def force_utf(mounts)
|
|
36
|
+
mounts.each do |mount|
|
|
37
|
+
mount.name.force_encoding('UTF-8')
|
|
38
|
+
mount.mount_type.force_encoding('UTF-8')
|
|
39
|
+
mount.mount_point.force_encoding('UTF-8')
|
|
40
|
+
mount.options.force_encoding('UTF-8')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Facter
|
|
4
|
-
module
|
|
5
|
-
module
|
|
4
|
+
module Util
|
|
5
|
+
module Resolvers
|
|
6
6
|
module Http
|
|
7
7
|
@log = Facter::Log.new(self)
|
|
8
8
|
|
|
@@ -27,6 +27,10 @@ module Facter
|
|
|
27
27
|
make_request(url, headers, timeouts, 'GET')
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
def put_request(url, headers = {}, timeouts = {})
|
|
31
|
+
make_request(url, headers, timeouts, 'PUT')
|
|
32
|
+
end
|
|
33
|
+
|
|
30
34
|
private
|
|
31
35
|
|
|
32
36
|
def make_request(url, headers, timeouts, request_type)
|
|
@@ -37,8 +41,10 @@ module Facter
|
|
|
37
41
|
request = request_obj(headers, uri, request_type)
|
|
38
42
|
|
|
39
43
|
# Make the request
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
response = http.request(request)
|
|
45
|
+
response.uri = url
|
|
46
|
+
|
|
47
|
+
successful_response?(response) ? response.body : ''
|
|
42
48
|
rescue StandardError => e
|
|
43
49
|
@log.debug("Trying to connect to #{url} but got: #{e.message}")
|
|
44
50
|
''
|
|
@@ -52,14 +58,15 @@ module Facter
|
|
|
52
58
|
end
|
|
53
59
|
|
|
54
60
|
def request_obj(headers, parsed_url, request_type)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
raise StandardError("Unknown http request type: #{request_type}")
|
|
61
|
+
Module.const_get("Net::HTTP::#{request_type.capitalize}").new(parsed_url.request_uri, headers)
|
|
58
62
|
end
|
|
59
63
|
|
|
60
|
-
def
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
def successful_response?(response)
|
|
65
|
+
success = response.code.to_i.equal?(200)
|
|
66
|
+
|
|
67
|
+
@log.debug("Request to #{response.uri} failed with error code #{response.code}") unless success
|
|
68
|
+
|
|
69
|
+
success
|
|
63
70
|
end
|
|
64
71
|
end
|
|
65
72
|
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ipaddr'
|
|
4
|
+
|
|
5
|
+
module Facter
|
|
6
|
+
module Util
|
|
7
|
+
module Resolvers
|
|
8
|
+
module Networking
|
|
9
|
+
class << self
|
|
10
|
+
# Creates a hash with IP, netmask and network. Works for IPV4 and IPV6
|
|
11
|
+
# @param [String] addr The IP address
|
|
12
|
+
# @param [Integer] mask_length Number of 1 bits the netmask has
|
|
13
|
+
#
|
|
14
|
+
# @return [Hash] Hash containing ip address, netmask and network
|
|
15
|
+
def build_binding(addr, mask_length)
|
|
16
|
+
return if !addr || !mask_length
|
|
17
|
+
|
|
18
|
+
ip = IPAddr.new(addr)
|
|
19
|
+
mask_helper = ip.ipv6? ? 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' : '255.255.255.255'
|
|
20
|
+
mask = IPAddr.new(mask_helper).mask(mask_length)
|
|
21
|
+
|
|
22
|
+
{ address: addr, netmask: mask.to_s, network: ip.mask(mask_length).to_s }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def expand_main_bindings(networking_facts)
|
|
26
|
+
primary = networking_facts[:primary_interface]
|
|
27
|
+
interfaces = networking_facts[:interfaces]
|
|
28
|
+
|
|
29
|
+
expand_interfaces(interfaces) unless interfaces.nil?
|
|
30
|
+
expand_primary_interface(networking_facts, primary) unless primary.nil? || interfaces.nil?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def get_scope(ip)
|
|
34
|
+
require 'socket'
|
|
35
|
+
|
|
36
|
+
scope6 = []
|
|
37
|
+
addrinfo = Addrinfo.new(['AF_INET6', 0, nil, ip], :INET6)
|
|
38
|
+
|
|
39
|
+
scope6 << 'compat,' if IPAddr.new(ip).ipv4_compat?
|
|
40
|
+
scope6 << if addrinfo.ipv6_linklocal?
|
|
41
|
+
'link'
|
|
42
|
+
elsif addrinfo.ipv6_sitelocal?
|
|
43
|
+
'site'
|
|
44
|
+
elsif addrinfo.ipv6_loopback?
|
|
45
|
+
'host'
|
|
46
|
+
else 'global'
|
|
47
|
+
end
|
|
48
|
+
scope6.join
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def find_valid_binding(bindings)
|
|
52
|
+
bindings.each do |binding|
|
|
53
|
+
return binding unless ignored_ip_address(binding[:address])
|
|
54
|
+
end
|
|
55
|
+
bindings.empty? ? nil : bindings.first
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def ignored_ip_address(addr)
|
|
59
|
+
addr.empty? || addr.start_with?('127.', '169.254.') || addr.start_with?('fe80') || addr.eql?('::1')
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def expand_interfaces(interfaces)
|
|
65
|
+
interfaces.each_value do |values|
|
|
66
|
+
expand_binding(values, values[:bindings]) if values[:bindings]
|
|
67
|
+
expand_binding(values, values[:bindings6], false) if values[:bindings6]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def expand_primary_interface(networking_facts, primary)
|
|
72
|
+
networking_facts[:interfaces][primary].each do |key, value|
|
|
73
|
+
networking_facts[key] = value unless %i[bindings bindings6].include?(key)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def expand_binding(values, bindings, ipv4_type = true)
|
|
78
|
+
binding = find_valid_binding(bindings)
|
|
79
|
+
ip_protocol_type = ipv4_type ? '' : '6'
|
|
80
|
+
|
|
81
|
+
values["ip#{ip_protocol_type}".to_sym] = binding[:address]
|
|
82
|
+
values["netmask#{ip_protocol_type}".to_sym] = binding[:netmask]
|
|
83
|
+
values["network#{ip_protocol_type}".to_sym] = binding[:network]
|
|
84
|
+
values[:scope6] = get_scope(binding[:address]) unless ipv4_type
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Resolvers
|
|
6
|
+
module Networking
|
|
7
|
+
module Dhcp
|
|
8
|
+
class << self
|
|
9
|
+
def get(interface_name, log = nil)
|
|
10
|
+
dhcpinfo_command = Facter::Core::Execution.which('dhcpinfo') || '/sbin/dhcpinfo'
|
|
11
|
+
result = Facter::Core::Execution.execute("#{dhcpinfo_command} -i #{interface_name} ServerID", logger: log)
|
|
12
|
+
result.chomp!
|
|
13
|
+
|
|
14
|
+
result.empty? ? nil : result
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ipaddr'
|
|
4
|
+
|
|
5
|
+
module Facter
|
|
6
|
+
module Util
|
|
7
|
+
module Resolvers
|
|
8
|
+
module Networking
|
|
9
|
+
class << self
|
|
10
|
+
# Creates a hash with IP, netmask and network. Works for IPV4 and IPV6
|
|
11
|
+
# @param [String] addr The IP address
|
|
12
|
+
# @param [Integer] mask_length Number of 1 bits the netmask has
|
|
13
|
+
#
|
|
14
|
+
# @return [Hash] Hash containing ip address, netmask and network
|
|
15
|
+
def build_binding(addr, mask_length)
|
|
16
|
+
return if !addr || !mask_length
|
|
17
|
+
|
|
18
|
+
ip = IPAddr.new(addr)
|
|
19
|
+
mask_helper = nil
|
|
20
|
+
scope = nil
|
|
21
|
+
if ip.ipv6?
|
|
22
|
+
scope = get_scope(addr)
|
|
23
|
+
mask_helper = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
|
|
24
|
+
else
|
|
25
|
+
mask_helper = '255.255.255.255'
|
|
26
|
+
end
|
|
27
|
+
mask = IPAddr.new(mask_helper).mask(mask_length)
|
|
28
|
+
|
|
29
|
+
result = { address: addr, netmask: mask.to_s, network: ip.mask(mask_length).to_s }
|
|
30
|
+
result[:scope6] = scope if scope
|
|
31
|
+
result
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def expand_main_bindings(networking_facts)
|
|
35
|
+
primary = networking_facts[:primary_interface]
|
|
36
|
+
interfaces = networking_facts[:interfaces]
|
|
37
|
+
|
|
38
|
+
expand_interfaces(interfaces) unless interfaces.nil?
|
|
39
|
+
expand_primary_interface(networking_facts, primary) unless primary.nil? || interfaces.nil?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def get_scope(ip)
|
|
43
|
+
require 'socket'
|
|
44
|
+
|
|
45
|
+
scope6 = []
|
|
46
|
+
addrinfo = Addrinfo.new(['AF_INET6', 0, nil, ip], :INET6)
|
|
47
|
+
|
|
48
|
+
scope6 << 'compat,' if IPAddr.new(ip).ipv4_compat?
|
|
49
|
+
scope6 << if addrinfo.ipv6_linklocal?
|
|
50
|
+
'link'
|
|
51
|
+
elsif addrinfo.ipv6_sitelocal?
|
|
52
|
+
'site'
|
|
53
|
+
elsif addrinfo.ipv6_loopback?
|
|
54
|
+
'host'
|
|
55
|
+
else 'global'
|
|
56
|
+
end
|
|
57
|
+
scope6.join
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def find_valid_binding(bindings)
|
|
61
|
+
bindings.each do |binding|
|
|
62
|
+
return binding unless ignored_ip_address(binding[:address])
|
|
63
|
+
end
|
|
64
|
+
bindings.empty? ? nil : bindings.first
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def ignored_ip_address(addr)
|
|
68
|
+
addr.empty? || addr.start_with?('127.', '169.254.') || addr.start_with?('fe80') || addr.eql?('::1')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def calculate_mask_length(netmask)
|
|
72
|
+
ipaddr = IPAddr.new(netmask)
|
|
73
|
+
|
|
74
|
+
ipaddr.to_i.to_s(2).count('1')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def format_mac_address(address)
|
|
78
|
+
address.split('.').map { |e| format('%<mac_address>02s', mac_address: e) }.join(':').tr(' ', '0')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
|
|
83
|
+
def expand_interfaces(interfaces)
|
|
84
|
+
interfaces.each_value do |values|
|
|
85
|
+
expand_binding(values, values[:bindings]) if values[:bindings]
|
|
86
|
+
expand_binding(values, values[:bindings6], false) if values[:bindings6]
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def expand_primary_interface(networking_facts, primary)
|
|
91
|
+
networking_facts[:interfaces][primary].each do |key, value|
|
|
92
|
+
networking_facts[key] = value unless %i[bindings bindings6].include?(key)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def expand_binding(values, bindings, ipv4_type = true)
|
|
97
|
+
binding = find_valid_binding(bindings)
|
|
98
|
+
ip_protocol_type = ipv4_type ? '' : '6'
|
|
99
|
+
|
|
100
|
+
values["ip#{ip_protocol_type}".to_sym] = binding[:address]
|
|
101
|
+
values["netmask#{ip_protocol_type}".to_sym] = binding[:netmask]
|
|
102
|
+
values["network#{ip_protocol_type}".to_sym] = binding[:network]
|
|
103
|
+
values[:scope6] = get_scope(binding[:address]) unless ipv4_type
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|