Thanks for your reply. I'm still having problems with this :( This is my
worked example:
# Provide example config
uob_nagios::bpiconfig { 'radius':
displayname => 'RADIUS eduroam local',
primary => 1,
members => {
'radius01.example.com' => {
service => 'RADIUS',
opt => '&',
},
'radius02.example.com' => {
service => 'RADIUS',
opt => '&',
},
'radius03.example.com' => {
service => 'RADIUS',
opt => '&',
},
},
warning_threshold => 0,
critical_threshold => 0,
priority => 1,
}
# Defined type
define uob_nagios::bpiconfig (
$displayname,
$members,
$desc = undef,
$primary = 1,
$info = undef,
$warning_threshold = 0,
$critical_threshold = 0,
$priority = 1,
) {
concat::fragment{ "bpi-${title}":
target => '/usr/share/nagios/nagiosbpi/nagiosbpi/bpi.test.conf',
content => template('uob_nagios/bpi.conf.erb'),
order => '20',
}
}
# bpi.conf.erb
define <%= @title %> {
title=<%= @displayname %>
desc=<%= @desc %>
primary=<%= @primary %>
info=<%= @info %>
members=<% @members.each_pair do |key, value| -%><%= key
-%>;<%= value['service'] -%>;<%= value['opt'] -%>,<% end -%>
warning_threshold=<%= @warning_threshold %>
critical_threshold=<%= @critical_threshold %>
priority=<%= @priority %>
}
Running this gives the error:
Error: Could not retrieve catalog from remote server: Error 500 on
SERVER: Server Error: Evaluation Error: Error while evaluating a
Resource Statement, Evaluation Error: Error while evaluating a Function
Call, Failed to parse template uob_nagios/bpi.conf.erb:
Filepath:
/etc/puppetlabs/code/environments/367_bpi_config/local_modules/uob_nagios/templates/bpi.conf.erb
Line: 6
Detail: undefined local variable or method `members' for
#<Puppet::Parser::TemplateWrapper:0x6275a5c3>
at
/etc/puppetlabs/code/environments/367_bpi_config/local_modules/uob_nagios/manifests/bpiconfig.pp:34:16
at
/etc/puppetlabs/code/environments/367_bpi_config/local_modules/uob_nagios/manifests/bpi.pp:26
on node monitor.resnet.bris.ac.uk
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
I can't see anything wrong with the 'members' variable. Am I missing
something?
Thanks,
Jonathan
On 05/02/17 11:13, Robert wrote:
Hi Jonathan,
this erb template:
members=<% @members.each_pair do |key, value| -%>
<%= key -%>;<%= value['service'] -%>;<%= value['opt'] -%>,<% end -%>
gives you exactly the parameter you mentioned.
So if you define the variable $members in the pp file and a file
resource with content => template('modulename/templatename.erb')
Inside the template you simply iterate through the key, value pairs. You
can access hash members with their key; square brackets are used for
accessing.
https://docs.puppet.com/puppet/latest/lang_data_hash.html#accessing-values
Sorry for the late answer, you probably figured it out already yourself :)
Best
Rp
On Thu, Feb 2, 2017 at 12:00 PM, Jonathan Gazeley
<[email protected] <mailto:[email protected]>>
wrote:
Hi folks,
I'm grappling with a data structure that I want to model as a hash
in Puppet and ultimately mash it down to a string for use in a
config file.
I'm writing out a config for Nagios BPI and there is one complex
parameter "members" which is described like this in the documentation:
# members - a comma delineated list of members.
# For services, format is: <hostname>;<servicename>;<opt>,
# For groups, format is: $<groupID>;<opt>,
# the <opt> is an '&' or '|' character.
# '&' option after host:servicename means service is part of
a CLUSTER
# For clusters, 'critical' is only reached when ALL services in a
cluster are NOT 'Ok'
# '|' option after host:servicename means it is an essential
service for the group,
# example: a 'critical' service with an '|' option will cause
a 'critical' state
# for the entire group.
When configured, the parameter looks like this:
members=radius-local01.example.com
<http://radius-local01.example.com>;RADIUS;&,
radius-local02.example.com
<http://radius-local02.example.com>;RADIUS;&,
radius-local03.example.com <http://radius-local03.example.com>;RADIUS;&,
I want to model this in a hash like this:
$members = {
'radius-local01.example.com <http://radius-local01.example.com>' => {
service => 'RADIUS',
opt => '&',
},
'radius-local02.example.com <http://radius-local02.example.com>' => {
service => 'RADIUS',
opt => '&',
},
'radius-local03.example.com <http://radius-local03.example.com>' => {
service => 'RADIUS',
opt => '&',
},
}
Is my design sensible, and how can I manipulate this data to
generate a string in the config file as above? I'm using Puppet
Enterprise 2016.5 but I only upgraded from Puppet 3.8 a couple of
weeks ago, so I'm still new to the Puppet 4 syntax.
Thanks,
Jonathan
--
Jonathan Gazeley
Senior Systems Administrator
IT Services
University of Bristol
--
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]
<mailto:puppet-users%[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/7794f367-7028-0bb5-422c-2d46bc133545%40bristol.ac.uk
<https://groups.google.com/d/msgid/puppet-users/7794f367-7028-0bb5-422c-2d46bc133545%40bristol.ac.uk>.
For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
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]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/CANwwCtz3_mWoMzk%3DQmN2jmCn2G8ce8hYp%2BMcvmW%2BNF2F4Ax6dg%40mail.gmail.com
<https://groups.google.com/d/msgid/puppet-users/CANwwCtz3_mWoMzk%3DQmN2jmCn2G8ce8hYp%2BMcvmW%2BNF2F4Ax6dg%40mail.gmail.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
Jonathan Gazeley
Senior Systems Administrator
IT Services
University of Bristol
--
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/3fae0a4d-00c1-6b5e-6d7f-8fd5ea2e51c5%40bristol.ac.uk.
For more options, visit https://groups.google.com/d/optout.