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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +2 -0
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +5 -5
  5. data/VERSION +1 -1
  6. data/lib/facts/aix/interfaces.rb +16 -0
  7. data/lib/facts/aix/ipaddress6_interfaces.rb +20 -0
  8. data/lib/facts/aix/ipaddress_interfaces.rb +20 -0
  9. data/lib/facts/aix/macaddress_interfaces.rb +20 -0
  10. data/lib/facts/aix/mtu_interfaces.rb +20 -0
  11. data/lib/facts/aix/netmask6_interfaces.rb +20 -0
  12. data/lib/facts/aix/netmask_interfaces.rb +20 -0
  13. data/lib/facts/aix/network6_interfaces.rb +20 -0
  14. data/lib/facts/aix/network_interfaces.rb +20 -0
  15. data/lib/facts/aix/networking/interfaces.rb +18 -0
  16. data/lib/facts/aix/networking/ip6.rb +18 -0
  17. data/lib/facts/aix/networking/mac.rb +18 -0
  18. data/lib/facts/aix/networking/mtu.rb +17 -0
  19. data/lib/facts/aix/networking/netmask.rb +18 -0
  20. data/lib/facts/aix/networking/netmask6.rb +18 -0
  21. data/lib/facts/aix/networking/network.rb +18 -0
  22. data/lib/facts/aix/networking/network6.rb +18 -0
  23. data/lib/facts/aix/networking/primary.rb +1 -1
  24. data/lib/facts/aix/networking/scope6.rb +17 -0
  25. data/lib/facts/aix/processor.rb +20 -0
  26. data/lib/facts/aix/scope6_interfaces.rb +25 -0
  27. data/lib/facts/linux/dhcp_servers.rb +2 -2
  28. data/lib/facts/linux/networking/dhcp.rb +1 -4
  29. data/lib/facts/linux/networking/domain.rb +1 -0
  30. data/lib/facts/linux/networking/fqdn.rb +1 -0
  31. data/lib/facts/linux/networking/hostname.rb +1 -0
  32. data/lib/facts/linux/networking/interfaces.rb +1 -0
  33. data/lib/facts/linux/networking/ip.rb +1 -4
  34. data/lib/facts/linux/networking/ip6.rb +1 -4
  35. data/lib/facts/linux/networking/mac.rb +1 -4
  36. data/lib/facts/linux/networking/mtu.rb +1 -4
  37. data/lib/facts/linux/networking/netmask.rb +1 -4
  38. data/lib/facts/linux/networking/netmask6.rb +1 -4
  39. data/lib/facts/linux/networking/network.rb +1 -4
  40. data/lib/facts/linux/networking/network6.rb +1 -4
  41. data/lib/facts/linux/networking/scope6.rb +1 -4
  42. data/lib/facts/linux/scope6_interfaces.rb +6 -8
  43. data/lib/facts/macosx/is_virtual.rb +3 -3
  44. data/lib/facts/macosx/networking/domain.rb +1 -0
  45. data/lib/facts/macosx/networking/fqdn.rb +1 -0
  46. data/lib/facts/macosx/networking/hostname.rb +1 -0
  47. data/lib/facts/macosx/networking/interfaces.rb +0 -4
  48. data/lib/facts/macosx/networking/ip.rb +1 -4
  49. data/lib/facts/macosx/networking/ip6.rb +1 -4
  50. data/lib/facts/macosx/networking/mac.rb +1 -4
  51. data/lib/facts/macosx/networking/mtu.rb +1 -4
  52. data/lib/facts/macosx/networking/netmask.rb +1 -4
  53. data/lib/facts/macosx/networking/netmask6.rb +1 -4
  54. data/lib/facts/macosx/networking/network.rb +1 -4
  55. data/lib/facts/macosx/networking/network6.rb +1 -4
  56. data/lib/facts/macosx/networking/scope6.rb +1 -4
  57. data/lib/facts/macosx/system_profiler/boot_mode.rb +1 -1
  58. data/lib/facts/macosx/system_profiler/boot_rom_version.rb +1 -1
  59. data/lib/facts/macosx/system_profiler/boot_volume.rb +1 -1
  60. data/lib/facts/macosx/system_profiler/computer_name.rb +1 -1
  61. data/lib/facts/macosx/system_profiler/cores.rb +1 -1
  62. data/lib/facts/macosx/system_profiler/hardware_uuid.rb +1 -1
  63. data/lib/facts/macosx/system_profiler/kernel_version.rb +1 -1
  64. data/lib/facts/macosx/system_profiler/l2_cache_per_core.rb +1 -1
  65. data/lib/facts/macosx/system_profiler/l3_cache.rb +1 -1
  66. data/lib/facts/macosx/system_profiler/memory.rb +1 -1
  67. data/lib/facts/macosx/system_profiler/model_identifier.rb +1 -1
  68. data/lib/facts/macosx/system_profiler/model_name.rb +1 -1
  69. data/lib/facts/macosx/system_profiler/processor_name.rb +1 -1
  70. data/lib/facts/macosx/system_profiler/processor_speed.rb +1 -1
  71. data/lib/facts/macosx/system_profiler/processors.rb +1 -1
  72. data/lib/facts/macosx/system_profiler/secure_virtual_memory.rb +1 -1
  73. data/lib/facts/macosx/system_profiler/serial_number.rb +1 -1
  74. data/lib/facts/macosx/system_profiler/smc_version.rb +1 -1
  75. data/lib/facts/macosx/system_profiler/system_version.rb +1 -1
  76. data/lib/facts/macosx/system_profiler/uptime.rb +1 -1
  77. data/lib/facts/macosx/system_profiler/username.rb +1 -1
  78. data/lib/facts/macosx/virtual.rb +32 -0
  79. data/lib/resolvers/aix/networking_resolver.rb +47 -5
  80. data/lib/resolvers/macosx/{networking.rb → networking_resolver.rb} +30 -32
  81. data/lib/resolvers/macosx/system_profiler_resolver.rb +37 -53
  82. data/lib/resolvers/macosx/utils/system_profile_executor.rb +38 -0
  83. data/lib/resolvers/networking_linux_resolver.rb +1 -2
  84. data/lib/resolvers/os_release_resolver.rb +5 -0
  85. data/lib/resolvers/utils/networking.rb +19 -5
  86. data/lib/resolvers/windows/ffi/network_utils.rb +0 -27
  87. data/lib/resolvers/windows/networking_resolver.rb +7 -50
  88. metadata +25 -3
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Resolvers
5
+ module Macosx
6
+ class SystemProfileExecutor
7
+ @log = Log.new(self)
8
+
9
+ class << self
10
+ def execute(category_name)
11
+ @log.debug "Executing command: system_profiler #{category_name}"
12
+ output = Facter::Core::Execution.execute(
13
+ "system_profiler #{category_name}", logger: @log
14
+ )&.force_encoding('UTF-8')
15
+
16
+ return unless output
17
+
18
+ system_profiler_hash = output_to_hash(output)
19
+
20
+ normalize_keys(system_profiler_hash)
21
+ end
22
+
23
+ private
24
+
25
+ def output_to_hash(output)
26
+ output.scan(/.*:[ ].*$/).map { |e| e.strip.match(/(.*?): (.*)/).captures }.to_h
27
+ end
28
+
29
+ def normalize_keys(system_profiler_hash)
30
+ system_profiler_hash.map do |k, v|
31
+ [k.downcase.tr(' ', '_').delete("\(\)").to_sym, v]
32
+ end.to_h
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -22,6 +22,7 @@ module Facter
22
22
  retrieve_interface_info
23
23
  retrieve_interfaces_mac_and_mtu
24
24
  retrieve_default_interface
25
+ ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
25
26
  @fact_list[fact_name]
26
27
  end
27
28
 
@@ -46,8 +47,6 @@ module Facter
46
47
  find_dhcp!(ip_tokens, interfaces)
47
48
  end
48
49
 
49
- ::Resolvers::Utils::Networking.expand_main_bindings(interfaces)
50
-
51
50
  @fact_list[:interfaces] = interfaces
52
51
  end
53
52
 
@@ -37,6 +37,7 @@ module Facter
37
37
  fill_fact_list(pairs)
38
38
  process_name
39
39
  pad_version_id
40
+ normalize_opensuse_identifier
40
41
 
41
42
  @fact_list[fact_name]
42
43
  end
@@ -61,6 +62,10 @@ module Facter
61
62
  @fact_list[:name].split(' ')[0].strip
62
63
  end
63
64
  end
65
+
66
+ def normalize_opensuse_identifier
67
+ @fact_list[:identifier] = 'opensuse' if @fact_list[:identifier] =~ /opensuse/i
68
+ end
64
69
  end
65
70
  end
66
71
  end
@@ -17,11 +17,12 @@ module Resolvers
17
17
  { address: addr, netmask: mask.to_s, network: ip.mask(mask_length).to_s }
18
18
  end
19
19
 
20
- def expand_main_bindings(interfaces)
21
- interfaces.each_value do |values|
22
- expand_binding(values, values[:bindings]) if values[:bindings]
23
- expand_binding(values, values[:bindings6], false) if values[:bindings6]
24
- end
20
+ def expand_main_bindings(networking_facts)
21
+ primary = networking_facts[:primary_interface]
22
+ interfaces = networking_facts[:interfaces]
23
+
24
+ expand_interfaces(interfaces) unless interfaces.nil?
25
+ expand_primary_interface(networking_facts, primary) unless primary.nil? || interfaces.nil?
25
26
  end
26
27
 
27
28
  def get_scope(ip)
@@ -55,6 +56,19 @@ module Resolvers
55
56
 
56
57
  private
57
58
 
59
+ def expand_interfaces(interfaces)
60
+ interfaces.each_value do |values|
61
+ expand_binding(values, values[:bindings]) if values[:bindings]
62
+ expand_binding(values, values[:bindings6], false) if values[:bindings6]
63
+ end
64
+ end
65
+
66
+ def expand_primary_interface(networking_facts, primary)
67
+ networking_facts[:interfaces][primary].each do |key, value|
68
+ networking_facts[key] = value unless %i[bindings bindings6].include?(key)
69
+ end
70
+ end
71
+
58
72
  def expand_binding(values, bindings, ipv4_type = true)
59
73
  binding = find_valid_binding(bindings)
60
74
  ip_protocol_type = ipv4_type ? '' : '6'
@@ -34,32 +34,5 @@ class NetworkUtils
34
34
  .map { |e| format('%<mac_address>02x', mac_address: e.to_i) }
35
35
  .join(':').upcase
36
36
  end
37
-
38
- def build_binding(addr, mask_length)
39
- ip = IPAddr.new(addr)
40
- mask = if ip.ipv6?
41
- IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(mask_length)
42
- else
43
- IPAddr.new('255.255.255.255').mask(mask_length)
44
- end
45
- { address: addr, netmask: mask.to_s, network: ip.mask(mask_length).to_s }
46
- end
47
-
48
- def get_scope(sockaddr)
49
- require 'socket'
50
- scope6 = []
51
- addrinfo = Addrinfo.new(['AF_INET6', 0, nil, sockaddr], :INET6)
52
-
53
- scope6 << 'compat,' if addrinfo.ipv6_v4compat?
54
- scope6 << if addrinfo.ipv6_linklocal?
55
- 'link'
56
- elsif addrinfo.ipv6_sitelocal?
57
- 'site'
58
- elsif addrinfo.ipv6_loopback?
59
- 'host'
60
- else 'global'
61
- end
62
- scope6.join
63
- end
64
37
  end
65
38
  end
@@ -26,8 +26,9 @@ module Facter
26
26
  return unless (adapter_addresses = get_adapter_addresses(size_ptr, adapter_addresses, flags))
27
27
 
28
28
  iterate_list(adapter_addresses)
29
- set_interfaces_other_facts if @fact_list[:interfaces]
30
- @fact_list[:primary_interface] = @fact_list[:primary_interface].to_s
29
+
30
+ ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
31
+
31
32
  @fact_list[fact_name]
32
33
  end
33
34
 
@@ -70,7 +71,7 @@ module Facter
70
71
  next
71
72
  end
72
73
  @fact_list[:domain] ||= adapter_address[:DnsSuffix].read_wide_string_without_length
73
- name = adapter_address[:FriendlyName].read_wide_string_without_length.to_sym
74
+ name = adapter_address[:FriendlyName].read_wide_string_without_length
74
75
  net_interface[name] = build_interface_info(adapter_address, name)
75
76
  end
76
77
 
@@ -120,58 +121,14 @@ module Facter
120
121
  def find_bindings(sock_addr, unicast, addr)
121
122
  return unless [NetworkingFFI::AF_INET, NetworkingFFI::AF_INET6].include?(sock_addr[:sa_family])
122
123
 
123
- NetworkUtils.build_binding(addr, unicast[:OnLinkPrefixLength])
124
+ ::Resolvers::Utils::Networking.build_binding(addr, unicast[:OnLinkPrefixLength])
124
125
  end
125
126
 
126
127
  def find_primary_interface(sock_addr, name, addr)
127
128
  if !@fact_list[:primary_interface] &&
128
129
  ([NetworkingFFI::AF_INET, NetworkingFFI::AF_INET6].include?(sock_addr[:sa_family]) &&
129
- !NetworkUtils.ignored_ip_address(addr))
130
- @fact_list[:primary_interface] = name
131
- end
132
- end
133
-
134
- def set_interfaces_other_facts
135
- @fact_list[:interfaces].each do |interface_name, value|
136
- if value[:bindings]
137
- binding = find_valid_binding(value[:bindings])
138
- populate_interface(binding, value)
139
- end
140
- if value[:bindings6]
141
- binding = find_valid_binding(value[:bindings6])
142
- populate_interface(binding, value, true)
143
- end
144
- set_networking_other_facts(value, interface_name)
145
- end
146
- end
147
-
148
- def find_valid_binding(bindings)
149
- bindings.each do |binding|
150
- return binding unless NetworkUtils.ignored_ip_address(binding[:address])
151
- end
152
- bindings.empty? ? nil : bindings.first
153
- end
154
-
155
- def populate_interface(bind, interface, ipv6 = false)
156
- return if !bind || bind.empty?
157
-
158
- if ipv6
159
- interface[:ip6] = bind[:address]
160
- interface[:netmask6] = bind[:netmask]
161
- interface[:network6] = bind[:network]
162
- interface[:scope6] = NetworkUtils.get_scope(bind[:address])
163
- else
164
- interface[:network] = bind[:network]
165
- interface[:netmask] = bind[:netmask]
166
- interface[:ip] = bind[:address]
167
- end
168
- end
169
-
170
- def set_networking_other_facts(value, interface_name)
171
- return unless @fact_list[:primary_interface] == interface_name
172
-
173
- %i[mtu dhcp mac ip ip6 scope6 netmask netmask6 network network6].each do |key|
174
- @fact_list[key] = value[key]
130
+ !::Resolvers::Utils::Networking.ignored_ip_address(addr))
131
+ @fact_list[:primary_interface] = name.to_s
175
132
  end
176
133
  end
177
134
  end
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.0.28
4
+ version: 4.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-25 00:00:00.000000000 Z
11
+ date: 2020-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -383,17 +383,35 @@ files:
383
383
  - lib/facts/aix/identity/privileged.rb
384
384
  - lib/facts/aix/identity/uid.rb
385
385
  - lib/facts/aix/identity/user.rb
386
+ - lib/facts/aix/interfaces.rb
387
+ - lib/facts/aix/ipaddress6_interfaces.rb
388
+ - lib/facts/aix/ipaddress_interfaces.rb
386
389
  - lib/facts/aix/kernel.rb
387
390
  - lib/facts/aix/kernelmajversion.rb
388
391
  - lib/facts/aix/kernelrelease.rb
389
392
  - lib/facts/aix/kernelversion.rb
390
393
  - lib/facts/aix/load_averages.rb
394
+ - lib/facts/aix/macaddress_interfaces.rb
391
395
  - lib/facts/aix/mountpoints.rb
396
+ - lib/facts/aix/mtu_interfaces.rb
397
+ - lib/facts/aix/netmask6_interfaces.rb
398
+ - lib/facts/aix/netmask_interfaces.rb
399
+ - lib/facts/aix/network6_interfaces.rb
400
+ - lib/facts/aix/network_interfaces.rb
392
401
  - lib/facts/aix/networking/domain.rb
393
402
  - lib/facts/aix/networking/fqdn.rb
394
403
  - lib/facts/aix/networking/hostname.rb
404
+ - lib/facts/aix/networking/interfaces.rb
395
405
  - lib/facts/aix/networking/ip.rb
406
+ - lib/facts/aix/networking/ip6.rb
407
+ - lib/facts/aix/networking/mac.rb
408
+ - lib/facts/aix/networking/mtu.rb
409
+ - lib/facts/aix/networking/netmask.rb
410
+ - lib/facts/aix/networking/netmask6.rb
411
+ - lib/facts/aix/networking/network.rb
412
+ - lib/facts/aix/networking/network6.rb
396
413
  - lib/facts/aix/networking/primary.rb
414
+ - lib/facts/aix/networking/scope6.rb
397
415
  - lib/facts/aix/nim_type.rb
398
416
  - lib/facts/aix/os/architecture.rb
399
417
  - lib/facts/aix/os/family.rb
@@ -402,6 +420,7 @@ files:
402
420
  - lib/facts/aix/os/release.rb
403
421
  - lib/facts/aix/partitions.rb
404
422
  - lib/facts/aix/path.rb
423
+ - lib/facts/aix/processor.rb
405
424
  - lib/facts/aix/processors/count.rb
406
425
  - lib/facts/aix/processors/isa.rb
407
426
  - lib/facts/aix/processors/models.rb
@@ -410,6 +429,7 @@ files:
410
429
  - lib/facts/aix/ruby/platform.rb
411
430
  - lib/facts/aix/ruby/sitedir.rb
412
431
  - lib/facts/aix/ruby/version.rb
432
+ - lib/facts/aix/scope6_interfaces.rb
413
433
  - lib/facts/aix/ssh.rb
414
434
  - lib/facts/aix/system_uptime/days.rb
415
435
  - lib/facts/aix/system_uptime/hours.rb
@@ -644,6 +664,7 @@ files:
644
664
  - lib/facts/macosx/system_uptime/seconds.rb
645
665
  - lib/facts/macosx/system_uptime/uptime.rb
646
666
  - lib/facts/macosx/timezone.rb
667
+ - lib/facts/macosx/virtual.rb
647
668
  - lib/facts/rhel/os/distro/codename.rb
648
669
  - lib/facts/rhel/os/distro/description.rb
649
670
  - lib/facts/rhel/os/distro/id.rb
@@ -869,11 +890,12 @@ files:
869
890
  - lib/resolvers/macosx/filesystems_resolver.rb
870
891
  - lib/resolvers/macosx/load_averages_resolver.rb
871
892
  - lib/resolvers/macosx/mountpoints_resolver.rb
872
- - lib/resolvers/macosx/networking.rb
893
+ - lib/resolvers/macosx/networking_resolver.rb
873
894
  - lib/resolvers/macosx/processor_resolver.rb
874
895
  - lib/resolvers/macosx/swap_memory_resolver.rb
875
896
  - lib/resolvers/macosx/system_memory_resolver.rb
876
897
  - lib/resolvers/macosx/system_profiler_resolver.rb
898
+ - lib/resolvers/macosx/utils/system_profile_executor.rb
877
899
  - lib/resolvers/memory_resolver.rb
878
900
  - lib/resolvers/mountpoints_resolver.rb
879
901
  - lib/resolvers/networking_linux_resolver.rb