I am using puppet version 6.2 (the one that comes with squeeze) in case it makes a difference.
I am new to puppet and am having a problem getting access to the elements of a hash in my erb templates and no matter what I google for I cannot seem to find out what I am doing wrong.
I have stripped everything back to example code to rule out other things, in reality I have split my files up a but to avoid the monolithic init.pp and nodes.pp. Anyway...
my nodes.pp has this in it:
# Test code
$myhash = {
key => {
subkey1 => 'foo',
subkey2 => 'bar'
}
}
include mymodule
}
Then in the modules init.pp I have:
class mymodule {
# Test code
notice($myhash[key][subkey1])
notice($myhash[key][subkey2])
file { "/tmp/test":
ensure => present,
content => template("mymodule/test.erb"),
}
}
If I run puppet against this the two notice lines work fine so I have access to the data within the module, the problem is getting it into the template. I tried a few different syntaxes to no effect:
So first I tried a template like so:
TEST: <%= $myhash[key][subkey1] %>
This gave me the error:
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Failed to parse template mymodule/test.erb: Could not find value for 'key' at /etc/puppet/modules/mymodule/manifests/init.pp:7 on node pc01.domain.com
If I quote the string in the template (i.e. "<%= $myhash[key][subkey1] %>") then it just spits out that string into the file rather than interpreting the data.
I have similar errors if I try to use scope.lookupvar to explicitly specify where things are too.
So, what am I doing wrong or is it just not possible to pick a single hash element and put it into a template.
Thanks
Josh
p.s. my Ruby sucks so if I have to go down that route it'll need to be a noddy explanation