File tree Expand file tree Collapse file tree 2 files changed +22
-4
lines changed
lib/puppet/indirector/facts
spec/unit/indirector/facts Expand file tree Collapse file tree 2 files changed +22
-4
lines changed Original file line number Diff line number Diff line change @@ -40,7 +40,10 @@ def find(request)
40
40
Puppet ::Node ::Facts . new ( request . key , Puppet . runtime [ :facter ] . to_hash )
41
41
else
42
42
# resolve does not return legacy facts unless requested
43
- Puppet ::Node ::Facts . new ( request . key , Puppet . runtime [ :facter ] . resolve ( '' ) )
43
+ facts = Puppet . runtime [ :facter ] . resolve ( '' )
44
+ # some versions of Facter 4 return a Facter::FactCollection instead of
45
+ # a Hash, breaking API compatibility, so force a hash using `to_h`
46
+ Puppet ::Node ::Facts . new ( request . key , facts . to_h )
44
47
end
45
48
46
49
result . add_local_facts unless request . options [ :resolve_options ]
Original file line number Diff line number Diff line change 1
1
require 'spec_helper'
2
2
require 'puppet/indirector/facts/facter'
3
3
4
+ class Puppet ::Node ::Facts ::Facter ::MyCollection < Hash ; end
5
+
4
6
describe Puppet ::Node ::Facts ::Facter do
5
7
FS = Puppet ::FileSystem
6
8
87
89
it "can exclude legacy facts" do
88
90
Puppet [ :include_legacy_facts ] = false
89
91
90
- facts = Puppet ::Node ::Facts . new ( "foo" )
91
- expect ( Puppet ::Node ::Facts ) . to receive ( :new ) . and_return ( facts )
92
92
expect ( Puppet . runtime [ :facter ] ) . to receive ( :resolve ) . with ( '' )
93
+ . and_return ( { 'kernelversion' => '1.2.3' } )
93
94
94
- @facter . find ( @request )
95
+ values = @facter . find ( @request ) . values
96
+ expect ( values ) . to be_an_instance_of ( Hash )
97
+ expect ( values ) . to include ( { 'kernelversion' => '1.2.3' } )
98
+ end
99
+
100
+ it "can exclude legacy facts using buggy facter implementations that return a Hash subclass" do
101
+ Puppet [ :include_legacy_facts ] = false
102
+
103
+ collection = Puppet ::Node ::Facts ::Facter ::MyCollection [ "kernelversion" => '1.2.3' ]
104
+ expect ( Puppet . runtime [ :facter ] ) . to receive ( :resolve ) . with ( '' )
105
+ . and_return ( collection )
106
+
107
+ values = @facter . find ( @request ) . values
108
+ expect ( values ) . to be_an_instance_of ( Hash )
109
+ expect ( values ) . to include ( { 'kernelversion' => '1.2.3' } )
95
110
end
96
111
end
97
112
You can’t perform that action at this time.
0 commit comments