File tree 3 files changed +48
-2
lines changed
lib/octocatalog-diff/facts
3 files changed +48
-2
lines changed Original file line number Diff line number Diff line change @@ -14,8 +14,19 @@ class JSON
14
14
# @return [Hash] Facts
15
15
def self . fact_retriever ( options = { } , node = '' )
16
16
facts = ::JSON . parse ( options . fetch ( :fact_file_string ) )
17
- node = facts . fetch ( 'fqdn' , 'unknown.node' ) if node . empty?
18
- { 'name' => node , 'values' => facts }
17
+
18
+ if facts . keys . include? ( 'name' ) && facts . keys . include? ( 'values' ) && facts [ 'values' ] . is_a? ( Hash )
19
+ # If you saved the output of something like
20
+ # `puppet facts find $(hostname)` the structure will already be a
21
+ # {'name' => <fqdn>, 'values' => <hash of facts>}. We do nothing
22
+ # here because we don't want to double-encode.
23
+ else
24
+ facts = { 'name' => node , 'values' => facts }
25
+ end
26
+
27
+ facts [ 'name' ] = node unless node . empty?
28
+ facts [ 'name' ] = facts [ 'values' ] . fetch ( 'fqdn' , 'unknown.node' ) if facts [ 'name' ] . empty?
29
+ facts
19
30
end
20
31
end
21
32
end
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" :" rspec-node.abc.github.net" ,
3
+ "values" :{
4
+ "apt_update_last_success" :1458162123 ,
5
+ "architecture" :" amd64" ,
6
+ "datacenter" :" xyz" ,
7
+ "fqdn" :" rspec-node.xyz.github.net" ,
8
+ "_timestamp" :" 2014-12-02 14:56:20 -0600"
9
+ }
10
+ }
Original file line number Diff line number Diff line change 39
39
expect ( result [ 'name' ] ) . to eq ( 'override.node' )
40
40
expect ( result [ 'values' ] [ 'fqdn' ] ) . to eq ( 'rspec-node.xyz.github.net' )
41
41
end
42
+
43
+ it 'should fill in a missing name from hash with name/values' do
44
+ fact_file = OctocatalogDiff ::Spec . fixture_path ( 'facts/encoded-facts.json' )
45
+ data = JSON . parse ( File . read ( fact_file ) )
46
+ data [ 'name' ] = ''
47
+ options = {
48
+ fact_file_string : JSON . generate ( data )
49
+ }
50
+ result = OctocatalogDiff ::Facts ::JSON . fact_retriever ( options )
51
+ expect ( result ) . to be_a_kind_of ( Hash )
52
+ expect ( result [ 'name' ] ) . to eq ( 'rspec-node.xyz.github.net' )
53
+ expect ( result [ 'values' ] [ 'fqdn' ] ) . to eq ( 'rspec-node.xyz.github.net' )
54
+ end
55
+
56
+ it 'should not double-encode hash already containing name and values' do
57
+ fact_file = OctocatalogDiff ::Spec . fixture_path ( 'facts/encoded-facts.json' )
58
+ options = {
59
+ fact_file_string : File . read ( fact_file )
60
+ }
61
+ result = OctocatalogDiff ::Facts ::JSON . fact_retriever ( options )
62
+ expect ( result ) . to be_a_kind_of ( Hash )
63
+ expect ( result . keys ) . to match_array ( %w( name values ) )
64
+ expect ( result [ 'name' ] ) . to eq ( 'rspec-node.abc.github.net' )
65
+ expect ( result [ 'values' ] [ 'fqdn' ] ) . to eq ( 'rspec-node.xyz.github.net' )
66
+ end
42
67
end
43
68
end
You can’t perform that action at this time.
0 commit comments