Skip to content

Commit a37196b

Browse files
authored
Merge pull request #2738 from mhashizume/FACT-3471/main/azure-linux
Add support for Microsoft Azure Linux to Facter 4.x
2 parents 8dfaabf + d533faf commit a37196b

File tree

6 files changed

+100
-3
lines changed

6 files changed

+100
-3
lines changed

Diff for: lib/facter/config.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ module Config
2626
Meego
2727
Oel
2828
Ovs
29+
Mariner
30+
Azurelinux
2931
]
3032
},
3133
{
@@ -40,8 +42,7 @@ module Config
4042
'Photon',
4143
'Slackware',
4244
'Mageia',
43-
'Openwrt',
44-
'Mariner'
45+
'Openwrt'
4546
]
4647
},
4748
{

Diff for: lib/facter/facts/azurelinux/os/release.rb

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Azurelinux
5+
module Os
6+
class Release
7+
FACT_NAME = 'os.release'
8+
ALIASES = %w[operatingsystemmajrelease operatingsystemrelease].freeze
9+
10+
def call_the_resolver
11+
version = from_specific_file || from_os_release
12+
13+
return Facter::ResolvedFact.new(FACT_NAME, nil) unless version
14+
15+
[Facter::ResolvedFact.new(FACT_NAME, version),
16+
Facter::ResolvedFact.new(ALIASES.first, version['major'], :legacy),
17+
Facter::ResolvedFact.new(ALIASES.last, version['full'], :legacy)]
18+
end
19+
20+
def from_specific_file
21+
version = Facter::Resolvers::SpecificReleaseFile.resolve(:release,
22+
{ release_file: '/etc/azurelinux-release',
23+
regex: /AZURELINUX_BUILD_NUMBER=([0-9.]+)/ })
24+
Facter::Util::Facts.release_hash_from_matchdata(version)
25+
end
26+
27+
def from_os_release
28+
version = Facter::Resolvers::OsRelease.resolve(:version_id)
29+
30+
Facter::Util::Facts.release_hash_from_string(version)
31+
end
32+
end
33+
end
34+
end
35+
end

Diff for: lib/facter/framework/core/file_loader.rb

+3
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,9 @@
249249
when 'archlinux'
250250
require_relative '../../facts/archlinux/os/release'
251251

252+
when 'azurelinux'
253+
require_relative '../../facts/azurelinux/os/release'
254+
252255
when 'bsd'
253256
require_relative '../../facts/bsd/kernelmajversion'
254257
require_relative '../../facts/bsd/kernelversion'

Diff for: lib/facter/resolvers/os_release.rb

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ def join_os_name
9696
@fact_list[:name] = if os_name.downcase.start_with?('red', 'oracle', 'arch', 'manjaro')
9797
os_name = os_name.split(' ')[0..1].join
9898
os_name
99+
elsif os_name.downcase.end_with?('azure linux')
100+
os_name.split(' ')[1..2].join
99101
elsif os_name.downcase.end_with?('mariner')
100102
os_name.split(' ')[-1].strip
101103
else

Diff for: lib/facter/util/facts/facts_utils.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module Facts
1010

1111
PHYSICAL_HYPERVISORS = %w[physical xen0 vmware_server vmware_workstation openvzhn vserver_host].freeze
1212
REDHAT_FAMILY = %w[redhat rhel fedora centos scientific ascendos cloudlinux psbm
13-
oraclelinux ovs oel amazon xenserver xcp-ng virtuozzo photon mariner].freeze
13+
oraclelinux ovs oel amazon xenserver xcp-ng virtuozzo photon mariner azurelinux].freeze
1414
DEBIAN_FAMILY = %w[debian ubuntu huaweios linuxmint devuan kde].freeze
1515
SUSE_FAMILY = %w[sles sled suse].freeze
1616
GENTOO_FAMILY = ['gentoo'].freeze

Diff for: spec/facter/facts/azurelinux/os/release_spec.rb

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# frozen_string_literal: true
2+
3+
describe Facts::Azurelinux::Os::Release do
4+
describe '#call_the_resolver' do
5+
subject(:fact) { Facts::Azurelinux::Os::Release.new }
6+
7+
before do
8+
allow(Facter::Resolvers::SpecificReleaseFile).to receive(:resolve)
9+
.with(:release, { release_file: '/etc/azurelinux-release',
10+
regex: /AZURELINUX_BUILD_NUMBER=([0-9.]+)/ })
11+
.and_return(value)
12+
end
13+
14+
context 'when version is retrieved from specific file' do
15+
let(:value) { /AZURELINUX_BUILD_NUMBER=([0-9.]+)/.match('AZURELINUX_BUILD_NUMBER=3.0.20240401') }
16+
let(:release) { { 'full' => '3.0.20240401', 'major' => '3', 'minor' => '0' } }
17+
18+
it 'returns operating system name fact' do
19+
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
20+
contain_exactly(an_object_having_attributes(name: 'os.release', value: release),
21+
an_object_having_attributes(name: 'operatingsystemmajrelease',
22+
value: release['major'], type: :legacy),
23+
an_object_having_attributes(name: 'operatingsystemrelease',
24+
value: release['full'], type: :legacy))
25+
end
26+
end
27+
28+
context 'when version is retrieved from os-release file' do
29+
let(:value) { nil }
30+
let(:os_release) { '3.0.20240401' }
31+
let(:release) { { 'full' => '3.0.20240401', 'major' => '3', 'minor' => '0' } }
32+
33+
before do
34+
allow(Facter::Resolvers::OsRelease).to receive(:resolve).with(:version_id).and_return(os_release)
35+
end
36+
37+
it 'returns operating system name fact' do
38+
expect(fact.call_the_resolver).to be_an_instance_of(Array).and \
39+
contain_exactly(an_object_having_attributes(name: 'os.release', value: release),
40+
an_object_having_attributes(name: 'operatingsystemmajrelease',
41+
value: release['major'], type: :legacy),
42+
an_object_having_attributes(name: 'operatingsystemrelease',
43+
value: release['full'], type: :legacy))
44+
end
45+
46+
context 'when release can\'t be received' do
47+
let(:os_release) { nil }
48+
49+
it 'returns operating system name fact' do
50+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
51+
have_attributes(name: 'os.release', value: nil)
52+
end
53+
end
54+
end
55+
end
56+
end

0 commit comments

Comments
 (0)