----- Original Message -----
> From: "jcbollinger" <john.bollin...@stjude.org>
> To: puppet-users@googlegroups.com
> Sent: Tuesday, October 15, 2013 2:08:10 PM
> Subject: Re: [Puppet Users] Re: Status of Data in modules
> 
> 
> 
> On Tuesday, October 15, 2013 12:52:39 AM UTC-5, David Schmitt wrote:
> >
> > On 14.10.2013 16:16, jcbollinger wrote:
> > >     So the proposed solution at this point is:
> > >     - enable an implicit data-binding lookup against the hiera-puppet
> > >     backend for a value of 'classname::variable' in the file
> > >     'modules/classname/manifests/params.pp', which simplifies class
> > >     definition and provides consistency with other hiera backends. As a
> > >     module author, you'd still leave your logic for variables in
> > >     params.pp, but they'd be implicitly looked up via data bindings as
> > >     the class is declared, after consulting site-wide hiera.
> > > 
> > > 
> > > 
> > > Do I understand correctly that you set out to get rid of the ::params
> > > class pattern, but now you favor an approach that depends on that
> > > pattern?  Why is that better than being more general: enable an implicit
> > > lowest-priority hierarchy level for values of form
> > > 'modulename::variable', drawing on data from per-module data files such
> > > as modules/modulename/data.yaml?
> >
> > AIUI, prototyping revealed that many params classes contain logic that
> > cannot be expressed in .yaml to calculate default values. Making the
> > fallback lookup check the params class, the logic can be preserved while
> > avoiding verbose boilerplate code like the params_lookup calls in
> > Alessandro's modules.
> >
> >
> 
> I'm not saying that categorically getting rid of ::params classes is a
> viable target.  In fact, I don't really understand why it was ever an
> objective in the first place.  On the other hand, I don't see why it makes
> sense for Puppet to give special significance to that pattern, either.  A
> more general data-in-modules feature such as I describe would give users
> the option to avoid ::params classes in some cases, and I'm inclined to
> think that it would be easier to implement, to understand, and to use.
> 

there are many reasons to avoid params.pp.  It's *code* not *data* and it's
one file that tends to include data for many different roles/sources/uses.

You have to consider the main reasons for separating data from code in order
to understand the motivation.

When you have a params.pp you end up with stuff like this:

   
https://github.com/puppetlabs/puppetlabs-ntp/blob/master/manifests/params.pp#L28-140

No-one would call that maintainable or readable vs say having AIX.json, 
Debian.json and so forth.

For a community member who wants to add support for a new OS this
simplifies things a LOT. They can see what operating systems are supported 
already and they can easily add a new one by dropping a single file.

This improves the contributor life cycle significantly:

 * Adding FooOS support will not break existing supported OS support.  
   FooOS.json is only going to be read on FooOS machines.
 * They do not have to worry about complex merge conflicts on busy modules
   such as the ones you'd find internal to large companies vs many team
   members editing a single param.pp
 * There's no syntax and stuff to bother about, its pretty easy evaluate 
   the data and to pre/post commit check this stuff.  Contributor dont have 
   to test extensively to ensure he didnt accidentally mess up params.pp
   complex nested statements in some subtle manner
 * In large environments if you have strict change control etc, the previous 
   points help things a lot, you can easily reason about the implications and 
you 
   can be sure they wont affect existing systems.  It's just data that will 
affect 
   a small subset users.

This improves the maintainers life because:

 * They can find it easier to merge new OS support because the change is 
contained 
   in seperate files and easy to evaluate
 * Fewer complex merge commits and easier, cleaner, commit history
 * The code is simpler and generally easier to maintain in the long term

This improves the module user life because:

 * He can just look at existing data files and know without having to parse 
complex 
   nested case statements what the available overridable data is and what the 
keys
   would be etc.

There are more but these are the basics

>From a Puppet system perspective its important that this feature behave 
>consistently
and predictably with the current more or less universally accepted standard of 
data
seperation - hiera.  And hiera is all about data, the hiera puppet backend has 
been
broken for ages and not been missed because it does not provide a solution that 
solves
the above points.  And so the data separation around params.pp will not solve 
the real
problems either.

Data simply should not be mixed with logic - because then it becomes code again 
with
all the related problems.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To post to this group, send email to puppet-users@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to