> node default {
>     class { sudoers: }
> }
> 
> node 'sl11lab02' inherits default {
> 
>     # this runs but does nothing
>     Class[sudoers] { additional_rules => [ "$rules_uas" ] }
> 
>     # this errors with "Cannot assign to variables in other namespaces"
>     #$sudoers::additional_rules = [ "$rules_uas" ]
> 
>     # this errors with "Class[Sudoers] is already defined"
>     #class { sudoers: additional_rules => [ "$rules_uas" ] }
> }
> 
> class sudoers (
>     $default_rules    = "$rules_unixgroup",
>     $additional_rules = [ "" ]
>     ) {
> 
>     file { "/tmp/sudoers":
>         owner   => root, group => root, mode => 440,
>         content => template("sudoers/sudoers.erb"),
>         notify  => Exec["check-sudoers"],
>     }
> 
>     exec { "check-sudoers":
>         command => "/usr/sbin/visudo -cf /tmp/sudoers && cp /tmp/sudoers 
> /etc/sudoers",
>         refreshonly => true,
>     }
> 
> }

Hi,

is it me, or is class sudoers not actually parameterized?

What I'm seeing is a good old class with local variables. The way they
are initialized, they cannot even be overridden by (ab-)using dynamic
scoping, although this would probably work (plusignment):

include sudoers
$sudoers::additional_rules += [ a, b, c ]

To me, this actually does call for a (parameterized?) subclass that will
override the content of your /tmp file:

class sudoers_additional($additional_rules) inherits sudoers {
  File["..."] { content => template(...) }
}

This may even use the same template as the baseclass.

Don't just hate subclasses. They're often pretty helpful ;-)

HTH,
Felix

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