Hi all,
I'm currently redoing our puppet setup and trying to start with new design
from the ground up to implement all of the puppet 2.6+ goodness, but I'm
getting tripped up with the complexity of the design. I want to do things
the right way, but I don't want to introduce additional complexity, which is
what I feel like I'm doing. The best example I can come up with is for an
NTP module, since puppet docs use it a lot. I'll just describe how I imagine
it should work from my understanding of the style guide and the
parameterized class documentation, and hopefully someone can help clear it
up a bit by either telling me I'm on the right track or that I'm hitting the
crack pipe a bit too hard. For the sake of simplicity, I've left out
ntp::server, but it looks the same as ntp::client.
Here's how it looks:
modules/ntp/params.pp
defines the usual stuff:
- $supported = true for supported OS
- per-os package name/version default
- per-os service name default
- default config file path
- default ntp server to be used in the template that generates the
config files
modules/ntp/file.pp
- inherits ntp::params
- uses template to generate and copy $ntp::params::config_file (which uses
data from ntp::params)
- notifies Class["ntp::client::service"] on config file change
modules/ntp/package.pp
- inherits ntp::params
- installs $ntp::params::package_name (aliases it Package["ntp"])
- notifies Class["ntp::client::service"] on package installation
modules/ntp/client/service.pp
- inherits ntp::params
- makes sure $ntp::params::service_name is running (aliases it
Service["ntp_client"]
modules/ntp/client/init.pp
- includes ntp::params
- checks to make sure $ntp::params::supported is set, exiting if not
- includes ntp::file ntp::package, ntp::client::service
So is this "correct" or is it just unnecessarily complicated? The goal is to
include only "ntp::client" for a node, and then let ntp::client call in all
of the other ntp classes as needed.
My main confusion here is how I specify something like a different ntp
server or something for an ntp client. What worries me is that I have the
relationship chained like this:
ntp::client --(includes)--> ntp::file --(inherits)--> ntp::params
I use an ENC, so if I want to use parameterized classes to tell ntp::client
to use a different ntp server from the default, I wanted to output something
like:
classes:
ntp::client
ntpserver: 0.pool.ntp.org
but "ntpserver" isn't really a parameter of ntp::client, it's a parameter of
ntp::params, which ntp::client accesses through ntp::file. Would I just do
something like
classes:
ntp::client
ntp::params
ntpserver: 0.pool.ntp.org
What I'd really like to do is to use the first syntax and just have
ntp::client pass the "ntpserver=0.pool.ntp.org" parameter into ntp::file,
which would then pass it into ntp::params, so that ntp::params::ntpserver
would be the server I specified in the ENC output. Is there a way to achieve
this? I wanted to have the ENC script depend as little as possible on the
internal organization of the ntp module so that I can say "here's your ntp
server. I don't care what subclass you use it in. Just take it and use it
where you need it."
I feel like even my question is completely muddled, so if I've made
something so unclear you can't understand what I'm asking, please don't
hesitate to ask for clarification.
Thanks very much,
David
--
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/-/mMgmIDOpV18J.
To post to this group, send email to [email protected].
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.