Bilco105
2011-May-20 12:26 UTC
[Puppet Users] Including a class multiple times, with different variables
Hi, I''m defining a class whose responsibility is to setup an application folder, virtual host, init script and so forth for a rails application. The class is defined as follows: class rails($name, $environment) ## Include General Software require nginx require mysql ## Setup application directories File { ["/home/$app", "/home/$app/app", "/home/$app/app/log", "/home/ $app/app/tmp"]: ensure => directory owner => "root" group => "dev" mode => 4755 } ## etc } Now, on our production servers, we have one application running, so we do: node "production.domain.com" { class { rails: name => "application1", env => "production" } } This works fine, and sets up all the requirements for the application. However, our staging server runs multiple applications, so I want to do the following: node "staging.domain.com" { class { rails: name => "application1", env => "production" } class { rails: name => "application2", env => "production" } class { rails: name => "application3", env => "production" } } Obviously this complains about duplicate definitions of the rails class, but the variables are different. How can I work around this? Or what is a better way to implement what I''m trying to do? without having to duplicate everything -- 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.
Nigel Kersten
2011-May-20 15:30 UTC
Re: [Puppet Users] Including a class multiple times, with different variables
On Fri, May 20, 2011 at 5:26 AM, Bilco105 <bilco105@gmail.com> wrote:> Hi, > > I''m defining a class whose responsibility is to setup an application > folder, virtual host, init script and so forth for a rails > application. The class is defined as follows: > > class rails($name, $environment) > ## Include General Software > require nginx > require mysql > > ## Setup application directories > File { ["/home/$app", "/home/$app/app", "/home/$app/app/log", "/home/ > $app/app/tmp"]: > ensure => directory > owner => "root" > group => "dev" > mode => 4755 > } > > ## etc > } > > Now, on our production servers, we have one application running, so we > do: > > node "production.domain.com" { > class { rails: name => "application1", env => "production" } > } > > This works fine, and sets up all the requirements for the application. > However, our staging server runs multiple applications, so I want to > do the following: > > node "staging.domain.com" { > class { rails: name => "application1", env => "production" } > class { rails: name => "application2", env => "production" } > class { rails: name => "application3", env => "production" } > } > > Obviously this complains about duplicate definitions of the rails > class, but the variables are different. How can I work around this? Or > what is a better way to implement what I''m trying to do? without > having to duplicate everything > >Classes are singletons and you can only have one of them. If you want to instantiate multiple instances, use a defined resource type instead. http://docs.puppetlabs.com/guides/language_guide.html#defined-resource-types -- Nigel Kersten Product, Puppet Labs @nigelkersten -- 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.