Issue #7422 has been updated by Jeff McCune. Status changed from Accepted to Merged - Pending Release Target version changed from 3.x to 2.7.20
# Fixed Big thanks to Dan Bode for fixing this issue over the weekend. If anyone is able to try the 2.7.x branch please do so and let us know if it resolves all of the issues mentioned in this ticket. This will be included in the 2.7.20, 3.0.2, and 3.1.0 release of Puppet as [0524a0a](https://github.com/puppetlabs/puppet/commit/0524a0a) -Jeff ---------------------------------------- Bug #7422: undefined method `<<' for {}:Hash when combining resource chaining, metaparameters, and autorequire https://projects.puppetlabs.com/issues/7422#change-75799 Author: Nick Fagerlund Status: Merged - Pending Release Priority: Normal Assignee: Category: parser Target version: 2.7.20 Affected Puppet version: 2.6.4 Keywords: BD Branch: So I was talking with Markus and Dan about some weird autorequire behavior, and ran into this. Assume you have the requisite files in /tmp: # tree /tmp /tmp |-- a | `-- b `-- c Then, if you run this manifest: # autocycle.pp file { "/tmp/a": ensure => absent, force => true, } file { "/tmp/a/b": ensure => absent, content => 'foo', before => File['/tmp/a'], } file { "/tmp/c": ensure => absent, content => 'bar', } File['/tmp/a/b'] -> File['/tmp/c'] -> File['/tmp/a'] ...you get this: [root@puppet learning-manifests]# puppet apply --trace autocycle.pp /opt/puppet/lib/ruby/site_ruby/1.8/puppet/resource.rb:103:in `send' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/resource.rb:103:in `<<' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/relationship.rb:41:in `mk_relationship' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/relationship.rb:19:in `evaluate' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/relationship.rb:18:in `each' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/relationship.rb:18:in `evaluate' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/relationship.rb:17:in `each' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/relationship.rb:17:in `evaluate' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:162:in `evaluate_relationships' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:162:in `each' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:162:in `evaluate_relationships' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:341:in `finish' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:109:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:18:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/catalog/compiler.rb:77:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/util.rb:197:in `benchmark' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/catalog/compiler.rb:75:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/catalog/compiler.rb:34:in `find' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/indirection.rb:193:in `find' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector.rb:50:in `find' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application/apply.rb:115:in `main' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application/apply.rb:35:in `run_command' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application.rb:287:in `run' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application.rb:393:in `exit_on_fail' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application.rb:287:in `run' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/util/command_line.rb:55:in `execute' /usr/local/bin/puppet:4 /opt/puppet/lib/ruby/site_ruby/1.8/puppet/parser/compiler.rb:21:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/catalog/compiler.rb:77:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/util.rb:197:in `benchmark' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/catalog/compiler.rb:75:in `compile' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/catalog/compiler.rb:34:in `find' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector/indirection.rb:193:in `find' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/indirector.rb:50:in `find' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application/apply.rb:115:in `main' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application/apply.rb:35:in `run_command' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application.rb:287:in `run' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application.rb:393:in `exit_on_fail' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/application.rb:287:in `run' /opt/puppet/lib/ruby/site_ruby/1.8/puppet/util/command_line.rb:55:in `execute' /usr/local/bin/puppet:4 undefined method `<<' for {}:Hash on node puppet.localdomain What it SHOULD do is reverse /tmp/a/b's autorequire of /tmp/a (to avoid the cycle we would otherwise get), then delete /tmp/a/b, /tmp/c, and /tmp/a in that order. Instead, we have an exposed internal Ruby error. Any clues? -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-bugs?hl=en.
