I’m building a config file for one of our inline apps. Its essentially a json file. I’m having a lot of trouble getting puppet/ruby 1.8 to output the hash/json the same way each time.
I’m currently using
<%= require "json"; JSON.pretty_generate data %>
But while outputting human readable content, it doesn’t guarantee the same order each time. Which means that puppet will send out change notifications often for the same data.
I’ve also tried
<%= require "json"; JSON.pretty_generate Hash[*data.sort.flatten] %>
Which will generate the same data/order each time. The problem comes when data has a nested array.
data => { beanstalkd => [ "server1", ] }
becomes
"beanstalkd": "server1",
instead of
"beanstalkd": ["server1"],
I’ve been fighting with this for a few days on and off now, so would like some help
Hash is an unordered data structure. In some languages (ruby, for example) there’s an ordered version of hash, but in most cases in most languages you shouldn’t rely on any specific order in a hash.
If order is important to you, you should use an array. So, your hash
becomes this
I think, it doesn’t force too many changes in your code.
Workaround to your situation
Try this: