diff --git a/lib/facter/resolvers/xen.rb b/lib/facter/resolvers/xen.rb index 74a9a616fb..2f02bfa01a 100644 --- a/lib/facter/resolvers/xen.rb +++ b/lib/facter/resolvers/xen.rb @@ -26,7 +26,9 @@ def detect_xen(fact_name) def detect_xen_type xen_type = 'xen0' if File.exist?('/dev/xen/evtchn') - xen_type = 'xenu' if !xen_type && (File.exist?('/proc/xen') || File.exist?('/dev/xvda1')) + if !xen_type && (File.exist?('/proc/xen') || (File.exist?('/dev/xvda1') && !File.symlink?('/dev/xvda1'))) + xen_type = 'xenu' + end xen_type end diff --git a/spec/facter/resolvers/xen_spec.rb b/spec/facter/resolvers/xen_spec.rb index e9b08a330a..222b6de1ab 100644 --- a/spec/facter/resolvers/xen_spec.rb +++ b/spec/facter/resolvers/xen_spec.rb @@ -87,4 +87,16 @@ expect(xen_resolver.resolve(:domains)).to be_nil end end + + context 'when /dev/xvda1 is a symlink' do + let(:evtchn_file) { false } + + before do + allow(File).to receive(:symlink?).with('/dev/xvda1').and_return(true) + end + + it 'returns nil' do + expect(xen_resolver.resolve(:vm)).to be_nil + end + end end