Issue #19037 has been reported by Peter Meier.
----------------------------------------
Bug #19037: defining hash keys with variables does not worlk
https://projects.puppetlabs.com/issues/19037
Author: Peter Meier
Status: Unreviewed
Priority: Normal
Assignee:
Category: language
Target version:
Affected Puppet version: 3.0.2
Keywords: hash, key, variable
Branch:
Given the following manifest:
<pre>
$key = 'bla'
$value = 'bla'
$test_hash = {
$key => $value
}
notice $test_hash
</pre>
This raises the following error:
<pre>
$ puppet apply test.pp --trace --debug
Error: Could not parse for environment production: Syntax error at 'key';
expected '}' at /tmp/test.pp:7 on node foo
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/parser_support.rb:134:in
`on_error'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/lexer.rb:480:in
`scan'
(eval):3:in `_racc_yyparse_c'
(eval):3:in `yyparse'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/parser_support.rb:145:in
`parse'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/node/environment.rb:216:in
`perform_initial_import'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/node/environment.rb:85:in
`block in known_resource_types'
/home/duritong/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/monitor.rb:211:in
`mon_synchronize'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/node/environment.rb:82:in
`known_resource_types'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/resource/type_collection_helper.rb:5:in
`known_resource_types'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:415:in
`initvars'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:182:in
`initialize'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:29:in
`new'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:29:in
`compile'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/catalog/compiler.rb:77:in
`block in compile'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/util.rb:184:in
`benchmark'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/catalog/compiler.rb:75:in
`compile'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/catalog/compiler.rb:35:in
`find'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/indirection.rb:191:in
`find'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application/apply.rb:204:in
`main'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application/apply.rb:146:in
`run_command'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:346:in
`block (2 levels) in run'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:438:in
`plugin_hook'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:346:in
`block in run'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/util.rb:496:in
`exit_on_fail'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:346:in
`run'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/util/command_line.rb:87:in
`execute'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/bin/puppet:4:in
`<top (required)>'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/puppet:19:in `load'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/puppet:19:in `<main>'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/ruby_noexec_wrapper:14:in `eval'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/ruby_noexec_wrapper:14:in `<main>'
Error: Could not parse for environment production: Syntax error at 'key';
expected '}' at /tmp/test.pp:7 on node foo
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/parser_support.rb:134:in
`on_error'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/lexer.rb:480:in
`scan'
(eval):3:in `_racc_yyparse_c'
(eval):3:in `yyparse'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/parser_support.rb:145:in
`parse'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/node/environment.rb:216:in
`perform_initial_import'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/node/environment.rb:85:in
`block in known_resource_types'
/home/duritong/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/monitor.rb:211:in
`mon_synchronize'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/node/environment.rb:82:in
`known_resource_types'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/resource/type_collection_helper.rb:5:in
`known_resource_types'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:415:in
`initvars'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:182:in
`initialize'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:29:in
`new'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/parser/compiler.rb:29:in
`compile'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/catalog/compiler.rb:77:in
`block in compile'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/util.rb:184:in
`benchmark'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/catalog/compiler.rb:75:in
`compile'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/catalog/compiler.rb:35:in
`find'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/indirector/indirection.rb:191:in
`find'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application/apply.rb:204:in
`main'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application/apply.rb:146:in
`run_command'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:346:in
`block (2 levels) in run'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:438:in
`plugin_hook'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:346:in
`block in run'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/util.rb:496:in
`exit_on_fail'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/application.rb:346:in
`run'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/lib/puppet/util/command_line.rb:87:in
`execute'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/gems/puppet-3.0.2/bin/puppet:4:in
`<top (required)>'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/puppet:19:in `load'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/puppet:19:in `<main>'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/ruby_noexec_wrapper:14:in `eval'
/home/duritong/.rvm/gems/ruby-1.9.3-p374/bin/ruby_noexec_wrapper:14:in `<main>'
</pre>
putting the key into quotes is a workaround:
<pre>
$ cat test.pp
$key = 'bla'
$value = 'bla'
$test_hash = {
"${key}" => $value
}
notice $test_hash
$ puppet apply test.pp --trace
Notice: Scope(Class[main]): {"bla"=>"bla"}
Notice: Finished catalog run in 0.05 seconds
</pre>
This can be observed in 2.7.19 and 3.0.2
--
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 unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-bugs?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.