Skip to content

Commit fce69ea

Browse files
committed
(FACT-3163) Add support for OpenBSD
fix order dependency of tests when run: $ rspec -fd './spec/facter/resolvers/openbsd/virtual_spec.rb[1:2:1]' \ './spec/facter/util/facts/posix/virtual_detector_spec.rb[1:1:12:1]' \ --order random:17181 additionally recognized, the 'virtual' fact didn't return 'physical' when on a physical machine.
1 parent 5a7ad83 commit fce69ea

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# frozen_string_literal: true
2+
3+
module Facter
4+
module Resolvers
5+
module Openbsd
6+
class Virtual < BaseResolver
7+
init_resolver
8+
9+
class << self
10+
#:model
11+
12+
VM_GUEST_SYSCTL_NAMES = {
13+
'VMM' => 'vmm',
14+
'vServer' => 'vserver',
15+
'oracle' => 'virtualbox',
16+
'xen' => 'xenu',
17+
'none' => nil
18+
}.freeze
19+
20+
private
21+
22+
def post_resolve(fact_name, _options)
23+
@fact_list.fetch(fact_name) { read_facts(fact_name) }
24+
end
25+
26+
CTL_HW = 6
27+
HW_PRODUCT = 15
28+
29+
def read_facts(fact_name)
30+
require 'facter/resolvers/bsd/ffi/ffi_helper'
31+
32+
vm = Facter::Bsd::FfiHelper.sysctl(:string, [CTL_HW, HW_PRODUCT])
33+
if VM_GUEST_SYSCTL_NAMES.key?(vm)
34+
vm = VM_GUEST_SYSCTL_NAMES[vm]
35+
else
36+
vm = "physical"
37+
end
38+
@fact_list[:vm] = vm
39+
@fact_list[fact_name]
40+
end
41+
end
42+
end
43+
end
44+
end
45+
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# frozen_string_literal: true
2+
3+
describe Facter::Resolvers::Openbsd::Virtual do
4+
subject(:resolver) { Facter::Resolvers::Openbsd::Virtual }
5+
6+
after do
7+
resolver.invalidate_cache
8+
end
9+
10+
before do
11+
allow(Facter::Bsd::FfiHelper)
12+
.to receive(:sysctl)
13+
.with(:string, [6, 15])
14+
.and_return(vm)
15+
end
16+
17+
let(:vm) { nil }
18+
19+
context 'when running on bare metal' do
20+
let(:vm) { 'physical' }
21+
22+
it 'returns physical' do
23+
expect(resolver.resolve(:vm)).to eq('physical')
24+
end
25+
end
26+
27+
context 'when running in a vm' do
28+
let(:vm) { 'VMM' }
29+
30+
it 'returns VMM' do
31+
expect(resolver.resolve(:vm)).to eq('vmm')
32+
end
33+
end
34+
end

spec/facter/util/facts/posix/virtual_detector_spec.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,25 @@
4747
end
4848
end
4949

50+
context 'when OpenBSD' do
51+
let(:value) { 'vmm' }
52+
53+
before do
54+
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
55+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return('vmm')
56+
end
57+
58+
it 'calls Facter::Resolvers::Openbsd::Virtual' do
59+
detector.platform
60+
61+
expect(Facter::Resolvers::Openbsd::Virtual).to have_received(:resolve).with(:vm)
62+
end
63+
64+
it 'returns vmm' do
65+
expect(detector.platform).to eq(value)
66+
end
67+
end
68+
5069
context 'when gce' do
5170
let(:value) { 'gce' }
5271

@@ -73,6 +92,7 @@
7392
before do
7493
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
7594
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
95+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
7696
allow(Facter::Resolvers::Linux::DmiBios).to receive(:resolve).with(:bios_vendor).and_return(nil)
7797
allow(Facter::Resolvers::Uname).to receive(:resolve).with(:kernelversion).and_return(nil)
7898
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(value)
@@ -95,6 +115,7 @@
95115
before do
96116
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
97117
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
118+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
98119
allow(Facter::Resolvers::Linux::DmiBios).to receive(:resolve).with(:bios_vendor).and_return(nil)
99120
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
100121
allow(Facter::Resolvers::Uname).to receive(:resolve).with(:kernelversion).and_return(nil)
@@ -118,6 +139,7 @@
118139
before do
119140
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
120141
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
142+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
121143
allow(Facter::Resolvers::Linux::DmiBios).to receive(:resolve).with(:bios_vendor).and_return(nil)
122144
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
123145
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
@@ -142,6 +164,7 @@
142164
before do
143165
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
144166
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
167+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
145168
allow(Facter::Resolvers::Linux::DmiBios).to receive(:resolve).with(:bios_vendor).and_return(nil)
146169
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
147170
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
@@ -167,6 +190,7 @@
167190
before do
168191
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
169192
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
193+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
170194
allow(Facter::Resolvers::Linux::DmiBios).to receive(:resolve).with(:bios_vendor).and_return(nil)
171195
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
172196
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
@@ -193,6 +217,7 @@
193217
before do
194218
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
195219
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
220+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
196221
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
197222
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
198223
allow(Facter::Resolvers::OpenVz).to receive(:resolve).with(:vm).and_return(nil)
@@ -226,6 +251,7 @@
226251
before do
227252
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
228253
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
254+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
229255
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
230256
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
231257
allow(Facter::Resolvers::OpenVz).to receive(:resolve).with(:vm).and_return(nil)
@@ -271,6 +297,7 @@
271297
before do
272298
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
273299
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
300+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
274301
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
275302
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
276303
allow(Facter::Resolvers::OpenVz).to receive(:resolve).with(:vm).and_return(nil)
@@ -293,6 +320,7 @@
293320
before do
294321
allow(Facter::Resolvers::Containers).to receive(:resolve).with(:vm).and_return(nil)
295322
allow(Facter::Resolvers::Freebsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
323+
allow(Facter::Resolvers::Openbsd::Virtual).to receive(:resolve).with(:vm).and_return(nil)
296324
allow(Facter::Resolvers::VirtWhat).to receive(:resolve).with(:vm).and_return(nil)
297325
allow(Facter::Resolvers::Vmware).to receive(:resolve).with(:vm).and_return(nil)
298326
allow(Facter::Resolvers::OpenVz).to receive(:resolve).with(:vm).and_return(nil)

0 commit comments

Comments
 (0)