facter 4.0.28 → 4.0.29
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/.rubocop_todo.yml +2 -0
- data/CHANGELOG.md +12 -0
- data/README.md +5 -5
- data/VERSION +1 -1
- data/lib/facts/aix/interfaces.rb +16 -0
- data/lib/facts/aix/ipaddress6_interfaces.rb +20 -0
- data/lib/facts/aix/ipaddress_interfaces.rb +20 -0
- data/lib/facts/aix/macaddress_interfaces.rb +20 -0
- data/lib/facts/aix/mtu_interfaces.rb +20 -0
- data/lib/facts/aix/netmask6_interfaces.rb +20 -0
- data/lib/facts/aix/netmask_interfaces.rb +20 -0
- data/lib/facts/aix/network6_interfaces.rb +20 -0
- data/lib/facts/aix/network_interfaces.rb +20 -0
- data/lib/facts/aix/networking/interfaces.rb +18 -0
- data/lib/facts/aix/networking/ip6.rb +18 -0
- data/lib/facts/aix/networking/mac.rb +18 -0
- data/lib/facts/aix/networking/mtu.rb +17 -0
- data/lib/facts/aix/networking/netmask.rb +18 -0
- data/lib/facts/aix/networking/netmask6.rb +18 -0
- data/lib/facts/aix/networking/network.rb +18 -0
- data/lib/facts/aix/networking/network6.rb +18 -0
- data/lib/facts/aix/networking/primary.rb +1 -1
- data/lib/facts/aix/networking/scope6.rb +17 -0
- data/lib/facts/aix/processor.rb +20 -0
- data/lib/facts/aix/scope6_interfaces.rb +25 -0
- data/lib/facts/linux/dhcp_servers.rb +2 -2
- data/lib/facts/linux/networking/dhcp.rb +1 -4
- data/lib/facts/linux/networking/domain.rb +1 -0
- data/lib/facts/linux/networking/fqdn.rb +1 -0
- data/lib/facts/linux/networking/hostname.rb +1 -0
- data/lib/facts/linux/networking/interfaces.rb +1 -0
- data/lib/facts/linux/networking/ip.rb +1 -4
- data/lib/facts/linux/networking/ip6.rb +1 -4
- data/lib/facts/linux/networking/mac.rb +1 -4
- data/lib/facts/linux/networking/mtu.rb +1 -4
- data/lib/facts/linux/networking/netmask.rb +1 -4
- data/lib/facts/linux/networking/netmask6.rb +1 -4
- data/lib/facts/linux/networking/network.rb +1 -4
- data/lib/facts/linux/networking/network6.rb +1 -4
- data/lib/facts/linux/networking/scope6.rb +1 -4
- data/lib/facts/linux/scope6_interfaces.rb +6 -8
- data/lib/facts/macosx/is_virtual.rb +3 -3
- data/lib/facts/macosx/networking/domain.rb +1 -0
- data/lib/facts/macosx/networking/fqdn.rb +1 -0
- data/lib/facts/macosx/networking/hostname.rb +1 -0
- data/lib/facts/macosx/networking/interfaces.rb +0 -4
- data/lib/facts/macosx/networking/ip.rb +1 -4
- data/lib/facts/macosx/networking/ip6.rb +1 -4
- data/lib/facts/macosx/networking/mac.rb +1 -4
- data/lib/facts/macosx/networking/mtu.rb +1 -4
- data/lib/facts/macosx/networking/netmask.rb +1 -4
- data/lib/facts/macosx/networking/netmask6.rb +1 -4
- data/lib/facts/macosx/networking/network.rb +1 -4
- data/lib/facts/macosx/networking/network6.rb +1 -4
- data/lib/facts/macosx/networking/scope6.rb +1 -4
- data/lib/facts/macosx/system_profiler/boot_mode.rb +1 -1
- data/lib/facts/macosx/system_profiler/boot_rom_version.rb +1 -1
- data/lib/facts/macosx/system_profiler/boot_volume.rb +1 -1
- data/lib/facts/macosx/system_profiler/computer_name.rb +1 -1
- data/lib/facts/macosx/system_profiler/cores.rb +1 -1
- data/lib/facts/macosx/system_profiler/hardware_uuid.rb +1 -1
- data/lib/facts/macosx/system_profiler/kernel_version.rb +1 -1
- data/lib/facts/macosx/system_profiler/l2_cache_per_core.rb +1 -1
- data/lib/facts/macosx/system_profiler/l3_cache.rb +1 -1
- data/lib/facts/macosx/system_profiler/memory.rb +1 -1
- data/lib/facts/macosx/system_profiler/model_identifier.rb +1 -1
- data/lib/facts/macosx/system_profiler/model_name.rb +1 -1
- data/lib/facts/macosx/system_profiler/processor_name.rb +1 -1
- data/lib/facts/macosx/system_profiler/processor_speed.rb +1 -1
- data/lib/facts/macosx/system_profiler/processors.rb +1 -1
- data/lib/facts/macosx/system_profiler/secure_virtual_memory.rb +1 -1
- data/lib/facts/macosx/system_profiler/serial_number.rb +1 -1
- data/lib/facts/macosx/system_profiler/smc_version.rb +1 -1
- data/lib/facts/macosx/system_profiler/system_version.rb +1 -1
- data/lib/facts/macosx/system_profiler/uptime.rb +1 -1
- data/lib/facts/macosx/system_profiler/username.rb +1 -1
- data/lib/facts/macosx/virtual.rb +32 -0
- data/lib/resolvers/aix/networking_resolver.rb +47 -5
- data/lib/resolvers/macosx/{networking.rb → networking_resolver.rb} +30 -32
- data/lib/resolvers/macosx/system_profiler_resolver.rb +37 -53
- data/lib/resolvers/macosx/utils/system_profile_executor.rb +38 -0
- data/lib/resolvers/networking_linux_resolver.rb +1 -2
- data/lib/resolvers/os_release_resolver.rb +5 -0
- data/lib/resolvers/utils/networking.rb +19 -5
- data/lib/resolvers/windows/ffi/network_utils.rb +0 -27
- data/lib/resolvers/windows/networking_resolver.rb +7 -50
- metadata +25 -3
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_hardware_uuid'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:hardware_uuid)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:hardware_uuid)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_kernel_version'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:kernel_version)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:kernel_version)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_l2_cache_per_core'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:l2_cache_per_core)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:l2_cache_per_core)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_l3_cache'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:l3_cache)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:l3_cache)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_memory'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:memory)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:memory)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_machine_model'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:model_identifier)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:model_identifier)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_machine_name'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:model_name)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:model_name)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_processor_name'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:processor_name)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:processor_name)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_current_processor_speed'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:processor_speed)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:processor_speed)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_cpu_type'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:number_of_processors)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:number_of_processors)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_secure_vm'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:secure_virtual_memory)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:secure_virtual_memory)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_serial_number'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:serial_number_system)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:serial_number_system)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_smc_version_system'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:smc_version_system)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:smc_version_system)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_os_version'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:system_version)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:system_version)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_uptime'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:time_since_boot)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:time_since_boot)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Facts
|
|
|
8
8
|
ALIASES = 'sp_user_name'
|
|
9
9
|
|
|
10
10
|
def call_the_resolver
|
|
11
|
-
fact_value = Facter::Resolvers::SystemProfiler.resolve(:user_name)
|
|
11
|
+
fact_value = Facter::Resolvers::Macosx::SystemProfiler.resolve(:user_name)
|
|
12
12
|
[Facter::ResolvedFact.new(FACT_NAME, fact_value), Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Facts
|
|
4
|
+
module Macosx
|
|
5
|
+
class Virtual
|
|
6
|
+
FACT_NAME = 'virtual'
|
|
7
|
+
|
|
8
|
+
def call_the_resolver
|
|
9
|
+
fact_value = check_vmware || check_virtualbox || check_parallels
|
|
10
|
+
|
|
11
|
+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def check_vmware
|
|
17
|
+
model_identifier = Facter::Resolvers::Macosx::SystemProfiler.resolve(:model_identifier)
|
|
18
|
+
return 'vmware' if model_identifier&.start_with?('VMware')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def check_virtualbox
|
|
22
|
+
boot_rom_version = Facter::Resolvers::Macosx::SystemProfiler.resolve(:boot_rom_version)
|
|
23
|
+
return 'virtualbox' if boot_rom_version&.start_with?('VirtualBox')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def check_parallels
|
|
27
|
+
subsystem_vendor_id = Facter::Resolvers::Macosx::SystemProfiler.resolve(:subsystem_vendor_id)
|
|
28
|
+
return 'parallels' if subsystem_vendor_id&.start_with?('0x1ab8')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -15,17 +15,59 @@ module Facter
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def read_netstat(fact_name)
|
|
18
|
+
@fact_list[:interfaces] = {}
|
|
18
19
|
output = Facter::Core::Execution.execute('netstat -rn', logger: log)
|
|
19
|
-
output = output.
|
|
20
|
-
|
|
20
|
+
output = output.each_line.select { |line| (line =~ /\s\s[0-9]+.[0-9]+.[0-9]+.[0-9]+|\s\s.*:[0-9a-f]+/) }
|
|
21
|
+
extract_interfaces(output)
|
|
21
22
|
|
|
23
|
+
populate_with_mtu_and_mac!(@fact_list[:interfaces])
|
|
24
|
+
get_primary_interface_info(output)
|
|
25
|
+
::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
|
|
22
26
|
@fact_list[fact_name]
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def get_primary_interface_info(output)
|
|
26
|
-
primary_interface_info = output.find { |line| line =~ /=>/ }
|
|
27
|
-
@fact_list[:
|
|
28
|
-
|
|
30
|
+
primary_interface_info = output.find { |line| line =~ /=>/ }&.split(' ')
|
|
31
|
+
@fact_list[:primary_interface] = primary_interface_info[5] if primary_interface_info
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def extract_interfaces(netstat_output)
|
|
35
|
+
netstat_output.each do |line|
|
|
36
|
+
next if line =~ /default/
|
|
37
|
+
|
|
38
|
+
info = line.split("\s")
|
|
39
|
+
mask_length = info[0].match(%r{/([0-9]+)|%([0-9]+)})
|
|
40
|
+
next unless mask_length
|
|
41
|
+
|
|
42
|
+
is_ipv4 = info[1] =~ /[0-9]+.[0-9]+.[0-9]+.[0-9]+/
|
|
43
|
+
build_bindings(info[5], info[1], mask_length[1] || mask_length[2], is_ipv4)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def build_bindings(name, ip, mask_length, is_ipv4)
|
|
48
|
+
bind_to_add = is_ipv4 ? :bindings : :bindings6
|
|
49
|
+
ip = ip.gsub(/%[0-9]$/, '') # remove mask information if it exists
|
|
50
|
+
mask_length = mask_length.to_i - 1 unless is_ipv4
|
|
51
|
+
@fact_list[:interfaces][name] ||= {}
|
|
52
|
+
@fact_list[:interfaces][name][bind_to_add] ||= []
|
|
53
|
+
@fact_list[:interfaces][name][bind_to_add] << ::Resolvers::Utils::Networking.build_binding(ip, mask_length)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def populate_with_mtu_and_mac!(interfaces)
|
|
57
|
+
output = Facter::Core::Execution.execute('netstat -in', logger: log)
|
|
58
|
+
output.each_line do |line|
|
|
59
|
+
next if line =~ /Name\s/
|
|
60
|
+
|
|
61
|
+
info = line.split("\s")
|
|
62
|
+
interface_name = info[0]
|
|
63
|
+
mac = info[3][/^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/]
|
|
64
|
+
interfaces[interface_name][:mtu] = info[1].to_i
|
|
65
|
+
interfaces[interface_name][:mac] = format_mac_address(mac) if mac
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def format_mac_address(address)
|
|
70
|
+
address.split('.').map { |e| format('%<mac_address>02s', mac_address: e) }.join(':').tr(' ', '0')
|
|
29
71
|
end
|
|
30
72
|
end
|
|
31
73
|
end
|
|
@@ -16,11 +16,8 @@ module Facter
|
|
|
16
16
|
|
|
17
17
|
def read_facts(fact_name)
|
|
18
18
|
primary_interface
|
|
19
|
-
dhcp
|
|
20
19
|
interfaces_data
|
|
21
|
-
|
|
22
|
-
::Resolvers::Utils::Networking.expand_main_bindings(@fact_list[:interfaces])
|
|
23
|
-
end
|
|
20
|
+
::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
|
|
24
21
|
@fact_list[fact_name]
|
|
25
22
|
end
|
|
26
23
|
|
|
@@ -30,15 +27,6 @@ module Facter
|
|
|
30
27
|
@fact_list[:primary_interface] = result.match(/interface: (.+)/)&.captures&.first
|
|
31
28
|
end
|
|
32
29
|
|
|
33
|
-
def dhcp
|
|
34
|
-
return if @fact_list[:primary_interface].nil?
|
|
35
|
-
|
|
36
|
-
result = Facter::Core::Execution.execute("ipconfig getoption #{@fact_list[:primary_interface]} " \
|
|
37
|
-
'server_identifier', logger: log)
|
|
38
|
-
|
|
39
|
-
@fact_list[:dhcp] = result.match(/^[\d.a-f:\s]+$/)&.to_s&.strip
|
|
40
|
-
end
|
|
41
|
-
|
|
42
30
|
def interfaces_data
|
|
43
31
|
command_response = Facter::Core::Execution.execute('ifconfig -a', logger: log)
|
|
44
32
|
|
|
@@ -55,37 +43,47 @@ module Facter
|
|
|
55
43
|
parsed_interfaces_data = {}
|
|
56
44
|
interfaces_data = Hash[*response.split(/^([A-Za-z0-9_]+): /)[1..-1]]
|
|
57
45
|
|
|
58
|
-
interfaces_data.each do |
|
|
59
|
-
|
|
46
|
+
interfaces_data.each do |interface_name, raw_data|
|
|
47
|
+
parsed_interface_data = {}
|
|
60
48
|
|
|
61
|
-
extract_mtu(
|
|
62
|
-
extract_mac(
|
|
63
|
-
|
|
49
|
+
extract_mtu(raw_data, parsed_interface_data)
|
|
50
|
+
extract_mac(raw_data, parsed_interface_data)
|
|
51
|
+
extract_dhcp(interface_name, raw_data, parsed_interface_data)
|
|
52
|
+
extract_ip_data(raw_data, parsed_interface_data)
|
|
64
53
|
|
|
65
|
-
parsed_interfaces_data[
|
|
54
|
+
parsed_interfaces_data[interface_name] = parsed_interface_data
|
|
66
55
|
end
|
|
67
56
|
@fact_list[:interfaces] = parsed_interfaces_data unless parsed_interfaces_data.empty?
|
|
68
57
|
end
|
|
69
58
|
|
|
70
|
-
def extract_mtu(
|
|
71
|
-
mtu =
|
|
72
|
-
|
|
59
|
+
def extract_mtu(raw_data, parsed_interface_data)
|
|
60
|
+
mtu = raw_data.match(/mtu\s+(\d+)/)&.captures&.first&.to_i
|
|
61
|
+
parsed_interface_data[:mtu] = mtu unless mtu.nil?
|
|
73
62
|
end
|
|
74
63
|
|
|
75
|
-
def extract_mac(
|
|
76
|
-
mac =
|
|
77
|
-
|
|
64
|
+
def extract_mac(raw_data, parsed_interface_data)
|
|
65
|
+
mac = raw_data.match(/(?:ether|lladdr)\s+(\w?\w:\w?\w:\w?\w:\w?\w:\w?\w:\w?\w)/)&.captures&.first
|
|
66
|
+
parsed_interface_data[:mac] = mac unless mac.nil?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def extract_dhcp(interface_name, raw_data, parsed_interface_data)
|
|
70
|
+
return unless raw_data =~ /status:\s+active/
|
|
71
|
+
|
|
72
|
+
result = Facter::Core::Execution.execute("ipconfig getoption #{interface_name} " \
|
|
73
|
+
'server_identifier', logger: log)
|
|
74
|
+
|
|
75
|
+
parsed_interface_data[:dhcp] = result.match(/^[\d.a-f:\s]+$/)&.to_s&.strip unless result.empty?
|
|
78
76
|
end
|
|
79
77
|
|
|
80
|
-
def extract_ip_data(
|
|
81
|
-
ip = extract_values(
|
|
82
|
-
mask = extract_values(
|
|
78
|
+
def extract_ip_data(raw_data, parsed_interface_data)
|
|
79
|
+
ip = extract_values(raw_data, /inet (\S+)/)
|
|
80
|
+
mask = extract_values(raw_data, /netmask (\S+)/).map { |val| val.hex.to_s(2).count('1') }
|
|
83
81
|
|
|
84
|
-
ip6 = extract_values(
|
|
85
|
-
mask6 = extract_values(
|
|
82
|
+
ip6 = extract_values(raw_data, /inet6 (\S+)/).map { |val| val.gsub(/%.+/, '') }
|
|
83
|
+
mask6 = extract_values(raw_data, /prefixlen (\S+)/)
|
|
86
84
|
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
parsed_interface_data[:bindings] = create_bindings(ip, mask) unless ip.empty?
|
|
86
|
+
parsed_interface_data[:bindings6] = create_bindings(ip6, mask6) unless ip6.empty?
|
|
89
87
|
end
|
|
90
88
|
|
|
91
89
|
def extract_values(data, regex)
|
|
@@ -2,59 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
module Facter
|
|
4
4
|
module Resolvers
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
@fact_list ||= {}
|
|
43
|
-
|
|
44
|
-
log.debug 'Executing command: system_profiler SPSoftwareDataType SPHardwareDataType'
|
|
45
|
-
output = Facter::Core::Execution.execute(
|
|
46
|
-
'system_profiler SPHardwareDataType SPSoftwareDataType', logger: log
|
|
47
|
-
).force_encoding('UTF-8')
|
|
48
|
-
@fact_list = output.scan(/.*:[ ].*$/).map { |e| e.strip.match(/(.*?): (.*)/).captures }.to_h
|
|
49
|
-
normalize_factlist
|
|
50
|
-
|
|
51
|
-
@fact_list[fact_name]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def normalize_factlist
|
|
55
|
-
@fact_list = @fact_list.map do |k, v|
|
|
56
|
-
[k.downcase.tr(' ', '_').delete("\(\)").to_sym, v]
|
|
57
|
-
end.to_h
|
|
5
|
+
module Macosx
|
|
6
|
+
class SystemProfiler < BaseResolver
|
|
7
|
+
SP_HARDWARE_DATA_TYPE = %i[model_name model_identifier processor_speed number_of_processors processor_name
|
|
8
|
+
total_number_of_cores l2_cache_per_core l3_cache memory boot_rom_version
|
|
9
|
+
smc_version_system serial_number_system hardware_uuid hyper-threading_technology
|
|
10
|
+
activation_lock_status].freeze
|
|
11
|
+
|
|
12
|
+
SP_SOFTWARE_DATA_TYPE = %i[system_version kernel_version boot_volume boot_mode computer_name
|
|
13
|
+
user_name secure_virtual_memory system_integrity_protection time_since_boot].freeze
|
|
14
|
+
|
|
15
|
+
SP_ETHERNET_DATA_TYPE = %i[type bus vendor_id device_id subsystem_vendor_id
|
|
16
|
+
subsystem_id revision_id bsd_name kext_name location version].freeze
|
|
17
|
+
|
|
18
|
+
@semaphore = Mutex.new
|
|
19
|
+
@fact_list = {}
|
|
20
|
+
|
|
21
|
+
class << self
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def post_resolve(fact_name)
|
|
25
|
+
@fact_list.fetch(fact_name) { retrieve_system_profiler(fact_name) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def retrieve_system_profiler(fact_name)
|
|
29
|
+
@fact_list ||= {}
|
|
30
|
+
|
|
31
|
+
case fact_name
|
|
32
|
+
when *SP_HARDWARE_DATA_TYPE
|
|
33
|
+
@fact_list.merge!(SystemProfileExecutor.execute('SPHardwareDataType'))
|
|
34
|
+
when *SP_SOFTWARE_DATA_TYPE
|
|
35
|
+
@fact_list.merge!(SystemProfileExecutor.execute('SPSoftwareDataType'))
|
|
36
|
+
when *SP_ETHERNET_DATA_TYPE
|
|
37
|
+
@fact_list.merge!(SystemProfileExecutor.execute('SPEthernetDataType'))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
@fact_list[fact_name]
|
|
41
|
+
end
|
|
58
42
|
end
|
|
59
43
|
end
|
|
60
44
|
end
|