Skip to content

Commit f34a74f

Browse files
(FACT-2728) Added hypervisors fact for Solaris
1 parent b7fa483 commit f34a74f

4 files changed

Lines changed: 233 additions & 0 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Solaris
5+
module Hypervisors
6+
class Ldom
7+
FACT_NAME = 'hypervisors.ldom'
8+
9+
def initialize
10+
@log = Facter::Log.new(self)
11+
end
12+
13+
def call_the_resolver
14+
fact_value = %i[
15+
chassis_serial control_domain domain_name
16+
domain_uuid role_control role_io role_root role_service
17+
].map! { |key| [key, Facter::Resolvers::Solaris::Ldom.resolve(key)] }.to_h
18+
19+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
20+
end
21+
end
22+
end
23+
end
24+
end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Solaris
5+
module Hypervisors
6+
class Zone
7+
FACT_NAME = 'hypervisors.zone'
8+
9+
def initialize
10+
@log = Facter::Log.new(self)
11+
end
12+
13+
def call_the_resolver
14+
fact_value = current_zone
15+
16+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
17+
end
18+
19+
def current_zone
20+
current_zone_name = Facter::Resolvers::Solaris::ZoneName.resolve(:current_zone_name)
21+
return unless current_zone_name
22+
23+
zones = Facter::Resolvers::Solaris::Zone.resolve(:zone)
24+
return nil unless zones
25+
26+
current_zone = zones.find { |r| r[:name] == current_zone_name }
27+
28+
{
29+
brand: current_zone[:brand],
30+
id: current_zone[:id],
31+
ip_type: current_zone[:iptype],
32+
name: current_zone[:name],
33+
uuid: current_zone[:uuid]
34+
}
35+
end
36+
end
37+
end
38+
end
39+
end
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# frozen_string_literal: true
2+
3+
describe Facts::Solaris::Hypervisors::Ldom do
4+
describe '#call_the_resolver' do
5+
subject(:fact) { Facts::Solaris::Hypervisors::Ldom.new }
6+
7+
before do
8+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve)
9+
end
10+
11+
context 'when Ldom resolver returns values' do
12+
let(:value) do
13+
{
14+
'chassis_serial' => 'AK00358110',
15+
'control_domain' => 'opdx-a0-sun2',
16+
'domain_name' => 'sol11-9',
17+
'domain_uuid' => 'd7a3a4df-ce8c-47a9-b396-cb5a5f30c0b2',
18+
'role_control' => 'false',
19+
'role_io' => 'false',
20+
'role_root' => 'false',
21+
'role_service' => 'false'
22+
}
23+
end
24+
25+
before do
26+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:chassis_serial).and_return('AK00358110')
27+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:control_domain).and_return('opdx-a0-sun2')
28+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:domain_name).and_return('sol11-9')
29+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_control).and_return('false')
30+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_io).and_return('false')
31+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_root).and_return('false')
32+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_service).and_return('false')
33+
allow(Facter::Resolvers::Solaris::Ldom)
34+
.to receive(:resolve)
35+
.with(:domain_uuid)
36+
.and_return('d7a3a4df-ce8c-47a9-b396-cb5a5f30c0b2')
37+
end
38+
39+
it 'returns virtual fact as physical' do
40+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
41+
have_attributes(name: 'hypervisors.ldom', value: value)
42+
end
43+
end
44+
45+
context 'when ldom resolver returns nil' do
46+
before do
47+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:chassis_serial).and_return(nil)
48+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:control_domain).and_return(nil)
49+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:domain_name).and_return(nil)
50+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_control).and_return(nil)
51+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_impl).and_return(nil)
52+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_io).and_return(nil)
53+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_root).and_return(nil)
54+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:role_service).and_return(nil)
55+
allow(Facter::Resolvers::Solaris::Ldom).to receive(:resolve).with(:domain_uuid).and_return(nil)
56+
end
57+
58+
context 'when role_control is false' do
59+
let(:value) do
60+
{
61+
'chassis_serial' => nil,
62+
'control_domain' => nil,
63+
'domain_name' => nil,
64+
'domain_uuid' => nil,
65+
'role_control' => nil,
66+
'role_io' => nil,
67+
'role_root' => nil,
68+
'role_service' => nil
69+
}
70+
end
71+
72+
it 'returns virtual fact as physical' do
73+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
74+
have_attributes(name: 'hypervisors.ldom', value: value)
75+
end
76+
end
77+
end
78+
end
79+
end
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# frozen_string_literal: true
2+
3+
describe Facts::Solaris::Hypervisors::Zone do
4+
describe '#call_the_resolver' do
5+
subject(:fact) { Facts::Solaris::Hypervisors::Zone.new }
6+
7+
before do
8+
allow(Facter::Resolvers::Solaris::ZoneName).to receive(:resolve)
9+
allow(Facter::Resolvers::Solaris::Zone).to receive(:resolve)
10+
end
11+
12+
context 'when current zone name is nil' do
13+
let(:current_zone_name) { nil }
14+
15+
before do
16+
allow(Facter::Resolvers::Solaris::ZoneName)
17+
.to receive(:resolve)
18+
.with(:current_zone_name)
19+
.and_return(current_zone_name)
20+
end
21+
22+
it 'returns virtual fact as physical' do
23+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
24+
have_attributes(name: 'hypervisors.zone', value: nil)
25+
end
26+
end
27+
28+
context 'when zone resolver call is nil' do
29+
let(:current_zone_name) { 'global' }
30+
let(:zones) { nil }
31+
32+
before do
33+
allow(Facter::Resolvers::Solaris::ZoneName)
34+
.to receive(:resolve)
35+
.with(:current_zone_name)
36+
.and_return(current_zone_name)
37+
allow(Facter::Resolvers::Solaris::Zone).to receive(:resolve).with(:zone).and_return(zones)
38+
end
39+
40+
it 'returns current zone details' do
41+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
42+
have_attributes(name: 'hypervisors.zone', value: nil)
43+
end
44+
end
45+
46+
context 'when current zone name is valid' do
47+
let(:current_zone_name) { 'global' }
48+
let(:zones) do
49+
[
50+
{
51+
brand: 'solaris',
52+
id: 0,
53+
iptype: 'shared',
54+
name: 'global',
55+
uuid: '1234',
56+
status: 'running',
57+
path: 'my/path'
58+
},
59+
{
60+
brand: 'solaris',
61+
id: 1,
62+
iptype: 'not_shared',
63+
name: 'global2',
64+
uuid: '4321',
65+
status: 'running',
66+
path: 'my/path'
67+
}
68+
]
69+
end
70+
71+
before do
72+
allow(Facter::Resolvers::Solaris::ZoneName)
73+
.to receive(:resolve)
74+
.with(:current_zone_name)
75+
.and_return(current_zone_name)
76+
allow(Facter::Resolvers::Solaris::Zone).to receive(:resolve).with(:zone).and_return(zones)
77+
end
78+
79+
it 'returns current zone details' do
80+
expect(fact.call_the_resolver).to be_an_instance_of(Facter::ResolvedFact).and \
81+
have_attributes(name: 'hypervisors.zone', value: {
82+
'brand' => 'solaris',
83+
'id' => 0,
84+
'ip_type' => 'shared',
85+
'name' => 'global',
86+
'uuid' => '1234'
87+
})
88+
end
89+
end
90+
end
91+
end

0 commit comments

Comments
 (0)