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

Commit

Permalink
Merge da1d4c0 into 3eae28e
Browse files Browse the repository at this point in the history
  • Loading branch information
oanatmaria committed Apr 29, 2020
2 parents 3eae28e + da1d4c0 commit 819e8bd
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 39 deletions.
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/"

0 comments on commit 819e8bd

Please sign in to comment.