On Aug 22, 8:11 am, puppetlurker <under.my.cont...@gmail.com> wrote:
> Greetings,
>
> I'm having an issue with my implementation of exported resources.  I
> have a memcache server pool, and want to update the /etc/php.d/
> memcache.ini with the ips of all the servers. Previously, I hard coded
> the $memcacheservers array in the node manifest and the template
> collected and populated the template.
>
> Now that I'm moving to exported resouces, how do I get it to set an
> array in a way I can access it from a different scope?  I tried moving
> the file { "/etc/php.d/memcache.ini": content => template(memcache/
> memcache.ini.erb) to the resource function (I understand exported
> resources shoulld not define other resources), but it only populates
> the first server collected, and complains about a duplicate resource
> if I have more than 1 exported server.
>
> I've tried defining the resource without the content the first time,
> then override the define with the content, but that only picks up the
> 2nd server.  I've tried accessing the variable that gets populated
> after the Memcache::Servers <<| |>> but it doesn't get populated in
> this scope.  I've tried looking up the
> scope.lookupvar('memcached::servers::memcacheservers') but the
> exported resource is a define not a class and I couldn't get it to
> work.  I've tried just using a script to populate the file with the
> proper contents, but there is no way to ensure it is filled with all
> the servers,  for example the script is executed out of order,
> replaced 3 times if there are 3 servers, and may contain 1, 2, or 3
> servers after a puppet run.
>
> Any suggestions?


The way to do this with exported resources is for each node to export
a resource containing its own information only.  The trick is choosing
the resource to use for this.

The simplest case would be if "/etc/php.d/memcache.ini" supports some
kind of 'include' directive, especially if it understands globs.  Then
each server can export its own (distinctly-named) file intended for
inclusion, and the node(s) that collect them need only to put the
appropriate 'include' directive(s) into the main memcache.ini.

Alternatively, there is a module available that provides for building
files from fragments.  Your server could export fragment resources of
the type defined by that module, and the node(s) that collect them
would use them to build the memcache.ini file.

Remember: an exported resource is one that you make available for
other nodes to include in their catalogs, as if they were declared in
those nodes' own manifests.  All the normal rules apply in the context
where they are collected.  In particular, name and title uniqueness is
still required, but for exported resources you may get lost resource
data instead of Puppet errors when there are name collisions.


John

-- 
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+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to