[nycbug-talk] [OT] Puppet question

Edward Capriolo edlinuxguru at gmail.com
Sat Jan 22 13:16:34 EST 2011


On Sat, Jan 22, 2011 at 11:12 AM, Matt Juszczak <matt at atopia.net> wrote:
> Hi folks,
>
> I know many of you use puppet pretty often, so I'm wondering if anyone has a
> solution to the problem I have.
>
> We use multiple data centers but use the same puppet tree at each data
> center.  For the most part this works fine, but I have one issue: the
> /etc/ldap.conf (pushed by our basenode) as well as /etc/resolv.conf (pushed
> by our basenode) is different per data center.  We don't use environments,
> so there are a few ideas I have:
>
> 1) Parse the ${cn}, which contains the data center.  I'm not sure how to
> parse something inside puppet though - is that even possible to turn
> cn=xyz.dfw01.my-domain.net into just puppetVar: dataCenter=dfw01?
>
> 2) Set a puppetVar: dataCenter=xyz01 per node (I'm using external nodes).
> Since we use a launch script, this wouldn't be too hard - just add it to our
> template and populate for existing hosts.
>
> 3) Create a basenode per data center: basenode-dfw01, basenode-iad01, etc.
> However, this is about the same solution as adding a puppetVar to each
> node... so I'd avoid this one.
>
> Any thoughts on this from those who have good puppet expertise?
>
> Thanks,
>
> Matt
> _______________________________________________
> talk mailing list
> talk at lists.nycbug.org
> http://lists.nycbug.org/mailman/listinfo/talk
>

You should be able to use variables since they are evaluated at runtime

class ldap {
  file { "/etc/ldap.conf" :
    source => "puppet:///mainfiles/security/$ldap",
  }
  file { "/etc/resolv.conf" :
    source => "puppet:///mainfiles/security/$resolve",
  }
}

class ldap_ny inherits ldap {
  $ldap => "ny_ldap.conf",
  $resolv  => "ny_resolve.conf"
}

class ldap_tx inherits ldap {
  $ldap => "tx_ldap.conf",
  $resolv  => "tx_resolve.conf"
}

Then on nodes in texas include ldap_tx. In nodes in ny include ldap_ny.

Also the source of a file definition can be a list, and the list can
use variables so your can do per host overrides

source => [ "${fqdn}.txt', "standard.txt" ]

There are other more complex methods such as modules or definitions
that build the files based on variables.  However I like the file
method as it is less complex then making and debugging modules.



More information about the talk mailing list