I am setting up a nagios hosts definition file using ec2 data with puppet 3.2. The hiera JSON file generated looks like this: { "instances": { "prod-api-01": { "private_ip": "10.1.1.1", "public_ip": "23.1.1.1", }, "prod-api-02": { "private_ip": "10.2.2.2", "public_ip": "23.2.2.2", }, "prod-api-03": { "private_ip": "10.3.3.3", "public_ip": "23.3.3.3", } } } My manifest has the following declarations: $instances = hiera_hash(''instances'') $instance_names = keys($instances) In my hosts.cfg.erb template, I attempted the following, but neither works (entries for alias and address are blank). <%- @instances.each_pair do |instance_name, attributes| -%> define host { host_name <%= @instance_name %> use host-platform-prod-group alias <%= attributes[''public_ip''] %> address <%= attributes[''private_ip''] %> } <%- end -%> AND <%- @instance_names.each do | instance_name | -%> define host { host_name <%= @instance_name %> alias <%= @instances[@instance_name][''public_ip''] %> address <%= @instances[@instance_name][''private_ip''] %> } <%- end -%> I know I can access @instances and @instance_names within the template, but the template does not appear to find values for the loop variable @instance_name. Why is this? -- 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 puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users. For more options, visit https://groups.google.com/groups/opt_out.
Henrik Lindberg
2013-Aug-11 15:47 UTC
Re: [Puppet Users] Accessing hiera_hash values in puppet templates
On 2013-09-08 17:13, Rafi wrote:> <%- @instance_names.each do | instance_name | -%> > define host { > host_name <%= @instance_name %> > alias <%= @instances[@instance_name][''public_ip''] %> > address <%= @instances[@instance_name][''private_ip''] %> > } > <%- end -%> > > > I know I can access @instances and @instance_names within the template, > but the template does not appear to find values for the loop variable > @instance_name. Why is this? >Because it should be accessed without the @ since it is not a variable from Puppet. Try: alias <%= @instances[instance_name][''public_ip''] %> Regards - henrik -- 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 puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users. For more options, visit https://groups.google.com/groups/opt_out.