Hi,

this sounds this is a job for hiera:
http://puppetlabs.com/blog/the-problem-with-separating-data-from-puppet-code/
http://puppetlabs.com/blog/first-look-installing-and-using-hiera/

rgds Florian

Am Freitag, 16. März 2012 19:12:10 UTC+1 schrieb chris_...@sra.com:
>
>
>
> On Friday, March 16, 2012 1:36:23 PM UTC-4, Tim Mooney wrote:
>>
>> In regard to: [Puppet Users] Need advice how to architect solution for...:
>>
>> > I'm having difficulty determining the best course of action how to
>> > implement /etc/resolv.conf on my RHEL5 hosts.
>> >
>> > Here's my requirements, IN ORDER OF PRECEDENCE:
>> >
>> > * All hosts, regardless of function, need /etc/resolv.conf
>> > * Dependiing upon which environment the host lives in (i.e. Facture
>> > $domain)  this changes search paths and nameservers to use in
>> > /etc/resolv.conf
>> > * Any host defined as a 'DNS Server' should ignore environment specific
>> > settings and use nameserver of '127.0.0.1'
>> > * There are one or two one-off DNS servers that should have their own
>> > per-host settings which shall override all previous definitions.
>>
>> We're doing something like this, although I need to expand it to be a
>> little bit smarter, but wouldn't setting something like
>>
>> ---
>> named_type: client        # or 'caching', 'secondary', 'primary'
>>
>> in your extdata/hiera/ENC and then using a selector in your class to pick
>> which template to use for resolv.conf essentially solve all of this?
>>
>> > The only things that need to change between these rules are the values 
>> of
>> > the search path and the list of nameservers. So I would like to use a
>> > single template for /etc/resolv.conf which simply plug in data 
>> available in
>> > variables accessible by the template
>>
>> You probably could do that, but I think the template will be more
>> complicated this way.  Selecting different templates based on what type
>> of system it is makes the template simpler.
>>
>> Tim
>>
> This template, resolv.conf.erb, which belongs to my 'resolv' class should 
> all that I ever need.  
>
> <% searchpaths.each do |searchpath| -%>
> search <%= searchpath %>
> <% end -%>
> <% nameservers.each do |nameserver| -%>
> nameserver <%= nameserver %>
> <% end -%>
>  
> Duplicating such a template would be an example of un-necessary code 
> reuse. The determination of what values to pass to my 'resolv' class has to 
> be done before I declare (or is it define, I'm still confused on 
> terminology) the class.
>
> How do I do that?
>
> Here's my site.pp file:
>
> # BEGIN SITE.PP
>
> node basenode { 
>
>     # ----------------------------------------------------------------
>     # Define per-environment settings
>     # Eventually this will become hiera lookups or something
>     # ----------------------------------------------------------------
>
>     case $domain {
>
>         # Dev/test
>         'test.example.com' : {
>             $nameservers  = [ 1.1.1.1, 2.2.2.2, 3.3.3.3 ]
>          }
>
>         # Staging
>         'stage.example.com' : {
>             $nameservers  = [ 4.4.4.4, 5.5.5.5 ]
>         }
>
>         # Production 
>         'example.com'  : {
>             $nameservers  = [ 6.6.6.6, 7.7.7.7] 
>         }
>     }
>
>     # ----------------------------------------------------------------
>     # All 'standard' modules/classes to be applied to all hosts.  
>     # ----------------------------------------------------------------
>
>     class { 'basefiles': }
>     class { 'ntp'      : servers      => $ntpservers }
>     class { 'puppet'   : puppetserver => $puppetserver }
>     class { 'resolv'   : nameservers  => $nameservers, searchpaths => 
> $searchpaths }
> }
>
> # first match wins, so I list them specific to generic 
>
> node /dns-test.test.example.com/ inherits basenode { 
>      # This host should have host specific settings for resolv.conf 
> independent of all other hosts.
> }
>
> node /dns.*example.com/ inherits basenode {
>      # I should - somehow - be able to overload my nameserver settings 
> here for ALL my DNS servers
> }
>
> node /.*.example.com/ inherits basenode { 
>      # all remaining hosts fall here
> }
>
> # END SITE.PP
>
>
> However, this *DOES NOT WORK* becuase somehow, in my basenode definition, 
> I need to be able to say 'Box X is a DNS server so it gets general DNS 
> server settings for resolv.conf' so I can pass the right parameters to my 
> 'resolv' class declaration.  How do I do that with out coding in some 
> 'if/else' that looks for specific hostnames in that node definition?  
>
> thx
> Chris.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/puppet-users/-/yHPqXaGONFYJ.
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