> * How should the separation be made evident?By putting tier 2 code into modules -- and, optimally, making it
sensible to upgrade them separately -- the division is very clear.
Core code is core, and non-core code is in modules.
Users who want it to "just work" get a set of modules vetted, tested,
and shipped that work out of the box. Transparently, no less, because
we do support types and providers in modules fairly well.
I think there is substantial evidence that this is a good, supportable
and effective approach to solving exactly this problem, as well as to
reducing the coupling between "core" and "non-core" modules, and their
release.
--
Daniel Pittman
⎋ Puppet Labs Developer – http://puppetlabs.com
♲ Made with 100 percent post-consumer electrons
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAFAW1H%3DHyzVnUaLeBu8ZHbMEKtRq2bW3b_avZzGGT0BLoSOd6Q%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CANhgQXtu_WemuzVgL6Cz%3D8JArdn6XF7NuEOB9AkYz2bTejFZpA%40mail.gmail.com.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAE4bNTk2c7MMUed5H2XNge%2BD-v6uFnrBdAzgVaxG%3D9AJZ9_2fw%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.
For what it's worth, Python at least has struggled with modules being
in and out of the Python distribution. Riding Python's trains means
stringent compatibility constraints, long support durations (many
years), and a long commit-to-ship delay. Puppet certainly moves
faster than Python, so maybe that's not so important here.
Another lesson from Python is that, in fact, everything is a module.
There are almost no "core Python" things aside from the language
itself and some builtins.
And a final lesson from Python: if it's one of the batteries that's
included, then it follows Python's shipping guidelines as far as
testing/vetting, compatibility, code style, and so on. If a module
can't make the "Tier 1" cut, it's not shipped with Python.
As for the question you want us all to answer, I think that the
delineation should be such that it is easy for a user to tell when
they cross a line, and should be based on PL's ability to adequately
test things as well as committment to support in the future.
I think that basically boils down to platforms, which in technical
terms will mostly mean Tier-2 providers for Tier-1 types like service,
package, file, and so on. As far as committment to support, I think
that product-specific support like the nagios_* types should be in
Tier 2 only as a way of saying that someday Puppet may ship without
them (although presumably they'd be easy to spin off into a forge
module at that time). Of course I don't know what PL's plans are, but
that's the idea.
Dustin
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAJtE5vRyd_vArYMOP1VYXbq-CBvfF4hNOUWUU1TGKLqfTSQ8FQ%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.
I've found that when putting stuff in modules that use some shared code like puppetdbquery, you either have to do a pluginsync on the master first, or do some hacks with the ruby load path to load the code directly out of the modulepath. That could be a bit annoying for stuff like naginator or this BSD stuff.I think there is some bug report for it but can't find it now.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAAAzDLekAwO-Xh55CSD4H1AGFC5Zwe3dWAvCWwxd_H%3DN2_%3DQSQ%40mail.gmail.com.
I'm late to the party but I want to throw my support behind Daniel's plan to move all tier2 stuff into modules, right from the start, and ship known tested versions with Puppet.
On Fri, Jan 10, 2014 at 10:17 AM, Ashley Penney <ape...@gmail.com> wrote:I'm late to the party but I want to throw my support behind Daniel's plan to move all tier2 stuff into modules, right from the start, and ship known tested versions with Puppet.
Even later to the party, but I agree :) The alternative of a contrib directory could muddy the waters so that there were 3 locations a given type/provider could land (core/contrib/module), when the current 2 locations (core/module) suffice. Easy to imagine extra bike-shedding on where something lands and/or the contrib directory becoming a failed experiment wasteland.
However, one question I have about shipping modules with puppet as discussed in this thread: are people thinking this means modules pre-installed in /usr/share/puppet/modules, or that the packaging step would merge/patch the tier2 modules into puppet proper?
If the former, is that overly disruptive to sites that specify modulepath? If the latter, does that complicate sites that want to upgrade one of the packaged-in modules using pmt? I haven't thought this through, so there may be a perfectly simple answer.Kylo--Kylo GinsbergRegister now and save 40%! Offer expires January 31st.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CALsUZFG3zLXi1eEKpCNo4hP4jdNKXTyUZodVztpskTb-p5vdqw%40mail.gmail.com.
On Sun, Jan 12, 2014 at 2:38 PM, Kylo Ginsberg <ky...@puppetlabs.com> wrote:
Even later to the party, but I agree :) The alternative of a contrib directory could muddy the waters so that there were 3 locations a given type/provider could land (core/contrib/module), when the current 2 locations (core/module) suffice. Easy to imagine extra bike-shedding on where something lands and/or the contrib directory becoming a failed experiment wasteland.Ok, so the initial idea of keeping a "contrib" inside the puppet codebase for some things under active development seems to be a losing one. What about the trimmed down idea of having it be a staging ground for pulling things out (in which case "contrib" is a terrible name for it)?
However, one question I have about shipping modules with puppet as discussed in this thread: are people thinking this means modules pre-installed in /usr/share/puppet/modules, or that the packaging step would merge/patch the tier2 modules into puppet proper?I'm interested in this as well.
If the former, is that overly disruptive to sites that specify modulepath? If the latter, does that complicate sites that want to upgrade one of the packaged-in modules using pmt? I haven't thought this through, so there may be a perfectly simple answer.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CACqVBqCNGvA8AuB_%3DFZ_HXpQPAs08TnbgXA%3D%2BtBzt3aQMPxckQ%40mail.gmail.com.
How about something as simple as a top-level "modules" directory in
the puppet source, which is installed separately and dynamically
appended to the modulepath at runtime? That avoids any problems for
users who set modulepath, allows modules in users' modulepaths to
override the built-in modules, and doesn't use the inaccurate name
"contrib". It also makes it easy to move modules in and out of core.
(As an aside, I'd also assumed that what I remember hearing years ago was true, and there was no internal split between PE and FOSS - that PE was "just FOSS in a prettier box, with support and some value-adds", presumably that the only testing done to PE and not FOSS was around Console and packaging. Andy's comment that PE is tested on more platforms than FOSS was something I'd always written off as anti-Puppet conspiracy theory.)
It's great the core type/provider is getting a serious review.On Mon, Jan 13, 2014 at 4:20 PM, Andy Parker <an...@puppetlabs.com> wrote:
On Sun, Jan 12, 2014 at 2:38 PM, Kylo Ginsberg <ky...@puppetlabs.com> wrote:Even later to the party, but I agree :) The alternative of a contrib directory could muddy the waters so that there were 3 locations a given type/provider could land (core/contrib/module), when the current 2 locations (core/module) suffice. Easy to imagine extra bike-shedding on where something lands and/or the contrib directory becoming a failed experiment wasteland.Ok, so the initial idea of keeping a "contrib" inside the puppet codebase for some things under active development seems to be a losing one. What about the trimmed down idea of having it be a staging ground for pulling things out (in which case "contrib" is a terrible name for it)?The less the better, since this could get pretty confusing to troubleshoot. Maybe a mechanism which collapse the providers to avoid a large module sprawl. At minimum a tool to track everything:puppet resource_types
- package core
- service core
- database /etc/puppetlabs/puppet/modules/mysql
...puppet resource_providers package
- package:
|- apt /etc/puppetlabs/puppet/modules/apt/ v1.0
|- gem /usr/share/puppet/modules/gem v1.0
...
However, one question I have about shipping modules with puppet as discussed in this thread: are people thinking this means modules pre-installed in /usr/share/puppet/modules, or that the packaging step would merge/patch the tier2 modules into puppet proper?I'm interested in this as well.Maybe merging would be better, at least to force detection of colliding providers (you can't install two versions of the yum provider).
If the former, is that overly disruptive to sites that specify modulepath? If the latter, does that complicate sites that want to upgrade one of the packaged-in modules using pmt? I haven't thought this through, so there may be a perfectly simple answer.Installing to /usr/share would be a pain for things like vagrant (which assumes a single puppet module path). I can see other issues with testing in vagrant, and there would be quite an increase in .fixture.yml just to do something basic.
For puppet upgrades there's no assumption that modules are compatible and I think handling upgrades of type/provider modules would be similar process (Puppetfile/librarian-puppet or r10k).
Nan
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CACqVBqCNGvA8AuB_%3DFZ_HXpQPAs08TnbgXA%3D%2BtBzt3aQMPxckQ%40mail.gmail.com.
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/e6e6170a-3bdd-4b54-88ef-aa2d76b2c88b%40googlegroups.com.
Dustin
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAJtE5vSWnwTaWJJuv%2BXaK-4%2Bz3U98Jz-8O__XvGYa5tP7e8BiA%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.
Ok, let me try to summarize the discussion so far:* Tier1/Tier2 as a basic premise seems to be accepted as a good idea.* Tier2 code ideally won't live inside the puppet repo at all
* Tier2 code should be packaged up as modules* Make the separation based on what we (PL) actually test* OR make *everything* Tier2 (no such thing as core providers)
* the puppet packages should pull in a select set of modules (and specific versions) and ship those in a vendor modulepathI think I can be on board with this as an end goal. And I lean toward making everything Tier2. My only concern is the overhead of managing all of those dependencies, it seems like it could quickly lead to a place where we are spending a huge amount of our time just dealing with version numbers.Now for a proposal on how to get there (order might be a little wrong):1. create a "modules" directory that is a peer of "lib" in the puppet repo2. select a section of functionality to pull out (nagios might be the first good candidate since we've already tried it once)3. create a puppet module in the modules directory and move the code and tests to the module4. Update the rake tasks to run all of the spec tests as well as the spec tests of each module5. Plumb in a "build" rake task (right now we don't have one). This will be a step that merges the module back into the lib code as part of packaging.6. Extend puppet's support for modulepath to include a static vendored modules section7. Change the build/packaging/install scripts to move the modules into the vendored directory instead of merging it into the puppet code8. Repeat steps 2 and 3 until happyAfter that is all in place (or just after the first one plumbs in all of the functionality) I think we can then start moving things off to the forge and pulling them in a different way.
Puppet's learning curve can be steep for many users. Let's not make it
any harder.
Cheers
James
--
* The Docker Book (http://dockerbook.com)
* The LogStash Book (http://logstashbook.com)
* Pro Puppet (http://tinyurl.com/ppuppet2 )
* Pro Linux System Administration (http://tinyurl.com/linuxadmin)
* Pro Nagios 2.0 (http://tinyurl.com/pronagios)
* Hardening Linux (http://tinyurl.com/hardeninglinux)
I thought I'd throw in my 2 cents, as a long-time puppet user, current PE customer, and community member trying to make more code contributions...
First off, this thread has been great. I was going to quote a few replies, but there have been so many good ideas, that's sort of pointless. I fully support Daniel's plan to push tier2 directly to modules. More than that, I'd like to see it implemented in a way that I (an "advanced user") can easily opt-out of a given tier2 module (did someone say Nagios?) and replace it with something external.
I'd like to share a realization that I recently had, which could perhaps be an aid in delineating what's tier1 vs tier2: I'd always assumed that everything that shipped with Puppet was tested. Period. It was unclear to me until I started trying to use puppetlabs' forge modules with PE (and found that one or two in particular didn't work), and started actually submitting some PRs against core, that there were varying levels of support, and that just because Puppet might ship with a provider for X doesn't mean that it's fully validated and tested against that (i.e. Andy's comments about FreeBSD). (As an aside, I'd also assumed that what I remember hearing years ago was true, and there was no internal split between PE and FOSS - that PE was "just FOSS in a prettier box, with support and some value-adds", presumably that the only testing done to PE and not FOSS was around Console and packaging. Andy's comment that PE is tested on more platforms than FOSS was something I'd always written off as anti-Puppet conspiracy theory.)
As such, for the benefit of the community, I'd suggest that anything that (a) isn't fully tested and vetted by PL (whatever that means) or (b) is known to be broken (i.e. naginator) be split out into tier2, as modules, with a clear delineation to explain to users that these are essentially sub-par and warranty-free. (I suppose this largely falls in line with Dustin's comment about Python core vs modules).
I can't say I have a clear picture of how this would work... but as a probably 'more advanced' user of Puppet, I'd like to see this happen in a way that makes it easy to not only run a new version of a tier2 module, but also perform a wholesale replacement of it with something from the community (once again, reference to the nagios types). As such, I guess I'd be in favor of installing them *somewhere* outside of the core and adding a config directive (true by default) to automatically append that path to modulepath. That would be transparent to users who don't care about it, and for people like me, allow us to cherry-pick specific modules to append to our modulepath, and ignore others. Ideally the Modulefile format would be updated to understand this, so it would be easier to specify requirements for things that might no longer be present in a given puppet install.
Versioning and dependencies are another strong argument in favor of moving directly to modules. If tier2 "things", i.e. the FreeBSD provider, are maintained and versioned separately but included in the "puppet" distribution proper, how does a Forge module or arbitrary piece of code declare that it needs a specific version of the provider? If I pull in the latest git version but am still running "Puppet 3.5.0" how is that communicated to modules? We know how to do this with puppet as a whole ($::puppetversion) or with modules (Modulefile, and the various tools that support it), but it's unclear to me how this would work if, for example, the FreeBSD package provider version wasn't inextricably tied to the puppet version.
Just some thoughts. I'm very excited to see this change, both for the implications it has around nagios, and to possibly throw my name in the hat as a maintainer for the `pip` package provider.
-Jason Antman
It seems like a prerequisite for the above is a decent, feature reach packaging system for puppet modules. [...]
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/cde00b49-7094-488b-bf54-3a660c4e43e7%40googlegroups.com.
For things that are effectively unmaintained, like platforms that nobody is willing to step up and own...I think we should put those on a path to be moved out. We're not doing anyone any favors by having that stuff in core and bit-rotting.The other two buckets are the most important ones in my mind. This isn't really about tiers, but instead about maintained/unmaintained code. As long as code is maintained, it should be a first-class citizen regardless of whether or not it's maintained by the community or by puppet labs. The community is not second-class, which is what I think the word "tier" implies.Unmaintained code, though, is definitely second-class. :)So really what I'm talking about is actively seeking out community maintainers for certain platforms, and giving them commit access. They handle pull requests for that part of the tree, and generally act as good stewards (tests pass, obey semver, packaging works, etc).
I think in order to get there, we need to do a few things:1. Inventory what we've got in terms of platforms/types/providers
2. Figure out what subset of those are things Puppet Labs helps maintain (see Kylo's link)3. Figure out what subset of those are like the nagios types in that they really make sense as external modules4. For the rest, begin looking for community maintainers. We can look at people who have made commits, we can ask on this list, IRC, etc.I think once we do that exercise, we can start thinking about the mechanics of reorganizing the source tree accordingly. I'd suggest that we reorganize things so that maintainers manage a subtree.
--Deepak Giridharagopal / Puppet Labs
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAOjOXY0D5ZsAeBE87r3kWFvW5YytRBUqc-VtirzC7w-WN1WR5g%40mail.gmail.com.
I thought I'd throw in my 2 cents, as a long-time puppet user, current PE customer, and community member trying to make more code contributions...
First off, this thread has been great. I was going to quote a few replies, but there have been so many good ideas, that's sort of pointless. I fully support Daniel's plan to push tier2 directly to modules. More than that, I'd like to see it implemented in a way that I (an "advanced user") can easily opt-out of a given tier2 module (did someone say Nagios?) and replace it with something external.
I'd like to share a realization that I recently had, which could perhaps be an aid in delineating what's tier1 vs tier2: I'd always assumed that everything that shipped with Puppet was tested. Period. It was unclear to me until I started trying to use puppetlabs' forge modules with PE (and found that one or two in particular didn't work), and started actually submitting some PRs against core, that there were varying levels of support, and that just because Puppet might ship with a provider for X doesn't mean that it's fully validated and tested against that (i.e. Andy's comments about FreeBSD). (As an aside, I'd also assumed that what I remember hearing years ago was true, and there was no internal split between PE and FOSS - that PE was "just FOSS in a prettier box, with support and some value-adds", presumably that the only testing done to PE and not FOSS was around Console and packaging. Andy's comment that PE is tested on more platforms than FOSS was something I'd always written off as anti-Puppet conspiracy theory.)
As such, for the benefit of the community, I'd suggest that anything that (a) isn't fully tested and vetted by PL (whatever that means) or (b) is known to be broken (i.e. naginator) be split out into tier2, as modules, with a clear delineation to explain to users that these are essentially sub-par and warranty-free. (I suppose this largely falls in line with Dustin's comment about Python core vs modules).
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/52D552B1.3000204%40jasonantman.com.
As such, for the benefit of the community, I'd suggest that anything that (a) isn't fully tested and vetted by PL (whatever that means) or (b) is known to be broken (i.e. naginator) be split out into tier2, as modules, with a clear delineation to explain to users that these are essentially sub-par and warranty-free. (I suppose this largely falls in line with Dustin's comment about Python core vs modules).
Just for clarity here: it's all warranty free. See section 7 of the Apache License. http://www.apache.org/licenses/LICENSE-2.0.txt.
Re: Deepak's message about community maintainers... that sounds
wonderful to me. I'm not sure they'd even need commit access, perhaps it
would be feasible to operate on a model where all PRs against a given
provider are handled by a maintainer, and once they sign off a PL
employee does the merge. That would allow the burden of triage and
review to be handled by a community maintainer, while still allowing
someone @puppetlabs.com to have the final approval/commit.
-Jason
--
You received this message because you are subscribed to the Google Groups "Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/52D9DD53.8010009%40jasonantman.com.
For more options, visit https://groups.google.com/groups/opt_out.