Hi folks,
Still a beginner with Puppet. I'm trying to set up a simple class for
building a sysctl.conf, and I've hit a stumbling block. I could go with the
sysctl solutions other people have written with custom ruby functions or
augeas, but solving the problem I'm having might be instructive for other
Puppet problems down the road, if you follow, so I'm asking what I'm doing
wrong.
(I'm just creating a dummy file and not even putting it in sysctl.conf
while I'm learning the infrastructure, so don't be alarmed by the goofy
parameter names and values. :)
First I have a modules/sysctl/manifests/init.pp which includes (some stuff
omitted):
class sysctl {
$params = { 'mem_max' => '5G' }
$params['mem_min'] = '1G'
## template file resource here points at an ERB template
## which loops over the keys/values of the $params hash.
## sparing you the details of the file resource for now since it works
fine. :)
file { ... }
}
So far so good! I get a file which looks like
mem_max = 5G
mem_min = 1G
Okay. Now I try to get fancy and create a defined type that would let me
add more sysctl entries.
In modules/sysctl/manifests/add_param.pp:
define sysctl::add_param ( $value ) {
notify { "Setting $title to $value": } ## for debugging purposes
$sysctl::params[$title] = $value
}
And then I add to the sysctl class:
## add the extra param
##
add_param { 'mem_avg': value => '3G' }
notify { "The params are ${params}": }
What happens is, I see:
"Setting mem_avg to 3G
The params are mem_max5Gmem_min1G"
and the produced file does not contain the new parameter.
So it looks like the defined type resource does indeed get instantiated,
and its internal notify {} shows the right thing, but it doesn't actually
add to the $sysctl::params hash. What makes this extra-frustrating is, it
doesn't give any error message about not being able to, either -- it just
silently fails.
Can a defined type not modify the variables in its parent namespace? If
not, why am I not getting an error message? If it can, what am I doing
wrong?
The use case for the whole defined type mess is, supposing later I want to
do something like this, to set sysctl parameters specific to a given
software class.
class oracle {
sysctl::add_param{ 'oracle_wants_lots_of_ram': value => '1' }
}
I'm perfectly fine with being told "your overall use case needs hiera" or
something (which will probably have me coming back with more questions),
but I'll particularly appreciate knowing why the thing I'm actually trying
isn't working, as I'm still learning the basics. :) Thanks!
BTW, this is with Puppet open source 3.0.0.
Cheers,
--Shawn
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/puppet-users/-/CsGGfCkcUVIJ.
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-users?hl=en.