Hello .*,

sorry this is a bit lengthy:

I'm in the progress of setting up a puppet system for our Linux
cluster (SLES) and have a 'small' design question, since I'm not able
to realize my ideas with capabilities of puppet as I have them in
mind. At least up to now.

The general setup looks like this:
There is a central database where all information of the hosts are
stored. Next to special hardware layout and network configurations it
is stored which type of service a host is offering (e.g.
cluster-batchnode, cluter-loginnode, server-nagios, etc.).
Connected with this services are the puppet classes which have to be
realized on a specific host. This is passed down to puppet by a YAML
file with as a list of classes and parameters per host.

The classes are organized in modules with a visioning, e.g.
ssh-1::client, ssh-1::server, auth-3::ldap etc. In this way (in view
of change management), when changing something in the module, I copy
the whole module to a new version and (after some testing) just
migrate all the affected services to the new module version.

So far so good. Now my problem emerges, when a module depends on an
other module. This should be version independent (and even better
independent of the module name). For example:
I have a generic nas-<version>::virtual module, which provides
mountpoint as virtual resources. These can be realized in multiple
other modules, without explicitly prepending a Nas-<version>::Virtual,
so I am independent of version and module name.

Now the 'but':
Typically this virtual resources would depend on other resources (like
a mount would depened on a directory to exists). But since
requirements are not automatically realizes, this does not work! The
virtual file resource for the  directory is not automatically realized
when realizing the mount.

There are multiple solution I thought of:
1. putting everything into a virutal define: but this does not work,
since the define is not globally known, so I have to reference it with
exlipcit module and version Nas-<version>::Virtual::<Define>...
2. changing the 'realize' function to an rvalue and using it in the
require parameter to realize the requirement. But this does not work,
since the requirements are already realized during 'reading' the
definition of the main virtual resource and not just when realizing
it!
3. Taking away the version numbering in the module name and giving
each module an own module directory (in fileserver.conf like for the
files directory with a %h variable) and symlinking the required module
version into this per host directory. But this only works for file not
for modules,
...

So I'm quite lost at this point... The automated realization of
required resources would already solve everything here (Issue here:
<http://projects.puppetlabs.com/issues/3178>). But up to now I'm stuck
here and some hundreds of nodes want to be puppified... :-)

I'm grateful for ideas. There might be a big design flaw as well....

Thanks a lot in advance for reading so much of my brain dump...

Bye,
Frederik

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-us...@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