#------ (on centos server)# rpm -qa|grep -i puppuppetlabs-release-pc1-0.9.2-1.el7.noarchpuppet-agent-1.0.0-1.el7.x86_64puppetserver-2.0.0-1.el7.noarch# puppet --version4.0.0
# cfacter --version0.4.1 (commit e9333e184e57106f7ce3fb6b44b05656f417d245)# facter --version2.4.3
# hiera --version2.0.1
# mco --version/opt/puppetlabs/bin/mco 2.8.1# puppetserver --versionpuppetserver version: 2.0.0
#-------(on debian client)# dpkg -l | grep -i pupii puppet-agent 1.0.0-1wheezy amd64 The Puppet Agent package contains all of the elements needed to run puppet, including ruby, facter, hiera and mcollective.ii puppetlabs-release-pc1 0.9.2-1wheezy all Release packages for the Puppet Labs PC1 repository# puppet --version4.0.0
# cfacter --version0.4.1 (commit e9333e184e57106f7ce3fb6b44b05656f417d245)# facter --version2.4.3# hiera --version2.0.1# mco --version/opt/puppetlabs/bin/mco 2.8.1
There is actually nothing in semver that precludes co-terming major release versions, and less that precludes "--version" from both displaying the local package version, AND the release number targeted by said package if you disagreed with the first point. This is one of those circumstances where being pedantic means you reduce understanding, not increase it.
Cheers,
jcf
Cheers,
jcf
--
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...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/55390851.1020002%40alumni.tu-berlin.de.
For more options, visit https://groups.google.com/d/optout.
There is actually nothing in semver that precludes co-terming major release versions, and less that precludes "--version" from both displaying the local package version, AND the release number targeted by said package if you disagreed with the first point. This is one of those circumstances where being pedantic means you reduce understanding, not increase it.
On Thursday, April 23, 2015 at 3:44:35 PM UTC-7, jcf wrote:There is actually nothing in semver that precludes co-terming major release versions, and less that precludes "--version" from both displaying the local package version, AND the release number targeted by said package if you disagreed with the first point. This is one of those circumstances where being pedantic means you reduce understanding, not increase it.
Agree.
What I'm looking for is clarity for the users. What is there now is beyond unclear.The problem as I see it is bundling. Puppet is grouping standalone components into an aggregate 'release' of something bigger. The pieces have versions that are far different from the aggregate. Each piece's --version string doesn't even match the version of the rpm they were bundled into. That is just wrong.
Put yourself in the user's shoes:
- I think I'm running puppet open source 4.0.0 including both server and agent
- there is a puppetserver-2.0.0 there, and a puppet-agent-1.0.0 there - geez, I must be YEARS behind current !
- so I look in /opt/puppetlabs/bin and see five binaries, none of which have --version = 4.0.0 or even 'close' to the rpm version they came from
- and that is clear 'how' exactly ?
My suggestion would be:
- puppetserver rpm should be 4.0.0 for puppet release 4.0.0
- puppet-agent rpm should be 4.0.0 for puppet release 4.0.0
And to me I'd add:
- everything in a typically public-interface directory (not a bundled ruby version, for example) that is therein and supports a --version should return a version reflecting the rpm version they were packaged in somehow that is user obvious.
or if you can't do that, bundle each of them into their own individually versioned rpms (ie. facter-2.4.3) and have puppet-agent require multiple rpms.
On Friday, April 24, 2015 at 12:44:08 PM UTC-5, Vince Skahan wrote:On Thursday, April 23, 2015 at 3:44:35 PM UTC-7, jcf wrote:There is actually nothing in semver that precludes co-terming major release versions, and less that precludes "--version" from both displaying the local package version, AND the release number targeted by said package if you disagreed with the first point. This is one of those circumstances where being pedantic means you reduce understanding, not increase it.
Agree.
Yes, but I think there's a combination of problems here.
Let's take puppetserver first, because in some ways it's easiest. The version of puppetserver in the puppetserver-2.0.0 packages really is 2.0.0, thus software version code and package version code are consistent. The issue is that puppetserver 2.0.0 implements version 4.0.0 (I think) of "Puppet", where "Puppet" these days means the DSL, plugin API, and built-in type and function libraries. This is roughly analogous to version 31 of Firefox handling version 5 of HTML, but more confusing because it's new that there is a split between software version and -- I'm not even sure what to call it, but maybe "framework version". Inasmuch as puppetserver is taking over from the older Ruby implementation of the master, it may be that these numbers can be reconciled in the future. (See also below.)
The puppet-agent package is where the real fun starts. As best I can determine, the version number of the puppet-agent package is associated with the overall all-in-one installation image and packaging, as opposed to the software packaged within, the central piece of which is the Ruby implementation of the Puppet software (version 4.0.0 of that software in the puppet-agent-1.0.0 package). I do not understand this decision, as it seems to fly in the face standard package versioning practice. That aspect of it could certainly be fixed, however -- it should not produce any great difficulties to bump up the version number for the package to correctly agree with the version of the packaged software.
Then there's the question of standalone software packaged together with the agent, and the version numbers of those programs. In truth, I don't think the version number mismatch is a significant issue there if you accept all-in-one packaging to begin with. In my experience, it's pretty common for AIOs to bundle software with different version numbers, but it is unusual for such an AIO to be versioned differently than the bundle's focal software. I think this issue would be substantially mitigated just by making the version number of the puppet-agent package in fact match the version of the puppet agent software contained within.
What I'm looking for is clarity for the users. What is there now is beyond unclear.The problem as I see it is bundling. Puppet is grouping standalone components into an aggregate 'release' of something bigger. The pieces have versions that are far different from the aggregate. Each piece's --version string doesn't even match the version of the rpm they were bundled into. That is just wrong.
As you have seen, I somewhat agree. For what it's worth, I raised a bit of a stink a few months ago in the developers group about PL's decision to make Puppet 4 depend on an AIO-style installation image, but I was unable to persuade much of anyone. Given PL's decision to go that direction, AIO packaging is a natural result, albeit an unnecessary and unwelcome one.
Put yourself in the user's shoes:
- I think I'm running puppet open source 4.0.0 including both server and agent
- there is a puppetserver-2.0.0 there, and a puppet-agent-1.0.0 there - geez, I must be YEARS behind current !
- so I look in /opt/puppetlabs/bin and see five binaries, none of which have --version = 4.0.0 or even 'close' to the rpm version they came from
- and that is clear 'how' exactly ?
The 'puppet' binary reports version 4.0.0, which is consistent with the idea that you're running that version of Puppet. If I wanted to verify which version of puppet I was running, that's certainly the binary I'd look to. As I said, though, the package in which it is provided should also bear that version number.
That puppetserver's version doesn't match the Puppet framework version it supports certainly seems more confusing to me.
My suggestion would be:
- puppetserver rpm should be 4.0.0 for puppet release 4.0.0
- puppet-agent rpm should be 4.0.0 for puppet release 4.0.0
The latter, for sure. The former would be desirable, too, but only in conjunction with puppetserver's software version actually being bumped up to 4.0.0.
And to me I'd add:
- everything in a typically public-interface directory (not a bundled ruby version, for example) that is therein and supports a --version should return a version reflecting the rpm version they were packaged in somehow that is user obvious.
or if you can't do that, bundle each of them into their own individually versioned rpms (ie. facter-2.4.3) and have puppet-agent require multiple rpms.
I would be all for packaging the (semi-)independent components separately, each in a package with version number matching the packaged software's version number. I would be even more for ensuring that none of it depended on being installed in an AIO-style image, but that's a separable issue.
If the intention is for any of the core components (agent and server, more or less) to continue to be developed on their own cycles, then it might be appropriate to add an additional version number to associate the binaries with the puppet framework version with which they are associated. For example, one might then have# puppetserver --version --framework-versionpuppetserver version: 2.0.0
Puppet framework version: 4.0.0
As an example, if it started out at puppet-agent-4.0.0 to match puppet-4.0.0, but the only change in the next AIO package is to incorporate a feature update in Facter (a hypothetical 2.5.0), we'd want to reflect that feature update in puppet-agent-4.1.0. But should that then trigger a release of a puppet-4.1.0 even though nothing has changed in puppet?
puppetserver-4.0.0-1.el7.noarchpuppet-agent-4.0.0-1.el7.x86_64 <= just the agent piece
puppet-utils-4.0.0-1.el7.x86_64 <= hiera/facter/cfacter/mco
puppet-ruby-1.9.whatever.el7.x86_64 <= just the ruby interpreter
puppetserver-4.0.0-1.el7.noarchpuppet-agent-4.0.0-1.el7.x86_64 <= just the agent piece
puppet-facter-2.4.3-1.el7.x86_64puppet-mco-2.8.1-1.el7.x86_64puppet-hiera-2.0.1.el7.x86_64
puppet-ruby-1.9.whatever-1.el7.x86_64
On Monday, April 27, 2015 at 9:34:13 AM UTC-7, jcbollinger wrote:
[...] I think there's a combination of problems here.
Let's take puppetserver first, because in some ways it's easiest. The version of puppetserver in the puppetserver-2.0.0 packages really is 2.0.0, thus software version code and package version code are consistent. The issue is that puppetserver 2.0.0 implements version 4.0.0 (I think) of "Puppet", where "Puppet" these days means the DSL, plugin API, and built-in type and function libraries. This is roughly analogous to version 31 of Firefox handling version 5 of HTML, but more confusing because it's new that there is a split between software version and -- I'm not even sure what to call it, but maybe "framework version". Inasmuch as puppetserver is taking over from the older Ruby implementation of the master, it may be that these numbers can be reconciled in the future. (See also below.)
Puppet Server 2.0 doesn't implement any of the "DSL, plugin API, type/function libraries" at all. All of those things exist independently of puppet server, inside of the "core" Puppet codebase. You can assure yourself of that by installing only the puppet-agent-1.0 AIO (or just puppet-4.0.0.tar.gz for that matter) and running 'puppet apply', 'puppet master', etc etc, without any puppet-server whatsoever.
But your argument is not invalid! There is a piece which ties Puppet Server 2.0 to Puppet 4, and that is the agent<->master network API.
So you could totally advance the idea that there should be some version-related coupling between those two projects. This is implicit right now (or rather, it's expressed in package dependencies and text documentation) and I understand your and Vince's desires to have this made more explicit, by expressing it directly in the version numbers of each project.
The "Framework version" you're describing is exactly the concept we're trying to express with the Collections repository (for future Googlers' context, the explanatory blog post is at: https://puppetlabs.com/blog/welcome-puppet-collections ). PuppetDB also has some dependency tendrils, too, but its versioning is totally decoupled from Puppet's.
The puppet-agent package is where the real fun starts. As best I can determine, the version number of the puppet-agent package is associated with the overall all-in-one installation image and packaging, as opposed to the software packaged within, the central piece of which is the Ruby implementation of the Puppet software (version 4.0.0 of that software in the puppet-agent-1.0.0 package). I do not understand this decision, as it seems to fly in the face standard package versioning practice. That aspect of it could certainly be fixed, however -- it should not produce any great difficulties to bump up the version number for the package to correctly agree with the version of the packaged software.I think this arose from a desire to express the versioning of the AIO as a semver number which tracks the collection itself, independently from the versions of the constituent projects. Since there is ruby, facter (both flavours!), mcollective, hiera, augeas, it seemed wrong to pin the puppet-agent number to puppet-the-project. But perhaps it was an error to have a non-puppet-centric view of the world, since it's true that the purpose of all those other things is really to deliver Puppet in a batteries-included, supportable way.
Then there's the question of standalone software packaged together with the agent, and the version numbers of those programs. In truth, I don't think the version number mismatch is a significant issue there if you accept all-in-one packaging to begin with. In my experience, it's pretty common for AIOs to bundle software with different version numbers, but it is unusual for such an AIO to be versioned differently than the bundle's focal software. I think this issue would be substantially mitigated just by making the version number of the puppet-agent package in fact match the version of the puppet agent software contained within.I think this and Vince's example below make sense at the initial release point, but as we found when we attempt to match PE's version number to its Puppet component, it very quickly degenerates into incoherence. As an example, if it started out at puppet-agent-4.0.0 to match puppet-4.0.0, but the only change in the next AIO package is to incorporate a feature update in Facter (a hypothetical 2.5.0), we'd want to reflect that feature update in puppet-agent-4.1.0. But should that then trigger a release of a puppet-4.1.0 even though nothing has changed in puppet?
For what it's worth, I raised a bit of a stink a few months ago in the developers group about PL's decision to make Puppet 4 depend on an AIO-style installation image, but I was unable to persuade much of anyone. Given PL's decision to go that direction, AIO packaging is a natural result, albeit an unnecessary and unwelcome one.Well, it's more that Puppet Labs' packaging for Puppet 4 is an AIO-style installer, not that Puppet 4 depends on AIO inherently.
We're also working to open-source the packaging toolchain, so if it's not so much the idea but the particular component versions (or the installation root, as I've gotten some feedback hardcoding /opt doesn't work for some people), you could roll your own.
We've clearly done a less-than-stellar job at either (or both!) understanding what people outside PL walls expect with regard to versioning, or communicating why the numbers landed the way they did. Let's think through changes to the current scheme in the context of the next 9-12 months of major/feature/patch releases and figure out what's going to work best.
I am glad I am not the only one who said WTF is Puppet Agent 1.0. If in fact this is referring to the collection repo around running puppet agent AIO than it should be called Puppet Agent Collection AIO 1.0 or something similar.
--
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...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/3216ad5d-e179-44ce-94d1-f2180fc3bc34%40googlegroups.com.
Rather than reply and quote lots of points, I'll just bring up a few things which could help clarify our goals. I'm sure not everybody will agree or love all of them, we know there are compromises here but attempted to make choices with the user's benefit and ease of use in mind.* The package is called puppet-agent because Puppet is more than the tool puppet at this point. It's an ecosystem. It's a suite of tools working together to manage infrastructure and applications. The agent is the word that means "all the stuff you need to run an endpoint in this ecosystem."
* We wanted to get away from our users having to carry the cognitive load of understanding each component we have, what it does and what versions work well together or have conflicts, what dependencies are required, and where do I get those?
* The bits inside the agent should be able to be more of a single user experience. A key message for this point was when the head of technical docs said "Nobody wakes up in the morning and says 'I want to hiera today'". We want the user experience to be easy to manage and work with. That doesn't mean that if somebody wants to get into the bits/packages/projects/source they shouldn't be able to -- we just don't want that to be a requirement.
* Version numbers - they are hard. We restarted at 1.0 because it was a new thing. Eric and I were talking yesterday and maybe it would have made more sense to put it at 4; however because of the argument that he made earlier in the thread, there are cases where that could create other types of confusion.
* Somewhere in the thread somebody asked about Puppet's new filesystem layout and if things would work in another location. I've seen Fedora already pick up the puppet 4 source and package it right up for their distro, so I think that's working. [1]
* The packaging toolchain will be opened up. We're not quite there yet because there are some hard-coded assumptions that need to be abstracted away. We also need some documentation and examples -- otherwise that's going to be a difficult climb.
* I'm not sure if introducing Collections and the AIO and Puppet 4 all at the same time helped with cognitive load. I'm sorry if that hasn't worked out. Collections from a user's perspective are mostly a package repo. The AIO is the end point. Puppet 4 is a subcomponent of that, which can be a bit confusing. We'll be working on our messaging, tooling and way we talk about this to make the largest amount of people happy.
On May 1, 2015, at 08:14, jcbollinger <John.Bo...@stJude.org> wrote:
On Thursday, April 30, 2015 at 11:32:43 AM UTC-5, Michael Stanhke wrote:Rather than reply and quote lots of points, I'll just bring up a few things which could help clarify our goals. I'm sure not everybody will agree or love all of them, we know there are compromises here but attempted to make choices with the user's benefit and ease of use in mind.* The package is called puppet-agent because Puppet is more than the tool puppet at this point. It's an ecosystem. It's a suite of tools working together to manage infrastructure and applications. The agent is the word that means "all the stuff you need to run an endpoint in this ecosystem."
This conversation serves as evidence that that's not a universally accepted meaning for the word "agent", and I'd be surprised to find that more people interpreted "puppet-agent" that way than interpreted plain "puppet" that way. Surely it's natural to interpret "puppet-agent" as something more specific than "puppet", and decidedly unnatural to interpret "puppet-agent" as more general.
* We wanted to get away from our users having to carry the cognitive load of understanding each component we have, what it does and what versions work well together or have conflicts, what dependencies are required, and where do I get those?Those are worthy goals. Unfortunately, the present scheme isn't there yet. Witness, for example, the misunderstanding about whether the "puppetserver" package is needed or wanted for running a master.
Moreover, the effort to lighten the cognitive load has produced an undesirable opacity to what is installed and why, and ultimately a cognitive dissonance for people who probe that, or who have already shouldered the cognitive load (i.e. many existing users). That is essentially where this thread started, even if we've only now begun throwing around the word "cognitive”.
There is a vast gulf between "it's unnecessary to know" and "it's difficult to determine or understand”.
* The bits inside the agent should be able to be more of a single user experience. A key message for this point was when the head of technical docs said "Nobody wakes up in the morning and says 'I want to hiera today'". We want the user experience to be easy to manage and work with. That doesn't mean that if somebody wants to get into the bits/packages/projects/source they shouldn't be able to -- we just don't want that to be a requirement.
The head of technical docs was wrong, at least in the sense of the implied comparison to "I want to puppet today". People can and do use Hiera as a standalone tool, and some do care about which version is in use at their site. Likewise for some of the other components. It's true, however, that the "puppet" tool is the headliner in this story. That's why it was a poor idea to put anything else's version number on the AIO package.
* Version numbers - they are hard. We restarted at 1.0 because it was a new thing. Eric and I were talking yesterday and maybe it would have made more sense to put it at 4; however because of the argument that he made earlier in the thread, there are cases where that could create other types of confusion.
I don't think that reflects a firm grasp of the nature of the problem. The issue is that the "new thing" here is not the thing that the package's version number should be describing in the first place. I don't care about the newness of AIO layout and packaging, and I don't expect many others will either. People don't install Puppet for its packaging. I do care about the versions of various components of the system, but not everyone will, and anyway, we have already established that an AIO package's version number is not a good vehicle for communicating information about versions of auxilliary components. Focus on what's important. To your audience.
It would be ideal if every component that is developed on its own cycle and therefore has its own version number were delivered in its own package. Package management systems and installation frameworks have long had mechanisms for dealing with the relationships among these. Indeed, Fedora is following exactly this approach for their own Puppet packaging. We covered it already on the dev list, but packaging the various components separately does not need to present a complicated installation experience. Furthermore, it solves some of the other issues that have been raised, especially with respect to versioning the collection as a whole (which ceases to be relevant).
* I'm not sure if introducing Collections and the AIO and Puppet 4 all at the same time helped with cognitive load. I'm sorry if that hasn't worked out. Collections from a user's perspective are mostly a package repo. The AIO is the end point. Puppet 4 is a subcomponent of that, which can be a bit confusing. We'll be working on our messaging, tooling and way we talk about this to make the largest amount of people happy.
I recognize that collections manifest to users primarily as a package repo. I'm trying to point out that the distinction being drawn between that and AIO packaging is artificial. Collections would easily serve as an excellent framework and vehicle for everything the AIO seems to be trying to accomplish, only better.
On May 1, 2015, at 08:14, jcbollinger <John.Bo...@stJude.org> wrote:
It would be ideal if every component that is developed on its own cycle and therefore has its own version number were delivered in its own package. Package management systems and installation frameworks have long had mechanisms for dealing with the relationships among these. Indeed, Fedora is following exactly this approach for their own Puppet packaging. We covered it already on the dev list, but packaging the various components separately does not need to present a complicated installation experience. Furthermore, it solves some of the other issues that have been raised, especially with respect to versioning the collection as a whole (which ceases to be relevant).This is the ideal, IMHO — “pkg-add-command -install puppet-4-server.pkg” installs everything one needs to run a fully-functional environment. “pkg-add-command -install puppet-4-client.pkg” successfully hides from the end-user what’s being installed, _recognizes what’s being installed and acts accordingly_ (see other thread about file permissions and puppet user active today), and is no more complicated than that if there is no need.
I'm jcf, and I endorse this plan.
Cheers,
jcf
FWIW I find this argument pretty compelling and would like to advance the
version number of the next release of puppet-agent to '4.something'.
Our current thinking is that this will be a matched to the puppet version,
with an extra digit on the end of the version number that indicates component
revisions other than Puppet itself.
So specifically, the next release will be puppet-agent-4.2.0.0; a hypothetical
rev to include a not-very-hypothetical openssl update would be included in a
puppet-agent-4.2.0.1 package.
This is better than what is currently being used, but I'm strongly in the AIO idea to be stupid. Split it into multiple packages and use proper dependencies like every other sane packaging system has done for a long, long time.
If all you do is bump the version of facter, then only have me download and install the meta package that depends on the new facter, and the new facter package, not everything.
To update the client, 'yum update puppet' and have it update the sub-pieces it needs (hiera/mco/etc.)
To update the server, 'yum update puppetserver' and have it do the server piece.
Lastly, if it's me, I would not bundle the agent/client stuff 'in' the puppetserver package. I would 'require' the client-stuff to be co-installed with the server stuff using the packaging mechanisms the os providers already give you.
(in other words, release 'empty' rpms that require x and y and z - works great if you don't cause dependency hell by getting too fancy)
On Wed, Jun 24, 2015 at 12:26 AM, Jason Slagle <rais...@tacorp.net> wrote:
>
> It’s actually interesting, because it came up at a PUG meeting here
> locally, and I definitely got a more negative than positive vibe from the
> AIO packaging, as well as my own feelings.
>
I just want to step in on this thread to highlight that there are a
lot of people, including me, that think the AIO approach is good and
offers more advantages than disadvantages.
I do too have clients and the ones that I've had the opportunity to
talk about Puppet 4, the AIO packaging is overall welcomed.
On Wed, Jun 24, 2015 at 12:26 AM, Jason Slagle <rais...@tacorp.net> wrote:
Open source users will always rely on a third party for security
patches anyway. Every single vendor, named CentOS, Debian and Ubuntu
drops the ball from time to time. Go and look around about the OpenSSL
problems Debian had, and the long period CentOS users were completely
in the dark for security patches.
> A related concern comes with companies with infosec departments that have
> to bless things. I get Ruby 2.1.0 blessed, but then the bundled ruby gets
> updated to 2.1.1. Now there are a lot more compliance hoops to jump
> through.
>
One of the tradeoffs of using the AIO is to be able to move faster, to
get more done, instead of having to be limited by the least common
denominator.
Companies with infosec departments that have to bless
things, IMHO, that is their problem. Don't want to fight the
bureaucracy? Buy the support and outsource the responsibility.
> In the end, a lot of it comes down to it “not being the unix way”. I have
> many of the same arguments and dislikes against systemd. I have no issue
> with the AIO installer, and in fact might use it on some older
> centos/rhel5 hosts where getting modern ruby is hard. My heartburn comes
> from it being the only REAL way to install these packages starting with
> version 4. I’d much prefer you also support a more traditional
> metapackage approach for the operating systems that support it.
>
The Unix way? Come on. Lets get rid of packaging then. I'm 34 and the
more senior people I've spoken told me that back in the old days they
downloaded the source code and compile it, on every machine, with that
nostalgia look in the eyes.
I think it is counter productive to stick with the metapackage
approach when there is going be a burden to maintain some operating
systems in one way, and some in another way.
I love metapackages too, but short of porting yum to Windows, Mac OS X, and
Solaris I don't see how they meet those requirements.
> If I¹m only doing a security update to facter, I shouldn¹t have to replace a
> gigantic bundle with whatever else it pulls In. I can see you release
> management people hating this later, as well as security teams.
So the puppet-agent package is 17 megabytes on EL7, so "gigantic" is a bit of
an overstatement here. Agreed that the release pipeline is more complicated,
and I can definitely understand the desire to just update the one thing that
needs a bugfix.
> I suspect this confusion will hinder deployment the AIO packaging is
> certainly in the cons category for us.
I really want to understand this, because it's a big deal. (My life goal at
this point is to get as many people as possible upgraded to Puppet 4, so
anything that gets in the way of that is a problem!) There's been a bunch of
different points in the thread, some of them about the numbering and some
about the packaging itself; what would reduce the confusion for you?