Hello list.

I've the following parent class:

class munin::client {

    ...

    munin::client::plugin { "postfix_mailqueue":
        name   => "postfix_mailqueue",
        enable => "false"
    }
}

And the following inherited class:

class munin::client::plugins::postfix inherits munin::client {

    munin::client::plugin { "postfix_mailqueue":
        name   => "postfix_mailqueue",
        source => "postfix_mailqueue",
        enable => "true"
    }

}

munin::client::plugin is a custom type, allowing to easily enable/disable munin plugins, according to the following definition:

define munin::client::plugin($name, $source, $enable="true") {

 case $enable {

        "true": {
            file { "${name}_link":
                path    => "$destdir/$name",
                ensure  => "link",
                target  => "$sourcedir/$source",
            }
        }

        "false": {
            file { "${name}_link":
                path    => "$destdir/$name",
                ensure  => "absent",
            }
        }
    }
}

According to my understanding of how inheritance works, it should allow to easily redefine default behaviour in some specific nodes by just adding munin::client::plugins::postfix class in addition to munin::client, inherited through default node definition. However, it fails with the following error message:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Munin::Client::Plugin[postfix_mailqueue] is already declared in file /var/lib/puppet/devrousse/modules/munin/manifests/client.pp at line 135; cannot redeclare at /var/lib/puppet/devrousse/modules/munin/manifests/client/plugins/postfix.pp:11 on node dev-zimbra.inria.fr

I originally tought it was the double inclusion of both the base and the derivated class that was causing the issue, so I attempted to remove the base classe for the default node definition, so as to only include the derivated one: same result :(

So, what is the generic design pattern for including default classes in default node definition, while still allowing to override them in specific nodes ?

--
BOFH excuse #389:

/dev/clue was linked to /dev/null

--
You received this message because you are subscribed to the Google Groups "Puppet 
Users" group.
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.

Reply via email to