An Open Letter from the CEO of Puppet: Puppet and Perforce
puppet.com
puppet.com
But the time of VMs has passed for most companies and by now there are better solutions available, so it makes sense to sell this off as long as it's worth something.
Not sure why this announcement was called an Open Letter?
I think Puppet and Ansible still have a future, its just a "down time" for their popularity right now.
Apparently there are some benefits to VMs.
Oh, didn't you see?
> What is Perforce?
> Perforce solutions power the technology that drives the digital economy. The company’s comprehensive DevOps portfolio and deep domain expertise drives quality, security, compliance, collaboration, and speed – across the technology lifecycle.
> Perforce has a 25 year-plus history of developing and supporting developer productivity tools.
So Perforce is actually, er, whatever that word salad means. It seems version control is not one of the things Perforce want associated with their name - which is also how i would feel if i'd developed Perforce.
Their niche is the film industry. Basically version control for film.
I feel like Puppet, for whatever reason, has lost out on things and Ansible won, which is quite unfortunate as Ansible is just not as good as Puppet. I wonder if Preforce will be able to revive the interest in Puppet.
Anyway, if someone plans to move away from Puppet (I imagine someone will, because someone always disagrees with a buyout), I've recently found mgmt[0] which has Puppet-lang compatibility. A big plus (to me anyway) is that it's not Ruby based, and is instead written in Go.
Ansible can be plenty slow at time too.
Yep, I've never been a fan of Ansible. Beyond that slowness of it, the fact that it's duct tape of YAML and shell with randomness and a sprinkle of YAML craziness make it really hard for me to like it.
A properly architected Puppet environment should have no problems dealing with thousands of clients.
Alternatively, in real life, many teams have Change Management to consider and Maintenance windows. If there's a need to update thousands of systems on a saturday morning then expect teams to start puppet runs manually. You'd better have a seriously big pool of puppetmasters ready and waiting to manage the load, and don't forget Puppet DB, that has to be scaled up too to avoid lock ups. Even then, if teams start too many puppet runs at once, you'll get flattened.
We ended up scrapping all the puppetmasters in individual DCs and consolidating them in an AWS EC2 Autoscaling group. The number of puppetmasters started at 70 and just went up. That came with problems of its own. e.g. ensuring that all puppetmasters share the same copy of role versions at the same time. Being able to spin up new puppetmasters fast enough to meet spikes in demand. Various other corner case tuning issues.
It's taken a dedicated team years to get to grips with puppet, tame it and master it. Very glad I'm not involved in that any more.
Saltstack - acquired by VMWare
Ansible - acquired by Red Hat
Chef - acquired by Progress software
That’s an honest question for all. Is it considered a good or bad thing?
When we last experimented with CFEngine, we've concluded that "Friends don't let friends use CFEngine".
It's a state-forcing engine by default, and is very heavy handed at that.
Then I found SaltStack, and loving it to be honest.
I hate working on Puppet codebase, it is so fragile and too easy to write spaghetti.
If your Open letter needs a FAQ at the end, you might as well start with the FAQ.
I am now reading this letter the third time. I dont hold anything against Puppet or Perforce. But this letter, there is something about this letter, and dare I say whether it was the PR or its CEO who wrote it, really irritates me.
It's the self-importance of a company which I only just realised isn't just a GitHub repo somehow thinking they need to write a letter longer than Kurt Cobain's suicide note to tell me that they got acquired by some other bland-as-fuck open-core company.
All we needed to hear was:
> Hi, I'm the CEO of Puppet. Yeah, that thing you use to do stuff in Chrome with code. Yeah, yeah, we're a company, yup, somehow. Anyway: we're getting acquired by this other company. They're called Perforce. No, you don't know them either. Yeah, they also have some indecipherable enterprise website with some Gartner Quadrant bollocks on it. No, you don't really need to know any of this.
Edit: Fuck, that's Puppeteer. OK, I just have no idea what this company does. Oh well.
Anyway, emotions aside, it's an important company with a product used by important companies.
BTW, Perforce's diffing/merging tools [0] are fantastic.
[0] https://www.perforce.com/products/helix-core-apps/merge-diff...
See e.g. https://info.perforce.com/rs/perforce/images/GoogleWhitePape... and https://news.ycombinator.com/item?id=15889958.
I heard that more recently they were still trying to get off of it.
(And yes, P4V tools have "ignore all white space" - which is a great way to produce a completely useless merge result, in my experience. If you can tune out of nonsensical indentation in one side of the comparison, it's at least passable for diffing.)
https://github.com/Wilfred/difftastic
I'm currently trying this out, but I'm not sure if I'll keep using it.
Perforce is basically Git, but shittier and proprietary. I think it's mostly popular in the games industry.
Anecdotal, yeah. But DevOps is my daily work, and I like to think I keep an eye on the tools ecosystem.
At that point in time both Puppet and Chef needed agents to be installed on your servers and we really didn't want to have to manage another background service running on hundreds to thousands of boxes. Ansible didn't have this requirement.
Also Windows support was pretty sketchy on Chef and Puppet back then, to the point of being almost studiously ignored, Ansible provided remote PowerShell support. And that was primarily the deciding factor.
And yet, here we are. Puppet grew an agentless mode, and then lost anyway. My former company's deep investment in integrating Puppet and MCollective into our infrastructure tooling must look increasingly like a millstone. Oh well, it was all interesting to work on.
Git has obviously won the VCS battle now in most fields, but version control used to be a much more diverse and interesting space; I'd used Perforce, SVN and Mercurial professionally before git just won out most places.
I think Google also uses Perforce. It's understandable because Google started before git.
https://m-cacm.acm.org/magazines/2016/7/204032-why-google-st...
And yes, it's very popular in the games industry, because even Git+LFS is very painful if you have merge conflicts.
In where?
The parent poster had confused Puppet (the deployment automation software) and Puppeteer (the chrome remote control software).
(I'm not impressed with Puppet, having had to wade through its innards from time to time. Perforce is a fine centralized code repo. In any event: Shrug, CxO needs an editor).
When writing a document like this, open with your most important statement. For example: Title: "Perforce Acquires Puppet." Then, "We are announcing that Perforce acquired Puppet. When I started at Puppet three years ago..."
There. Was that too hard?
Announcing an acquisition from the perspective of the acquired, is typically considered Bad News. So the exec rulebook imposes that you will try to soften the blow by talking up how great things are anyway and how marvellously his tenure has been. That is the most important bit, from his perspective. His target is to get you to read paragraph after paragraph of spin, so that when the Bad News comes, you'll be (if not persuaded) at least willing to consider it might not be too bad after all.
It's like supermarkets placing daily essentials (bread, milk, meat) at the far end of the shop, so that you'll be forced to wander through and likely buy other stuff.
Although she's desperately spinning it as positive, the fact that the announcement came from the acquiree's side, not the acquirer implies this was an end of the line option for them, maybe even a fire sale.
And the CEO's writing style here does little to dissuade one from drawing the conclusion Puppet has been suffering through a lack of anything resembling leadership from her for the past 3 years.
All the "exec rulebook" tell the same thing: announce the news first in simple - unambiguous terms terms - and their immediate, impactful consequences. Then provide the "why", then provide a prospect for the future.
Yvonne Wassenaar did not apply the exec rulebook, she should have.
In my experience, most managers will try their hardest to sandwich bad news in a sea of platitudes.
Anyway, I read through the first 3 paragraphs and still had no clue what puppet actually does/provides. But I knew that they had a leader, and that leader could use lots of big businessy words.
Curious why this is uptrending on HN. Do lots of people here use this? Usually ally this crowd goes more for the tech talk stuff.
But I have to wonder how popular Puppet is now? I used it extensively... 6 years ago? somewhere in that range. I don't remember for sure. I went to training and though it worked pretty well. I remember there being a lot of excitement around Puppet.
But since then I have moved more into AWS, with docker and serverless. Now I know as much as AWS and Docker love to claim otherwise... there is a large portion of companies that have not moved to this type of infrastructure.
So I am legitimately curious where they stand. Now I have to imagine if I was ever in a situation where I needed to build a machine/image I would use Packer or EC2 Image Builder (I think that's the name).
That management might be Terraform and Helm, but it could easily be argued that a module for Puppet or Ansible would have several advantages.
Unfortunately, instead of nourishing their open source roots they went corporate and began making enterprise products instead. It is an easy way to profitability but at the same time will make yourself less relevant for your user base. Compare with Docker Inc. and Elastic NV.
They had the misfortune of doing this at the same time as Python was edging out Ruby's mindshare, also visible in the slow shift from Rails to Django over the decade, thereby doubling down on the road to slow irrelevancy.
This is all pretty unfortunate since the sysadmin tooling in the cloud native era leaves a lot to be desired, but it is what it is.
Versioned immutable artifacts help reducing incidents and increase traceability, but they're not silver bullets, and many teams were working well before these are popularized.
Taking this immutability extreme creates a lot of headaches and problems, too.
While immutable assets (I imagine you mean container or VM images) are easy to audit, they don't solve all problems. How do you spin up a database and add database-users over time? Do you just just rebuild your container-VM from scratch and loose your data? With Ansible, I can just enforce a new database user as I run a new service against this database.
Also, how do you spin up the host which runs your static VM and container images?
There are tons of problems which can't be solved by immutable artifacts. Yes, immutable containers/VMs for application code. But it doesn't work well when dealing with databases, caching systems and object storages. People deploying Postgres, Redis and/or Minio on k8s or openshift are facing a totally different set of problems which are already solved by mutable state.
I think what OP is referring to is the fact that the container itself is stateless. If you (to continue the PostgreSQL example) needed to upgrade the version of a dependency in the container, you'd publish a new artifact and use the same volume mount, performing a data migration as you go. Rather than performing upgrades to an already running instance. ("containers are cattle, not pets").
Most of these hosts are managed with Ansible, which the Top-Poster was criticising so heavily as "an anti-pattern".
You're just proving the point I made: "People deploying Postgres, Redis and/or Minio on k8s or openshift are facing a totally different set of problems which are already solved by mutable state."
When one does what you describe, they now have to deal with downtime, etc...
I would also love to run a business if it wasn't for all those pesky customers!
https://www.openlogic.com/ https://www.openlogic.com/about-openlogic-perforce
Once git arrived, they didn't have the same place in the world and now its... a very different company.
Its called a "sparse checkout".
> THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR, AND THE BEHAVIOR OF OTHER COMMANDS IN THE PRESENCE OF SPARSE-CHECKOUTS, WILL LIKELY CHANGE IN THE FUTURE.
Perforce is also ripping fast for updating/status checking, (run git status on the Unreal Engine repo to see the difference), is centralized (a feature, not a bug), has full support for partial and shallow checkouts. It also offers support for _running_ perforce, not just their hosted offering.
> and the reason why giants such as Ubisoft have committed to it
The reason companies like Ubisoft, Epic, etc use it is because it predates git.
> is that "it handles large files better". That's it.
Lets' not pretend that "better" is a good comparison. Until 5-6 years ago, git didn't handle large binary files at all. Even now, it's a "pick your poison".
Oh, and cloning a repo so you have a second copy of it for an experiment took ages because you couldn't just 'cp -a' the directory, you had to "enlist" in all the files with the server... I do not recall p4 fondly.
Checking out is still a fundamental concept of perforce, and it's the reason it's so fast. Not all files need exclusive locks, that's usually reserved for binary assets (and is a selling point of perforce as it prevents an unsolvable merge conflict later on). When I started using perforce 13 years ago, every editor I used had either a perforce plugin, or an option to "checkout on edit or save",
> Oh, and cloning a repo so you have a second copy of it for an experiment took ages because you couldn't just 'cp -a' the directory, you had to "enlist" in all the files with the server...
I don't really see the problem. doing `cp -a` on a large git repo can be an extra 30GB if not more on disk. The tradeoff of a very uncommon operation (duplicating a repo for an experiment sounds like a great use for shelves in p4, or branches in git) taking longer for performance on the golden path seems like a really good one to me.
The whole time I was reading it, I was expecting a "but this acquisition is actually bad because <reasons that indicate something generally toxic about the industry>."
It would have been clearer to have the title say this is about their acquisition by Perforce. :)
This, however, is not obviously addressing a particular person or persons. It's just a blog post.
"a published letter of protest or appeal usually addressed to an individual but intended for the general public."
I guess I added the implication that the public is "invited to join in."
If you need to write unit tests for your deployment automation then you might be over complicating it.
However, I do need to correct you that Puppet does support loops and various other ways to munge data for quite a few years/versions now. In addition, _Hiera_ is not that bad once you understand the overall hierarchy of your infrastructure and it gets easier if you shift the default data store to something like HashiCorp Vault for storing secret data.
We get away with not writing tests (we do heavy linting/checks though) in our Puppet infrastructure currently because everything has been documented for our development teams on best practices, trainings, and just communicating expectations well. There are some things that can sneak thru sure, but overall we've had #greatsuccess with just being open about we expect in our repos and being approachable to new committers for onboarding reasons.
Puppet can be a beast to keep up to date I will say, but if you have a good plan in place it's really a wonderful tool for everyone involved.
Terraform kinda took a similar path, although the reigning champion of this style of software has to be HTML templating solutions. "Templates shouldn't have code in them! Ever! Any! Totally broken bad bad bad, and that's why I started this new template language that has no code constructs in it at all! Although, uh, we do kinda need to be able to loop through things like table rows from databases... and, well, we need if statements to highlight a particular result... and, well, we need full arithmetic support so we can use the modulo operator on those rows... and we need functions to factor out reusable functionality at the template layer... and oh crap that's all you need for Turing Completeness, isn't it? Well... uhh..." "Hi, I'm another developer and I'm starting a new template language because that previous one is broken and busted and written by dum dums because it has Turing completeness in it! Templates shouldn't have any code in them, ever! Although, uh, I do kinda need for loops for table rows from databases..."
Really what we should be doing is generating data structures in <whatever> language rather than creating new languages.
You just use the js primitives.
I'm looking more at things like the Django template library, handlebars, Go HTML templates, etc. etc. And most especially things written with the idea that code shouldn't be in templates. Template languages that were always capable of running code, and were simply separate languages so designers don't have to learn a general-purpose programming language but can learn just this focused thing they need are obviously not what I mean.
I've drunk from the "templates shouldn't have logic in them" well too, but I think as you scale up it just becomes impractical. And in that case, you're better off with a template that always knew it was going to have code in rather than a template language that was designed from the beginning to not have it, but had code sneak in through the back door anyhow. The first one will at least be designed. The second one... well....
Your last sentence is true only for the most trivial of deployments, at which point, why are you using deployment automation in the first place, because it's a huge tech cost to invest in. If your deployments are that simple, why ass complexity by using a deployment automation and not just do a bin dump?
One shop I was at that's fairly well known had multiple fedora and centos RPM repos checked in. Compiled versions of Linux from version 2 to 5, silverlight exe's, pdf's, hundreds of excel files, what I had a hard time finding was actual source code.
I couldn't think of two better pieces of software to go die together.