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

(FACT-2530) Fix for tests/facts/os_processors_and_kernel.rb #449

Merged
merged 4 commits into from
Apr 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 17 additions & 10 deletions lib/facts/debian/os/distro/release.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,7 @@ class Release
def call_the_resolver
fact_value = determine_release_for_os

return Facter::ResolvedFact.new(FACT_NAME, nil) unless fact_value

versions = fact_value.split('.')
release = {}
release['full'] = fact_value
release['major'] = versions[0]
release['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
Facter::ResolvedFact.new(FACT_NAME, release)
Facter::ResolvedFact.new(FACT_NAME, fact_value)
end

private
Expand All @@ -26,9 +19,23 @@ def determine_release_for_os
os_name = Facter::Resolvers::OsRelease.resolve(:name)

if os_name =~ /Debian|Raspbian/
Facter::Resolvers::DebianVersion.resolve(:version)
release = Facter::Resolvers::DebianVersion.resolve(:version)
return unless release

versions = release.split('.')
fact_value = {}
fact_value['full'] = release
fact_value['major'] = versions[0]
fact_value['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
fact_value
else
Facter::Resolvers::OsRelease.resolve(:version_id)
release = Facter::Resolvers::OsRelease.resolve(:version_id)
return unless release

{
'full' => release,
'major' => release
}
end
end
end
Expand Down
32 changes: 20 additions & 12 deletions lib/facts/debian/os/release.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,11 @@ class Release
def call_the_resolver
fact_value = determine_release_for_os

return Facter::ResolvedFact.new(FACT_NAME, nil) unless fact_value
return Facter::ResolvedFact.new(FACT_NAME, fact_value) unless fact_value

versions = fact_value.split('.')
release = {}
release['full'] = fact_value
release['major'] = versions[0]
release['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]

[Facter::ResolvedFact.new(FACT_NAME, release),
Facter::ResolvedFact.new(ALIASES.first, versions[0], :legacy),
Facter::ResolvedFact.new(ALIASES.last, fact_value, :legacy)]
[Facter::ResolvedFact.new(FACT_NAME, fact_value),
Facter::ResolvedFact.new(ALIASES.first, fact_value['major'], :legacy),
Facter::ResolvedFact.new(ALIASES.last, fact_value['full'], :legacy)]
end

private
Expand All @@ -29,9 +23,23 @@ def determine_release_for_os
os_name = Facter::Resolvers::OsRelease.resolve(:name)

if os_name =~ /Debian|Raspbian/
Facter::Resolvers::DebianVersion.resolve(:version)
release = Facter::Resolvers::DebianVersion.resolve(:version)
return unless release

versions = release.split('.')
fact_value = {}
fact_value['full'] = release
fact_value['major'] = versions[0]
fact_value['minor'] = versions[1].gsub(/^0([1-9])/, '\1') if versions[1]
fact_value
else
Facter::Resolvers::OsRelease.resolve(:version_id)
release = Facter::Resolvers::OsRelease.resolve(:version_id)
return unless release

{
'full' => release,
'major' => release
}
end
end
end
Expand Down
5 changes: 5 additions & 0 deletions lib/resolvers/os_release_resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def read_os_release_file(fact_name)

fill_fact_list(pairs)
process_name
pad_version_id

@fact_list[fact_name]
end
Expand All @@ -47,6 +48,10 @@ def fill_fact_list(pairs)
@fact_list[:identifier] = @fact_list[:id]
end

def pad_version_id
@fact_list[:version_id] = "#{@fact_list[:version_id]}.0" unless @fact_list[:version_id] =~ /\./
end

def process_name
return unless @fact_list[:name]

Expand Down
4 changes: 2 additions & 2 deletions spec/facter/facts/debian/os/distro/release_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@

let(:os_name) { 'Ubuntu' }

context 'when version_id is retrieved successfully' do
context 'when version_id is retrieved successful' do
let(:os_release_value) { '18.04' }
let(:fact_value) { { 'full' => '18.04', 'major' => '18', 'minor' => '4' } }
let(:fact_value) { { 'full' => '18.04', 'major' => '18.04' } }

it_behaves_like 'calls Facter::Resolvers::OsRelease with :name'

Expand Down
2 changes: 1 addition & 1 deletion spec/facter/facts/debian/os/release_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

context 'when version_id is retrieved successful' do
let(:os_release_value) { '18.04' }
let(:fact_value) { { 'full' => '18.04', 'major' => '18', 'minor' => '4' } }
let(:fact_value) { { 'full' => '18.04', 'major' => '18.04' } }

it_behaves_like 'calls Facter::Resolvers::OsRelease with :name'

Expand Down
54 changes: 40 additions & 14 deletions spec/facter/resolvers/os_release_resolver_spec.rb
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
# frozen_string_literal: true

describe Facter::Resolvers::OsRelease do
context 'when /etc/os-release file is readable' do
before do
allow(Facter::Util::FileHelper).to receive(:safe_readlines)
.with('/etc/os-release')
.and_return(load_fixture('os_release').readlines)
end
after do
Facter::Resolvers::OsRelease.invalidate_cache
end

after do
Facter::Resolvers::OsRelease.invalidate_cache
end
before do
allow(Facter::Util::FileHelper).to receive(:safe_readlines)
.with('/etc/os-release')
.and_return(os_release_content)
end

context 'when on Ubuntu' do
let(:os_release_content) { load_fixture('os_release').readlines }

it 'returns os NAME' do
result = Facter::Resolvers::OsRelease.resolve(:name)
Expand Down Expand Up @@ -38,16 +40,40 @@
end

context 'when /etc/os-release file is not readable' do
before do
allow(Facter::Util::FileHelper).to receive(:safe_readlines)
.with('/etc/os-release')
.and_return([])
end
let(:os_release_content) { [] }

it 'returns nil' do
result = Facter::Resolvers::OsRelease.resolve(:version_codename)

expect(result).to be(nil)
end
end

context 'when on Debian' do
let(:os_release_content) { load_fixture('debian_os_release').readlines }

it 'returns os NAME' do
result = Facter::Resolvers::OsRelease.resolve(:name)

expect(result).to eq('Debian')
end

it 'returns os PRETTY_NAME' do
result = Facter::Resolvers::OsRelease.resolve(:pretty_name)

expect(result).to eq('Debian GNU/Linux 10 (buster)')
end

it 'returns os VERSION_ID with padded 0' do
result = Facter::Resolvers::OsRelease.resolve(:version_id)

expect(result).to eq('10.0')
end

it 'returns os VERSION_CODENAME' do
result = Facter::Resolvers::OsRelease.resolve(:version_codename)

expect(result).to eq('buster')
end
end
end
9 changes: 9 additions & 0 deletions spec/fixtures/debian_os_release
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"