FAQ
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.

Here is my current iteration of failure. warn_real is always equal
to processorcount, no matter if I override it or not.

class nrpe::load ($warn = 'UNSET', $crit = 'UNSET') {

package { nagios-plugins-load: ensure => installed }

if $warn == 'UNSET' {
$warn_real = $processorcount
}
if $crit == 'UNSET' {
$crit_real = $processorcount * 2
}

file { "/etc/nagios/command.d/load.cfg":
owner => root,
group => root,
mode => 640,
content => template("nrpe/load.cfg.erb"),
notify => Service[nrpe]
}
}


class nrpe::load::override($warn = 'UNSET', $crit = 'UNSET') inherits
nrpe::load {

Class["nrpe::load"] {
warn => $warn,
crit => $crit
}
}

node "somenode.tld" inherits basenode {
class {'nrpe::load::override':
warn => 5,
crit => 10
}
}

--
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/-/3-A3XgYtmh8J.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.

Search Discussions

  • George Shammas at Sep 24, 2012 at 8:48 pm
    Another iteration of failure is the following. This one is in the likeness
    of ::parms for a class, but if it nrpe:load inherits override class, then I
    can't declare the override class anywhere else. This was my
    first attempt to do this, and have tried 4 other iterations of this, but as
    far as I can tell, because it can't inherit the class, it will ONLY use the
    default values, which can only be undef or some other default value, again
    defeating the ability to override.

    class nrpe::load {

    package { nagios-plugins-load: ensure => installed }

    if $nrpe::load::override::warn == 'UNSET' {
    $warn = $processorcount
    } else {
    $warn = $nrpe::load::override::warn
    }
    if $nrpe::load::override::crit == 'UNSET' {
    $crit = $processorcount * 2
    } else {
    $crit = $nrpe::load::override::crit
    }

    file { "/etc/nagios/command.d/load.cfg":
    owner => root,
    group => root,
    mode => 640,
    content => template("nrpe/load.cfg.erb"),
    notify => Service[nrpe]
    }
    }


    class nrpe::load::override($warn = 'UNSET', $crit = 'UNSET') {
    }

    On Monday, September 24, 2012 12:47:31 PM UTC-4, 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.

    Here is my current iteration of failure. warn_real is always equal
    to processorcount, no matter if I override it or not.

    class nrpe::load ($warn = 'UNSET', $crit = 'UNSET') {

    package { nagios-plugins-load: ensure => installed }

    if $warn == 'UNSET' {
    $warn_real = $processorcount
    }
    if $crit == 'UNSET' {
    $crit_real = $processorcount * 2
    }

    file { "/etc/nagios/command.d/load.cfg":
    owner => root,
    group => root,
    mode => 640,
    content => template("nrpe/load.cfg.erb"),
    notify => Service[nrpe]
    }
    }


    class nrpe::load::override($warn = 'UNSET', $crit = 'UNSET') inherits
    nrpe::load {

    Class["nrpe::load"] {
    warn => $warn,
    crit => $crit
    }
    }

    node "somenode.tld" inherits basenode {
    class {'nrpe::load::override':
    warn => 5,
    crit => 10
    }
    }
    --
    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/-/aZCaK4L7k_4J.
    To post to this group, send email to puppet-users@googlegroups.com.
    To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
  • Jcbollinger at Sep 25, 2012 at 3:34 pm

    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 puppet-users@googlegroups.com.
    To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
  • George Shammas at Sep 25, 2012 at 4:03 pm
    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 view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/0C5HzeVgMZoJ.
    To post to this group, send email to puppet-users@googlegroups.com.
    To unsubscribe from this group, send email to puppet-users+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
  • Lorenzo Salvadorini at Sep 26, 2012 at 8:44 am
    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 <georgyo@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+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppuppet-users @
categoriespuppet
postedSep 24, '12 at 5:49p
activeSep 26, '12 at 8:44a
posts5
users3
websitepuppetlabs.com

People

Translate

site design / logo © 2022 Grokbase