Re: [Puppet Users] The handy Grail of Modules Standards

2013-10-13 Thread Alessandro Franceschi
An update on the stdmod works, which are going on slowly, but still moving.

We are getting near to define a basic set of names for modules parameters.
In particular there's a pull request where various discussions are ongoing 
on some basic naming patterns:
https://github.com/stdmod/puppet-modules/pull/1

the intention is to reach, with this PR, a point where at least the most 
used and important params names are defined and modules can start to be 
created / updated based on them.

If you don't like the proposed names or have suggestions to make, this is 
the right moment.
Please do that commenting directly the linked pull request.

Al

-- 
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.


Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-09 Thread devzero2000
On Mon, Jun 17, 2013 at 1:17 PM, Matthias Saou  wrote:

> Hi,
>
> First off... is these some pun I'm not getting, or was it supposed to
> be "Holy Grail"? Just wondering :-)
>
> Also, when I read "Puppet Modules Standard naming conventions", I
> thought it was just about module names, but it seems to be about
> parameter naming inside all of the module resources.
>
> After reading the shared Google document, I got reminded a lot of
> what I've seen happen with RPM packaging over the years. Lot of
> similarities, since both Puppet and RPM are tools which give a lot of
> freedom in the way things get implemented.
>
> Think of GNU/Linux distributions such as Fedora, RHEL, Mandriva, SuSE,
> etc. which all use RPM packages as their building blocks : They are not
> to be considered compatible for various reasons, yet they could have
> been in theory.
>
RPM based distro storically have diverged mostly for brand and political
reason. There are companies that sell support to the users who sponsor the
developments. The same RPM was forked countless times with patches
incompatible or not upstream. There have been propose in the past  to unify
the packaging effort but failed
http://lists.rpm.org/pipermail/rpm-maint/2008-June/002187.html.

RPM is a story in itself, believe me.I know it very well.

Puppet as a configuration management it is a completely different story in
my opinion. I was possible to do more, and Francesco effort  goes in the
right direction, in my opinion.

Best Regards

>
>

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-09 Thread Alessandro Franceschi
I've made some homework.
https://github.com/stdmod/puppet-wget

A wget module cloned from the existing openssh one.
The git history can show how easy and quick can be to make new modules 
(well this one is of course a very easy one) with the same parameters 
patterns. 

I've also gathered some sample modules which explore different usage cases 
here:
https://github.com/stdmod/puppet-modules/tree/master/modules

Feel free, anybody, to add new links to modules done with these (or 
proposed) patterns... (bin/clone.sh is your friend).


(*) We are still talking about a draft...  the current ones still need a 
few basic definitions ... ( package or package_name? file or file_path? or 
config? or config_path?... still here the current list 
https://github.com/stdmod/puppet-modules/blob/master/Parameters_List.md ) 


On Friday, August 9, 2013 11:12:36 PM UTC+2, David Schmitt wrote:
>
> On 2013-08-09 22:56, Alessandro Franceschi wrote: 
> > 
> > 
> > On Friday, August 9, 2013 9:22:54 PM UTC+2, Jakov Sosic wrote: 
> > 
> > On 08/08/2013 09:10 PM, Alessandro Franceschi wrote: 
> >  > natural to use two different parameters, like service_ensure and 
> >  > service_enable rather than one like service_status. 
> > 
> > Oh, I see. Simpler from the user perspective but more costly from 
> > performance perspective... 
> > 
> > 
> >  > there has been some concern about the amount of parameters or the 
> > need 
> >  > of some of them, but I think it makes sense to give standard 
> > names for 
> >  > different possible cases, even if you don't necessarily need to 
> > use them. 
> > 
> > Yeah, that interested me too... Imagine having like 20 modules like 
> > this 
> > one included in a node manifest... Wouldn't the compile time explode 
> > because of all the extra hiera lookups?! :-/ 
> > 
> > 
> > For sure the number of parameters has some impact , as the number of 
> > resources managed by the module. 
> > Some Puppet performance experts ( Brice, are you reading :-? ) can 
> > surely give better ideas of the impact of them when used on scale. 
> > 
> > I think it makes sense to make modules that provide some minimal, most 
> > common, reusability parameters and have the occasion to add features and 
> > parameters with predictable names and functions. 
> > This would ease the progressive refinement of a module keeping a 
> > standard layout. 
> > 
> > Really, we should provide and explore more examples, with different 
> > layouts for different modules structures, and see how this kind of 
> > parameters fit. 
>
> Actually, I'm not much concerned about the compile-time performance, 
> given that the alternative are modules that cannot be re-used because 
> they encode narrow assumptions and do not provide all necessary 
> extension points. 
>
>
> Regards, David 
>
>

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-09 Thread David Schmitt

On 2013-08-09 22:56, Alessandro Franceschi wrote:



On Friday, August 9, 2013 9:22:54 PM UTC+2, Jakov Sosic wrote:

On 08/08/2013 09:10 PM, Alessandro Franceschi wrote:
 > natural to use two different parameters, like service_ensure and
 > service_enable rather than one like service_status.

Oh, I see. Simpler from the user perspective but more costly from
performance perspective...


 > there has been some concern about the amount of parameters or the
need
 > of some of them, but I think it makes sense to give standard
names for
 > different possible cases, even if you don't necessarily need to
use them.

Yeah, that interested me too... Imagine having like 20 modules like
this
one included in a node manifest... Wouldn't the compile time explode
because of all the extra hiera lookups?! :-/


For sure the number of parameters has some impact , as the number of
resources managed by the module.
Some Puppet performance experts ( Brice, are you reading :-? ) can
surely give better ideas of the impact of them when used on scale.

I think it makes sense to make modules that provide some minimal, most
common, reusability parameters and have the occasion to add features and
parameters with predictable names and functions.
This would ease the progressive refinement of a module keeping a
standard layout.

Really, we should provide and explore more examples, with different
layouts for different modules structures, and see how this kind of
parameters fit.


Actually, I'm not much concerned about the compile-time performance, 
given that the alternative are modules that cannot be re-used because 
they encode narrow assumptions and do not provide all necessary 
extension points.



Regards, David

--
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.


Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-09 Thread Alessandro Franceschi


On Friday, August 9, 2013 9:22:54 PM UTC+2, Jakov Sosic wrote:
>
> On 08/08/2013 09:10 PM, Alessandro Franceschi wrote: 
> > natural to use two different parameters, like service_ensure and 
> > service_enable rather than one like service_status. 
>
> Oh, I see. Simpler from the user perspective but more costly from 
> performance perspective... 
>
>
> > there has been some concern about the amount of parameters or the need 
> > of some of them, but I think it makes sense to give standard names for 
> > different possible cases, even if you don't necessarily need to use 
> them. 
>
> Yeah, that interested me too... Imagine having like 20 modules like this 
> one included in a node manifest... Wouldn't the compile time explode 
> because of all the extra hiera lookups?! :-/ 
>
>
For sure the number of parameters has some impact , as the number of 
resources managed by the module.
Some Puppet performance experts ( Brice, are you reading :-? ) can surely 
give better ideas of the impact of them when used on scale.

I think it makes sense to make modules that provide some minimal, most 
common, reusability parameters and have the occasion to add features and 
parameters with predictable names and functions.
This would ease the progressive refinement of a module keeping a standard 
layout.

Really, we should provide and explore more examples, with different layouts 
for different modules structures, and see how this kind of parameters fit. 

my2c


>  

>
> -- 
> Jakov Sosic 
> www.srce.unizg.hr 
>

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-09 Thread Jakov Sosic

On 08/08/2013 09:10 PM, Alessandro Franceschi wrote:

natural to use two different parameters, like service_ensure and
service_enable rather than one like service_status.


Oh, I see. Simpler from the user perspective but more costly from 
performance perspective...




there has been some concern about the amount of parameters or the need
of some of them, but I think it makes sense to give standard names for
different possible cases, even if you don't necessarily need to use them.


Yeah, that interested me too... Imagine having like 20 modules like this 
one included in a node manifest... Wouldn't the compile time explode 
because of all the extra hiera lookups?! :-/



--
Jakov Sosic
www.srce.unizg.hr

--
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.


Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-08 Thread Alessandro Franceschi


On Thursday, August 8, 2013 1:45:44 AM UTC+2, Jakov Sosic wrote:
>
> On 08/06/2013 01:17 AM, Alessandro Franceschi wrote: 
>
> > That's quite nice, I like the reduced verbosity of the code and 
> > essentiality of an all in one (init.pp)  location for resources. 
>
> Yeah, I don't like to partition my module if it's quite simple, as this 
> one is. 
>
> > For better reusability I'd provide a *_template option to manage the 
> > templates of  all the different files you manage, leaving as the default 
> > the currently hardcoded ones. 
>
> Yeah, if I decide to publish the module on forge I will for sure add 
> those parameters too. We need to add Debian support in the house, and 
> after that I will maybe publish it. 
>
> TSM is a commercial product, we have in-house RPM/DEB packages (because 
> IBM provided ones are total shit), so without that packages module is 
> kinda useful. 
>
> This was my attempt to make the 'sample' module for our team to look at 
> when they code their own. 
>
>
> > Also the backup_status and archive_status arguments follow an approach 
> > that ... erm.. was revisited in the current version of the  "ongoing 
> > standard". 
>
> Can you point me to the revisited approach? I really like the current one 
> :D 
>
>
Well, it makes sense to try to follow, a resource_parameter naming, where 
possible.
So to manage the service status (enable/ensure), probably is more natural 
to use two different parameters, like service_ensure and service_enable 
rather than one like service_status.
In your case the name of the parameters could be something like 
backup_service_enable archive_service_ensure (incidentally this would 
reduce even more the verbosity of your module).

The "current" status of the stdmod naming proposal is still :
https://github.com/stdmod/puppet-modules/blob/master/Parameters_List.md

there has been some concern about the amount of parameters or the need of 
some of them, but I think it makes sense to give standard names for 
different possible cases, even if you don't necessarily need to use them.


  

>
> -- 
> Jakov Sosic 
> www.srce.unizg.hr 
>

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-07 Thread Jakov Sosic

On 08/06/2013 01:17 AM, Alessandro Franceschi wrote:


That's quite nice, I like the reduced verbosity of the code and
essentiality of an all in one (init.pp)  location for resources.


Yeah, I don't like to partition my module if it's quite simple, as this 
one is.



For better reusability I'd provide a *_template option to manage the
templates of  all the different files you manage, leaving as the default
the currently hardcoded ones.


Yeah, if I decide to publish the module on forge I will for sure add 
those parameters too. We need to add Debian support in the house, and 
after that I will maybe publish it.


TSM is a commercial product, we have in-house RPM/DEB packages (because 
IBM provided ones are total shit), so without that packages module is 
kinda useful.


This was my attempt to make the 'sample' module for our team to look at 
when they code their own.




Also the backup_status and archive_status arguments follow an approach
that ... erm.. was revisited in the current version of the  "ongoing
standard".


Can you point me to the revisited approach? I really like the current one :D



--
Jakov Sosic
www.srce.unizg.hr

--
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-05 Thread Alessandro Franceschi
That's quite nice, I like the reduced verbosity of the code and 
essentiality of an all in one (init.pp)  location for resources.
For better reusability I'd provide a *_template option to manage the 
templates of  all the different files you manage, leaving as the default 
the currently hardcoded ones.
Also the backup_status and archive_status arguments follow an approach that 
... erm.. was revisited in the current version of the  "ongoing standard".

Discussion about stdmod and naming standards seems faded again, and I've 
been quite distracted too.
I've had recently the need to make a Kibana (3) module and this is the 
result, for the moment, based on stdmod patterns.
https://github.com/example42/puppet-kibana

There are quite a lot other sample layouts, for different kind of modules 
that can be  done and shared.
Suppose is just a matter to show some works.


On Monday, August 5, 2013 11:01:08 PM UTC+2, Jakov Sosic wrote:
>
> On 06/26/2013 07:27 PM, Alessandro Franceschi wrote: 
> > Good point. 
> > In the doc I placed some possible examples on where to assign names, but 
> > more (or remarks on the ones listed) cases are welcomed. 
> > (Let me have your email for an invitation to edit) 
> > 
> > Btw, comments and access to: 
> > 
> https://docs.google.com/a/lab42.it/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA
>  
> > is open to everybody, and whoever writes modules should be somehow 
> > concerned. 
> > At the moment the discussion seems limited to very few people (even if I 
> > know various others are silently lurking :-) 
> > 
> > The same place of the document is to be considered temporary. 
>
> Let me just hop in and say that I'm really pleased with your stdmod 
> example, and I already did modify my first module in this way: 
>
> https://code.google.com/p/lutak/source/browse/tsm/manifests/init.pp 
>
> If you think I got something out of the order here, please post critique 
> ;) 
>
>
>
> -- 
> Jakov Sosic 
> www.srce.unizg.hr 
>

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-08-05 Thread Jakov Sosic

On 06/26/2013 07:27 PM, Alessandro Franceschi wrote:

Good point.
In the doc I placed some possible examples on where to assign names, but
more (or remarks on the ones listed) cases are welcomed.
(Let me have your email for an invitation to edit)

Btw, comments and access to:
https://docs.google.com/a/lab42.it/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA
is open to everybody, and whoever writes modules should be somehow
concerned.
At the moment the discussion seems limited to very few people (even if I
know various others are silently lurking :-)

The same place of the document is to be considered temporary.


Let me just hop in and say that I'm really pleased with your stdmod 
example, and I already did modify my first module in this way:


https://code.google.com/p/lutak/source/browse/tsm/manifests/init.pp

If you think I got something out of the order here, please post critique ;)



--
Jakov Sosic
www.srce.unizg.hr

--
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-07-15 Thread Alessandro Franceschi
Hi Ryan
Personal and alternative time priorities and availability surely influence 
the flow of discussion and I definitively have to understand that better in 
the cases when I've some free time and others not, so sorry everybody for 
the insistence, and consider the pings about the matter as a way to keep 
the discussion alive.

On Saturday, July 13, 2013 6:04:34 PM UTC+2, Ryan Coleman wrote:
>
> Hey Al, sorry. I went on holiday and then had to unbury myself. I guess 
> it's time I get my opinion out there. 
>
>
> On Mon, Jul 1, 2013 at 2:33 AM, Alessandro Franceschi 
> 
> > wrote:
>
>>
>>
>> On Monday, July 1, 2013 5:21:44 AM UTC+2, Ryan Coleman wrote:
>>>
>>> Hi Al, et al. I apologize for being so late to this party but I'm loving 
>>> all the conversation around this. I've read through the Google Doc and 
>>> found lots of cool ideas on class parameter names. Please forgive me 
>>> though, my product manager wired brain wants to pause at this point and 
>>> discuss it a bit first before I offer my opinions on the doc. 
>>>
>> On Tue, Jun 18, 2013 at 11:19 AM, Alessandro Franceschi wrote:
>>>
 For me a module is reusable when:
 1- It supports many different OS (this is somehow implicit and does 
 not involve naming conventions)
 2- It leaves to the user freedom on how to populate and customize the 
 provided configuration files ( I think this is the main point for most 
 reusability cases)
 3- It allows  the user to manage some behaviours of the module (has a 
 service to be restarted after a file change? Do I want to manage a service 
 status (at runtime or boot)
 4- In (somehow extreme) cases it allows the user to customize names of 
 package/services, paths of files and so on
 5- It allows seamless addition of custom resources, not managed by the 
 module but related to it
 6- It allows the user to decide where to place his data (also this is 
 out of naming convention scope)

>>>
>>> I'll admit that this is my Forge biased view of things, but I'm working 
>>> towards modules that are reusable, interoperable and introspectable. It 
>>> would help me contribute to the discussion if we could hammer out whether 
>>> we loosely agree on the goal and definitions. I'm already pretty happy with 
>>> your definition of reusable, but I'll paraphrase.
>>>
>>>
>>> Interoperable 
>>>
>>> - Module A is known to do X, Y & Z.
>>> - Module B also does X, Y & Z and can seamlessly replace module A
>>>
>>
>> Agree, and to clarify this even more:
>> If module C needs X which is provided by module A and B:
>> - A and B should be seamless replaceable (as you said)
>> - C should allow easy selection (for the user) of another module that 
>> provides X 
>> This second point might look redundant, given the first one, but it might 
>> be necessary since seamless  replacement of modules won't be easy to 
>> achieve OR a user may want to use a module that does not support the 
>> standard namings.
>> An approach for this second point is the usage of a dependency_class 
>> parameter (details in the Google Doc), but I'm sure the collective wisdom 
>> here may find a better solution.
>>
>
> As in, this is the class you're expected to depend on? That's going to be 
> a little hard to standardize on. Sometimes it's a resource you want, 
> sometimes a fact, maybe it's multiple classes.
>

Well, whatever you need from an external module, in this class (for which 
the module author provides his default) can be replaced by another class, 
defined and provided by the users, which is supposed to provide the same 
resources (or declare classes and defines from other modules ).
A (not particular elegant) example is this:
https://github.com/stdmod/puppet-elasticsearch/blob/master/manifests/dependency.pp
which uses legacy resources (git::reposync from a example42 git module you 
may not use) and creates some opinionated resources like the init script 
for the elasticsearch service.

Another example is this:
https://github.com/example42/puppet-graylog2/blob/master/manifests/dependencies.pp
where is used a define like mongodb::user which may have different 
parameters or name or usage patterns in an alternative mongo module 
actually used by the graylog2 module user.
The same would apply for more common cases where in your module you have to 
use defines apache::vhost or mysql::grant (at least until we don't define a 
naming standard also for them specifically, but that's another point), if 
they can stay in a "replaceable" class the module is more reusable and more 
easily made cross-compatible.

I know this is a somehow partial and naif solution, but it's possible with 
the current language, and I agree that some higher level solutions  that 
may involve code changes in Puppet can and should be seeked. But IMHO one 
thing doesn't exclude the other.
Having some standard parameters names to refer to the name of classes 
provided by the module than can be replaced directly by the u

Re: [Puppet Users] The handy Grail of Modules Standards

2013-07-15 Thread jcbollinger


On Sunday, June 30, 2013 10:21:44 PM UTC-5, Ryan Coleman wrote:
>
> I'll admit that this is my Forge biased view of things, but I'm working 
> towards modules that are reusable, interoperable and introspectable. It 
> would help me contribute to the discussion if we could hammer out whether 
> we loosely agree on the goal and definitions. I'm already pretty happy with 
> your definition of reusable, but I'll paraphrase. 
>
>
> Interoperable 
>
> - Module A is known to do X, Y & Z.
> - Module B also does X, Y & Z and can seamlessly replace module A
>
>

That sounds eminently reasonable at the high level, but I'm not sure what 
it really means for module implementations.  I suspect that what you and Al 
are both getting at is that module interfaces should provide a consistent 
higher-level language built on top of Puppet DSL.  Certainly choosing 
parameter names in a consistent way advances that goal.  I see potential 
issues there, however, with class names, which conceivably differ from one 
module to another, whether simply by the choice of the author or as a 
result of differing module structure.

For example, consider two modules managing Puppet, one that provides a 
single front-end class by which agent and master can both be managed, and 
one providing separate classes for managing those services.  Although it 
might not be exactly difficult to switch from one to the other, doing so 
surely would involve more than just pulling one out of the module path and 
putting the other in.  It would involve more even than also universally 
changing the name of one or two referenced classes.  Would these two 
hypothetical modules therefore fail to be "interoperable" as you see it?

Perhaps you mean something different by "seamlessly".  To me, 
interoperability means largely that modules managing different subsystems 
can be deployed and used alongside one another without interfering with 
each other, either in terms of managed resource collisions or in terms of 
requirements.  If one can replace one module with another without creating 
these sorts of problems then that could be construed as "seamless", but it 
seems a little tangential to the line of discussion (and one that we've had 
before).

I still think the Puppet would be very well served by a facility such as we 
discussed here: 
https://groups.google.com/forum/#!topic/puppet-users/Fvl0aOe4RPE 
(naturally, I prefer my own proposal in that thread).  Were something like 
that available, I think it would have a significant impact on best 
practices for module implementation, and some impact on best practices for 
module interfaces.  Inasmuch as it needn't change any existing Puppet 
behavior, it could even be added to the Puppet 3 series.

 

>
> Reusable
>
> - Supports multiple operating systems with a clear & standard pattern for 
> adding additional OSes
> - General capabilities of module can be switched on or off or lightly 
> modified. Ex., don't manage services or override configuration directory.
>
> One way that we differ immediately on reusability is that you're pretty 
> detailed on what you should be able to customize, like package and service 
> names. I don't disagree with you but I'm trying to start from a higher 
> level and see whether that's sufficient. I'm not sure what the balance is 
> regarding # of class parameters in use / ease of use.
>
>

I'm with you as far as that goes, and I think starting with high-level 
principles is an advantageous approach.

I do think the reusability question to which Al and I devoted so much 
rhetoric rises to this level, or at least near it -- specifically, whether 
the "reusability" objective demands that module interfaces be implemented 
in terms of parameterized classes.  I appreciate that you may not want to 
come down on one side or the other at this point, and I'm not asking you to 
do, but I do observe that nothing among the criteria you so far advanced 
for this principle demand parameterization.  I suppose Al's point (6) 
addresses the question for him.  He and I differ on whether that's an 
appropriate criterion for reusability (regardless of whether it is a good 
or bad idea for some other reason), so that's something that you will 
eventually need to settle for yourself.

 

>
> Introspectable
>
> - Code follows style guide and other patterns so that contributions are 
> more easily made and managed.
> - Puppet should be able to programmatically tell us about defined class 
> parameters and their default values. (yeah, this is theoretical atm) 
>
>

Even if you suppose that classes will generally be parameterized, wouldn't 
it be reasonable to want to introspect explicit hiera() calls as well?  
Even parameterized classes may in some cases perform them.

 

>
> Are these three goals and their values what we're all striving for with 
> this proposal? If not, what am I missing or getting wrong? 
>
>

I think they are all eminently worthy goals, though among them they 
considerably expand the 

Re: [Puppet Users] The handy Grail of Modules Standards

2013-07-13 Thread Ryan Coleman
Hey Al, sorry. I went on holiday and then had to unbury myself. I guess
it's time I get my opinion out there.


On Mon, Jul 1, 2013 at 2:33 AM, Alessandro Franceschi  wrote:

>
>
> On Monday, July 1, 2013 5:21:44 AM UTC+2, Ryan Coleman wrote:
>>
>> Hi Al, et al. I apologize for being so late to this party but I'm loving
>> all the conversation around this. I've read through the Google Doc and
>> found lots of cool ideas on class parameter names. Please forgive me
>> though, my product manager wired brain wants to pause at this point and
>> discuss it a bit first before I offer my opinions on the doc.
>>
> On Tue, Jun 18, 2013 at 11:19 AM, Alessandro Franceschi wrote:
>>
>>> For me a module is reusable when:
>>> 1- It supports many different OS (this is somehow implicit and does not
>>> involve naming conventions)
>>> 2- It leaves to the user freedom on how to populate and customize the
>>> provided configuration files ( I think this is the main point for most
>>> reusability cases)
>>> 3- It allows  the user to manage some behaviours of the module (has a
>>> service to be restarted after a file change? Do I want to manage a service
>>> status (at runtime or boot)
>>> 4- In (somehow extreme) cases it allows the user to customize names of
>>> package/services, paths of files and so on
>>> 5- It allows seamless addition of custom resources, not managed by the
>>> module but related to it
>>> 6- It allows the user to decide where to place his data (also this is
>>> out of naming convention scope)
>>>
>>
>> I'll admit that this is my Forge biased view of things, but I'm working
>> towards modules that are reusable, interoperable and introspectable. It
>> would help me contribute to the discussion if we could hammer out whether
>> we loosely agree on the goal and definitions. I'm already pretty happy with
>> your definition of reusable, but I'll paraphrase.
>>
>>
>> Interoperable
>>
>> - Module A is known to do X, Y & Z.
>> - Module B also does X, Y & Z and can seamlessly replace module A
>>
>
> Agree, and to clarify this even more:
> If module C needs X which is provided by module A and B:
> - A and B should be seamless replaceable (as you said)
> - C should allow easy selection (for the user) of another module that
> provides X
> This second point might look redundant, given the first one, but it might
> be necessary since seamless  replacement of modules won't be easy to
> achieve OR a user may want to use a module that does not support the
> standard namings.
> An approach for this second point is the usage of a dependency_class
> parameter (details in the Google Doc), but I'm sure the collective wisdom
> here may find a better solution.
>

As in, this is the class you're expected to depend on? That's going to be a
little hard to standardize on. Sometimes it's a resource you want,
sometimes a fact, maybe it's multiple classes.


> Also this interoperability should be somehow managed at Modulefile level
> (and with the puppet module command), so that I can use B even if in the
> Modulefile is required A.
> This part, which involves changes in Puppet's code, has to be somehow
> addressed sooner or later, IMHO.
>

I couldn't agree with you more here. We've got to allow for dependencies to
be interchangeable and I think this is most elegantly solved (for the
moment) at the module level, with its metadata and Forge ecosystem. That
said, I think that's best left to another thread.


>
>
>> Reusable
>>
>> - Supports multiple operating systems with a clear & standard pattern for
>> adding additional OSes
>>
> - General capabilities of module can be switched on or off or lightly
>> modified. Ex., don't manage services or override configuration directory.
>>
>> One way that we differ immediately on reusability is that you're pretty
>> detailed on what you should be able to customize, like package and service
>> names. I don't disagree with you but I'm trying to start from a higher
>> level and see whether that's sufficient. I'm not sure what the balance is
>> regarding # of class parameters in use / ease of use.
>>
>
> The idea is that you are not forced to provide all the "proposed"
> parameters, but if some of the parameters you provide in your module have
> the same function of the ones proposed, you should call them in the
> "standard" way.
> We might classify parameters in different ways, so that some should be
> considered somehow recommended (for a "standard module"), other optional,
> and other  "extra" or "enhanced", because more specific and exotic
> (thinking about the ones related to monitoring/firewalling, for example).
>

OK. I could get on board with that though I do think that the overall set
of parameters needs to be pruned down. Which parameters could be better
addressed with module/puppet changes? The dependency_class parameter
mentioned above seems like a good example.


>
>
>> Introspectable
>>
>> - Code follows style guide and other patterns so that contributions are
>> more easily made and manag

Re: [Puppet Users] The handy Grail of Modules Standards

2013-07-01 Thread Alessandro Franceschi


On Monday, July 1, 2013 5:21:44 AM UTC+2, Ryan Coleman wrote:
>
> Hi Al, et al. I apologize for being so late to this party but I'm loving 
> all the conversation around this. I've read through the Google Doc and 
> found lots of cool ideas on class parameter names. Please forgive me 
> though, my product manager wired brain wants to pause at this point and 
> discuss it a bit first before I offer my opinions on the doc. 
>
On Tue, Jun 18, 2013 at 11:19 AM, Alessandro Franceschi 

> > wrote:
>
>> For me a module is reusable when:
>> 1- It supports many different OS (this is somehow implicit and does not 
>> involve naming conventions)
>> 2- It leaves to the user freedom on how to populate and customize the 
>> provided configuration files ( I think this is the main point for most 
>> reusability cases)
>> 3- It allows  the user to manage some behaviours of the module (has a 
>> service to be restarted after a file change? Do I want to manage a service 
>> status (at runtime or boot)
>> 4- In (somehow extreme) cases it allows the user to customize names of 
>> package/services, paths of files and so on
>> 5- It allows seamless addition of custom resources, not managed by the 
>> module but related to it
>> 6- It allows the user to decide where to place his data (also this is 
>> out of naming convention scope)
>>
>
> I'll admit that this is my Forge biased view of things, but I'm working 
> towards modules that are reusable, interoperable and introspectable. It 
> would help me contribute to the discussion if we could hammer out whether 
> we loosely agree on the goal and definitions. I'm already pretty happy with 
> your definition of reusable, but I'll paraphrase.
>
>
> Interoperable 
>
> - Module A is known to do X, Y & Z.
> - Module B also does X, Y & Z and can seamlessly replace module A
>

Agree, and to clarify this even more:
If module C needs X which is provided by module A and B:
- A and B should be seamless replaceable (as you said)
- C should allow easy selection (for the user) of another module that 
provides X 
This second point might look redundant, given the first one, but it might 
be necessary since seamless  replacement of modules won't be easy to 
achieve OR a user may want to use a module that does not support the 
standard namings.
An approach for this second point is the usage of a dependency_class 
parameter (details in the Google Doc), but I'm sure the collective wisdom 
here may find a better solution.
Also this interoperability should be somehow managed at Modulefile level 
(and with the puppet module command), so that I can use B even if in the 
Modulefile is required A.
This part, which involves changes in Puppet's code, has to be somehow 
addressed sooner or later, IMHO.


> Reusable
>
> - Supports multiple operating systems with a clear & standard pattern for 
> adding additional OSes
>
- General capabilities of module can be switched on or off or lightly 
> modified. Ex., don't manage services or override configuration directory.
>
> One way that we differ immediately on reusability is that you're pretty 
> detailed on what you should be able to customize, like package and service 
> names. I don't disagree with you but I'm trying to start from a higher 
> level and see whether that's sufficient. I'm not sure what the balance is 
> regarding # of class parameters in use / ease of use.
>

The idea is that you are not forced to provide all the "proposed" 
parameters, but if some of the parameters you provide in your module have 
the same function of the ones proposed, you should call them in the 
"standard" way.
We might classify parameters in different ways, so that some should be 
considered somehow recommended (for a "standard module"), other optional, 
and other  "extra" or "enhanced", because more specific and exotic 
(thinking about the ones related to monitoring/firewalling, for example).
 

> Introspectable
>
> - Code follows style guide and other patterns so that contributions are 
> more easily made and managed.
> - Puppet should be able to programmatically tell us about defined class 
> parameters and their default values. (yeah, this is theoretical atm)
>

+1, but with a small note:
Even if I think it can be useful to provide some recommended patterns for 
modules design, this is a somehow more controversial and debatable matter 
(as the discussion with John in this thread may suggest) so I would not 
couple it strictly with the discussion about naming standards which it's, 
imho, more easy to stage and manage.
No problems for me in facing all the different problematics behind modules 
standards, but I'd suggest to make small steps and begin with the easier 
ones, since putting too many topics in the cauldron and keeping them tied 
together might make harder any improvement.
 

> Are these three goals and their values what we're all striving for with 
> this proposal? If not, what am I missing or getting wrong? 
>

I think we agree on the overall goals.
Actually yo

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-30 Thread Ryan Coleman
Hi Al, et al. I apologize for being so late to this party but I'm loving
all the conversation around this. I've read through the Google Doc and
found lots of cool ideas on class parameter names. Please forgive me
though, my product manager wired brain wants to pause at this point and
discuss it a bit first before I offer my opinions on the doc.

On Tue, Jun 18, 2013 at 11:19 AM, Alessandro Franceschi  wrote:

> For me a module is reusable when:
> 1- It supports many different OS (this is somehow implicit and does not
> involve naming conventions)
> 2- It leaves to the user freedom on how to populate and customize the
> provided configuration files ( I think this is the main point for most
> reusability cases)
> 3- It allows  the user to manage some behaviours of the module (has a
> service to be restarted after a file change? Do I want to manage a service
> status (at runtime or boot)
> 4- In (somehow extreme) cases it allows the user to customize names of
> package/services, paths of files and so on
> 5- It allows seamless addition of custom resources, not managed by the
> module but related to it
> 6- It allows the user to decide where to place his data (also this is out
> of naming convention scope)
>

I'll admit that this is my Forge biased view of things, but I'm working
towards modules that are reusable, interoperable and introspectable. It
would help me contribute to the discussion if we could hammer out whether
we loosely agree on the goal and definitions. I'm already pretty happy with
your definition of reusable, but I'll paraphrase.


Interoperable

- Module A is known to do X, Y & Z.
- Module B also does X, Y & Z and can seamlessly replace module A


Reusable

- Supports multiple operating systems with a clear & standard pattern for
adding additional OSes
- General capabilities of module can be switched on or off or lightly
modified. Ex., don't manage services or override configuration directory.

One way that we differ immediately on reusability is that you're pretty
detailed on what you should be able to customize, like package and service
names. I don't disagree with you but I'm trying to start from a higher
level and see whether that's sufficient. I'm not sure what the balance is
regarding # of class parameters in use / ease of use.


Introspectable

- Code follows style guide and other patterns so that contributions are
more easily made and managed.
- Puppet should be able to programmatically tell us about defined class
parameters and their default values. (yeah, this is theoretical atm)


Are these three goals and their values what we're all striving for with
this proposal? If not, what am I missing or getting wrong?

Thanks for kicking this off Al. I also care deeply about this stuff and
will be trying to carve off more time each week to help you continue to
explore it.

-- 
Ryan Coleman | Modules & Forge | @ryanycoleman | ryancoleman in #puppet

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-26 Thread Alessandro Franceschi


On Wednesday, June 26, 2013 3:37:10 PM UTC+2, jcbollinger wrote:
>
>
>
> On Tuesday, June 25, 2013 4:49:49 PM UTC-5, Alessandro Franceschi wrote:
>>
>>
>>
>> On Tuesday, June 25, 2013 9:16:20 PM UTC+2, jcbollinger wrote:
>>>
>>>
>>> So, here is a version of puppet-stdmod without class parameterization: 
>>> https://github.com/jcbollinger/puppet-stdmod .
>>>
>>
>> Ok, this is what I expected.
>>
>
>
> Of course it is.  I told you in advance what it was going to be.
>
>  
>
>> Thank you for your time.
>> I can definitively argue that this is not fully reusable
>>   ("So please show me a reusable module without parameters and without 
>> hiera functions inside, as that would not be reusable by whoever does not 
>> use Hiera.")
>>
>
>
> And I rejected that standard of reusability, for sound reasons that you 
> did not rebut.  Since we are closing off that line of discussion, we will 
> have to agree to disagree.
>

Actually I DID rebut and anticipated them. That module would not work on at 
least ten different Puppet setups where I've worked and Hiera was not used.
But, promise, I won't come back on this, let's happily disagree :-) 


>
>> Yes,
>> let's go on.
>> I guess the first steps should be to identify a coherent naming pattern, 
>> even before single names and define more precisely what parameters might be 
>> recommended, optional, or considered "extensions" . 
>>
>>
>
> Before any decision is made on naming patterns -- or at least in 
> conjunction with that -- don't you think we should come to grips with the 
> patterns of data to which we hope to assign names?  The Google doc does 
> address that topic, at least implicitly, but I think we should be satisfied 
> with the coverage and characterization of the data, else we cannot be 
> confident that the chosen names are the most appropriate ones.  I will 
> devote some attention to that, but I hope I will not be the only one to do 
> so.
>

Good point.
In the doc I placed some possible examples on where to assign names, but 
more (or remarks on the ones listed) cases are welcomed.
(Let me have your email for an invitation to edit)

Btw, comments and access to:
https://docs.google.com/a/lab42.it/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA
is open to everybody, and whoever writes modules should be somehow 
concerned.
At the moment the discussion seems limited to very few people (even if I 
know various others are silently lurking :-)

The same place of the document is to be considered temporary.

Al

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-26 Thread jcbollinger


On Tuesday, June 25, 2013 4:49:49 PM UTC-5, Alessandro Franceschi wrote:
>
>
>
> On Tuesday, June 25, 2013 9:16:20 PM UTC+2, jcbollinger wrote:
>>
>>
>> So, here is a version of puppet-stdmod without class parameterization: 
>> https://github.com/jcbollinger/puppet-stdmod .
>>
>
> Ok, this is what I expected.
>


Of course it is.  I told you in advance what it was going to be.

 

> Thank you for your time.
> I can definitively argue that this is not fully reusable
>   ("So please show me a reusable module without parameters and without 
> hiera functions inside, as that would not be reusable by whoever does not 
> use Hiera.")
>


And I rejected that standard of reusability, for sound reasons that you did 
not rebut.  Since we are closing off that line of discussion, we will have 
to agree to disagree.



> Yes,
> let's go on.
> I guess the first steps should be to identify a coherent naming pattern, 
> even before single names and define more precisely what parameters might be 
> recommended, optional, or considered "extensions" . 
>
>

Before any decision is made on naming patterns -- or at least in 
conjunction with that -- don't you think we should come to grips with the 
patterns of data to which we hope to assign names?  The Google doc does 
address that topic, at least implicitly, but I think we should be satisfied 
with the coverage and characterization of the data, else we cannot be 
confident that the chosen names are the most appropriate ones.  I will 
devote some attention to that, but I hope I will not be the only one to do 
so.


John

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-25 Thread Alessandro Franceschi


On Tuesday, June 25, 2013 11:49:49 PM UTC+2, Alessandro Franceschi wrote:
>
>
>
> On Tuesday, June 25, 2013 9:16:20 PM UTC+2, jcbollinger wrote:
>>
>>
>>
>> On Monday, June 24, 2013 9:12:17 AM UTC-5, Alessandro Franceschi wrote:
>>>
>>>
>>>
>>> On Monday, June 24, 2013 3:57:55 PM UTC+2, jcbollinger wrote:


 None of my modules have any parameterized classes, but I am not at 
 liberty to publish them.  I can derive an example from someone else's 
 module -- maybe yours -- and I will do so if you're actually interested.  
 However, you have now said at least twice that that's not what you want to 
 talk about, and I'm not inclined to do the work if you're not interested 
 in 
 the result.

>>>
>>> I'm still interested in seeing how this can be done, so any sample code 
>>> useful to understand the approach would be extremely welcomed.
>>> Just an example, then we can move on.
>>>
>>>
>> So, here is a version of puppet-stdmod without class parameterization: 
>> https://github.com/jcbollinger/puppet-stdmod .
>>
>
> Ok, this is what I expected.
> Thank you for your time.
> I can definitively argue that this is not fully reusable
>   ("So please show me a reusable module without parameters and without 
> hiera functions inside, as that would not be reusable by whoever does not 
> use Hiera.")
> but it's not relevant since with Puppet 3 data bindings we have the best 
> of both worlds.
> Personally I see only good reasons to recommend, as patterns for the 
> future, modules designed with parametrized classes.
>
>
>> All management capabilities of the original module are retained.  
>> Customization data are provided to it via Hiera (which the module calls 
>> explicitly), so the most significant change was simply to convert 
>> parameters to ordinary variables initialized vie Hiera.
>>
>> The conversion was not entirely mechanical, in that I had to accommodate 
>> some Hiera idiosyncrasies -- mainly that it cannot return either undef or 
>> (boolean) false.  Inasmuch as one would like the parameterized version to 
>> be fully compatible with automatic parameter binding, however, I would 
>> account at least some of those adaptations as usability enhancements with 
>> respect to the parameterized version.
>>
>> I did not convert the tests.
>>
>> Also, I do not specially endorse stdmod's particular design (either 
>> version).  I would write it at least a bit differently if doing so from 
>> scratch, but I think we've agreed to turn the discussion in a different 
>> direction.
>>
>>
>> John
>>
>
> Yes,
> let's go on.
> I guess the first steps should be to identify a coherent naming pattern, 
> even before single names and define more precisely what parameters might be 
> recommended, optional, or considered "extensions" . 
>


Talking about naming schemes, here are some possibilities (copied 
from: 
https://docs.google.com/a/lab42.it/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA
 
) we can discuss and improve.


Given the sample names below, there are at least  2 different approaches 
that can be followed, and once defined all the parameters names can somehow 
emerge naturally:
1- Place a common suffix for any kind of parameter
2- Place suffixes for some specific params and leave more general names of 
general ones

Examples for case 1
ensure

package_name
package_version
service_name
service_ensure
file_path
file_source
file_template
dir_path
dir_source

Examples for case 2
ensure

package
version
service
service_ensure
file_path
source
template
dir_path
dir_source
For both cases extra resources can be referred according to their name and 
type of resource, for example: server_package_name, master_file_path, 
controller_service_name and things like that. 

A general pattern could be:
[name_of_resource]__
- For the “main” resources of a class (main/unique package, main/unique 
service, main configuration file...) the name_of_resource is omitted.
- The type_of_resource reflects Puppet types (are “exceptions” like dir_ 
allowed?)
- The resource_parameter tends to map to a typical Puppet resource 
parameter (exceptions like template, version, options?) 

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-25 Thread Alessandro Franceschi


On Tuesday, June 25, 2013 10:10:13 PM UTC+2, Ygor wrote:
>
> I have been watching this thread grow and metastasize and I would like to 
> offer my opinions: 
>
> "The wonderful thing about standards is that there are so many of them to 
> choose from." Grace Hopper (maybe) 
>
> There are at least two very different directions to approach this from, 
> IMHO. 
>
> The first is from the idea to create a universally useable module that can 
> be dropped into any puppet master and run without modification. This seems 
> to me to be the approach of Example-42.


> The other approach is to provide a set of common sense, best-practice 
> guidelines for folks to use to "grow" their own modules for their own 
> specific needs. 
>
> I think both are necessary and valuable. 
>
> My grumble about the Example-42-Swiss-Army-Knife approach is that I would 
> like to know what is absolutely necessary and what is optional. I do not 
> want to implement the equivalent of the Sears Craftsman Gazillon Piece Tool 
> Warehouse when all I need is one lousy Phillip's screwdriver. 


Well the idea is that in the Fat Warehouse you pick the screwdriver you 
need, the others are there, at disposal, mostly harmless.


> I have dug thru some of the Example 42 modules and I have learned more 
> than a few nifty ways of getting things done, but I am working in a 
> one-operating-system environment (Red Hat) and I do not need all the extra 
> code to cover the other OS's. 


Others will.
The first step for modules' reusability is support of multiple OS.

Note, IMHO a reusable module is not always the right choice:
slim and essential code for very specific and internally standardised 
setups can be preferred at times.


> Other grumbles (not only about Example 42) include sparse documentation 
> and examples: If you are going to define a pile of parameters, it would be 
> very helpful to include examples to show how to use them. Very few 
> published modules provide enough detail to make me happy. 


That's another good reason to standardize the names of common sense 
parameters, that can therefore be better documented and explained. 

>
> The old saying is "There's more than one way to skin a cat." (My apologies 
> to all ailurophiles out there, of which I am one) 
> Same thing here. Puppet is a potentially powerful framework for system 
> configuration and management. If you are sloppy about how you use it, you 
> can booger up your systems big-time and lose important data. 
>
> Exactly how to do it all is not as important (IMHO) as learning right and 
> wrong ways to do individual tasks. It is then up to the individual DevOp to 
> tailor the pieces to fit their particular needs and environment.


Yes, but when this tailoring becomes "take existing modules and modify or 
write them from scratch " you end up seeing dozens of randomly documented 
and designed Mysql modules, that can be used in different ways and may have 
weird cross dependencies.

That's why starting for some naming standards helps.
That's also why I personally think that some common modules like apache, 
mysql, nginx, postgres or other that are frequently used by third modules 
should have explicit and dedicated standard parameters for the typical 
defines they provide.
 
my2c
al

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-25 Thread Alessandro Franceschi


On Tuesday, June 25, 2013 9:16:20 PM UTC+2, jcbollinger wrote:
>
>
>
> On Monday, June 24, 2013 9:12:17 AM UTC-5, Alessandro Franceschi wrote:
>>
>>
>>
>> On Monday, June 24, 2013 3:57:55 PM UTC+2, jcbollinger wrote:
>>>
>>>
>>> None of my modules have any parameterized classes, but I am not at 
>>> liberty to publish them.  I can derive an example from someone else's 
>>> module -- maybe yours -- and I will do so if you're actually interested.  
>>> However, you have now said at least twice that that's not what you want to 
>>> talk about, and I'm not inclined to do the work if you're not interested in 
>>> the result.
>>>
>>
>> I'm still interested in seeing how this can be done, so any sample code 
>> useful to understand the approach would be extremely welcomed.
>> Just an example, then we can move on.
>>
>>
> So, here is a version of puppet-stdmod without class parameterization: 
> https://github.com/jcbollinger/puppet-stdmod .
>

Ok, this is what I expected.
Thank you for your time.
I can definitively argue that this is not fully reusable
  ("So please show me a reusable module without parameters and without 
hiera functions inside, as that would not be reusable by whoever does not 
use Hiera.")
but it's not relevant since with Puppet 3 data bindings we have the best of 
both worlds.
Personally I see only good reasons to recommend, as patterns for the 
future, modules designed with parametrized classes.


> All management capabilities of the original module are retained.  
> Customization data are provided to it via Hiera (which the module calls 
> explicitly), so the most significant change was simply to convert 
> parameters to ordinary variables initialized vie Hiera.
>
> The conversion was not entirely mechanical, in that I had to accommodate 
> some Hiera idiosyncrasies -- mainly that it cannot return either undef or 
> (boolean) false.  Inasmuch as one would like the parameterized version to 
> be fully compatible with automatic parameter binding, however, I would 
> account at least some of those adaptations as usability enhancements with 
> respect to the parameterized version.
>
> I did not convert the tests.
>
> Also, I do not specially endorse stdmod's particular design (either 
> version).  I would write it at least a bit differently if doing so from 
> scratch, but I think we've agreed to turn the discussion in a different 
> direction.
>
>
> John
>

Yes,
let's go on.
I guess the first steps should be to identify a coherent naming pattern, 
even before single names and define more precisely what parameters might be 
recommended, optional, or considered "extensions" . 

The google doc is always open to scribble some ideas and proposals.

Al



-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-25 Thread Dan White
I have been watching this thread grow and metastasize and I would like to offer 
my opinions: 

"The wonderful thing about standards is that there are so many of them to 
choose from." Grace Hopper (maybe) 

There are at least two very different directions to approach this from, IMHO. 

The first is from the idea to create a universally useable module that can be 
dropped into any puppet master and run without modification. This seems to me 
to be the approach of Example-42. 

The other approach is to provide a set of common sense, best-practice 
guidelines for folks to use to "grow" their own modules for their own specific 
needs. 

I think both are necessary and valuable. 

My grumble about the Example-42-Swiss-Army-Knife approach is that I would like 
to know what is absolutely necessary and what is optional. I do not want to 
implement the equivalent of the Sears Craftsman Gazillon Piece Tool Warehouse 
when all I need is one lousy Phillip's screwdriver. 

I have dug thru some of the Example 42 modules and I have learned more than a 
few nifty ways of getting things done, but I am working in a 
one-operating-system environment (Red Hat) and I do not need all the extra code 
to cover the other OS's. 

Other grumbles (not only about Example 42) include sparse documentation and 
examples: If you are going to define a pile of parameters, it would be very 
helpful to include examples to show how to use them. Very few published modules 
provide enough detail to make me happy. 

The old saying is "There's more than one way to skin a cat." (My apologies to 
all ailurophiles out there, of which I am one) 
Same thing here. Puppet is a potentially powerful framework for system 
configuration and management. If you are sloppy about how you use it, you can 
booger up your systems big-time and lose important data. 

Exactly how to do it all is not as important (IMHO) as learning right and wrong 
ways to do individual tasks. It is then up to the individual DevOp to tailor 
the pieces to fit their particular needs and environment. 

And to use the closing of Dennis Miller, "...of course, that's just my opinion 
. I could be wrong." 

“Sometimes I think the surest sign that intelligent life exists elsewhere in 
the universe is that none of it has tried to contact us.” 
Bill Waterson (Calvin & Hobbes) 

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-25 Thread jcbollinger


On Monday, June 24, 2013 9:12:17 AM UTC-5, Alessandro Franceschi wrote:
>
>
>
> On Monday, June 24, 2013 3:57:55 PM UTC+2, jcbollinger wrote:
>>
>>
>> None of my modules have any parameterized classes, but I am not at 
>> liberty to publish them.  I can derive an example from someone else's 
>> module -- maybe yours -- and I will do so if you're actually interested.  
>> However, you have now said at least twice that that's not what you want to 
>> talk about, and I'm not inclined to do the work if you're not interested in 
>> the result.
>>
>
> I'm still interested in seeing how this can be done, so any sample code 
> useful to understand the approach would be extremely welcomed.
> Just an example, then we can move on.
>
>
So, here is a version of puppet-stdmod without class parameterization: 
https://github.com/jcbollinger/puppet-stdmod .

All management capabilities of the original module are retained.  
Customization data are provided to it via Hiera (which the module calls 
explicitly), so the most significant change was simply to convert 
parameters to ordinary variables initialized vie Hiera.

The conversion was not entirely mechanical, in that I had to accommodate 
some Hiera idiosyncrasies -- mainly that it cannot return either undef or 
(boolean) false.  Inasmuch as one would like the parameterized version to 
be fully compatible with automatic parameter binding, however, I would 
account at least some of those adaptations as usability enhancements with 
respect to the parameterized version.

I did not convert the tests.

Also, I do not specially endorse stdmod's particular design (either 
version).  I would write it at least a bit differently if doing so from 
scratch, but I think we've agreed to turn the discussion in a different 
direction.


John

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-24 Thread Alessandro Franceschi


On Monday, June 24, 2013 3:57:55 PM UTC+2, jcbollinger wrote:
>
>
>
> On Friday, June 21, 2013 6:21:22 PM UTC-5, Alessandro Franceschi wrote:
>>
>>
>>
>> On Friday, June 21, 2013 5:05:20 PM UTC+2, jcbollinger wrote:
>>>
>>> Anything you can configure with class parameters, you can configure 
>>> without them via external data. Generally speaking, I would turn to hiera 
>>> for that.  If you want an ENC that surpasses hiera's built-in capabilities, 
>>> then it can be written in the form of a custom hiera back-end.
>>>
>>> On the other hand, if your criterion for a module being "reusable" is 
>>> that it can be used in every way exactly as a module based on parameterized 
>>> classes can be used, then the question is rigged.
>>>
>>> That hiera was not built-in to Puppet 2 does not alter my evaluation 
>>> here.  It is readily available and widely used with that series.  I have 
>>> always held that parameterized classes were not safe to use in Puppet 2 
>>> anyway, so if the objective is modules that are reusable in Puppet 2 then I 
>>> would go beyond "parameterization is not required" to "parameterization of 
>>> API classes is forbidden".  That leaves you with dynamic scoping and 
>>> extlookup() as your only built-in alternatives, and however suitable they 
>>> may be (or not) for Puppet 2, they are not suitable for Puppet 
>>> If the objective is for modules to be written so as to be usable in both 
>>> Puppet 2 and Puppet 3, then I think Hiera is the only viable alternative.  
>>> Classes belonging to module APIs must not be declared via the parameterized 
>>> style, and though avoiding that in Puppet 2 could be supported by using 
>>> hiera() calls for parameter default values, writing API classes that way 
>>> produces (i) worse compilation performance in Puppet 3, and (ii) the 
>>> opportunity for users to shoot themselves in the foot.
>>>
>>
>> Still words and no samples John.
>>
>>
>
> None of my modules have any parameterized classes, but I am not at liberty 
> to publish them.  I can derive an example from someone else's module -- 
> maybe yours -- and I will do so if you're actually interested.  However, 
> you have now said at least twice that that's not what you want to talk 
> about, and I'm not inclined to do the work if you're not interested in the 
> result.
>

I'm still interested in seeing how this can be done, so any sample code 
useful to understand the approach would be extremely welcomed.
Just an example, then we can move on.

I'm not interested in sticking the discussion on that, also because I feel 
like we might have found the right "communication frequency"
 

>
> Either way, whether such modules are common is altogether beside the (my) 
> point, which is about whether conventions such as you wish to develop and 
> promote should *require* modules' API classes to be parameterized.  I 
> will oppose that aspect of any such effort.
>
> The more fundamental idea of a common mapping of data and data types to 
> names (i.e. a data "ontology"), on the other hand, is an outstanding idea.  
> If the discussion is at that level then it will certainly keep my interest, 
> and it may attract my active participation.
>

Good.
Then consider that all the name for "parameters"  in:
https://docs.google.com/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA/edit?usp=sharing

may either refer to class' parameters or to hiera variables.
For example a parameter "ensure" on the module apache, would map to 
hiera('apache::ensure').

What of those parameters/hiera variables could be considered useful enough 
to be recommended?
What would be their names?


-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-24 Thread jcbollinger


On Friday, June 21, 2013 6:21:22 PM UTC-5, Alessandro Franceschi wrote:
>
>
>
> On Friday, June 21, 2013 5:05:20 PM UTC+2, jcbollinger wrote:
>>
>> Anything you can configure with class parameters, you can configure 
>> without them via external data. Generally speaking, I would turn to hiera 
>> for that.  If you want an ENC that surpasses hiera's built-in capabilities, 
>> then it can be written in the form of a custom hiera back-end.
>>
>> On the other hand, if your criterion for a module being "reusable" is 
>> that it can be used in every way exactly as a module based on parameterized 
>> classes can be used, then the question is rigged.
>>
>> That hiera was not built-in to Puppet 2 does not alter my evaluation 
>> here.  It is readily available and widely used with that series.  I have 
>> always held that parameterized classes were not safe to use in Puppet 2 
>> anyway, so if the objective is modules that are reusable in Puppet 2 then I 
>> would go beyond "parameterization is not required" to "parameterization of 
>> API classes is forbidden".  That leaves you with dynamic scoping and 
>> extlookup() as your only built-in alternatives, and however suitable they 
>> may be (or not) for Puppet 2, they are not suitable for Puppet 
>> If the objective is for modules to be written so as to be usable in both 
>> Puppet 2 and Puppet 3, then I think Hiera is the only viable alternative.  
>> Classes belonging to module APIs must not be declared via the parameterized 
>> style, and though avoiding that in Puppet 2 could be supported by using 
>> hiera() calls for parameter default values, writing API classes that way 
>> produces (i) worse compilation performance in Puppet 3, and (ii) the 
>> opportunity for users to shoot themselves in the foot.
>>
>
> Still words and no samples John.
>
>

None of my modules have any parameterized classes, but I am not at liberty 
to publish them.  I can derive an example from someone else's module -- 
maybe yours -- and I will do so if you're actually interested.  However, 
you have now said at least twice that that's not what you want to talk 
about, and I'm not inclined to do the work if you're not interested in the 
result.

Either way, whether such modules are common is altogether beside the (my) 
point, which is about whether conventions such as you wish to develop and 
promote should *require* modules' API classes to be parameterized.  I will 
oppose that aspect of any such effort.

The more fundamental idea of a common mapping of data and data types to 
names (i.e. a data "ontology"), on the other hand, is an outstanding idea.  
If the discussion is at that level then it will certainly keep my interest, 
and it may attract my active participation.


John


-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-22 Thread Alessandro Franceschi


On Saturday, June 22, 2013 11:47:13 AM UTC+2, Wolf Noble wrote:
>
>
> I'd like to say I really like the intent behind this. 
>
> Yes, a name is important. So is continuity. I believe the underlying goal 
> is to provide a collection of reference material. Once the skeleton of this 
> material is generally agreed upon, it can be used as guidelines to the 
> community for how to implement a common set of functionality with 
> performance, and the greatest quantity of interoperability in mind. 
>
> How is this a bad thing? 
>
> The demonstrated example shows plenty of well thought out functionality. 
> How might we better implement these functional knobs and levers? 
>

Yes, that's the kind of things I'd like to discuss.
 

>
> Lets go beyond the fact that the only reason we call knobs, switches, and 
> levers what we do is that communally we agreed that this long-ish thing 
> protruding from this surface over here should be called a lever, that this 
> definitive state toggle be called a switch, and this round, grabbable 
> twisty thing here should be called a knob. Names are important, but not 
> just because they're names, they're icons of functionality. 
>
> Consistently referring to a lever as a lever provides more intuitive 
> context, but doesn't change how it operates. Does it do the same thing if 
> you call it a widget? Sure! Does it help with the goal of communally 
> establishing conventions of grounding and interoperability? Not so much. 
>
> So, on the one hand, no, this conversation is not purely about naming 
> conventions. On the other, I don't think that's the point to focus on. 
>
> I can absolutely see the value in a few sets of versioned 
> "interoperability reference" modules, which provide one a good working 
> model of how to provide specific bits of functionality in as flexible a 
> manner as necessary. 
>
> There are several different good module paradigms out there. I feel that 
> fragmentation of design and implementation hinders the community more than 
> a little bit. It confuses it, at the very least. 
>
> I do not believe a 'one-size-fits-all' paradigm would do us all that much 
> good here either. You'd likely always be one side or the other of too much 
> scaffolding for simple modules, and not enough flexibility for complicated 
> ones. 
>

Agree.
 

>
> I believe this means a few levels of module complexity would need to be 
> modeled. Then the transitions between those states would be more 
> straightforward. Someone could expand the functionality of your module with 
> greater ease and consistency. 
>

Totally agree.
 

>
> I would love to see other examples which provide similar levels of 
> implemented functionality. 
>

Actually it would be interesting, and actually is something that is 
definitively planned, to explore, different sample modules for different 
kind of applications: for example Java/Rails apps, or more complex cases, 
where you need defines but maybe also types and providers, also to validate 
and test the naming and functional choices.


> (... (:(: and then the bikeshedding and performance holy wars can really 
> get going :):) ...) 
>
> What other good ways are there to easily write unit tests to validate the 
> different behaviors of a module without parameters? 
> Facts? 
> Limited scope/functionality subclasses? 
>

I still can't figure out how to make a reusable module without parameters 
and without explicit hiera calls inside.
I'd really be interested in seeing an example.
 

> This is a very exciting subject of conversation. I am thankful to everyone 
> participating in it for their thoughts and contributions. 
>

I'm looking forward for your suggestions on:
https://docs.google.com/a/lab42.it/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA

al 

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-22 Thread Wolf Noble

I'd like to say I really like the intent behind this.

Yes, a name is important. So is continuity. I believe the underlying goal is to 
provide a collection of reference material. Once the skeleton of this material 
is generally agreed upon, it can be used as guidelines to the community for how 
to implement a common set of functionality with performance, and the greatest 
quantity of interoperability in mind. 

How is this a bad thing?

The demonstrated example shows plenty of well thought out functionality. How 
might we better implement these functional knobs and levers?

Lets go beyond the fact that the only reason we call knobs, switches, and 
levers what we do is that communally we agreed that this long-ish thing 
protruding from this surface over here should be called a lever, that this 
definitive state toggle be called a switch, and this round, grabbable twisty 
thing here should be called a knob. Names are important, but not just because 
they're names, they're icons of functionality. 

Consistently referring to a lever as a lever provides more intuitive context, 
but doesn't change how it operates. Does it do the same thing if you call it a 
widget? Sure! Does it help with the goal of communally establishing conventions 
of grounding and interoperability? Not so much.

So, on the one hand, no, this conversation is not purely about naming 
conventions. On the other, I don't think that's the point to focus on.

I can absolutely see the value in a few sets of versioned "interoperability 
reference" modules, which provide one a good working model of how to provide 
specific bits of functionality in as flexible a manner as necessary.

There are several different good module paradigms out there. I feel that 
fragmentation of design and implementation hinders the community more than a 
little bit. It confuses it, at the very least.

I do not believe a 'one-size-fits-all' paradigm would do us all that much good 
here either. You'd likely always be one side or the other of too much 
scaffolding for simple modules, and not enough flexibility for complicated ones.

I believe this means a few levels of module complexity would need to be 
modeled. Then the transitions between those states would be more 
straightforward. Someone could expand the functionality of your module with 
greater ease and consistency.

I would love to see other examples which provide similar levels of implemented 
functionality.

(... (:(: and then the bikeshedding and performance holy wars can really get 
going :):) ...)

What other good ways are there to easily write unit tests to validate the 
different behaviors of a module without parameters? 
Facts?
Limited scope/functionality subclasses?


This is a very exciting subject of conversation. I am thankful to everyone 
participating in it for their thoughts and contributions.

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-21 Thread Alessandro Franceschi


On Friday, June 21, 2013 5:05:20 PM UTC+2, jcbollinger wrote:
>
>
>
> On Thursday, June 20, 2013 10:14:09 AM UTC-5, Alessandro Franceschi wrote:
>>
>>
>>
>> On Thursday, June 20, 2013 4:12:46 PM UTC+2, jcbollinger wrote:
>>>
>>>
>>>
>>> On Wednesday, June 19, 2013 5:34:58 PM UTC-5, Alessandro Franceschi 
>>> wrote:
>>>
>>>
 *A really reusable module HAS to be parametrized*.

>>>
>>>
>>> Utter hogwash.
>>>
>>
>> Lol. Show me a real example of a reusable module without parametrized 
>> classes that at least manages a typical package/service/configuration file 
>> scenario.
>> Give me proofs, not words that I have to search on a dictionary.
>>  
>>
>
>
> Anything you can configure with class parameters, you can configure 
> without them via external data. Generally speaking, I would turn to hiera 
> for that.  If you want an ENC that surpasses hiera's built-in capabilities, 
> then it can be written in the form of a custom hiera back-end.
>
> On the other hand, if your criterion for a module being "reusable" is that 
> it can be used in every way exactly as a module based on parameterized 
> classes can be used, then the question is rigged.
>
> That hiera was not built-in to Puppet 2 does not alter my evaluation 
> here.  It is readily available and widely used with that series.  I have 
> always held that parameterized classes were not safe to use in Puppet 2 
> anyway, so if the objective is modules that are reusable in Puppet 2 then I 
> would go beyond "parameterization is not required" to "parameterization of 
> API classes is forbidden".  That leaves you with dynamic scoping and 
> extlookup() as your only built-in alternatives, and however suitable they 
> may be (or not) for Puppet 2, they are not suitable for Puppet 
> If the objective is for modules to be written so as to be usable in both 
> Puppet 2 and Puppet 3, then I think Hiera is the only viable alternative.  
> Classes belonging to module APIs must not be declared via the parameterized 
> style, and though avoiding that in Puppet 2 could be supported by using 
> hiera() calls for parameter default values, writing API classes that way 
> produces (i) worse compilation performance in Puppet 3, and (ii) the 
> opportunity for users to shoot themselves in the foot.
>

Still words and no samples John.

I show you again this one, then.
https://github.com/example42/puppet-stdmod

it does what we want.
Automatic Hiera lookups if you have Puppet3, and I hope data bindings are 
here to stay.
or parametrized classes declarations, which are finally getting some 
respect also from ENCs.

You can use it how you want.
And if you don't like how the module is done, as I presume, you can do a 
different version, like this:
https://github.com/example42/puppet-stdmodalt
or whatever other better layout you may want to produce.

They are based on parametrized classes, incidentally.
I'm still not able to make a truly reusable module in other ways. 
(And still don't see them around).

But this is not the point.

Are the parameters / hiera variables suggested useful?
Can some of them be considered useful for the module's reusability?
Which ones are good enough to be considered obvious and a logic?
Which ones make sense enough to have a common name and be suggested as 
standard?
Which other ones can be suggested?

Now, 
really,
I would prefer to discuss about that
with* you,*
if you want
and most of all
*eveybody *
*t*hinks this might a good thing for the evolution of the modules' 
ecosystem in the next years. 

(Hello PuppetLabs?)

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-21 Thread jcbollinger


On Thursday, June 20, 2013 10:14:09 AM UTC-5, Alessandro Franceschi wrote:
>
>
>
> On Thursday, June 20, 2013 4:12:46 PM UTC+2, jcbollinger wrote:
>>
>>
>>
>> On Wednesday, June 19, 2013 5:34:58 PM UTC-5, Alessandro Franceschi wrote:
>>
>>
>>> *A really reusable module HAS to be parametrized*.
>>>
>>
>>
>> Utter hogwash.
>>
>
> Lol. Show me a real example of a reusable module without parametrized 
> classes that at least manages a typical package/service/configuration file 
> scenario.
> Give me proofs, not words that I have to search on a dictionary.
>  
>


Anything you can configure with class parameters, you can configure without 
them via external data. Generally speaking, I would turn to hiera for 
that.  If you want an ENC that surpasses hiera's built-in capabilities, 
then it can be written in the form of a custom hiera back-end.

On the other hand, if your criterion for a module being "reusable" is that 
it can be used in every way exactly as a module based on parameterized 
classes can be used, then the question is rigged.

That hiera was not built-in to Puppet 2 does not alter my evaluation here.  
It is readily available and widely used with that series.  I have always 
held that parameterized classes were not safe to use in Puppet 2 anyway, so 
if the objective is modules that are reusable in Puppet 2 then I would go 
beyond "parameterization is not required" to "parameterization of API 
classes is forbidden".  That leaves you with dynamic scoping and 
extlookup() as your only built-in alternatives, and however suitable they 
may be (or not) for Puppet 2, they are not suitable for Puppet 3.

If the objective is for modules to be written so as to be usable in both 
Puppet 2 and Puppet 3, then I think Hiera is the only viable alternative.  
Classes belonging to module APIs must not be declared via the parameterized 
style, and though avoiding that in Puppet 2 could be supported by using 
hiera() calls for parameter default values, writing API classes that way 
produces (i) worse compilation performance in Puppet 3, and (ii) the 
opportunity for users to shoot themselves in the foot.


John

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-21 Thread jcbollinger


On Thursday, June 20, 2013 1:07:22 PM UTC-5, David Schmitt wrote:
>
> On 2013-06-20 16:12, jcbollinger wrote: 
> > I just have low regard for software that 
> > doesn't yet exist. I do not find the potential for nebulous future 
> > software a persuasive argument for adopting anything. 
>
> You might want to check out the significant amount of modules available 
> at http://github.com/Example42 that are the source of these naming 
> conventions. 
>
>
I am aware of them, and of their connection to this discussion, but they 
are nothing to do with my quoted comment.  A check of the context will show 
that I was talking about this:

> but I see various other clear benefits, in the mid term:

> - The possibility to have an unified approach to smoke testing of common 
features 

> - The possibility to have web front-ends and ENC that leverage on the 
standardized parameters 


John

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-20 Thread David Schmitt

On 2013-06-20 16:12, jcbollinger wrote:

I just have low regard for software that
doesn't yet exist. I do not find the potential for nebulous future
software a persuasive argument for adopting anything.


You might want to check out the significant amount of modules available 
at http://github.com/Example42 that are the source of these naming 
conventions.


Regards, David

--
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-20 Thread Alessandro Franceschi


On Thursday, June 20, 2013 4:12:46 PM UTC+2, jcbollinger wrote:
>
>
>
> On Wednesday, June 19, 2013 5:34:58 PM UTC-5, Alessandro Franceschi wrote:
>>
>>
>>
>> On Wednesday, June 19, 2013 5:03:41 PM UTC+2, jcbollinger wrote:
>>>
>>>
>>> Call me "experienced", "jaded", or even "cynical", but I know of too 
>>> many instances of vaporware to be swayed by promises of software that 
>>> hasn't yet been written.
>>>
>>
>> I just call you cynical. We can't do anything if we don't try to do it.
>>  
>>
>
> By all means, do.  If you are somehow getting the impression that I object 
> to the project then I apologize.  Indeed, I encourage you to proceed, and I 
> wish you well.  I just have low regard for software that doesn't yet 
> exist.  I do not find the potential for nebulous future software a 
> persuasive argument for adopting anything.
>
> What I actually object to is misrepresentation -- even though accidental 
> -- of the nature and scope of the project.  It is NOT restricted to 
> choosing names.
>
> Secondarily, I object to positioning the effort as a standardization 
> project, and I advise you to position it differently.  Names and labels are 
> meaningful.  How the project proceeds, who participates, what they propose, 
> and all manner of intangibles will be influenced by your decisions in this 
> regard.  Frankly, I am inclined to resist a "standardization" effort from 
> any random third party, but I have no reason whatever to oppose anyone 
> drafting a set of conventions or best practices.  After they have been 
> tested in the field will be a suitable time to consider standardization or 
> endorsement.
>
>
>
>> *A really reusable module HAS to be parametrized*.
>>
>
>
> Utter hogwash.
>

Lol. Show me a real example of a reusable module without parametrized 
classes that at least manages a typical package/service/configuration file 
scenario.
Give me proofs, not words that I have to search on a dictionary.
 

>
>  
>
>> Take note, I can repeat and argument that anytime.
>>
>
>
> Then no doubt we'll be hearing from each other on this again.
>
>  
>
>> Parameters are the API of a module, the interface you can interact with 
>> it without touching it.
>> If you don't use parameters either you are forcing inside the module 
>> behaviours that can't be changed by users or you are forcing a specific way 
>> to obtain the data that affects the modules behaviour and this inherently 
>> makes it not reusable for people who provide data in other ways.
>>
>
>
> The data consumed by a module and the labels by which they are identified 
> are certainly parts of a module's API, but it is by no means necessary to 
> express those or interact with them in the form of class parameters.  You 
> cannot safely use parameterized-style class declarations (as opposed to 
> class *definitions*) of any API class, especially in or with modules 
> intended to be interoperable.  That makes parameterization largely moot as 
> far as reusability goes.  If people want to parameterize their classes then 
> I have no special reason to object.  I do object, however, to the premise 
> that doing so usefully improves reusability or interoperability, and 
> therefore I object to any proposal that expressly calls for classes to be 
> parameterized.
>
> As long as we're talking about standards, Hiera is Puppet's de facto 
> standard interface to external data.  It is usually expected that proposed 
> standards will build on other, existing standards, whether de facto or 
> formal.
>

Sadly, Hiera is not the only de facto standard interface to Puppet's 
external data. Variables set via an ENC are another widely used "standard".
Also I'd say that Hiera is standard with Puppet 3, not with earlier 
versions.
So please show me a reusable module without parameters and without hiera 
functions inside, as that would not be reusable by whoever does not use 
Hiera.


> I think your proposal would be stronger if it truly did focus on the data 
> that might need to be supported by modules and the names / labels / keys by 
> which they are identified.  If you choose a namespace-based system then you 
> can align it to be consistent with class parameterization and automated 
> parameter binding, yet not dependent on those.  I know you want more, but 
> you should consider making a separate effort of the rest.
>

I've no problems in concentrating in naming without "forcing" the usage of 
parametrized classes, but still have to figure out HOW to manage injection 
of external data to the module without using parameters (and without using 
hiera calls or references to arbitrary fully qualified variables names).
Curiously one of my efforts in the past has been exactly towards this 
direction, so I have actually a solution for that, but it still requires a 
parametrized class, even if you can use it with a simple include.


>  
>>
>>>
>>> Most importantly, however, my central objection here is that a proposal 
>>> that purports to be exclusively about 

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-20 Thread jcbollinger


On Wednesday, June 19, 2013 5:34:58 PM UTC-5, Alessandro Franceschi wrote:
>
>
>
> On Wednesday, June 19, 2013 5:03:41 PM UTC+2, jcbollinger wrote:
>>
>>
>> Call me "experienced", "jaded", or even "cynical", but I know of too many 
>> instances of vaporware to be swayed by promises of software that hasn't yet 
>> been written.
>>
>
> I just call you cynical. We can't do anything if we don't try to do it.
>  
>

By all means, do.  If you are somehow getting the impression that I object 
to the project then I apologize.  Indeed, I encourage you to proceed, and I 
wish you well.  I just have low regard for software that doesn't yet 
exist.  I do not find the potential for nebulous future software a 
persuasive argument for adopting anything.

What I actually object to is misrepresentation -- even though accidental -- 
of the nature and scope of the project.  It is NOT restricted to choosing 
names.

Secondarily, I object to positioning the effort as a standardization 
project, and I advise you to position it differently.  Names and labels are 
meaningful.  How the project proceeds, who participates, what they propose, 
and all manner of intangibles will be influenced by your decisions in this 
regard.  Frankly, I am inclined to resist a "standardization" effort from 
any random third party, but I have no reason whatever to oppose anyone 
drafting a set of conventions or best practices.  After they have been 
tested in the field will be a suitable time to consider standardization or 
endorsement.



> *A really reusable module HAS to be parametrized*.
>


Utter hogwash.

 

> Take note, I can repeat and argument that anytime.
>


Then no doubt we'll be hearing from each other on this again.

 

> Parameters are the API of a module, the interface you can interact with it 
> without touching it.
> If you don't use parameters either you are forcing inside the module 
> behaviours that can't be changed by users or you are forcing a specific way 
> to obtain the data that affects the modules behaviour and this inherently 
> makes it not reusable for people who provide data in other ways.
>


The data consumed by a module and the labels by which they are identified 
are certainly parts of a module's API, but it is by no means necessary to 
express those or interact with them in the form of class parameters.  You 
cannot safely use parameterized-style class declarations (as opposed to 
class *definitions*) of any API class, especially in or with modules 
intended to be interoperable.  That makes parameterization largely moot as 
far as reusability goes.  If people want to parameterize their classes then 
I have no special reason to object.  I do object, however, to the premise 
that doing so usefully improves reusability or interoperability, and 
therefore I object to any proposal that expressly calls for classes to be 
parameterized.

As long as we're talking about standards, Hiera is Puppet's de facto 
standard interface to external data.  It is usually expected that proposed 
standards will build on other, existing standards, whether de facto or 
formal.

I think your proposal would be stronger if it truly did focus on the data 
that might need to be supported by modules and the names / labels / keys by 
which they are identified.  If you choose a namespace-based system then you 
can align it to be consistent with class parameterization and automated 
parameter binding, yet not dependent on those.  I know you want more, but 
you should consider making a separate effort of the rest.

 
>
>>
>> Most importantly, however, my central objection here is that a proposal 
>> that purports to be exclusively about naming parameters in fact has any 
>> implications at all for module organization and style.
>>
>
> Ok, it's not a proposal that purports to be exclusively about naming 
> parameters: the usage of specific parameters involve patterns that enhance 
> modules' reusability  and interoperability.
> The sample module code definitively exposes design patterns with modules 
> (and it demonstrates that you can follow different patterns to achieve the 
> same behaviour.
>  
> Reading it again this is not so clear in the first post here, but it's 
> widely expressed in the linked pages.
> So, sorry, now let's move a step further, let's talk, if you want, about 
> how to make that paper/draft/proposal better.
> And if you think that such a thing should not even be discussed, well, ok, 
> I'll accept that and discuss it with who is interested in it.
>   
>


I think it would be better if it actually were narrowed in scope to 
identifying patterns in the data that modules consume, and choosing naming 
conventions for those data.  Better, and also easier to reach consensus 
on.  Include some comments about namespacing, especially in conjunction 
with accessing data via Hiera.  These issues are separate from and more 
fundamental than class parameterization or module organization.  They will, 
however, influence anyone who cho

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-19 Thread David Schmitt

On 20.06.2013 00:34, Alessandro Franceschi wrote:

Having a curated repository of interoperable modules without a minimum
set of shared parameters would be a great drawback and a major lost
occasion.


Yes.


_A really reusable module HAS to be parametrized_.


Yes.


Somehow it also seems that some other people are doing the same with
them, given some figures from GitHub and the fact that about 100
different committers have improved or patched them.


Yes.


One of the reasons why I'm basically considering to thrash all this
"legacy" work and trying to promote and embrace wider standards is that
I definitively think that they can give great benefits  to Puppet's
modules ecosystem.


Yes.


Still this idea is not only mine, I've talked and shared it with various
other Puppetteers (some of them started to make  modules even before me
or you even knew what Puppet was) and the consensus is wide enough to
make me think that even without an explicit support from PuppetLabs, a
robust, coherent, shared and single repository  of Puppet modules made
by (some) community members can be done and can work well.


Yes.



Regards, David

--
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-19 Thread Alessandro Franceschi


On Wednesday, June 19, 2013 5:03:41 PM UTC+2, jcbollinger wrote:
>
>
>
> On Tuesday, June 18, 2013 1:19:32 PM UTC-5, Alessandro Franceschi wrote:
>>
>> Some personal notes among the lines...
>>
>> On Tuesday, June 18, 2013 6:35:18 PM UTC+2, Ken Barber wrote:
>>>
>>> > Although I agree that to be reusable, modules need to provide certain 
>>> types 
>>> > of levers, knobs, and switches, as appropriate for their scopes, I 
>>> think the 
>>> > case is weak for those controls needing to be called by the same 
>>> names.  At 
>>> > best, naming conventions for such things might improve ease of (re)use 
>>> for 
>>> > some people, but the key factor for reusability is not the names of 
>>> the 
>>> > controls so much as their presence in the first place. 
>>>
>>
>> Well on this I definitively do not agree :-)
>> For me a module is reusable when:
>> 1- It supports many different OS (this is somehow implicit and does not 
>> involve naming conventions)
>> 2- It leaves to the user freedom on how to populate and customize the 
>> provided configuration files ( I think this is the main point for most 
>> reusability cases)
>> 3- It allows  the user to manage some behaviours of the module (has a 
>> service to be restarted after a file change? Do I want to manage a service 
>> status (at runtime or boot)
>> 4- In (somehow extreme) cases it allows the user to customize names of 
>> package/services, paths of files and so on
>> 5- It allows seamless addition of custom resources, not managed by the 
>> module but related to it
>> 6- It allows the user to decide where to place his data (also this is out 
>> of naming convention scope)
>>
>> Given these points, I think that some of the parameters names proposed in 
>> the draft actually DO inherently enhance a module reusability:
>> For point 2: source, template, options (with might make useless almost 
>> any additional application specific configuration parameter), dir_source 
>> (and  dir_* )
>> For point 3: status, autorestart (poor name), audits, noops
>> For point 4: package, service, file_path, dir_path
>> For point 5: my_class resources_hash
>>
>> But maybe we have different semantic nuances for the term "modules' 
>> reusability".
>>
>
>
> Evidently so. For the most part, what you said does not conflict with what 
> I said; you were just more specific.  Where we differ is that I am 
> distinguishing "reusability" from *ease* of reuse.  I agree that all of 
> your items 1 - 6 are factors that improve modules' reusability.  I assert, 
> however, that the names by which those particular knobs are referenced do 
> not constitute essential reusability factors, but rather ease of use 
> factors.
>

Here I really don't follow you: if you agree that the above points improves 
modules' reusability, how can you say that defining naming standards for 
parameters that empower those points just enhance ease of use and not the 
same reusability of a module that implements them?
 

>
> Basically, I am drawing the line at having to modify the code to use a 
> third-party module.  The module is "reusable" if I do not have to modify 
> it, even if I have to study it to determine how to use it.  It is easy to 
> use if it presents a coherent, intuitive external interface.  Almost all 
> naming considerations fall into the latter category.
>

Well at least we agree on the definition of a reusable module.
 

>
> Moreover, any ease of use advantage of such a convention is limited to 
> those users who buy in to the convention.  Such buy-in is unlikely to arise 
> from a standard-setting effort alone.
>  
>
>>
>> I agree that the interoperability part is not fully dependent on naming 
>> standards.
>> Aa a partial solution for this I have thought about the usage of a 
>> "dependency_class" to contain in a single, replaceable, class all the 
>> external dependencies, and eventually tweaking the Modulefile and the 
>> puppet module command to manage soft-dependencies and reduce conflicts 
>> modules Forge modules (more details on this on the blog post linked before).
>> I don't see it as a perfect solution but that's something that can be 
>> done now (without extra code if not for the Forge integration) and very 
>> quickly.
>>
>
>
> I have some issues with that approach, but I'm going to disregard them for 
> now because that topic is largely beyond the stated scope of the naming 
> conventions and convention-drafting effort we are discussing.
>
>  
>
>>
>>> I think being able to use another class in a drop-in way is not the 
>>> value I see in parameter naming 'recommendations'. I personal see 
>>> value in the ease of use more than anything, if parameters are 
>>> similarly named between classes, when you go to use them you don't 
>>> have to interrupt, double check with the docs what this class/define 
>>> uses, then modify your parameter name accordingly. Its a reduction in 
>>> surprise if anything. An example would be the 'package' parameter, 
>>> versus 'packages' ... if I did

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-19 Thread jcbollinger


On Tuesday, June 18, 2013 1:19:32 PM UTC-5, Alessandro Franceschi wrote:
>
> Some personal notes among the lines...
>
> On Tuesday, June 18, 2013 6:35:18 PM UTC+2, Ken Barber wrote:
>>
>> > Although I agree that to be reusable, modules need to provide certain 
>> types 
>> > of levers, knobs, and switches, as appropriate for their scopes, I 
>> think the 
>> > case is weak for those controls needing to be called by the same names. 
>>  At 
>> > best, naming conventions for such things might improve ease of (re)use 
>> for 
>> > some people, but the key factor for reusability is not the names of the 
>> > controls so much as their presence in the first place. 
>>
>
> Well on this I definitively do not agree :-)
> For me a module is reusable when:
> 1- It supports many different OS (this is somehow implicit and does not 
> involve naming conventions)
> 2- It leaves to the user freedom on how to populate and customize the 
> provided configuration files ( I think this is the main point for most 
> reusability cases)
> 3- It allows  the user to manage some behaviours of the module (has a 
> service to be restarted after a file change? Do I want to manage a service 
> status (at runtime or boot)
> 4- In (somehow extreme) cases it allows the user to customize names of 
> package/services, paths of files and so on
> 5- It allows seamless addition of custom resources, not managed by the 
> module but related to it
> 6- It allows the user to decide where to place his data (also this is out 
> of naming convention scope)
>
> Given these points, I think that some of the parameters names proposed in 
> the draft actually DO inherently enhance a module reusability:
> For point 2: source, template, options (with might make useless almost any 
> additional application specific configuration parameter), dir_source (and 
>  dir_* )
> For point 3: status, autorestart (poor name), audits, noops
> For point 4: package, service, file_path, dir_path
> For point 5: my_class resources_hash
>
> But maybe we have different semantic nuances for the term "modules' 
> reusability".
>


Evidently so. For the most part, what you said does not conflict with what 
I said; you were just more specific.  Where we differ is that I am 
distinguishing "reusability" from *ease* of reuse.  I agree that all of 
your items 1 - 6 are factors that improve modules' reusability.  I assert, 
however, that the names by which those particular knobs are referenced do 
not constitute essential reusability factors, but rather ease of use 
factors.

Basically, I am drawing the line at having to modify the code to use a 
third-party module.  The module is "reusable" if I do not have to modify 
it, even if I have to study it to determine how to use it.  It is easy to 
use if it presents a coherent, intuitive external interface.  Almost all 
naming considerations fall into the latter category.

Moreover, any ease of use advantage of such a convention is limited to 
those users who buy in to the convention.  Such buy-in is unlikely to arise 
from a standard-setting effort alone.
 

>
> I agree that the interoperability part is not fully dependent on naming 
> standards.
> Aa a partial solution for this I have thought about the usage of a 
> "dependency_class" to contain in a single, replaceable, class all the 
> external dependencies, and eventually tweaking the Modulefile and the 
> puppet module command to manage soft-dependencies and reduce conflicts 
> modules Forge modules (more details on this on the blog post linked before).
> I don't see it as a perfect solution but that's something that can be done 
> now (without extra code if not for the Forge integration) and very quickly.
>


I have some issues with that approach, but I'm going to disregard them for 
now because that topic is largely beyond the stated scope of the naming 
conventions and convention-drafting effort we are discussing.

 

>
>> I think being able to use another class in a drop-in way is not the 
>> value I see in parameter naming 'recommendations'. I personal see 
>> value in the ease of use more than anything, if parameters are 
>> similarly named between classes, when you go to use them you don't 
>> have to interrupt, double check with the docs what this class/define 
>> uses, then modify your parameter name accordingly. Its a reduction in 
>> surprise if anything. An example would be the 'package' parameter, 
>> versus 'packages' ... if I didn't have to stop and check which one it 
>> is for my XYZ class it might save time and mistakes *shrug*. 
>>
>
> Let me clarify that hardly in my dreams I could imagine seamless drop-in 
> replacements, but naming standards+dependency_class pattern CAN make 
> interoperability much easier.
>
>

So, then, this really isn't just a question of naming things, as previously 
claimed?  I mean, I know I made that very observation in my previous post, 
but I had assumed that it was just an aspect of the proposal that you 
hadn't recognized and appreci

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-18 Thread Alessandro Franceschi
Some personal notes among the lines...

On Tuesday, June 18, 2013 6:35:18 PM UTC+2, Ken Barber wrote:
>
> > Although I agree that to be reusable, modules need to provide certain 
> types 
> > of levers, knobs, and switches, as appropriate for their scopes, I think 
> the 
> > case is weak for those controls needing to be called by the same names. 
>  At 
> > best, naming conventions for such things might improve ease of (re)use 
> for 
> > some people, but the key factor for reusability is not the names of the 
> > controls so much as their presence in the first place. 
>

Well on this I definitively do not agree :-)
For me a module is reusable when:
1- It supports many different OS (this is somehow implicit and does not 
involve naming conventions)
2- It leaves to the user freedom on how to populate and customize the 
provided configuration files ( I think this is the main point for most 
reusability cases)
3- It allows  the user to manage some behaviours of the module (has a 
service to be restarted after a file change? Do I want to manage a service 
status (at runtime or boot)
4- In (somehow extreme) cases it allows the user to customize names of 
package/services, paths of files and so on
5- It allows seamless addition of custom resources, not managed by the 
module but related to it
6- It allows the user to decide where to place his data (also this is out 
of naming convention scope)

Given these points, I think that some of the parameters names proposed in 
the draft actually DO inherently enhance a module reusability:
For point 2: source, template, options (with might make useless almost any 
additional application specific configuration parameter), dir_source (and 
 dir_* )
For point 3: status, autorestart (poor name), audits, noops
For point 4: package, service, file_path, dir_path
For point 5: my_class resources_hash

But maybe we have different semantic nuances for the term "modules' 
reusability".

> 
> > I see implications for interoperability only insomuch as one imagines 
> > facilitating one module being a drop-in replacement for another, but (1) 
> > there's a lot more to that than just common naming, so (2) that kind of 
> > interoperability is unlikely to come about except by specific intention 
> > anyway, so in that case shared naming comes out as a project 
> requirement. 
> > To me, that moots any general parameter-naming standard as far as 
> > interoperability goes. 
>

I agree that the interoperability part is not fully dependent on naming 
standards.
Aa a partial solution for this I have thought about the usage of a 
"dependency_class" to contain in a single, replaceable, class all the 
external dependencies, and eventually tweaking the Modulefile and the 
puppet module command to manage soft-dependencies and reduce conflicts 
modules Forge modules (more details on this on the blog post linked before).
I don't see it as a perfect solution but that's something that can be done 
now (without extra code if not for the Forge integration) and very quickly.

>
> I think being able to use another class in a drop-in way is not the 
> value I see in parameter naming 'recommendations'. I personal see 
> value in the ease of use more than anything, if parameters are 
> similarly named between classes, when you go to use them you don't 
> have to interrupt, double check with the docs what this class/define 
> uses, then modify your parameter name accordingly. Its a reduction in 
> surprise if anything. An example would be the 'package' parameter, 
> versus 'packages' ... if I didn't have to stop and check which one it 
> is for my XYZ class it might save time and mistakes *shrug*. 
>

Let me clarify that hardly in my dreams I could imagine seamless drop-in 
replacements, but naming standards+dependency_class pattern CAN make 
interoperability much easier.

For the other benefits, least surprise is one point, not small as it 
involves (let me copy and paste :-):

- Better user experience (modules are easier to use and understand) 

- Quicker and more reliable Puppet manifests development (for basic 
functions you can expect predictable parameters)

- More coherent and error proof Puppet setups 

but I see various other clear benefits, in the mid term:

- The possibility to have an unified approach to smoke testing of common 
features 

- The possibility to have web front-ends and ENC that leverage on the 
standardized parameters 
- Easier integration with superclasses that expose their own parameters and 
use different modules to build up full applications stacks or complex 
setups that involve multiple modules.

- A PuppetLabs and/or Community driven central repository of well tested 
and features rich unique Standard modules
(it might be a subset of the Forge or a set of git repos with only one 
module for application)
 

>
> Is that valuable? Alas, I'm more of developer then user these days so 
> I would defer that to our users. As a developer though - I would find 
> it handy to have a gu

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-18 Thread Ken Barber
> Although I agree that to be reusable, modules need to provide certain types
> of levers, knobs, and switches, as appropriate for their scopes, I think the
> case is weak for those controls needing to be called by the same names.  At
> best, naming conventions for such things might improve ease of (re)use for
> some people, but the key factor for reusability is not the names of the
> controls so much as their presence in the first place.
>
> I see implications for interoperability only insomuch as one imagines
> facilitating one module being a drop-in replacement for another, but (1)
> there's a lot more to that than just common naming, so (2) that kind of
> interoperability is unlikely to come about except by specific intention
> anyway, so in that case shared naming comes out as a project requirement.
> To me, that moots any general parameter-naming standard as far as
> interoperability goes.

I think being able to use another class in a drop-in way is not the
value I see in parameter naming 'recommendations'. I personal see
value in the ease of use more than anything, if parameters are
similarly named between classes, when you go to use them you don't
have to interrupt, double check with the docs what this class/define
uses, then modify your parameter name accordingly. Its a reduction in
surprise if anything. An example would be the 'package' parameter,
versus 'packages' ... if I didn't have to stop and check which one it
is for my XYZ class it might save time and mistakes *shrug*.

Is that valuable? Alas, I'm more of developer then user these days so
I would defer that to our users. As a developer though - I would find
it handy to have a guide for common things, I'm a pedant when it comes
to naming and if someone already came up with a name for me, I would
probably use it, presuming others have thought through any naming
consequences.

> None of that is a fundamental reason to object to the effort, but I'm not
> seeing any promise of significant benefit to motivate me to participate
> actively.
>
> I do have a bona fide objection, however: although the effort is cast at
> this point as being aimed exclusively at parameter naming, by implication it
> also covers elements of module structure, organization, and style as well,
> as the things being named have to exist for the standard to be relevant.  I
> do understand that the intention is not to make all the standardized
> controls mandatory for every module, but for those that a given module does
> provide, even the standard's limited reusability and interoperability goals
> are not served if those controls are not located where the standard
> anticipates (which is for the most part on a single front-end class).

I've been pondering this situation as well. I presume in a world where
such recommendations become commonly used, the outcome would be
surprise at a missing 'recommended' parameter, then a subsequent bug
raised on the module due to its lack. This might be considered a
positive or negative. If the parameter name was named 'something else'
due to a feeling that the 'standard' is not covering a developers
needs, then this could be annoying to have that discussion _yet
again_. If however the functionality is simply missing - this becomes
a BAU patch (like the lint patches we see all the time) and probably a
positive feature request.

Of course, this all depends on how good the recommendations are.
Having looked through the document I think some of them are obvious,
and require less debate while other recommendations are less
obvious/contentious.

> Personally, I would rather see a white paper explaining what kinds of
> controls need to be available to facilitate reusability of various kinds of
> modules, and, optionally, setting out one or more models of how a module can
> provide those controls.  Regardless of the nature of the paper's authorship,
> this feels like it should be a position paper, not a proposed standard.

Fair point, its a difficult document to position precisely. I guess I
foresee this as something that should be a part of a guide for writing
modules then any hard/fast rule or 'standard'.

ken.

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-18 Thread jcbollinger


On Monday, June 17, 2013 9:32:36 AM UTC-5, Alessandro Franceschi wrote:
>
> Puppet is a language and so people do the same things in different ways, 
> and they all work and do what they are supposed to do.
> But if we think about modules REUSABILITY and INTEROPERABILITY some 
> patterns have to be followed.
> Some of the parameters described in the document are somehow REQUIRED, 
> IMHO, if you want to make a really reusable module (for example the ones 
> that let you decide how to manage your configuration files... if you 
> enforce a logic in a module or a specific template and don't allow override 
> by users, then you are not making a reusable module, so for example a 
> parameter like "template" is just needed).
> So, since, at least some of, these parameters are needed for a reusable 
> module  it's just a matter of defining few naming conventions (and managing 
> external modules dependencies in a sane way) to make different modules 
> happily live better together.
>


Although I agree that to be reusable, modules need to provide certain types 
of levers, knobs, and switches, as appropriate for their scopes, I think 
the case is weak for those controls needing to be called by the same 
names.  At best, naming conventions for such things might improve *ease* of 
(re)use for some people, but the key factor for reusability is not the 
names of the controls so much as their presence in the first place.

I see implications for interoperability only insomuch as one imagines 
facilitating one module being a drop-in replacement for another, but (1) 
there's a lot more to that than just common naming, so (2) that kind of 
interoperability is unlikely to come about except by specific intention 
anyway, so in that case shared naming comes out as a project requirement.  
To me, that moots any general parameter-naming standard as far as 
interoperability goes.
 
None of that is a fundamental reason to object to the effort, but I'm not 
seeing any promise of significant benefit to motivate me to participate 
actively.

I do have a bona fide objection, however: although the effort is cast at 
this point as being aimed exclusively at parameter naming, by implication 
it also covers elements of module structure, organization, and style as 
well, as the things being named have to exist for the standard to be 
relevant.  I do understand that the intention is not to make all the 
standardized controls mandatory for every module, but for those that a 
given module does provide, even the standard's limited reusability and 
interoperability goals are not served if those controls are not located 
where the standard anticipates (which is for the most part on a single 
front-end class).

Personally, I would rather see a white paper explaining what kinds of 
controls need to be available to facilitate reusability of various kinds of 
modules, and, optionally, setting out one or more models of how a module 
can provide those controls.  Regardless of the nature of the paper's 
authorship, this feels like it should be a position paper, not a proposed 
standard.


John

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-18 Thread Alessandro Franceschi


On Tuesday, June 18, 2013 11:16:15 AM UTC+2, Matthias Saou wrote:
>
> On Mon, 17 Jun 2013 07:32:36 -0700 (PDT) 
> Alessandro Franceschi > wrote: 
>
> > Thanks for your opinion, even if I don't fully agree with it. 
> > Puppet is a language and so people do the same things in different 
> > ways, and they all work and do what they are supposed to do. 
> > But if we think about modules REUSABILITY and INTEROPERABILITY some 
> > patterns have to be followed. 
> > Some of the parameters described in the document are somehow 
> > REQUIRED, IMHO, if you want to make a really reusable module (for 
> > example the ones that let you decide how to manage your configuration 
> > files... if you enforce a logic in a module or a specific template 
> > and don't allow override by users, then you are not making a reusable 
> > module, so for example a parameter like "template" is just needed). 
> > So, since, at least some of, these parameters are needed for a 
> > reusable module  it's just a matter of defining few naming 
> > conventions (and managing external modules dependencies in a sane 
> > way) to make different modules happily live better together. 
> > 
> > Note, I don't say that ALL the modules should have ALL these 
> > parameters, I'd consider these Standard Namings as suggestions which 
> > people may decide to follow or not (somehow similar to the Code Style 
> > suggestions, which leverage the style of the Puppet code and have 
> > found tools like puppet-lint to validate them). Once enough good and 
> > prominent Puppet modules will follow these naming conventions, it 
> > will be easier for people to switch modules, integrate the best ones 
> > from different sources (without forking them) , use these parameters 
> > from a WEB interface, a a standard framework from smoke testing and 
> > have the benefits which are better described in the blog post. 
> > 
> > Note also that these proposals are based on the current Puppet 
> > language specifications, I want to start from what can be used now, 
> > with an eye on the evolution on Puppet, but with still feet on the 
> > ground: nothing new or to invent, just few basic naming convention to 
> > agree upon and *suggest*. 
> > 
> > I still think that this is at hands reach :-) 
>
> This is definitely a good initiative, what I'm just saying is that 
> you've opened a can of worms :-) 
>

Lol, we have to do that sooner or later, I think :-D
And the sooner, the better.
 

>
> The initial step of creating common guidelines for parameter names is 
> nice, as it can create some consistency across modules, and ease work 
> sharing as well as lower the learning curve for people using 3rd party 
> modules. But it would need to be official (in the puppet documentation 
> as best practices, for instance) and/or enforced on the forge, to 
> become really useful. 
>

I definitively agree.
This is something that should be endorsed if not managed directly by 
PuppetLabs.
Anyway I would not "enforce" the use of standard params, but somehow 
"certify" the modules that provide them (eventually defining different 
"levels" of standard params coverage) so that you know you can use them 
with established patterns (and in the future maybe test them with standard 
procedures and integrate them in an ENC that explicitly supports and 
exposes these standard parameters)
 

>
> And after that, things quickly get exponentially complex IMHO. A few 
> examples from the top of my head : 
>
>  * Naming the modules themselves. 
>

Right, even if, besides few cases with somehow flurry namings (apache or 
httpd? ssh or openssh?), generally the name of the module is already quite 
standard.
 

>  * Naming the classes and definitions inside the modules. 
>

 * Multiple modules requiring the same packages (If my module needs 
>rsync, yours too, where do we put the common virtual resource?). 
>

This is a wide and tricky issue. My naif approach is the definition of a 
dependency_class parameter where external resources like rsync are managed 
(and you can provide a custom dependency_class where you manage the 
required resources in the way you want). For the installation of simple 
packages I'd currently use/recommend the not perfect "if ! defined" 
approach (always in the dependency_class).
When the language will provide a smarter solution, we can follow it, some 
past discussion on possible solutions there has been in the list, in order 
to work they definitively have to be shared by the modules (so they fit 
well in the "standard module" pattern). Some of them required enhancements 
to the DSL some not, being a Puppet user I prefer to stick to current 
language syntax.

 

>  * The use of author-specific common modules (I don't like taking a 
>johndoe/apache module and noticing I then need johndoe/common). 
>

I'd try to leverage modules on stdlib as much as possible, but at the same 
time some "local common" modules are sometimes needed.
It doesn't harm to have them in your modulep

Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-18 Thread Matthias Saou
On Mon, 17 Jun 2013 07:32:36 -0700 (PDT)
Alessandro Franceschi  wrote:

> Thanks for your opinion, even if I don't fully agree with it.
> Puppet is a language and so people do the same things in different
> ways, and they all work and do what they are supposed to do.
> But if we think about modules REUSABILITY and INTEROPERABILITY some 
> patterns have to be followed.
> Some of the parameters described in the document are somehow
> REQUIRED, IMHO, if you want to make a really reusable module (for
> example the ones that let you decide how to manage your configuration
> files... if you enforce a logic in a module or a specific template
> and don't allow override by users, then you are not making a reusable
> module, so for example a parameter like "template" is just needed).
> So, since, at least some of, these parameters are needed for a
> reusable module  it's just a matter of defining few naming
> conventions (and managing external modules dependencies in a sane
> way) to make different modules happily live better together.
> 
> Note, I don't say that ALL the modules should have ALL these
> parameters, I'd consider these Standard Namings as suggestions which
> people may decide to follow or not (somehow similar to the Code Style
> suggestions, which leverage the style of the Puppet code and have
> found tools like puppet-lint to validate them). Once enough good and
> prominent Puppet modules will follow these naming conventions, it
> will be easier for people to switch modules, integrate the best ones
> from different sources (without forking them) , use these parameters
> from a WEB interface, a a standard framework from smoke testing and
> have the benefits which are better described in the blog post.
> 
> Note also that these proposals are based on the current Puppet
> language specifications, I want to start from what can be used now,
> with an eye on the evolution on Puppet, but with still feet on the
> ground: nothing new or to invent, just few basic naming convention to
> agree upon and *suggest*.
> 
> I still think that this is at hands reach :-)

This is definitely a good initiative, what I'm just saying is that
you've opened a can of worms :-)

The initial step of creating common guidelines for parameter names is
nice, as it can create some consistency across modules, and ease work
sharing as well as lower the learning curve for people using 3rd party
modules. But it would need to be official (in the puppet documentation
as best practices, for instance) and/or enforced on the forge, to
become really useful.

And after that, things quickly get exponentially complex IMHO. A few
examples from the top of my head :

 * Naming the modules themselves.
 * Naming the classes and definitions inside the modules.
 * Multiple modules requiring the same packages (If my module needs
   rsync, yours too, where do we put the common virtual resource?).
 * The use of author-specific common modules (I don't like taking a
   johndoe/apache module and noticing I then need johndoe/common).

But don't get me wrong, I like where this is headed, and will
participate as much as I can.

Matthias

-- 
Matthias Saou  ██  ██
 ██  ██
Web: http://matthias.saou.eu/  ██
Mail/XMPP:  matth...@saou.eu   ██  
   ██
GPG: 4096R/E755CC63██  ██  ██
 8D91 7E2E F048 9C9C 46AF  ██  ██  ██  ██
 21A9 7A51 7B82 E755 CC63  

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-17 Thread Alessandro Franceschi


On Monday, June 17, 2013 1:17:45 PM UTC+2, Matthias Saou wrote:
>
> Hi, 
>
> First off... is these some pun I'm not getting, or was it supposed to 
> be "Holy Grail"? Just wondering :-) 
>

It's holy but is also handy, as I think it's just at hands reach.
 

>
> Also, when I read "Puppet Modules Standard naming conventions", I 
> thought it was just about module names, but it seems to be about 
> parameter naming inside all of the module resources. 
>
> After reading the shared Google document, I got reminded a lot of 
> what I've seen happen with RPM packaging over the years. Lot of 
> similarities, since both Puppet and RPM are tools which give a lot of 
> freedom in the way things get implemented. 
>
> Think of GNU/Linux distributions such as Fedora, RHEL, Mandriva, SuSE, 
> etc. which all use RPM packages as their building blocks : They are not 
> to be considered compatible for various reasons, yet they could have 
> been in theory. 
>
> With Puppet, each author is currently like each distribution using RPM : 
> Doing things in a given ecosystem, with implementation choices being 
> made, all of which can easily differ enough to make modules from 
> different authors incompatible. 
>
> Now the problem that I see here is that with RPM things have never been 
> able to converge on a global scale. There isn't one single right answer, 
> and it has never been the tool's goal to enforce how it's being used, 
> especially when it's purely cosmetic or related to details that many 
> find irrelevant. 
>
> Where I'm trying to get at is that I see Puppet as being similar in the 
> fact that it doesn't try to enforce any high-level cosmetic choices, 
> such as parameter names, and I think it's the right behavior for the 
> basic tool itself. 
>
> From there, I'm all for trying to "standardize" something, but that's 
> actually much harder than it seems, and won't work unless there is some 
> enforcing being done at some point. One possibility would be to have a 
> review-based approval process for forge modules, where guidelines would 
> have to be enforced before a module gets published. Of course, that's a 
> lot of time and resources, for what boils down to being considered 
> "boring work" by most. It's what works for many GNU/Linux distributions 
> (Debian, Fedora, etc.). 
>
> Just my 2¢ ;-) 
>

Thanks for your opinion, even if I don't fully agree with it.
Puppet is a language and so people do the same things in different ways, 
and they all work and do what they are supposed to do.
But if we think about modules REUSABILITY and INTEROPERABILITY some 
patterns have to be followed.
Some of the parameters described in the document are somehow REQUIRED, 
IMHO, if you want to make a really reusable module (for example the ones 
that let you decide how to manage your configuration files... if you 
enforce a logic in a module or a specific template and don't allow override 
by users, then you are not making a reusable module, so for example a 
parameter like "template" is just needed).
So, since, at least some of, these parameters are needed for a reusable 
module  it's just a matter of defining few naming conventions (and managing 
external modules dependencies in a sane way) to make different modules 
happily live better together.

Note, I don't say that ALL the modules should have ALL these parameters, 
I'd consider these Standard Namings as suggestions which people may decide 
to follow or not (somehow similar to the Code Style suggestions, which 
leverage the style of the Puppet code and have found tools like puppet-lint 
to validate them). Once enough good and prominent Puppet modules will 
follow these naming conventions, it will be easier for people to switch 
modules, integrate the best ones from different sources (without forking 
them) , use these parameters from a WEB interface, a a standard framework 
from smoke testing and have the benefits which are better described in the 
blog post.

Note also that these proposals are based on the current Puppet language 
specifications, I want to start from what can be used now, with an eye on 
the evolution on Puppet, but with still feet on the ground: nothing new or 
to invent, just few basic naming convention to agree upon and *suggest*.

I still think that this is at hands reach :-)

-- 
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.




Re: [Puppet Users] The handy Grail of Modules Standards

2013-06-17 Thread Matthias Saou
Hi,

First off... is these some pun I'm not getting, or was it supposed to
be "Holy Grail"? Just wondering :-)

Also, when I read "Puppet Modules Standard naming conventions", I
thought it was just about module names, but it seems to be about
parameter naming inside all of the module resources.

After reading the shared Google document, I got reminded a lot of
what I've seen happen with RPM packaging over the years. Lot of
similarities, since both Puppet and RPM are tools which give a lot of
freedom in the way things get implemented.

Think of GNU/Linux distributions such as Fedora, RHEL, Mandriva, SuSE,
etc. which all use RPM packages as their building blocks : They are not
to be considered compatible for various reasons, yet they could have
been in theory.

With Puppet, each author is currently like each distribution using RPM :
Doing things in a given ecosystem, with implementation choices being
made, all of which can easily differ enough to make modules from
different authors incompatible.

Now the problem that I see here is that with RPM things have never been
able to converge on a global scale. There isn't one single right answer,
and it has never been the tool's goal to enforce how it's being used,
especially when it's purely cosmetic or related to details that many
find irrelevant.

Where I'm trying to get at is that I see Puppet as being similar in the
fact that it doesn't try to enforce any high-level cosmetic choices,
such as parameter names, and I think it's the right behavior for the
basic tool itself.

>From there, I'm all for trying to "standardize" something, but that's
actually much harder than it seems, and won't work unless there is some
enforcing being done at some point. One possibility would be to have a
review-based approval process for forge modules, where guidelines would
have to be enforced before a module gets published. Of course, that's a
lot of time and resources, for what boils down to being considered
"boring work" by most. It's what works for many GNU/Linux distributions
(Debian, Fedora, etc.).

Just my 2¢ ;-)

Matthias

-- 
Matthias Saou  ██  ██
 ██  ██
Web: http://matthias.saou.eu/  ██
Mail/XMPP:  matth...@saou.eu   ██  
   ██
GPG: 4096R/E755CC63██  ██  ██
 8D91 7E2E F048 9C9C 46AF  ██  ██  ██  ██
 21A9 7A51 7B82 E755 CC63  

-- 
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.




[Puppet Users] The handy Grail of Modules Standards

2013-06-17 Thread Alessandro Franceschi
Dear all,
I'd like to submit to the list's attention this post about Puppet Modules 
Standard naming conventions:
http://www.example42.com/?q=The_handy_Grail_of_Modules_Standards 

and  this working draft of a proposal for a version 0.0.1 of them:
https://docs.google.com/document/d/1D4OqEI5iuGJe63ODU91N6rnFKcxVAg1sAWbaQrGBlWA/edit?usp=sharing

The topic is not new, and on this list there have already been various 
discussions on how to manage modules' interoperability ( for example this 
interesting one on cross-modules 
dependencies: 
https://groups.google.com/forum/?fromgroups#!searchin/puppet-users/modules$20standards|sort:date/puppet-users/Fvl0aOe4RPE)
 
.

Along with the current discussions on the topic and the Puppet evolution, I 
think that few simple *suggested* naming conventions on common parameters 
for classes and defines would benefit a lot the module's ecosystem with a 
small effort.

I hope the discussion will have a real follow up, this time, and possibly 
move under the more authoritative PuppetLabs umbrella, for the moment is 
just a personal proposal, even if shared, at least in the intentions, with 
many modules' authors and Puppetteers.

You can actively contribute to the proposed naming standards on the above 
Google document (let me know your gmail account) and you are invited to 
comment here what do you think of this (not new) idea: if you think that 
starting from simple naming convention is a step to be done, what's your 
general idea on the proposed naming standards, if you have better ideas on 
naming and approach. 

Let's grab this handy Grail :-)
Alessandro Franceschi
Example42

-- 
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.