facter 4.0.35 → 4.0.36

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facter/custom_facts/util/directory_loader.rb +3 -1
  3. data/lib/facter/fact_groups.conf +140 -1
  4. data/lib/facter/facts/aix/disks.rb +17 -2
  5. data/lib/facter/facts/aix/networking/scope6.rb +3 -1
  6. data/lib/facter/facts/aix/scope6_interfaces.rb +0 -2
  7. data/lib/facter/facts/aix/serialnumber.rb +20 -0
  8. data/lib/facter/facts/aix/sshalgorithmkey.rb +17 -0
  9. data/lib/facter/facts/aix/sshfp_algorithm.rb +20 -0
  10. data/lib/facter/facts/debian/os/distro/release.rb +6 -1
  11. data/lib/facter/facts/freebsd/sshalgorithmkey.rb +17 -0
  12. data/lib/facter/facts/freebsd/sshfp_algorithm.rb +20 -0
  13. data/lib/facter/facts/linux/disks.rb +20 -1
  14. data/lib/facter/facts/linux/dmi/board/asset_tag.rb +19 -0
  15. data/lib/facter/facts/linux/ec2_metadata.rb +5 -3
  16. data/lib/facter/facts/linux/ec2_userdata.rb +5 -3
  17. data/lib/facter/facts/linux/gce.rb +16 -0
  18. data/lib/facter/facts/linux/is_virtual.rb +1 -3
  19. data/lib/facter/facts/linux/networking/scope6.rb +3 -1
  20. data/lib/facter/facts/linux/processors/speed.rb +17 -0
  21. data/lib/facter/facts/linux/scope6_interfaces.rb +1 -2
  22. data/lib/facter/facts/linux/sshfp_algorithm.rb +1 -1
  23. data/lib/facter/facts/linux/xen.rb +28 -0
  24. data/lib/facter/facts/macosx/networking/scope6.rb +3 -1
  25. data/lib/facter/facts/macosx/scope6_interfaces.rb +0 -2
  26. data/lib/facter/facts/macosx/sshfp_algorithm.rb +1 -1
  27. data/lib/facter/facts/solaris/disks.rb +21 -2
  28. data/lib/facter/facts/solaris/hypervisors/ldom.rb +24 -0
  29. data/lib/facter/facts/solaris/hypervisors/zone.rb +39 -0
  30. data/lib/facter/facts/solaris/is_virtual.rb +64 -0
  31. data/lib/facter/facts/solaris/kernelmajversion.rb +1 -1
  32. data/lib/facter/facts/solaris/ldom.rb +35 -0
  33. data/lib/facter/facts/solaris/sshalgorithmkey.rb +17 -0
  34. data/lib/facter/facts/solaris/sshfp_algorithm.rb +20 -0
  35. data/lib/facter/facts/solaris/virtual.rb +60 -0
  36. data/lib/facter/facts/solaris/zones.rb +1 -1
  37. data/lib/facter/facts/windows/ec2_metadata.rb +5 -3
  38. data/lib/facter/facts/windows/ec2_userdata.rb +5 -3
  39. data/lib/facter/facts/windows/gce.rb +16 -0
  40. data/lib/facter/facts/windows/networking/scope6.rb +3 -1
  41. data/lib/facter/facts/windows/sshalgorithmkey.rb +22 -0
  42. data/lib/facter/facts/windows/sshfp_algorithm.rb +25 -0
  43. data/lib/facter/facts_utils/facts_utils.rb +2 -0
  44. data/lib/facter/framework/core/fact/internal/core_fact.rb +2 -0
  45. data/lib/facter/framework/core/fact/internal/internal_fact_manager.rb +10 -25
  46. data/lib/facter/framework/core/fact_filter.rb +13 -0
  47. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +24 -1
  48. data/lib/facter/framework/formatters/legacy_fact_formatter.rb +8 -1
  49. data/lib/facter/framework/formatters/yaml_fact_formatter.rb +1 -1
  50. data/lib/facter/resolvers/aix/serialnumber.rb +37 -0
  51. data/lib/facter/resolvers/dmi_resolver.rb +4 -3
  52. data/lib/facter/resolvers/ec2.rb +4 -18
  53. data/lib/facter/resolvers/gce.rb +54 -0
  54. data/lib/facter/resolvers/memory_resolver.rb +8 -1
  55. data/lib/facter/resolvers/processors_resolver.rb +24 -2
  56. data/lib/facter/resolvers/solaris/ldom.rb +70 -0
  57. data/lib/facter/resolvers/utils/http.rb +68 -0
  58. data/lib/facter/resolvers/xen.rb +28 -0
  59. data/lib/facter/version.rb +1 -1
  60. metadata +25 -2
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Linux
5
+ class Gce
6
+ FACT_NAME = 'gce'
7
+
8
+ def call_the_resolver
9
+ bios_vendor = Facter::Resolvers::Linux::DmiBios.resolve(:bios_vendor)
10
+
11
+ fact_value = bios_vendor&.include?('Google') ? Facter::Resolvers::Gce.resolve(:metadata) : nil
12
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -5,8 +5,6 @@ module Facts
5
5
  class IsVirtual
6
6
  FACT_NAME = 'is_virtual'
7
7
 
8
- PHYSICAL_HYPERVISORS = %w[physical xen0 vmware_server vmware_workstation openvzhn vserver_host].freeze
9
-
10
8
  def call_the_resolver # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
11
9
  fact_value = check_docker_lxc || check_gce || retrieve_from_virt_what || check_vmware
12
10
  fact_value ||= check_open_vz || check_vserver || check_xen || check_other_facts || check_lspci || 'physical'
@@ -59,7 +57,7 @@ module Facts
59
57
  end
60
58
 
61
59
  def check_if_virtual(found_vm)
62
- PHYSICAL_HYPERVISORS.count(found_vm).zero?
60
+ Facter::FactsUtils::PHYSICAL_HYPERVISORS.count(found_vm).zero?
63
61
  end
64
62
  end
65
63
  end
@@ -5,11 +5,13 @@ module Facts
5
5
  module Networking
6
6
  class Scope6
7
7
  FACT_NAME = 'networking.scope6'
8
+ ALIASES = 'scope6'
8
9
 
9
10
  def call_the_resolver
10
11
  fact_value = Facter::Resolvers::NetworkingLinux.resolve(:scope6)
11
12
 
12
- Facter::ResolvedFact.new(FACT_NAME, fact_value)
13
+ [Facter::ResolvedFact.new(FACT_NAME, fact_value),
14
+ Facter::ResolvedFact.new('scope6', fact_value, :legacy)]
13
15
  end
14
16
  end
15
17
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Linux
5
+ module Processors
6
+ class Speed
7
+ FACT_NAME = 'processors.speed'
8
+
9
+ def call_the_resolver
10
+ fact_value = Facter::Resolvers::Linux::Processors.resolve(:speed)
11
+ speed = Facter::FactsUtils::UnitConverter.hertz_to_human_readable(fact_value)
12
+ Facter::ResolvedFact.new(FACT_NAME, speed)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -9,14 +9,13 @@ module Facts
9
9
  def call_the_resolver
10
10
  resolved_facts = []
11
11
  interfaces = Facter::Resolvers::NetworkingLinux.resolve(:interfaces)
12
- primary_scope6 = Facter::Resolvers::NetworkingLinux.resolve(:scope6)
13
12
 
14
13
  interfaces&.each do |interface_name, info|
15
14
  if info[:scope6]
16
15
  resolved_facts << Facter::ResolvedFact.new("scope6_#{interface_name}", info[:scope6], :legacy)
17
16
  end
18
17
  end
19
- resolved_facts << Facter::ResolvedFact.new('scope6', primary_scope6, :legacy) if primary_scope6
18
+
20
19
  resolved_facts
21
20
  end
22
21
  end
@@ -11,7 +11,7 @@ module Facts
11
11
  result = Facter::Resolvers::SshResolver.resolve(:ssh)
12
12
  result.each do |ssh|
13
13
  facts << Facter::ResolvedFact.new("sshfp_#{ssh.name.to_sym}",
14
- "#{ssh.fingerprint.sha1} \n #{ssh.fingerprint.sha256}", :legacy)
14
+ "#{ssh.fingerprint.sha1}\n#{ssh.fingerprint.sha256}", :legacy)
15
15
  end
16
16
  facts
17
17
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Linux
5
+ class Xen
6
+ FACT_NAME = 'xen'
7
+ ALIASES = 'xendomains'
8
+
9
+ def call_the_resolver
10
+ xen_type = check_virt_what || check_xen
11
+ return Facter::ResolvedFact.new(FACT_NAME, nil) if !xen_type || xen_type != 'xen0'
12
+
13
+ domains = Facter::Resolvers::Xen.resolve(:domains) || []
14
+
15
+ [Facter::ResolvedFact.new(FACT_NAME, { domains: domains }),
16
+ Facter::ResolvedFact.new(ALIASES, domains.entries.join(','), :legacy)]
17
+ end
18
+
19
+ def check_virt_what
20
+ Facter::Resolvers::VirtWhat.resolve(:vm)
21
+ end
22
+
23
+ def check_xen
24
+ Facter::Resolvers::Xen.resolve(:vm)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -5,11 +5,13 @@ module Facts
5
5
  module Networking
6
6
  class Scope6
7
7
  FACT_NAME = 'networking.scope6'
8
+ ALIASES = 'scope6'
8
9
 
9
10
  def call_the_resolver
10
11
  fact_value = Facter::Resolvers::Networking.resolve(:scope6)
11
12
 
12
- Facter::ResolvedFact.new(FACT_NAME, fact_value)
13
+ [Facter::ResolvedFact.new(FACT_NAME, fact_value),
14
+ Facter::ResolvedFact.new('scope6', fact_value, :legacy)]
13
15
  end
14
16
  end
15
17
  end
@@ -9,14 +9,12 @@ module Facts
9
9
  def call_the_resolver
10
10
  resolved_facts = []
11
11
  interfaces = Facter::Resolvers::Networking.resolve(:interfaces)
12
- primary_scope6 = Facter::Resolvers::Networking.resolve(:scope6)
13
12
 
14
13
  interfaces&.each do |interface_name, info|
15
14
  if info[:scope6]
16
15
  resolved_facts << Facter::ResolvedFact.new("scope6_#{interface_name}", info[:scope6], :legacy)
17
16
  end
18
17
  end
19
- resolved_facts << Facter::ResolvedFact.new('scope6', primary_scope6, :legacy) if primary_scope6
20
18
  resolved_facts
21
19
  end
22
20
  end
@@ -11,7 +11,7 @@ module Facts
11
11
  result = Facter::Resolvers::SshResolver.resolve(:ssh)
12
12
  result.each do |ssh|
13
13
  facts << Facter::ResolvedFact.new("sshfp_#{ssh.name.to_sym}",
14
- "#{ssh.fingerprint.sha1} \n #{ssh.fingerprint.sha256}", :legacy)
14
+ "#{ssh.fingerprint.sha1}\n#{ssh.fingerprint.sha256}", :legacy)
15
15
  end
16
16
  facts
17
17
  end
@@ -4,10 +4,29 @@ module Facts
4
4
  module Solaris
5
5
  class Disks
6
6
  FACT_NAME = 'disks'
7
+ ALIASES = %w[blockdevices blockdevice_.*_size blockdevice_.*_vendor'].freeze
7
8
 
8
9
  def call_the_resolver
9
- fact_value = Facter::Resolvers::Solaris::Disks.resolve(:disks)
10
- Facter::ResolvedFact.new(FACT_NAME, fact_value)
10
+ facts = []
11
+ disks = Facter::Resolvers::Solaris::Disks.resolve(:disks)
12
+
13
+ return Facter::ResolvedFact.new(FACT_NAME, nil) if disks.nil? || disks.empty?
14
+
15
+ blockdevices = disks.keys.join(',')
16
+ facts.push(Facter::ResolvedFact.new(FACT_NAME, disks))
17
+ facts.push(Facter::ResolvedFact.new('blockdevices', blockdevices, :legacy))
18
+ add_legacy_facts(disks, facts)
19
+
20
+ facts
21
+ end
22
+
23
+ private
24
+
25
+ def add_legacy_facts(disks, facts)
26
+ disks.each do |disk_name, disk_info|
27
+ facts.push(Facter::ResolvedFact.new("blockdevice_#{disk_name}_size", disk_info[:size_bytes].to_s, :legacy))
28
+ facts.push(Facter::ResolvedFact.new("blockdevice_#{disk_name}_vendor", disk_info[:vendor], :legacy))
29
+ end
11
30
  end
12
31
  end
13
32
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ module Hypervisors
6
+ class Ldom
7
+ FACT_NAME = 'hypervisors.ldom'
8
+
9
+ def initialize
10
+ @log = Facter::Log.new(self)
11
+ end
12
+
13
+ def call_the_resolver
14
+ fact_value = %i[
15
+ chassis_serial control_domain domain_name
16
+ domain_uuid role_control role_io role_root role_service
17
+ ].map! { |key| [key, Facter::Resolvers::Solaris::Ldom.resolve(key)] }.to_h
18
+
19
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ module Hypervisors
6
+ class Zone
7
+ FACT_NAME = 'hypervisors.zone'
8
+
9
+ def initialize
10
+ @log = Facter::Log.new(self)
11
+ end
12
+
13
+ def call_the_resolver
14
+ fact_value = current_zone
15
+
16
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
17
+ end
18
+
19
+ def current_zone
20
+ current_zone_name = Facter::Resolvers::Solaris::ZoneName.resolve(:current_zone_name)
21
+ return unless current_zone_name
22
+
23
+ zones = Facter::Resolvers::Solaris::Zone.resolve(:zone)
24
+ return nil unless zones
25
+
26
+ current_zone = zones.find { |r| r[:name] == current_zone_name }
27
+
28
+ {
29
+ brand: current_zone[:brand],
30
+ id: current_zone[:id],
31
+ ip_type: current_zone[:iptype],
32
+ name: current_zone[:name],
33
+ uuid: current_zone[:uuid]
34
+ }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ class IsVirtual
6
+ FACT_NAME = 'is_virtual'
7
+
8
+ def initialize
9
+ @log = Facter::Log.new(self)
10
+ end
11
+
12
+ def call_the_resolver
13
+ @log.debug('Solaris Virtual Resolver')
14
+
15
+ fact_value = check_ldom || check_zone || check_xen || check_other_facts || 'physical'
16
+
17
+ @log.debug("Fact value is: #{fact_value}")
18
+
19
+ Facter::ResolvedFact.new(FACT_NAME, check_if_virtual(fact_value))
20
+ end
21
+
22
+ def check_ldom
23
+ @log.debug('Checking LDoms')
24
+ return unless Facter::Resolvers::Solaris::Ldom.resolve(:role_control) == 'false'
25
+
26
+ Facter::Resolvers::Solaris::Ldom.resolve(:role_impl)
27
+ end
28
+
29
+ def check_zone
30
+ @log.debug('Checking LDoms')
31
+ zone_name = Facter::Resolvers::Solaris::ZoneName.resolve(:current_zone_name)
32
+
33
+ return if zone_name == 'global'
34
+
35
+ 'zone'
36
+ end
37
+
38
+ def check_xen
39
+ @log.debug('Checking XEN')
40
+ Facter::Resolvers::Xen.resolve(:vm)
41
+ end
42
+
43
+ def check_other_facts
44
+ isa = Facter::Resolvers::Uname.resolve(:processor)
45
+ klass = isa == 'sparc' ? 'DmiSparc' : 'Dmi'
46
+
47
+ product_name = Facter::Resolvers::Solaris.const_get(klass).resolve(:product_name)
48
+ bios_vendor = Facter::Resolvers::Solaris.const_get(klass).resolve(:bios_vendor)
49
+
50
+ return 'kvm' if bios_vendor&.include?('Amazon EC2')
51
+
52
+ return unless product_name
53
+
54
+ Facter::FactsUtils::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
55
+
56
+ nil
57
+ end
58
+
59
+ def check_if_virtual(found_vm)
60
+ Facter::FactsUtils::PHYSICAL_HYPERVISORS.count(found_vm).zero?
61
+ end
62
+ end
63
+ end
64
+ end
@@ -8,7 +8,7 @@ module Facts
8
8
  def call_the_resolver
9
9
  full_version = Facter::Resolvers::Uname.resolve(:kernelversion)
10
10
  versions_split = full_version.split('.')
11
- major_version = versions_split.length > 1 ? versions_split[0] + '.' + versions_split[1] : versions_split[0]
11
+ major_version = versions_split.length > 2 ? versions_split[0] + '.' + versions_split[1] : versions_split[0]
12
12
  Facter::ResolvedFact.new(FACT_NAME, major_version)
13
13
  end
14
14
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ class Ldom
6
+ FACT_NAME = 'ldom'
7
+
8
+ def initialize
9
+ @log = Facter::Log.new(self)
10
+ end
11
+
12
+ def call_the_resolver
13
+ fact_value = {
14
+ domainchassis: resolve(:chassis_serial),
15
+ domaincontrol: resolve(:control_domain),
16
+ domainname: resolve(:domain_name),
17
+ domainrole: {
18
+ control: resolve(:role_control),
19
+ impl: resolve(:role_impl),
20
+ io: resolve(:role_io),
21
+ root: resolve(:role_root),
22
+ service: resolve(:role_service)
23
+ },
24
+ domainuuid: resolve(:domain_uuid)
25
+ }
26
+
27
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
28
+ end
29
+
30
+ def resolve(key)
31
+ Facter::Resolvers::Solaris::Ldom.resolve(key)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ class Sshalgorithmkey
6
+ FACT_NAME = 'ssh.*key'
7
+ TYPE = :legacy
8
+
9
+ def call_the_resolver
10
+ facts = []
11
+ result = Facter::Resolvers::SshResolver.resolve(:ssh)
12
+ result.each { |ssh| facts << Facter::ResolvedFact.new("ssh#{ssh.name.to_sym}key", ssh.key, :legacy) }
13
+ facts
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ class SshfpAlgorithm
6
+ FACT_NAME = 'sshfp_.*'
7
+ TYPE = :legacy
8
+
9
+ def call_the_resolver
10
+ facts = []
11
+ result = Facter::Resolvers::SshResolver.resolve(:ssh)
12
+ result.each do |ssh|
13
+ facts << Facter::ResolvedFact.new("sshfp_#{ssh.name.to_sym}",
14
+ "#{ssh.fingerprint.sha1}\n#{ssh.fingerprint.sha256}", :legacy)
15
+ end
16
+ facts
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facts
4
+ module Solaris
5
+ class Virtual
6
+ FACT_NAME = 'virtual'
7
+
8
+ def initialize
9
+ @log = Facter::Log.new(self)
10
+ end
11
+
12
+ def call_the_resolver
13
+ @log.debug('Solaris Virtual Resolver')
14
+
15
+ fact_value = check_ldom || check_zone || check_xen || check_other_facts || 'physical'
16
+
17
+ @log.debug("Fact value is: #{fact_value}")
18
+
19
+ Facter::ResolvedFact.new(FACT_NAME, fact_value)
20
+ end
21
+
22
+ def check_ldom
23
+ @log.debug('Checking LDoms')
24
+ return unless Facter::Resolvers::Solaris::Ldom.resolve(:role_control) == 'false'
25
+
26
+ Facter::Resolvers::Solaris::Ldom.resolve(:role_impl)
27
+ end
28
+
29
+ def check_zone
30
+ @log.debug('Checking LDoms')
31
+ zone_name = Facter::Resolvers::Solaris::ZoneName.resolve(:current_zone_name)
32
+
33
+ return if zone_name == 'global'
34
+
35
+ 'zone'
36
+ end
37
+
38
+ def check_xen
39
+ @log.debug('Checking XEN')
40
+ Facter::Resolvers::Xen.resolve(:vm)
41
+ end
42
+
43
+ def check_other_facts
44
+ isa = Facter::Resolvers::Uname.resolve(:processor)
45
+ klass = isa == 'sparc' ? 'DmiSparc' : 'Dmi'
46
+
47
+ product_name = Facter::Resolvers::Solaris.const_get(klass).resolve(:product_name)
48
+ bios_vendor = Facter::Resolvers::Solaris.const_get(klass).resolve(:bios_vendor)
49
+
50
+ return 'kvm' if bios_vendor&.include?('Amazon EC2')
51
+
52
+ return unless product_name
53
+
54
+ Facter::FactsUtils::HYPERVISORS_HASH.each { |key, value| return value if product_name.include?(key) }
55
+
56
+ nil
57
+ end
58
+ end
59
+ end
60
+ end