Skip to content
This repository was archived by the owner on Jun 19, 2020. It is now read-only.

Commit 43fc506

Browse files
authored
(FACT-2477) Collect facts from alternative sources (#422)
1 parent 83adfc2 commit 43fc506

17 files changed

Lines changed: 352 additions & 56 deletions
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Debian
5+
class Lsbdistcodename
6+
FACT_NAME = 'lsbdistcodename'
7+
TYPE = :legacy
8+
9+
def call_the_resolver
10+
fact_value = Facter::Resolvers::LsbRelease.resolve(:codename)
11+
12+
Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy)
13+
end
14+
end
15+
end
16+
end
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Debian
5+
class Lsbdistdescription
6+
FACT_NAME = 'lsbdistdescription'
7+
TYPE = :legacy
8+
9+
def call_the_resolver
10+
fact_value = Facter::Resolvers::LsbRelease.resolve(:description)
11+
12+
Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy)
13+
end
14+
end
15+
end
16+
end

lib/facts/debian/lsbdistid.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Debian
5+
class Lsbdistid
6+
FACT_NAME = 'lsbdistid'
7+
TYPE = :legacy
8+
9+
def call_the_resolver
10+
fact_value = Facter::Resolvers::LsbRelease.resolve(:distributor_id)
11+
12+
Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy)
13+
end
14+
end
15+
end
16+
end

lib/facts/debian/lsbdistrelease.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Debian
5+
class Lsbdistrelease
6+
FACT_NAME = 'lsbdistrelease'
7+
ALIASES = %w[lsbmajdistrelease lsbminordistrelease].freeze
8+
TYPE = :legacy
9+
10+
def call_the_resolver
11+
fact_value = Facter::Resolvers::LsbRelease.resolve(:release)
12+
13+
return Facter::ResolvedFact.new(FACT_NAME, nil, :legacy) unless fact_value
14+
15+
version = fact_value.split('.')
16+
17+
[Facter::ResolvedFact.new(FACT_NAME, fact_value, :legacy),
18+
Facter::ResolvedFact.new(ALIASES[0], version[0], :legacy),
19+
Facter::ResolvedFact.new(ALIASES[1], version[1], :legacy)]
20+
end
21+
end
22+
end
23+
end

lib/facts/debian/os/distro/codename.rb

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,22 @@ module Os
66
module Distro
77
class Codename
88
FACT_NAME = 'os.distro.codename'
9-
ALIASES = 'lsbdistcodename'
109

1110
def call_the_resolver
12-
fact_value = Facter::Resolvers::LsbRelease.resolve(:codename)
11+
fact_value = Facter::Resolvers::OsRelease.resolve(:version_codename)
12+
fact_value ||= retreieve_from_version
1313

14-
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
15-
Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
14+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
15+
end
16+
17+
def retreieve_from_version
18+
version = Facter::Resolvers::OsRelease.resolve(:version)
19+
return unless version
20+
21+
codename = /\(.*\)$/.match(version).to_s.gsub(/\(|\)/, '')
22+
return codename unless codename.empty?
23+
24+
/[A-Za-z]+\s[A-Za-z]+/.match(version).to_s.split(' ').first.downcase
1625
end
1726
end
1827
end

lib/facts/debian/os/distro/description.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ module Os
66
module Distro
77
class Description
88
FACT_NAME = 'os.distro.description'
9-
ALIASES = 'lsbdistdescription'
109

1110
def call_the_resolver
12-
fact_value = Facter::Resolvers::LsbRelease.resolve(:description)
11+
fact_value = Facter::Resolvers::OsRelease.resolve(:pretty_name)
1312

14-
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
15-
Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
13+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
1614
end
1715
end
1816
end

lib/facts/debian/os/distro/id.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ module Os
66
module Distro
77
class Id
88
FACT_NAME = 'os.distro.id'
9-
ALIASES = 'lsbdistid'
109

1110
def call_the_resolver
12-
fact_value = Facter::Resolvers::LsbRelease.resolve(:distributor_id)
11+
fact_value = Facter::Resolvers::OsRelease.resolve(:id).capitalize
1312

14-
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
15-
Facter::ResolvedFact.new(ALIASES, fact_value, :legacy)]
13+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
1614
end
1715
end
1816
end

lib/facts/debian/os/distro/release.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ module Os
66
module Distro
77
class Release
88
FACT_NAME = 'os.distro.release'
9-
ALIASES = %w[lsbdistrelease lsbmajdistrelease lsbminordistrelease].freeze
109

1110
def call_the_resolver
1211
fact_value = determine_release_for_os
@@ -16,10 +15,7 @@ def call_the_resolver
1615
versions = fact_value.split('.')
1716
release = { 'full' => fact_value, 'major' => versions[0], 'minor' => versions[1].gsub(/^0([1-9])/, '\1') }
1817

19-
[Facter::ResolvedFact.new(FACT_NAME, release),
20-
Facter::ResolvedFact.new(ALIASES[0], fact_value, :legacy),
21-
Facter::ResolvedFact.new(ALIASES[1], release['major'], :legacy),
22-
Facter::ResolvedFact.new(ALIASES[2], release['minor'], :legacy)]
18+
Facter::ResolvedFact.new(FACT_NAME, release)
2319
end
2420

2521
private
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
describe Facts::Debian::Lsbdistcodename do
4+
describe '#call_the_resolver' do
5+
subject(:fact) { Facts::Debian::Lsbdistcodename.new }
6+
7+
let(:value) { 'stretch' }
8+
9+
before do
10+
allow(Facter::Resolvers::LsbRelease).to receive(:resolve).with(:codename).and_return(value)
11+
end
12+
13+
it 'calls Facter::Resolvers::LsbRelease' do
14+
fact.call_the_resolver
15+
expect(Facter::Resolvers::LsbRelease).to have_received(:resolve).with(:codename)
16+
end
17+
18+
it 'returns lsbdistcodename fact' do
19+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
20+
have_attributes(name: 'lsbdistcodename', value: value, type: :legacy)
21+
end
22+
end
23+
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
describe Facts::Debian::Lsbdistdescription do
4+
describe '#call_the_resolver' do
5+
subject(:fact) { Facts::Debian::Lsbdistdescription.new }
6+
7+
let(:value) { 'stretch' }
8+
9+
before do
10+
allow(Facter::Resolvers::LsbRelease).to receive(:resolve).with(:description).and_return(value)
11+
end
12+
13+
it 'calls Facter::Resolvers::LsbRelease' do
14+
fact.call_the_resolver
15+
expect(Facter::Resolvers::LsbRelease).to have_received(:resolve).with(:description)
16+
end
17+
18+
it 'returns lsbdistdescription fact' do
19+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
20+
have_attributes(name: 'lsbdistdescription', value: value, type: :legacy)
21+
end
22+
end
23+
end

0 commit comments

Comments
 (0)