What would really help is if there was a node definition like "default" that was used by all nodes, not just ones that are otherwise not defined. Although this "may" have the same scope issue of resolving this with a class.
On Oct 30, 5:46 pm, tek-ops <[EMAIL PROTECTED]> wrote: > I'm attempting to use templating so that I can have variables in all > config files for the aspects that vary solely based on which > environment is in question. The benefit is that the only differences > in the configurations between my environments are those being tested. > This also eliminates the chance for human error; say leaving in host's > domain names of the qa environment when roll out new configurations to > staging. > > How I initially wanted to perform this was to have a class for each > environment to statically configure the variables in question in a > single location. However, including this class at the node level > didn't translate those values down to the template level. Here's an > example of replacing puppet.conf for each environment with a template: > > Snippet from puppet.erb template > -------------------------------------------------------------------------------- > [puppetd] > # Set by template > server = <%= puppetserver %> > environment = <%= environment %> > -------------------------------------------------------------------------------- > > $environment is already a value known, however I'm creating the > variable $puppetserver and trying to set it in one location. How I > wanted to get this to work was to do something like this: > -------------------------------------------------------------------------------- > # templates.pp > > class qa_env { > $puppetserver = "puppet.qa.domain" > > } > > class stage_env { > $puppetserver = "puppet.stage.domain" > > } > > class prod_env { > $puppetserver = "puppet.prod.domain"} > > -------------------------------------------------------------------------------- > And thus each node would just "include" the appropriate class. This > however does not work, so here is my work around. > > I created a single class to set each variable based on which > environment the node in question happens to fall into. > -------------------------------------------------------------------------------- > # templates.pp > > class env_set { > $puppetserver = $environment ? { > qa => "puppet.qa.domain", > stage => "puppet.stageg.domain", > prod => "puppet.prod.domain", > }} > > -------------------------------------------------------------------------------- > > The only problem is that in each node I not only include this class > but also have to pull each variable up to the nodes scope for it's > templates to be able to get values for these variables, as you see > here: > -------------------------------------------------------------------------------- > # nodes.pp > > node "web-1" { > include "env_set" > $puppetserver = $env_set::puppetserver > > include "puppet::client" > > } > > node "web-2" { > include "env_set" > $puppetserver = $env_set::puppetserver > > include "puppet::client"} > > -------------------------------------------------------------------------------- > This is fine for just a few variables, but it is going to get > unmanagable as the number of nodes increases as well as the number of > variables needed. > > Is there a better way to do this? --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---