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

Reply via email to