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
|
@@ -17,7 +17,7 @@ module Facter
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def read_fact_from_computer_system(fact_name)
|
|
20
|
-
win = Win32Ole.new
|
|
20
|
+
win = Facter::Util::Windows::Win32Ole.new
|
|
21
21
|
computersystem = win.return_first('SELECT Name,UUID FROM Win32_ComputerSystemProduct')
|
|
22
22
|
unless computersystem
|
|
23
23
|
@log.debug 'WMI query returned no results for Win32_ComputerSystemProduct with values Name and UUID.'
|
|
@@ -23,6 +23,10 @@ module Facter
|
|
|
23
23
|
return
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
# we need to enlarge the scope of this pointer so that Ruby GC will not free the memory.
|
|
27
|
+
# If the pointer if freed, Lifreq structures will contain garbage from memory.
|
|
28
|
+
@long_living_pointer = state_ptr
|
|
29
|
+
|
|
26
30
|
PerformanceInformation.new(state_ptr)
|
|
27
31
|
end
|
|
28
32
|
|
|
@@ -26,7 +26,7 @@ module Facter
|
|
|
26
26
|
|
|
27
27
|
iterate_list(adapter_addresses)
|
|
28
28
|
|
|
29
|
-
::Resolvers::
|
|
29
|
+
Facter::Util::Resolvers::Networking.expand_main_bindings(@fact_list)
|
|
30
30
|
|
|
31
31
|
@fact_list[fact_name]
|
|
32
32
|
end
|
|
@@ -120,13 +120,13 @@ module Facter
|
|
|
120
120
|
def find_bindings(sock_addr, unicast, addr)
|
|
121
121
|
return unless [NetworkingFFI::AF_INET, NetworkingFFI::AF_INET6].include?(sock_addr[:sa_family])
|
|
122
122
|
|
|
123
|
-
::Resolvers::
|
|
123
|
+
Facter::Util::Resolvers::Networking.build_binding(addr, unicast[:OnLinkPrefixLength])
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
def find_primary_interface(sock_addr, name, addr)
|
|
127
127
|
if !@fact_list[:primary_interface] &&
|
|
128
128
|
([NetworkingFFI::AF_INET, NetworkingFFI::AF_INET6].include?(sock_addr[:sa_family]) &&
|
|
129
|
-
!::Resolvers::
|
|
129
|
+
!::Facter::Util::Resolvers::Networking.ignored_ip_address(addr))
|
|
130
130
|
@fact_list[:primary_interface] = name.to_s
|
|
131
131
|
end
|
|
132
132
|
end
|
|
@@ -18,7 +18,7 @@ module Facter
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def read_fact_from_win32_processor(fact_name)
|
|
21
|
-
win = Win32Ole.new
|
|
21
|
+
win = Facter::Util::Windows::Win32Ole.new
|
|
22
22
|
proc = win.exec_query('SELECT Name,Architecture,NumberOfLogicalProcessors FROM Win32_Processor')
|
|
23
23
|
unless proc
|
|
24
24
|
log.debug 'WMI query returned no results'\
|
|
@@ -24,11 +24,11 @@ module Facter
|
|
|
24
24
|
ssh_list = []
|
|
25
25
|
|
|
26
26
|
FILE_NAMES.each do |file_name|
|
|
27
|
-
output = Util::FileHelper.safe_read(File.join(ssh_dir, file_name))
|
|
27
|
+
output = Facter::Util::FileHelper.safe_read(File.join(ssh_dir, file_name))
|
|
28
28
|
next if output.empty?
|
|
29
29
|
|
|
30
30
|
key_type, key = output.split(' ')
|
|
31
|
-
ssh_list << ::Resolvers::
|
|
31
|
+
ssh_list << Facter::Util::Resolvers::SshHelper.create_ssh(key_type, key)
|
|
32
32
|
end
|
|
33
33
|
@fact_list[:ssh] = ssh_list.empty? ? nil : ssh_list
|
|
34
34
|
@fact_list[fact_name]
|
|
@@ -18,7 +18,7 @@ module Facter
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def substract_system_uptime_from_ole
|
|
21
|
-
win = Win32Ole.new
|
|
21
|
+
win = Facter::Util::Windows::Win32Ole.new
|
|
22
22
|
opsystem = win.return_first('SELECT LocalDateTime,LastBootUpTime FROM Win32_OperatingSystem')
|
|
23
23
|
unless opsystem
|
|
24
24
|
@log.debug 'WMI query returned no results'\
|
|
@@ -21,7 +21,7 @@ module Facter
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def read_fact_from_computer_system(fact_name)
|
|
24
|
-
win = Win32Ole.new
|
|
24
|
+
win = Facter::Util::Windows::Win32Ole.new
|
|
25
25
|
comp = win.exec_query('SELECT Manufacturer,Model,OEMStringArray FROM Win32_ComputerSystem')
|
|
26
26
|
unless comp
|
|
27
27
|
@log.debug 'WMI query returned no results for Win32_ComputerSystem with values'\
|
|
@@ -15,7 +15,7 @@ module Facter
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def read_from_ole(fact_name)
|
|
18
|
-
win = Win32Ole.new
|
|
18
|
+
win = Facter::Util::Windows::Win32Ole.new
|
|
19
19
|
op_sys = win.return_first('SELECT ProductType,OtherTypeDescription FROM Win32_OperatingSystem')
|
|
20
20
|
unless op_sys
|
|
21
21
|
@log.debug 'WMI query returned no results for Win32_OperatingSystem'\
|
data/lib/facter/resolvers/xen.rb
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Aix
|
|
6
|
+
module InfoExtractor
|
|
7
|
+
MEGABYTES_EXPONENT = 1024**2
|
|
8
|
+
GIGABYTES_EXPONENT = 1024**3
|
|
9
|
+
|
|
10
|
+
def self.extract(content, regex)
|
|
11
|
+
content = content.each_line.map do |line|
|
|
12
|
+
next unless regex =~ line
|
|
13
|
+
|
|
14
|
+
line.split(/:\s*|\s{2,}/)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
content.flatten!.reject!(&:nil?)
|
|
18
|
+
|
|
19
|
+
Hash[*content]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# CuAt (Customized Attributes) non-default attribute values
|
|
4
|
+
# CuDv (Customized Devices) the devices present on this machine
|
|
5
|
+
# PdAt (Predefined Attributes) default values for all device attributes
|
|
6
|
+
# PdDv (Predefined Devices) the list of all devices supported by this release of AIX
|
|
7
|
+
|
|
8
|
+
module Facter
|
|
9
|
+
module Util
|
|
10
|
+
module Aix
|
|
11
|
+
class ODMQuery
|
|
12
|
+
REPOS = %w[CuAt CuDv PdAt PdDv].freeze
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
@query = ''
|
|
16
|
+
@conditions = []
|
|
17
|
+
@log = Facter::Log.new(self)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def equals(field, value)
|
|
21
|
+
@conditions << "#{field}='#{value}'"
|
|
22
|
+
self
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def like(field, value)
|
|
26
|
+
@conditions << "#{field} like '#{value}'"
|
|
27
|
+
self
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def execute
|
|
31
|
+
result = nil
|
|
32
|
+
REPOS.each do |repo|
|
|
33
|
+
break if result && !result.empty?
|
|
34
|
+
|
|
35
|
+
result = Facter::Core::Execution.execute("#{query} #{repo}", logger: @log)
|
|
36
|
+
end
|
|
37
|
+
result
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def query
|
|
41
|
+
'odmget -q "' + @conditions.join(' AND ') + '"'
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -1,43 +1,47 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module ApiDebugger
|
|
6
|
+
def self.prepended(receiver) # rubocop:disable Metrics/AbcSize
|
|
7
|
+
exclude, print_caller = parse_options(ENV['API_DEBUG'])
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
receiver_methods = receiver.instance_methods - Object.methods
|
|
10
|
+
receiver_methods.each do |meth|
|
|
11
|
+
ApiDebugger.class_eval do
|
|
12
|
+
define_method(meth) do |*args|
|
|
13
|
+
method_call = super(*args)
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
unless exclude.include?(meth)
|
|
16
|
+
puts '#' * 80
|
|
17
|
+
puts "Method call: #{meth}"
|
|
18
|
+
puts "Called with: #{args.inspect}"
|
|
19
|
+
if print_caller.include?(meth)
|
|
20
|
+
puts '-' * 80
|
|
21
|
+
puts caller
|
|
22
|
+
end
|
|
23
|
+
puts '#' * 80
|
|
24
|
+
end
|
|
25
|
+
method_call
|
|
20
26
|
end
|
|
21
|
-
puts '#' * 80
|
|
22
27
|
end
|
|
23
|
-
method_call
|
|
24
28
|
end
|
|
25
29
|
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
def self.parse_options(options)
|
|
32
|
+
exclude = []
|
|
33
|
+
print_caller = []
|
|
34
|
+
|
|
35
|
+
options.split(',').each do |option|
|
|
36
|
+
if option.start_with?('-')
|
|
37
|
+
exclude << option[1..-1].to_sym
|
|
38
|
+
elsif option.start_with?('+')
|
|
39
|
+
print_caller << option[1..-1].to_sym
|
|
40
|
+
end
|
|
41
|
+
end
|
|
32
42
|
|
|
33
|
-
|
|
34
|
-
if option.start_with?('-')
|
|
35
|
-
exclude << option[1..-1].to_sym
|
|
36
|
-
elsif option.start_with?('+')
|
|
37
|
-
print_caller << option[1..-1].to_sym
|
|
43
|
+
[exclude, print_caller]
|
|
38
44
|
end
|
|
39
45
|
end
|
|
40
|
-
|
|
41
|
-
[exclude, print_caller]
|
|
42
46
|
end
|
|
43
47
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Facts
|
|
6
|
+
HYPERVISORS_HASH = { 'VMware' => 'vmware', 'VirtualBox' => 'virtualbox', 'Parallels' => 'parallels',
|
|
7
|
+
'KVM' => 'kvm', 'Virtual Machine' => 'hyperv', 'RHEV Hypervisor' => 'rhev',
|
|
8
|
+
'oVirt Node' => 'ovirt', 'HVM domU' => 'xenhvm', 'Bochs' => 'bochs', 'OpenBSD' => 'vmm',
|
|
9
|
+
'BHYVE' => 'bhyve' }.freeze
|
|
10
|
+
|
|
11
|
+
PHYSICAL_HYPERVISORS = %w[physical xen0 vmware_server vmware_workstation openvzhn vserver_host].freeze
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facter
|
|
4
|
+
module Util
|
|
5
|
+
module Facts
|
|
6
|
+
class UnitConverter
|
|
7
|
+
class << self
|
|
8
|
+
def bytes_to_mb(value_in_bytes)
|
|
9
|
+
return unless value_in_bytes
|
|
10
|
+
|
|
11
|
+
value_in_bytes = value_in_bytes.to_i
|
|
12
|
+
|
|
13
|
+
(value_in_bytes / (1024.0 * 1024.0)).round(2)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def hertz_to_human_readable(speed)
|
|
17
|
+
speed = speed.to_i
|
|
18
|
+
return if !speed || speed.zero?
|
|
19
|
+
|
|
20
|
+
prefix = { 3 => 'k', 6 => 'M', 9 => 'G', 12 => 'T' }
|
|
21
|
+
power = Math.log10(speed).floor
|
|
22
|
+
validated_speed = power.zero? ? speed.to_f : speed.fdiv(10**power)
|
|
23
|
+
format('%<displayed_speed>.2f', displayed_speed: validated_speed).to_s + ' ' + prefix[power] + 'Hz'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def bytes_to_human_readable(bytes)
|
|
27
|
+
return unless bytes
|
|
28
|
+
return bytes.to_s + ' bytes' if bytes < 1024
|
|
29
|
+
|
|
30
|
+
number, multiple = determine_exponent(bytes)
|
|
31
|
+
|
|
32
|
+
"#{pad_number(number)} #{multiple}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def pad_number(number)
|
|
38
|
+
number = number.to_s
|
|
39
|
+
number << '0' if number.split('.').last.length == 1
|
|
40
|
+
number
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def determine_exponent(bytes)
|
|
44
|
+
prefix = %w[KiB MiB GiB TiB PiB EiB]
|
|
45
|
+
exp = (Math.log2(bytes) / 10.0).floor
|
|
46
|
+
converted_number = (100.0 * (bytes / 1024.0**exp)).round / 100.0
|
|
47
|
+
|
|
48
|
+
if (converted_number - 1024.0).abs < Float::EPSILON
|
|
49
|
+
exp += 1
|
|
50
|
+
converted_number = 1.00
|
|
51
|
+
end
|
|
52
|
+
multiple = prefix[exp - 1] || 'bytes'
|
|
53
|
+
|
|
54
|
+
converted_number = bytes if multiple == 'bytes'
|
|
55
|
+
[converted_number, multiple]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Facter
|
|
6
|
+
module Util
|
|
7
|
+
module Facts
|
|
8
|
+
class UptimeParser
|
|
9
|
+
SECS_IN_A_DAY = 86_400
|
|
10
|
+
SECS_IN_AN_HOUR = 3_600
|
|
11
|
+
SECS_IN_A_MINUTE = 60
|
|
12
|
+
|
|
13
|
+
@log = Facter::Log.new(self)
|
|
14
|
+
|
|
15
|
+
class << self
|
|
16
|
+
def uptime_seconds_unix
|
|
17
|
+
uptime_proc_uptime || uptime_sysctl || uptime_executable
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def uptime_proc_uptime
|
|
23
|
+
output = Facter::Core::Execution.execute("/bin/cat #{uptime_file}", logger: @log)
|
|
24
|
+
|
|
25
|
+
output.chomp.split(' ').first.to_i unless output.empty?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def uptime_sysctl
|
|
29
|
+
output = Facter::Core::Execution.execute("sysctl -n #{uptime_sysctl_variable}", logger: @log)
|
|
30
|
+
|
|
31
|
+
compute_uptime(Time.at(output.match(/\d+/)[0].to_i)) unless output.empty?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def uptime_executable
|
|
35
|
+
output = Facter::Core::Execution.execute(uptime_executable_cmd, logger: @log)
|
|
36
|
+
|
|
37
|
+
return unless output
|
|
38
|
+
|
|
39
|
+
up = 0
|
|
40
|
+
output_calculator_methods.find { |method| up = send(method, output) }
|
|
41
|
+
up || 0
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def uptime_file
|
|
45
|
+
'/proc/uptime'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def uptime_sysctl_variable
|
|
49
|
+
'kern.boottime'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def uptime_executable_cmd
|
|
53
|
+
'uptime'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def output_calculator_methods
|
|
57
|
+
%i[
|
|
58
|
+
calculate_days_hours_minutes
|
|
59
|
+
calculate_days_hours
|
|
60
|
+
calculate_days_minutes
|
|
61
|
+
calculate_days
|
|
62
|
+
calculate_hours_minutes
|
|
63
|
+
calculate_hours
|
|
64
|
+
calculate_minutes
|
|
65
|
+
]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def compute_uptime(time)
|
|
69
|
+
(Time.now - time).to_i
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Regexp handles Solaris, AIX, HP-UX, and Tru64.
|
|
73
|
+
# 'day(?:s|\(s\))?' says maybe 'day', 'days',
|
|
74
|
+
# or 'day(s)', and don't set $2.
|
|
75
|
+
def calculate_days_hours_minutes(output)
|
|
76
|
+
return unless output =~ /(\d+) day(?:s|\(s\))?,?\s+(\d+):-?(\d+)/
|
|
77
|
+
|
|
78
|
+
SECS_IN_A_DAY * Regexp.last_match(1).to_i +
|
|
79
|
+
SECS_IN_AN_HOUR * Regexp.last_match(2).to_i +
|
|
80
|
+
SECS_IN_A_MINUTE * Regexp.last_match(3).to_i
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def calculate_days_hours(output)
|
|
84
|
+
return unless output =~ /(\d+) day(?:s|\(s\))?,\s+(\d+) hr(?:s|\(s\))?,/
|
|
85
|
+
|
|
86
|
+
SECS_IN_A_DAY * Regexp.last_match(1).to_i +
|
|
87
|
+
SECS_IN_AN_HOUR * Regexp.last_match(2).to_i
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def calculate_days_minutes(output)
|
|
91
|
+
return unless output =~ /(\d+) day(?:s|\(s\))?,\s+(\d+) min(?:s|\(s\))?,/
|
|
92
|
+
|
|
93
|
+
SECS_IN_A_DAY * Regexp.last_match(1).to_i +
|
|
94
|
+
SECS_IN_A_MINUTE * Regexp.last_match(2).to_i
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def calculate_days(output)
|
|
98
|
+
return unless output =~ /(\d+) day(?:s|\(s\))?,/
|
|
99
|
+
|
|
100
|
+
SECS_IN_A_DAY * Regexp.last_match(1).to_i
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# must anchor to 'up' to avoid matching time of day
|
|
104
|
+
# at beginning of line. Certain versions of uptime on
|
|
105
|
+
# Solaris may insert a '-' into the minutes field.
|
|
106
|
+
def calculate_hours_minutes(output)
|
|
107
|
+
return unless output =~ /up\s+(\d+):-?(\d+),/
|
|
108
|
+
|
|
109
|
+
SECS_IN_AN_HOUR * Regexp.last_match(1).to_i +
|
|
110
|
+
SECS_IN_A_MINUTE * Regexp.last_match(2).to_i
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def calculate_hours(output)
|
|
114
|
+
return unless output =~ /(\d+) hr(?:s|\(s\))?,/
|
|
115
|
+
|
|
116
|
+
SECS_IN_AN_HOUR * Regexp.last_match(1).to_i
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def calculate_minutes(output)
|
|
120
|
+
return unless output =~ /(\d+) min(?:s|\(s\))?,/
|
|
121
|
+
|
|
122
|
+
SECS_IN_A_MINUTE * Regexp.last_match(1).to_i
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|