Hi John, thanks for the reply!
sorry for confusing things, that will teach me to cut and paste without reading, the template i pasted was from yesterday when i was testing with 1.9.3 the method i use at the moment is <% @vars.each_pair do |varname, hash | -%> <%= hash['comment'] %> <%= varname %> = <%= hash['value'] %> <% end -%> I was sure that i tried sort.each do and had no success but on trying it again with your code it works fine. thanks for your help Simon On Monday, February 10, 2014 2:30:37 PM UTC, jcbollinger wrote: > > > > On Monday, February 10, 2014 2:59:41 AM UTC-6, Simon wrote: >> >> Hi, >> >> I have read about the known "feature" of ruby 1.8.7 not using the entered >> order for each_pair and using some random order instead, >> > > > This is an utterly routine characteristic of such data structures. If you > want access by key, use a hash. If you want access in order, use an > array. If you want *both*, use a type specially designed to support it. > I understand that Ruby 1.9 has such a type, but I think it's a different > one than the standard Hash. > > > >> has anyone managed a work around for this that does not mean having to >> upgrade to 1.9.3 >> >> I have hiera data that looks something like this >> >> my::variables: >> "variable1": >> comment: '# this is a variable comment' >> value: '100' >> "variable2": >> comment: '# this is a variable comment' >> value: '200' >> "variable3": >> comment: '# this is a variable comment' >> value: '300' >> >> in my template i have >> >> <% @vars.sort.each_list do |varname, hash | -%> >> <%= hash['comment'] %> >> <%= varname %> = <%= hash['value'] %> >> <% end -%> >> >> > > I don't know what the method Array.each_list() is supposed to do, nor > where your arrays obtained such a method. However, you should be able to > achieve what you want with something quite similar to the code you > presented. Something like this, perhaps: > > <% @vars.sort.each do | pair | -%> > <%= pair[1]['comment'] %> > <%= pair[0] %> = <%= pair[1]['value'] %> > <% end -%> > > > >> i wanted them to come out like the following but they come out in a >> random order so nearly every puppet run could cause a change and restart a >> service >> > > > Hash.sort() yields the contents of the hash as an array of [ key, value ] > pairs, in ascending order by key (according to the keys' types' <=> > operators). This is the natural basis for such a computation as you want > to perform. > > If you're not getting the expected result then I suspect the problem is > different than you think. In view of the fact that I find no documentation > anywhere for an Array.each_list() or Enumerable.each_list() method in any > version of Ruby, I suspect that your catalog compilation is failing when it > tries to evaluate that template. Thereafter, your agent will either apply > a cached catalog or apply no catalog at all, depending on how it's > configured. Check your logs. > > > John > > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/c8ee1809-127e-4711-9757-7befaf7013f8%40googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
