On Wednesday, June 25, 2014 4:44:27 PM UTC-5, [email protected] wrote: > > > While migrating our local modules from puppet 2 to puppet 3 I think I've > found a backwards-incompatible change that's not listed in the release > notes. I'd like to verify that what I'm seeing is expected, and make sure > I'm not missing any other side-effects of the change. > > In puppet 2 templates, array slices which returned a single element were > still returned as an array, so a structure like this was valid: > > <%- myarray[-1].each do |text| -%> > <%=text%> > <%- end -%> > > In puppet 3 templates this throws an error: > undefined method `each' for "foo":String at ... > > It looks like slices that return only a single element are now returned as > the type of the array element rather than as an array. I don't see this > change mentioned anywhere at < > http://docs.puppetlabs.com/puppet/3/reference/release_notes.html>. > > Is there anything else to this change that I'm missing, or are there other > side-effects to this I should be watching out for? > >
Yes. 1. The meaning of Ruby scriptlet code in an ERB template is determined by Ruby, not by Puppet. If there had been a change, then there would be no particular reason to expect it to be called out in Puppet's release notes. 2. The Ruby expression myarray[-1] does not compute an array slice, it returns the last element of the array. As far as I am aware, it hasn't computed a slice in any version of Ruby. The behavior you describe is normal, and does not itself reflect a change in Puppet *or* Ruby. Presumably the real code that caused you trouble has something more subtle going on. For example, maybe the structure of myarray ends up being different in Puppet 3 than in Puppet 2. I would need to see the real manifests by which its value is assigned to guess at why. 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/bc92d316-150b-4dd5-a2f7-5b6ce7b27f3e%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
