Skip to content

Commit 49379df

Browse files
authored
Merge pull request #2661 from joshcooper/facter_amazon_2017
(FACT-3451) Restore os facts for AmazonLinux 2
2 parents 4b3b626 + e75d09e commit 49379df

File tree

4 files changed

+91
-40
lines changed

4 files changed

+91
-40
lines changed

lib/facter/facts/amzn/os/distro/release.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ def call_the_resolver
2020
end
2121

2222
def determine_release_version
23-
version = Facter::Resolvers::Amzn::OsReleaseRpm.resolve(:version)
23+
# For backwards compatibility, use system-release for AL1/AL2
24+
version = Facter::Resolvers::ReleaseFromFirstLine.resolve(:release, release_file: '/etc/system-release')
25+
if !version.nil? && version != '2'
26+
# Use os-release for AL2023 and up
27+
version = Facter::Resolvers::Amzn::OsReleaseRpm.resolve(:version)
28+
end
2429
version ||= Facter::Resolvers::OsRelease.resolve(:version_id)
2530

2631
Facter::Util::Facts.release_hash_from_string(version, include_patch: true)

lib/facter/facts/amzn/os/release.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ def call_the_resolver
1818
end
1919

2020
def determine_release_version
21-
version = Facter::Resolvers::Amzn::OsReleaseRpm.resolve(:version)
21+
# For backwards compatibility, use system-release for AL1/AL2
22+
version = Facter::Resolvers::ReleaseFromFirstLine.resolve(:release, release_file: '/etc/system-release')
23+
if !version.nil? && version != '2'
24+
# Use os-release for AL2023 and up
25+
version = Facter::Resolvers::Amzn::OsReleaseRpm.resolve(:version)
26+
end
2227
version ||= Facter::Resolvers::OsRelease.resolve(:version_id)
2328

2429
Facter::Util::Facts.release_hash_from_string(version)

spec/facter/facts/amzn/os/distro/release_spec.rb

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@
55
subject(:fact) { Facts::Amzn::Os::Distro::Release.new }
66

77
before do
8-
allow(Facter::Resolvers::Amzn::OsReleaseRpm).to receive(:resolve)
9-
.with(:version)
10-
.and_return(value)
8+
allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
9+
.with(:release, { release_file: '/etc/system-release' })
10+
.and_return(system_release_value)
1111
end
1212

13-
context 'when version is retrieved from rpm' do
14-
let(:value) { '2.13.0' }
15-
let(:release) { { 'full' => '2.13.0', 'major' => '2', 'minor' => '13', 'patch' => '0' } }
13+
context 'when version is retrieved from rpm on AL2023' do
14+
let(:system_release_value) { '2023' }
15+
let(:os_release_value) { '2023.1.20230912' }
16+
let(:release) { { 'full' => '2023.1.20230912', 'major' => '2023', 'minor' => '1', 'patch' => '20230912' } }
17+
18+
it 'returns os distro release fact including patch' do
19+
allow(Facter::Resolvers::Amzn::OsReleaseRpm).to receive(:resolve)
20+
.with(:version)
21+
.and_return(os_release_value)
1622

17-
it 'returns os distro release fact' do
1823
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
1924
contain_exactly(an_object_having_attributes(name: 'os.distro.release', value: release),
2025
an_object_having_attributes(name: 'lsbdistrelease',
@@ -26,14 +31,27 @@
2631
end
2732
end
2833

29-
context 'when version is retrieved from os-release file' do
30-
let(:value) { nil }
31-
let(:os_release) { '2' }
32-
let(:release) { { 'full' => '2', 'major' => '2' } }
34+
context 'when version is retrieved from os-release file on AL1' do
35+
let(:system_release_value) { nil }
36+
let(:os_release_value) { '2017.03' }
37+
let(:release) { { 'full' => '2017.03', 'major' => '2017', 'minor' => '03' } }
3338

34-
before do
35-
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release)
39+
it 'returns os distro release fact' do
40+
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release_value)
41+
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
42+
contain_exactly(an_object_having_attributes(name: 'os.distro.release', value: release),
43+
an_object_having_attributes(name: 'lsbdistrelease',
44+
value: release['full'], type: :legacy),
45+
an_object_having_attributes(name: 'lsbmajdistrelease',
46+
value: release['major'], type: :legacy),
47+
an_object_having_attributes(name: 'lsbminordistrelease',
48+
value: release['minor'], type: :legacy))
3649
end
50+
end
51+
52+
context 'when version is retrieved from os-release file on AL2' do
53+
let(:system_release_value) { '2' }
54+
let(:release) { { 'full' => '2', 'major' => '2' } }
3755

3856
it 'returns os distro release fact' do
3957
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
@@ -45,14 +63,17 @@
4563
an_object_having_attributes(name: 'lsbminordistrelease',
4664
value: release['minor'], type: :legacy))
4765
end
66+
end
67+
68+
context 'when release can\'t be retrieved' do
69+
let(:system_release_value) { nil }
70+
let(:os_release_value) { nil }
4871

49-
context 'when release can\'t be received' do
50-
let(:os_release) { nil }
72+
it 'returns os distro release fact as nil' do
73+
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release_value)
5174

52-
it 'returns os distro release fact as nil' do
53-
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
54-
have_attributes(name: 'os.distro.release', value: nil)
55-
end
75+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
76+
have_attributes(name: 'os.distro.release', value: nil)
5677
end
5778
end
5879
end

spec/facter/facts/amzn/os/release_spec.rb

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@
55
subject(:fact) { Facts::Amzn::Os::Release.new }
66

77
before do
8-
allow(Facter::Resolvers::Amzn::OsReleaseRpm).to receive(:resolve)
9-
.with(:version)
10-
.and_return(value)
8+
allow(Facter::Resolvers::ReleaseFromFirstLine).to receive(:resolve)
9+
.with(:release, { release_file: '/etc/system-release' })
10+
.and_return(system_release_value)
1111
end
1212

13-
context 'when version is retrieved from rpm' do
14-
let(:value) { '2.13.0' }
15-
let(:release) { { 'full' => '2.13.0', 'major' => '2', 'minor' => '13' } }
13+
context 'when version is retrieved from rpm on AL2023' do
14+
let(:system_release_value) { '2023' }
15+
let(:os_release_value) { '2023.1.20230912' }
16+
let(:release) { { 'full' => '2023.1.20230912', 'major' => '2023', 'minor' => '1' } }
17+
18+
it 'returns os release fact excluding patch' do
19+
allow(Facter::Resolvers::Amzn::OsReleaseRpm).to receive(:resolve)
20+
.with(:version)
21+
.and_return(os_release_value)
1622

17-
it 'returns os release fact' do
1823
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
1924
contain_exactly(an_object_having_attributes(name: 'os.release', value: release),
2025
an_object_having_attributes(name: 'operatingsystemmajrelease',
@@ -24,14 +29,26 @@
2429
end
2530
end
2631

27-
context 'when version is retrieved from os-release file' do
28-
let(:value) { nil }
29-
let(:os_release) { '2' }
30-
let(:release) { { 'full' => '2', 'major' => '2' } }
32+
context 'when version is retrieved from os-release file on AL1' do
33+
let(:system_release_value) { nil }
34+
let(:os_release_value) { '2017.03' }
35+
let(:release) { { 'full' => '2017.03', 'major' => '2017', 'minor' => '03' } }
36+
37+
it 'returns os release fact' do
38+
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release_value)
3139

32-
before do
33-
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release)
40+
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
41+
contain_exactly(an_object_having_attributes(name: 'os.release', value: release),
42+
an_object_having_attributes(name: 'operatingsystemmajrelease',
43+
value: release['major'], type: :legacy),
44+
an_object_having_attributes(name: 'operatingsystemrelease',
45+
value: release['full'], type: :legacy))
3446
end
47+
end
48+
49+
context 'when version is retrieved from os-release file on AL2' do
50+
let(:system_release_value) { '2' }
51+
let(:release) { { 'full' => '2', 'major' => '2' } }
3552

3653
it 'returns os release fact' do
3754
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
@@ -41,14 +58,17 @@
4158
an_object_having_attributes(name: 'operatingsystemrelease',
4259
value: release['full'], type: :legacy))
4360
end
61+
end
62+
63+
context 'when version can\'t be retrieved' do
64+
let(:system_release_value) { nil }
65+
let(:os_release_value) { nil }
4466

45-
context 'when version can\'t be retrieved' do
46-
let(:os_release) { nil }
67+
it 'returns os release fact as nil' do
68+
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release_value)
4769

48-
it 'returns os release fact as nil' do
49-
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
50-
have_attributes(name: 'os.release', value: nil)
51-
end
70+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
71+
have_attributes(name: 'os.release', value: nil)
5272
end
5373
end
5474
end

0 commit comments

Comments
 (0)