On Monday, September 24, 2012 11:47:31 AM UTC-5, George Shammas wrote:
>
> I am trying to override variables in a class that is defined in the
> default node profile. I want parent class to be included in every single
> node, but override its variables in others. I have tried
> it several different ways now, and every single time the variables either
> become unset (undefined) or are set to the value of the first if statement.
You cannot override class variables. You especially cannot override class
parameters. You can override only resource properties (and classes are not
resources, appearances notwithstanding).
Moreover, subclasses do not set parameters for their parent classes, even
if they themselves have parameters of the same names. Therefore, it is
usually a bad idea to inherit from a parametrized class (in fact, the v 2.7
docs say it's not supported). If you do so, then you must explicitly
declare the parent class on every node for which you want to set
non-default parameters, whether or not you also declare the child class.
Since you don't actually use the variables in question in your example, I
can't guess what your larger purpose may be, therefore it is difficult for
me to advise you. Nevertheless, at the low level we are focused on, you
can achieve something similar to what you have asked by employing a data
hierarchy instead of a class hierarchy. That is what the Hiera module is
all about. Since hiera will be integrated into Puppet 3, getting started
with it now is also forward-looking.
Once you install hiera and set up your data, the Puppet side could be as
simple as this:
class nrpe::load { # no parameters
package { 'nagios-plugins-load': ensure => installed }
$warn_real = hiera('nrpe::warn')
$crit_real = hiera('nrpe::crit')
# alternatively, load $warn and $crit via hiera,
# and retain the original logic for setting
# $warn_real and $crit_real
file { "/etc/nagios/command.d/load.cfg":
owner => root,
group => root,
mode => 640,
content => template("nrpe/load.cfg.erb"),
notify => Service[nrpe]
}
}
node "somenode.tld" inherits basenode {
# no subclass involved
}
John
--
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/-/UeqNuH8zyXMJ.
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.