Ben Beuchler
2008-Dec-12 20:59 UTC
[Puppet Users] Best practice for modifying options in an inherited class?
I''ve just built a simple class to manage Postfix. That class is included in "baseclass" which is included in my default node. My intent is that "baseclass" and "basenode" install and configure all of the packages that are common across all of my nodes. However, some of the more specialized nodes will require a different Postfix config. Since those nodes inherit the standard Postfix config included in "basenode", what''s the best way to configure them to retrieve a different main.cf file for their Postfix install? Do I need to create different Postfix classes for each of the types of nodes that only differ by their "content =>" line? There must be a cleaner way. My current config is included below. Thanks! -Ben # classes/postfix.pp class postfix { package { "postfix": ensure => present } service { "postfix": ensure => running } file { "/etc/postfix/main.cf": content => template("apps/postfix/main.cf.base.erb"), notify => Service["postfix"], require => Package["postfix"], } } # classes/baseclass.pp class baseclass { include postfix include vim include basefiles include sudo include ntp::server package { "syslog-ng": ensure => present; "tcsh": ensure => present; } } # nodes.pp node default { include baseclass } --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
joe
2008-Dec-12 23:07 UTC
[Puppet Users] Re: Best practice for modifying options in an inherited class?
You should use a subclass with an override, like so: class postfix-special inherits postfix { File["/etc/postfix/main.cf"]{ content => template("apps/postfix/main.cf.special.erb") } node special { include baseclass include postfix-special } That should get you the desired behavior without copying the entire class and having to keep them in sync. On Dec 12, 3:59 pm, "Ben Beuchler" <ins...@gmail.com> wrote:> I''ve just built a simple class to manage Postfix. That class is > included in "baseclass" which is included in my default node. My > intent is that "baseclass" and "basenode" install and configure all of > the packages that are common across all of my nodes. However, some of > the more specialized nodes will require a different Postfix config. > > Since those nodes inherit the standard Postfix config included in > "basenode", what''s the best way to configure them to retrieve a > different main.cf file for their Postfix install? > > Do I need to create different Postfix classes for each of the types of > nodes that only differ by their "content =>" line? There must be a > cleaner way. > > My current config is included below. > > Thanks! > > -Ben > > # classes/postfix.pp > class postfix { > package { "postfix": ensure => present } > service { "postfix": ensure => running } > file { "/etc/postfix/main.cf": > content => template("apps/postfix/main.cf.base.erb"), > notify => Service["postfix"], > require => Package["postfix"], > } > > } > > # classes/baseclass.pp > class baseclass { > include postfix > include vim > include basefiles > include sudo > include ntp::server > > package { > "syslog-ng": ensure => present; > "tcsh": ensure => present; > } > > } > > # nodes.pp > node default { > include baseclass > > }--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---