I've solved the identical problem using defines instead of classes. I
know that hiera can be a better solution, but I'm waiting for next
major release to adopt hiera.

I've a generic nrpe::check define: each check is a define that use
this generic definition, so my check_load.pp in nrpe module is

define nrpe::check_load(
    $warn1=8,
    $warn5=4,
    $warn15=2,
    $crit1=20,
    $crit5=10,
    $crit15=5,
    )
  {
      if ! is_numeric($warn1)
      {
        fail('Variable warn1 must be numeric')
      }
      if ! is_numeric($warn5)
      {
        fail('Variable warn5 must be numeric')
      }
      if ! is_numeric($warn15)
      {
        fail('Variable warn15 must be numeric')
      }
      if ! is_numeric($crit1)
      {
        fail('Variable crit1 must be numeric')
      }
      if ! is_numeric($crit5)
      {
        fail('Variable crit5 must be numeric')
      }
      if ! is_numeric($crit15)
      {
        fail('Variable crit15 must be numeric')
      }

      # -r plugin option make it compatible with multi-core cpu
      nrpe::check{ 'load':
         params  => "-r -w ${warn1},${warn5},${warn15} -c
${crit1},${crit5},${crit15}"
      }
  }



In generic_host I create a resource with no parameters, so defaults apply:

nrpe::check_load { 'load': }


If I've a node with a medium greater load than my default I do:

node 'node-with-high-load' inherits generic_host {
    Nrpe::Check_load['load']{ warn5 => 20 }
}


Hopes this helps,
L



2012/9/25 George Shammas <geor...@gmail.com>:
> Hi John,
>
> Thanks for the response. They variables are only used in the template, as
> the NRPE daemon is manged by flat files. I will do some research into hiera.
>
> --George
>
> On Tuesday, September 25, 2012 11:28:31 AM UTC-4, jcbollinger wrote:
>>
>>
>>
>> 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 post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to